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,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,12 +1,12 @@
|
|
|
1
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
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk7BTSG4MEcjs = require('./chunk-7BTSG4ME.cjs');
|
|
4
4
|
|
|
5
5
|
// src/commands/history.ts
|
|
6
6
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
7
7
|
var metadata = {
|
|
8
8
|
command: "/history",
|
|
9
|
-
description:
|
|
9
|
+
description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.history.title"),
|
|
10
10
|
implemented: true
|
|
11
11
|
};
|
|
12
12
|
function formatHistoryEntry(entry) {
|
|
@@ -72,14 +72,14 @@ async function history(ctx) {
|
|
|
72
72
|
const allSessions = await ctx.sessionManager.listSessions();
|
|
73
73
|
if (allSessions.length === 0) {
|
|
74
74
|
console.log(_chalk2.default.gray(`
|
|
75
|
-
${
|
|
75
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.history.empty")}
|
|
76
76
|
`));
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
79
|
const entries = allSessions.map(toHistoryEntry);
|
|
80
80
|
const paginated = paginateHistory(entries, page, pageSize);
|
|
81
81
|
console.log(_chalk2.default.cyan(`
|
|
82
|
-
${
|
|
82
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.history.title")}
|
|
83
83
|
`));
|
|
84
84
|
console.log(
|
|
85
85
|
_chalk2.default.bold(
|
|
@@ -95,14 +95,14 @@ ${_chunk2U5HFVROcjs.t.call(void 0, "commands.history.title")}
|
|
|
95
95
|
console.log(
|
|
96
96
|
_chalk2.default.gray(
|
|
97
97
|
`
|
|
98
|
-
${
|
|
98
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.history.showing", { page: paginated.currentPage, total: paginated.totalPages, count: paginated.totalItems })}`
|
|
99
99
|
)
|
|
100
100
|
);
|
|
101
101
|
}
|
|
102
102
|
if (paginated.totalPages > 1 && paginated.currentPage < paginated.totalPages) {
|
|
103
103
|
console.log(_chalk2.default.gray(`Use /history ${paginated.currentPage + 1} for next page`));
|
|
104
104
|
}
|
|
105
|
-
console.log(_chalk2.default.gray(`${
|
|
105
|
+
console.log(_chalk2.default.gray(`${_chunk7BTSG4MEcjs.t.call(void 0, "commands.history.resumeHint")}
|
|
106
106
|
`));
|
|
107
107
|
return null;
|
|
108
108
|
} catch (error) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
showModal
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YZXUDM5X.js";
|
|
4
4
|
import {
|
|
5
5
|
AUTOHAND_PATHS
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EGFT4PGW.js";
|
|
7
7
|
import {
|
|
8
8
|
t
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-APIXPPMT.js";
|
|
10
10
|
|
|
11
11
|
// src/commands/resume.ts
|
|
12
12
|
import chalk from "chalk";
|
|
@@ -69,11 +69,19 @@ async function resume(ctx) {
|
|
|
69
69
|
return resumeSession(ctx.sessionManager, sessionId);
|
|
70
70
|
}
|
|
71
71
|
try {
|
|
72
|
-
const
|
|
72
|
+
const projectFilter = ctx.workspaceRoot ? { project: ctx.workspaceRoot } : void 0;
|
|
73
|
+
const allSessions = await ctx.sessionManager.listSessions(projectFilter);
|
|
73
74
|
if (allSessions.length === 0) {
|
|
74
|
-
|
|
75
|
+
if (ctx.workspaceRoot) {
|
|
76
|
+
const projectName = path.basename(ctx.workspaceRoot);
|
|
77
|
+
console.log(chalk.gray(`
|
|
78
|
+
No sessions found for project "${projectName}".`));
|
|
79
|
+
console.log(chalk.gray("Use /sessions to see all sessions across projects.\n"));
|
|
80
|
+
} else {
|
|
81
|
+
console.log(chalk.gray(`
|
|
75
82
|
${t("commands.sessions.noSessions")}`));
|
|
76
|
-
|
|
83
|
+
console.log(chalk.gray("Start a new conversation to create a session.\n"));
|
|
84
|
+
}
|
|
77
85
|
return null;
|
|
78
86
|
}
|
|
79
87
|
console.log(chalk.cyan(`
|
|
@@ -1,12 +1,12 @@
|
|
|
1
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
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkZYQMLKOKcjs = require('./chunk-ZYQMLKOK.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunk7BTSG4MEcjs = require('./chunk-7BTSG4ME.cjs');
|
|
10
10
|
|
|
11
11
|
// src/commands/resume.ts
|
|
12
12
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
@@ -14,7 +14,7 @@ var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsex
|
|
|
14
14
|
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
15
15
|
var metadata = {
|
|
16
16
|
command: "/resume",
|
|
17
|
-
description:
|
|
17
|
+
description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.resume.description"),
|
|
18
18
|
implemented: true
|
|
19
19
|
};
|
|
20
20
|
async function getSessionTitle(sessionMeta) {
|
|
@@ -22,7 +22,7 @@ async function getSessionTitle(sessionMeta) {
|
|
|
22
22
|
return sessionMeta.summary.slice(0, 60);
|
|
23
23
|
}
|
|
24
24
|
try {
|
|
25
|
-
const conversationPath = _path2.default.join(
|
|
25
|
+
const conversationPath = _path2.default.join(_chunkSEKD5FH3cjs.AUTOHAND_PATHS.sessions, sessionMeta.sessionId, "conversation.jsonl");
|
|
26
26
|
if (await _fsextra2.default.pathExists(conversationPath)) {
|
|
27
27
|
const content = await _fsextra2.default.readFile(conversationPath, "utf-8");
|
|
28
28
|
const lines = content.trim().split("\n").filter((line) => line);
|
|
@@ -69,15 +69,23 @@ async function resume(ctx) {
|
|
|
69
69
|
return resumeSession(ctx.sessionManager, sessionId);
|
|
70
70
|
}
|
|
71
71
|
try {
|
|
72
|
-
const
|
|
72
|
+
const projectFilter = ctx.workspaceRoot ? { project: ctx.workspaceRoot } : void 0;
|
|
73
|
+
const allSessions = await ctx.sessionManager.listSessions(projectFilter);
|
|
73
74
|
if (allSessions.length === 0) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
if (ctx.workspaceRoot) {
|
|
76
|
+
const projectName = _path2.default.basename(ctx.workspaceRoot);
|
|
77
|
+
console.log(_chalk2.default.gray(`
|
|
78
|
+
No sessions found for project "${projectName}".`));
|
|
79
|
+
console.log(_chalk2.default.gray("Use /sessions to see all sessions across projects.\n"));
|
|
80
|
+
} else {
|
|
81
|
+
console.log(_chalk2.default.gray(`
|
|
82
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.sessions.noSessions")}`));
|
|
83
|
+
console.log(_chalk2.default.gray("Start a new conversation to create a session.\n"));
|
|
84
|
+
}
|
|
77
85
|
return null;
|
|
78
86
|
}
|
|
79
87
|
console.log(_chalk2.default.cyan(`
|
|
80
|
-
${
|
|
88
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.sessions.selectPrompt")}
|
|
81
89
|
`));
|
|
82
90
|
const choices = [];
|
|
83
91
|
const recentSessions = allSessions.slice(0, 20);
|
|
@@ -97,7 +105,7 @@ ${_chunk2U5HFVROcjs.t.call(void 0, "commands.sessions.selectPrompt")}
|
|
|
97
105
|
value: choice.name,
|
|
98
106
|
description: choice.hint
|
|
99
107
|
}));
|
|
100
|
-
const result = await
|
|
108
|
+
const result = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
|
|
101
109
|
title: "Choose a session",
|
|
102
110
|
options
|
|
103
111
|
});
|
|
@@ -111,7 +119,7 @@ ${_chunk2U5HFVROcjs.t.call(void 0, "commands.sessions.selectPrompt")}
|
|
|
111
119
|
}
|
|
112
120
|
return resumeSession(ctx.sessionManager, result.value);
|
|
113
121
|
} catch (error) {
|
|
114
|
-
console.error(_chalk2.default.red(
|
|
122
|
+
console.error(_chalk2.default.red(_chunk7BTSG4MEcjs.t.call(void 0, "commands.resume.failed", { error: error.message })));
|
|
115
123
|
return null;
|
|
116
124
|
}
|
|
117
125
|
}
|
|
@@ -122,7 +130,7 @@ async function resumeSession(sessionManager, sessionId) {
|
|
|
122
130
|
const firstUserMessage = messages.find((m) => m.role === "user");
|
|
123
131
|
const title = session.metadata.summary || _optionalChain([firstUserMessage, 'optionalAccess', _ => _.content, 'access', _2 => _2.slice, 'call', _3 => _3(0, 50)]) || "Untitled session";
|
|
124
132
|
console.log(_chalk2.default.cyan(`
|
|
125
|
-
${
|
|
133
|
+
${_chunk7BTSG4MEcjs.t.call(void 0, "commands.resume.resuming", { id: title })}`));
|
|
126
134
|
console.log(_chalk2.default.gray(` Project: ${session.metadata.projectPath}`));
|
|
127
135
|
console.log(_chalk2.default.gray(` Started: ${new Date(session.metadata.createdAt).toLocaleString()}`));
|
|
128
136
|
console.log(_chalk2.default.gray(` Messages: ${messages.length}`));
|
|
@@ -144,7 +152,7 @@ ${_chunk2U5HFVROcjs.t.call(void 0, "commands.resume.resuming", { id: title })}`)
|
|
|
144
152
|
console.log(_chalk2.default.green("Session resumed. Continue typing to chat.\n"));
|
|
145
153
|
return null;
|
|
146
154
|
} catch (error) {
|
|
147
|
-
console.error(_chalk2.default.red(
|
|
155
|
+
console.error(_chalk2.default.red(_chunk7BTSG4MEcjs.t.call(void 0, "commands.resume.failed", { error: error.message })));
|
|
148
156
|
return null;
|
|
149
157
|
}
|
|
150
158
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/memory/extractSessionMemories.ts
|
|
2
|
+
var VALID_LEVELS = /* @__PURE__ */ new Set(["user", "project"]);
|
|
3
|
+
var MIN_USER_MESSAGES = 2;
|
|
4
|
+
var EXTRACTION_PROMPT = `Analyze this conversation and extract patterns, preferences, and insights worth remembering for future sessions.
|
|
5
|
+
|
|
6
|
+
Rules:
|
|
7
|
+
- Only extract genuinely useful patterns: coding style, tool preferences, workflow habits, project conventions, architectural decisions
|
|
8
|
+
- Classify as "user" (personal preferences that apply across all projects) or "project" (specific to this codebase/workspace)
|
|
9
|
+
- Be concise: each memory should be 1-2 sentences max
|
|
10
|
+
- Skip trivial, one-off, or context-specific observations
|
|
11
|
+
- If nothing is worth saving, return an empty array
|
|
12
|
+
|
|
13
|
+
Return ONLY a JSON array (no markdown, no explanation):
|
|
14
|
+
[{ "content": "...", "level": "user" | "project", "tags": ["..."] }]`;
|
|
15
|
+
function countUserMessages(messages) {
|
|
16
|
+
return messages.filter((m) => m.role === "user").length;
|
|
17
|
+
}
|
|
18
|
+
function stripCodeFences(raw) {
|
|
19
|
+
const trimmed = raw.trim();
|
|
20
|
+
const fenceRegex = /^```(?:json)?\s*\n?([\s\S]*?)\n?\s*```$/;
|
|
21
|
+
const match = fenceRegex.exec(trimmed);
|
|
22
|
+
return match ? match[1].trim() : trimmed;
|
|
23
|
+
}
|
|
24
|
+
function isValidMemory(entry) {
|
|
25
|
+
if (typeof entry !== "object" || entry === null) return false;
|
|
26
|
+
const obj = entry;
|
|
27
|
+
return typeof obj.content === "string" && obj.content.length > 0 && typeof obj.level === "string" && VALID_LEVELS.has(obj.level);
|
|
28
|
+
}
|
|
29
|
+
function normaliseTags(raw) {
|
|
30
|
+
if (!Array.isArray(raw)) return [];
|
|
31
|
+
return raw.filter((t) => typeof t === "string");
|
|
32
|
+
}
|
|
33
|
+
async function extractAndSaveSessionMemories(deps) {
|
|
34
|
+
const { llm, memoryManager, conversationHistory } = deps;
|
|
35
|
+
if (countUserMessages(conversationHistory) < MIN_USER_MESSAGES) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
let rawContent;
|
|
39
|
+
try {
|
|
40
|
+
const response = await llm.complete({
|
|
41
|
+
messages: [
|
|
42
|
+
{ role: "system", content: EXTRACTION_PROMPT },
|
|
43
|
+
...conversationHistory
|
|
44
|
+
],
|
|
45
|
+
temperature: 0.3,
|
|
46
|
+
maxTokens: 1024
|
|
47
|
+
});
|
|
48
|
+
rawContent = response.content;
|
|
49
|
+
} catch (e) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
let parsed;
|
|
53
|
+
try {
|
|
54
|
+
const cleaned = stripCodeFences(rawContent);
|
|
55
|
+
const json = JSON.parse(cleaned);
|
|
56
|
+
if (!Array.isArray(json)) return [];
|
|
57
|
+
parsed = json;
|
|
58
|
+
} catch (e2) {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
if (parsed.length === 0) return [];
|
|
62
|
+
const saved = [];
|
|
63
|
+
for (const raw of parsed) {
|
|
64
|
+
if (!isValidMemory(raw)) continue;
|
|
65
|
+
const rawObj = raw;
|
|
66
|
+
const memory = {
|
|
67
|
+
content: raw.content,
|
|
68
|
+
level: raw.level,
|
|
69
|
+
tags: normaliseTags(rawObj.tags)
|
|
70
|
+
};
|
|
71
|
+
try {
|
|
72
|
+
await memoryManager.store(
|
|
73
|
+
memory.content,
|
|
74
|
+
memory.level,
|
|
75
|
+
memory.tags,
|
|
76
|
+
"session-extraction"
|
|
77
|
+
);
|
|
78
|
+
saved.push(memory);
|
|
79
|
+
} catch (e3) {
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return saved;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
exports.extractAndSaveSessionMemories = extractAndSaveSessionMemories;
|
|
88
|
+
/**
|
|
89
|
+
* @license
|
|
90
|
+
* Copyright 2025 Autohand AI LLC
|
|
91
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
92
|
+
*/
|
|
@@ -1,13 +1,13 @@
|
|
|
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(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
|
|
4
4
|
|
|
5
5
|
// src/permissions/localProjectPermissions.ts
|
|
6
6
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
7
7
|
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
8
8
|
var LOCAL_SETTINGS_FILE = "settings.local.json";
|
|
9
9
|
function getLocalSettingsPath(workspaceRoot) {
|
|
10
|
-
return _path2.default.join(workspaceRoot,
|
|
10
|
+
return _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, LOCAL_SETTINGS_FILE);
|
|
11
11
|
}
|
|
12
12
|
async function loadLocalProjectSettings(workspaceRoot) {
|
|
13
13
|
const settingsPath = getLocalSettingsPath(workspaceRoot);
|
|
@@ -1,18 +1,50 @@
|
|
|
1
1
|
import {
|
|
2
2
|
I18nProvider,
|
|
3
3
|
useTranslation
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SLQAYV3W.js";
|
|
5
5
|
|
|
6
6
|
// src/ui/ink/components/Modal.tsx
|
|
7
7
|
import { useState, useMemo, useCallback } from "react";
|
|
8
8
|
import { Box, Text, useInput, render } from "ink";
|
|
9
9
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
var OTHER_VALUE = "__other__";
|
|
11
|
+
function resolveInitialCursor(mode, optionsLength, initialIndex, defaultValue) {
|
|
12
|
+
if (mode === "confirm") {
|
|
13
|
+
return defaultValue === false ? 1 : 0;
|
|
14
|
+
}
|
|
15
|
+
if (typeof initialIndex !== "number" || !Number.isFinite(initialIndex) || optionsLength <= 0) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
return Math.max(0, Math.min(optionsLength - 1, Math.floor(initialIndex)));
|
|
19
|
+
}
|
|
20
|
+
function unmountAndResolve(instance, value, resolve) {
|
|
21
|
+
instance.unmount();
|
|
22
|
+
process.nextTick(() => resolve(value));
|
|
23
|
+
}
|
|
11
24
|
function Modal(props) {
|
|
12
25
|
const { t } = useTranslation();
|
|
13
26
|
const { title, onCancel } = props;
|
|
14
27
|
const mode = "mode" in props ? props.mode : "select";
|
|
15
|
-
const
|
|
28
|
+
const selectOptionCount = mode === "select" && "options" in props ? props.options.length + ("allowCustomInput" in props && props.allowCustomInput ? 1 : 0) : 0;
|
|
29
|
+
const confirmDefaultValue = mode === "confirm" && typeof props.defaultValue === "boolean" ? props.defaultValue : void 0;
|
|
30
|
+
const maxVisible = mode === "select" && "maxVisible" in props && typeof props.maxVisible === "number" ? props.maxVisible : 10;
|
|
31
|
+
const [cursor, setCursor] = useState(
|
|
32
|
+
() => resolveInitialCursor(
|
|
33
|
+
mode === "confirm" ? "confirm" : "select",
|
|
34
|
+
mode === "confirm" ? 2 : selectOptionCount,
|
|
35
|
+
mode === "select" && "initialIndex" in props ? props.initialIndex : void 0,
|
|
36
|
+
confirmDefaultValue
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
const [windowStart, setWindowStart] = useState(() => {
|
|
40
|
+
const initial = resolveInitialCursor(
|
|
41
|
+
mode === "confirm" ? "confirm" : "select",
|
|
42
|
+
mode === "confirm" ? 2 : selectOptionCount,
|
|
43
|
+
mode === "select" && "initialIndex" in props ? props.initialIndex : void 0,
|
|
44
|
+
confirmDefaultValue
|
|
45
|
+
);
|
|
46
|
+
return Math.max(0, initial - Math.floor(maxVisible / 2));
|
|
47
|
+
});
|
|
16
48
|
const [customInput, setCustomInput] = useState("");
|
|
17
49
|
const [isCustomMode, setIsCustomMode] = useState(false);
|
|
18
50
|
const [inputValue, setInputValue] = useState(() => {
|
|
@@ -44,12 +76,6 @@ function Modal(props) {
|
|
|
44
76
|
}
|
|
45
77
|
return [];
|
|
46
78
|
}, [mode, props, t]);
|
|
47
|
-
useState(() => {
|
|
48
|
-
if (mode === "confirm" && "defaultValue" in props) {
|
|
49
|
-
const defaultIdx = props.defaultValue === false ? 1 : 0;
|
|
50
|
-
setCursor(defaultIdx);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
79
|
const hasNoChoices = mode === "select" && choices.length === 0;
|
|
54
80
|
const findNextEnabled = useCallback(
|
|
55
81
|
(from, direction) => {
|
|
@@ -138,11 +164,27 @@ function Modal(props) {
|
|
|
138
164
|
return;
|
|
139
165
|
}
|
|
140
166
|
if (key.upArrow) {
|
|
141
|
-
setCursor((prev) =>
|
|
167
|
+
setCursor((prev) => {
|
|
168
|
+
const next = findNextEnabled(prev, -1);
|
|
169
|
+
setWindowStart((ws) => {
|
|
170
|
+
if (next < ws) return next;
|
|
171
|
+
if (next >= ws + maxVisible) return Math.max(0, next - maxVisible + 1);
|
|
172
|
+
return ws;
|
|
173
|
+
});
|
|
174
|
+
return next;
|
|
175
|
+
});
|
|
142
176
|
return;
|
|
143
177
|
}
|
|
144
178
|
if (key.downArrow) {
|
|
145
|
-
setCursor((prev) =>
|
|
179
|
+
setCursor((prev) => {
|
|
180
|
+
const next = findNextEnabled(prev, 1);
|
|
181
|
+
setWindowStart((ws) => {
|
|
182
|
+
if (next >= ws + maxVisible) return next - maxVisible + 1;
|
|
183
|
+
if (next < ws) return next;
|
|
184
|
+
return ws;
|
|
185
|
+
});
|
|
186
|
+
return next;
|
|
187
|
+
});
|
|
146
188
|
return;
|
|
147
189
|
}
|
|
148
190
|
if (char && char >= "1" && char <= "9") {
|
|
@@ -191,7 +233,11 @@ function Modal(props) {
|
|
|
191
233
|
if (hasNoChoices) {
|
|
192
234
|
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { color: "gray", children: t("ui.noOptionsAvailable") }) });
|
|
193
235
|
}
|
|
194
|
-
|
|
236
|
+
const needsScroll = choices.length > maxVisible;
|
|
237
|
+
const windowEnd = Math.min(windowStart + maxVisible, choices.length);
|
|
238
|
+
const visibleChoices = needsScroll ? choices.slice(windowStart, windowEnd) : choices;
|
|
239
|
+
const items = visibleChoices.map((choice, vi) => {
|
|
240
|
+
const i = needsScroll ? windowStart + vi : vi;
|
|
195
241
|
const isSelected = i === cursor;
|
|
196
242
|
const isDisabled = choice.disabled;
|
|
197
243
|
let color;
|
|
@@ -214,6 +260,23 @@ function Modal(props) {
|
|
|
214
260
|
] })
|
|
215
261
|
] }, `${choice.value}-${i}`);
|
|
216
262
|
});
|
|
263
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
264
|
+
needsScroll && windowStart > 0 && /* @__PURE__ */ jsxs(Text, { color: "gray", children: [
|
|
265
|
+
" ",
|
|
266
|
+
"\u2191",
|
|
267
|
+
" ",
|
|
268
|
+
windowStart,
|
|
269
|
+
" more above"
|
|
270
|
+
] }),
|
|
271
|
+
items,
|
|
272
|
+
needsScroll && windowEnd < choices.length && /* @__PURE__ */ jsxs(Text, { color: "gray", children: [
|
|
273
|
+
" ",
|
|
274
|
+
"\u2193",
|
|
275
|
+
" ",
|
|
276
|
+
choices.length - windowEnd,
|
|
277
|
+
" more below"
|
|
278
|
+
] })
|
|
279
|
+
] });
|
|
217
280
|
};
|
|
218
281
|
const renderHint = () => {
|
|
219
282
|
if (mode === "input" || mode === "password") {
|
|
@@ -236,7 +299,7 @@ function Modal(props) {
|
|
|
236
299
|
] });
|
|
237
300
|
}
|
|
238
301
|
async function showModal(options) {
|
|
239
|
-
const { title, options: modalOptions, allowCustomInput, multiSelect } = options;
|
|
302
|
+
const { title, options: modalOptions, allowCustomInput, multiSelect, maxVisible } = options;
|
|
240
303
|
if (!process.stdout.isTTY) {
|
|
241
304
|
return null;
|
|
242
305
|
}
|
|
@@ -250,17 +313,16 @@ async function showModal(options) {
|
|
|
250
313
|
options: modalOptions,
|
|
251
314
|
allowCustomInput,
|
|
252
315
|
multiSelect,
|
|
316
|
+
maxVisible,
|
|
253
317
|
onSelect: (option) => {
|
|
254
318
|
if (completed) return;
|
|
255
319
|
completed = true;
|
|
256
|
-
instance
|
|
257
|
-
resolve(option);
|
|
320
|
+
unmountAndResolve(instance, option, resolve);
|
|
258
321
|
},
|
|
259
322
|
onCancel: () => {
|
|
260
323
|
if (completed) return;
|
|
261
324
|
completed = true;
|
|
262
|
-
instance
|
|
263
|
-
resolve(null);
|
|
325
|
+
unmountAndResolve(instance, null, resolve);
|
|
264
326
|
}
|
|
265
327
|
}
|
|
266
328
|
) }),
|
|
@@ -286,14 +348,12 @@ async function showConfirm(options) {
|
|
|
286
348
|
onConfirm: (confirmed) => {
|
|
287
349
|
if (completed) return;
|
|
288
350
|
completed = true;
|
|
289
|
-
instance
|
|
290
|
-
resolve(confirmed);
|
|
351
|
+
unmountAndResolve(instance, confirmed, resolve);
|
|
291
352
|
},
|
|
292
353
|
onCancel: () => {
|
|
293
354
|
if (completed) return;
|
|
294
355
|
completed = true;
|
|
295
|
-
instance
|
|
296
|
-
resolve(false);
|
|
356
|
+
unmountAndResolve(instance, false, resolve);
|
|
297
357
|
}
|
|
298
358
|
}
|
|
299
359
|
) }),
|
|
@@ -319,14 +379,12 @@ async function showInput(options) {
|
|
|
319
379
|
onSubmit: (value) => {
|
|
320
380
|
if (completed) return;
|
|
321
381
|
completed = true;
|
|
322
|
-
instance
|
|
323
|
-
resolve(value);
|
|
382
|
+
unmountAndResolve(instance, value, resolve);
|
|
324
383
|
},
|
|
325
384
|
onCancel: () => {
|
|
326
385
|
if (completed) return;
|
|
327
386
|
completed = true;
|
|
328
|
-
instance
|
|
329
|
-
resolve(null);
|
|
387
|
+
unmountAndResolve(instance, null, resolve);
|
|
330
388
|
}
|
|
331
389
|
}
|
|
332
390
|
) }),
|
|
@@ -351,14 +409,12 @@ async function showPassword(options) {
|
|
|
351
409
|
onSubmit: (value) => {
|
|
352
410
|
if (completed) return;
|
|
353
411
|
completed = true;
|
|
354
|
-
instance
|
|
355
|
-
resolve(value);
|
|
412
|
+
unmountAndResolve(instance, value, resolve);
|
|
356
413
|
},
|
|
357
414
|
onCancel: () => {
|
|
358
415
|
if (completed) return;
|
|
359
416
|
completed = true;
|
|
360
|
-
instance
|
|
361
|
-
resolve(null);
|
|
417
|
+
unmountAndResolve(instance, null, resolve);
|
|
362
418
|
}
|
|
363
419
|
}
|
|
364
420
|
) }),
|
|
@@ -368,6 +424,7 @@ async function showPassword(options) {
|
|
|
368
424
|
}
|
|
369
425
|
|
|
370
426
|
export {
|
|
427
|
+
Modal,
|
|
371
428
|
showModal,
|
|
372
429
|
showConfirm,
|
|
373
430
|
showInput,
|