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,310 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildSkillGenerationPrompt
|
|
3
|
+
} from "./chunk-X3WS5LDG.js";
|
|
4
|
+
|
|
5
|
+
// src/skills/learnPrompts.ts
|
|
6
|
+
function buildLearnSystemPrompt() {
|
|
7
|
+
return `You are an expert developer tool advisor for Autohand, an AI coding agent.
|
|
8
|
+
|
|
9
|
+
Your task: Analyze a project, audit its existing skills, and recommend the most valuable community skills from the catalog.
|
|
10
|
+
|
|
11
|
+
## Analysis Steps
|
|
12
|
+
|
|
13
|
+
1. **Summarize the project** in one sentence (stack, purpose, patterns)
|
|
14
|
+
2. **Audit installed skills**: flag any that are:
|
|
15
|
+
- "redundant": overlaps significantly with another installed skill
|
|
16
|
+
- "outdated": no longer relevant to the current project stack
|
|
17
|
+
- "conflicting": contradicts or interferes with another skill
|
|
18
|
+
Only include entries where there is a genuine issue. Empty array if all skills are fine.
|
|
19
|
+
3. **Rank catalog skills** by relevance (0-100):
|
|
20
|
+
- Language/framework match (40 pts)
|
|
21
|
+
- Pattern relevance (30 pts)
|
|
22
|
+
- Gap filling \u2014 addresses what installed skills don't cover (20 pts)
|
|
23
|
+
- Specificity (10 pts)
|
|
24
|
+
4. **Gap analysis**: if no catalog skill scores above 60, describe the most impactful missing capability in 1-2 sentences. Set to null if good matches exist.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
- Do NOT inflate scores \u2014 a React skill scores 0 for a Rust project
|
|
28
|
+
- Do NOT recommend skills that duplicate already-installed ones
|
|
29
|
+
- Return ALL catalog skills with their scores, even low ones \u2014 the client filters by threshold
|
|
30
|
+
- Be honest \u2014 if the catalog is poor for this project, say so in gapAnalysis
|
|
31
|
+
|
|
32
|
+
## Response Format
|
|
33
|
+
Return ONLY a JSON object:
|
|
34
|
+
{
|
|
35
|
+
"projectSummary": "...",
|
|
36
|
+
"audit": [{ "skill": "name", "status": "redundant|outdated|conflicting", "reason": "..." }],
|
|
37
|
+
"recommendations": [{ "slug": "id", "score": 0-100, "reason": "..." }],
|
|
38
|
+
"gapAnalysis": "..." | null
|
|
39
|
+
}`;
|
|
40
|
+
}
|
|
41
|
+
function buildLearnUserPrompt(analysis, installedSkills, registrySkills) {
|
|
42
|
+
const parts = [];
|
|
43
|
+
parts.push("# Project Analysis");
|
|
44
|
+
parts.push(`**Project:** ${analysis.projectName}`);
|
|
45
|
+
parts.push(`**Languages:** ${analysis.languages.length > 0 ? analysis.languages.join(", ") : "none detected"}`);
|
|
46
|
+
parts.push(`**Frameworks:** ${analysis.frameworks.length > 0 ? analysis.frameworks.join(", ") : "none detected"}`);
|
|
47
|
+
parts.push(`**Patterns:** ${analysis.patterns.length > 0 ? analysis.patterns.join(", ") : "none detected"}`);
|
|
48
|
+
parts.push(`**Package Manager:** ${analysis.packageManager ?? "unknown"}`);
|
|
49
|
+
parts.push(`**Has Tests:** ${analysis.hasTests ? "Yes" : "No"}`);
|
|
50
|
+
parts.push(`**Has CI/CD:** ${analysis.hasCI ? "Yes" : "No"}`);
|
|
51
|
+
if (analysis.dependencies.length > 0) {
|
|
52
|
+
const topDeps = analysis.dependencies.slice(0, 30);
|
|
53
|
+
parts.push(`**Key Dependencies:** ${topDeps.join(", ")}`);
|
|
54
|
+
}
|
|
55
|
+
parts.push("");
|
|
56
|
+
parts.push("# Currently Installed Skills");
|
|
57
|
+
if (installedSkills.length === 0) {
|
|
58
|
+
parts.push("No skills currently installed.");
|
|
59
|
+
} else {
|
|
60
|
+
for (const skill of installedSkills) {
|
|
61
|
+
parts.push(`- **${skill.name}**: ${skill.description} [source: ${skill.source}]`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
parts.push("");
|
|
65
|
+
parts.push("# Available Community Skills Catalog");
|
|
66
|
+
if (registrySkills.length === 0) {
|
|
67
|
+
parts.push("No community skills available in the catalog.");
|
|
68
|
+
} else {
|
|
69
|
+
const skillWord = registrySkills.length === 1 ? "community skill" : "community skills";
|
|
70
|
+
parts.push(`${registrySkills.length} ${skillWord} available.`);
|
|
71
|
+
const projectLanguages = new Set(analysis.languages.map((l) => l.toLowerCase()));
|
|
72
|
+
const projectFrameworks = new Set(analysis.frameworks.map((f) => f.toLowerCase()));
|
|
73
|
+
const relevant = registrySkills.filter((skill) => {
|
|
74
|
+
const skillLangs = (skill.languages ?? []).map((l) => l.toLowerCase());
|
|
75
|
+
const skillFw = (skill.frameworks ?? []).map((f) => f.toLowerCase());
|
|
76
|
+
return skillLangs.some((l) => projectLanguages.has(l)) || skillFw.some((f) => projectFrameworks.has(f));
|
|
77
|
+
});
|
|
78
|
+
if (relevant.length > 0) {
|
|
79
|
+
parts.push("");
|
|
80
|
+
parts.push(`## Matching Skills (${relevant.length} match project stack)`);
|
|
81
|
+
for (const skill of relevant.slice(0, 15)) {
|
|
82
|
+
const tags = skill.tags?.join(", ") ?? "";
|
|
83
|
+
const languages = skill.languages?.join(", ") ?? "";
|
|
84
|
+
const frameworks = skill.frameworks?.join(", ") ?? "";
|
|
85
|
+
parts.push(
|
|
86
|
+
`- **${skill.id}**: ${skill.description} [category: ${skill.category}] [tags: ${tags}] [languages: ${languages}] [frameworks: ${frameworks}]`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (relevant.length > 15) {
|
|
90
|
+
parts.push(` ... and ${relevant.length - 15} more matching skills`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
parts.push("");
|
|
94
|
+
parts.push("Use the `find_agent_skills` tool to search for additional skills by keyword, category, or framework.");
|
|
95
|
+
}
|
|
96
|
+
parts.push("");
|
|
97
|
+
parts.push("Analyze this project, audit installed skills, and rank the catalog.");
|
|
98
|
+
return parts.join("\n");
|
|
99
|
+
}
|
|
100
|
+
function buildLearnGenerationSystemPrompt() {
|
|
101
|
+
return `You are an expert at creating Agent Skills for Autohand, an AI coding assistant.
|
|
102
|
+
|
|
103
|
+
## Your Task
|
|
104
|
+
Generate exactly 1 high-quality, actionable skill tailored to this specific project. The skill should address the most impactful gap \u2014 something this project clearly needs but no existing community skill covers.
|
|
105
|
+
|
|
106
|
+
## Skill Quality Guidelines
|
|
107
|
+
1. **Clear Purpose**: Solve a specific, recurring problem for this exact stack
|
|
108
|
+
2. **Concrete Examples**: Include 2-3 usage examples showing exact prompts
|
|
109
|
+
3. **Actionable Steps**: Provide step-by-step workflows, not vague guidance
|
|
110
|
+
4. **Tool Awareness**: Specify which tools the skill needs in allowed-tools
|
|
111
|
+
5. **Platform Aware**: Use appropriate commands for the detected OS
|
|
112
|
+
|
|
113
|
+
## Response Format
|
|
114
|
+
Return ONLY a JSON object:
|
|
115
|
+
{
|
|
116
|
+
"name": "kebab-case-name",
|
|
117
|
+
"description": "1-2 sentences explaining when to use this skill",
|
|
118
|
+
"allowedTools": ["tool1", "tool2"],
|
|
119
|
+
"body": "Full markdown body with sections: overview, ## When to Use, ## How to Use (with example prompts), ## Workflow (numbered steps), ## Tips"
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
Return ONLY the JSON object, no other text.`;
|
|
123
|
+
}
|
|
124
|
+
function buildLearnGenerationUserPrompt(analysis, gapAnalysis, lowScoringSkills) {
|
|
125
|
+
const parts = [];
|
|
126
|
+
parts.push(buildSkillGenerationPrompt(analysis));
|
|
127
|
+
parts.push("");
|
|
128
|
+
parts.push("## Context");
|
|
129
|
+
parts.push("No existing community skills matched well for this project.");
|
|
130
|
+
const topThree = lowScoringSkills.slice(0, 3);
|
|
131
|
+
if (topThree.length > 0) {
|
|
132
|
+
parts.push("The closest matches were:");
|
|
133
|
+
for (const rec of topThree) {
|
|
134
|
+
parts.push(`- **${rec.slug}** (score: ${rec.score}): ${rec.reason}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
parts.push("");
|
|
138
|
+
if (gapAnalysis !== null) {
|
|
139
|
+
parts.push(`Gap analysis: ${gapAnalysis}`);
|
|
140
|
+
parts.push("");
|
|
141
|
+
}
|
|
142
|
+
parts.push("Generate a skill that fills the most important gap for this project.");
|
|
143
|
+
return parts.join("\n");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// src/skills/LearnAdvisor.ts
|
|
147
|
+
function toKebabCase(name) {
|
|
148
|
+
return name.trim().replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").replace(/[^a-zA-Z0-9-]/g, "").replace(/-+/g, "-").replace(/^-|-$/g, "").toLowerCase();
|
|
149
|
+
}
|
|
150
|
+
var VALID_AUDIT_STATUSES = /* @__PURE__ */ new Set(["redundant", "outdated", "conflicting"]);
|
|
151
|
+
var LearnAdvisor = class {
|
|
152
|
+
constructor(llm) {
|
|
153
|
+
this.llm = llm;
|
|
154
|
+
}
|
|
155
|
+
/* ── Phase 1: Analyze + rank + audit ──────────────────────── */
|
|
156
|
+
/**
|
|
157
|
+
* Analyze the project, audit installed skills, and rank registry catalog.
|
|
158
|
+
*
|
|
159
|
+
* Returns a validated `LearnAnalysisResponse`. On any error (LLM failure,
|
|
160
|
+
* invalid JSON, malformed fields) returns a safe empty fallback.
|
|
161
|
+
*/
|
|
162
|
+
async analyze(analysis, installedSkills, registrySkills) {
|
|
163
|
+
const fallback = {
|
|
164
|
+
projectSummary: "",
|
|
165
|
+
audit: [],
|
|
166
|
+
recommendations: [],
|
|
167
|
+
gapAnalysis: null
|
|
168
|
+
};
|
|
169
|
+
try {
|
|
170
|
+
const response = await this.llm.complete({
|
|
171
|
+
messages: [
|
|
172
|
+
{ role: "system", content: buildLearnSystemPrompt() },
|
|
173
|
+
{ role: "user", content: buildLearnUserPrompt(analysis, installedSkills, registrySkills) }
|
|
174
|
+
],
|
|
175
|
+
maxTokens: 4e3,
|
|
176
|
+
temperature: 0.2
|
|
177
|
+
});
|
|
178
|
+
const json = this.extractJson(response.content);
|
|
179
|
+
if (json === null) return fallback;
|
|
180
|
+
const parsed = JSON.parse(json);
|
|
181
|
+
const projectSummary = typeof parsed.projectSummary === "string" ? parsed.projectSummary : "";
|
|
182
|
+
const gapAnalysis = typeof parsed.gapAnalysis === "string" ? parsed.gapAnalysis : null;
|
|
183
|
+
const recommendations = Array.isArray(parsed.recommendations) ? parsed.recommendations.filter(
|
|
184
|
+
(r) => this.isValidRecommendation(r)
|
|
185
|
+
) : [];
|
|
186
|
+
const audit = Array.isArray(parsed.audit) ? parsed.audit.filter(
|
|
187
|
+
(e) => this.isValidAuditEntry(e)
|
|
188
|
+
) : [];
|
|
189
|
+
return { projectSummary, audit, recommendations, gapAnalysis };
|
|
190
|
+
} catch {
|
|
191
|
+
return fallback;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/* ── Phase 2: Generate custom skill ──────────────────────── */
|
|
195
|
+
/**
|
|
196
|
+
* Generate a custom skill when no catalog entry scores well.
|
|
197
|
+
*
|
|
198
|
+
* Returns a validated `LearnGeneratedSkill`. On error, returns an object
|
|
199
|
+
* with `{ error: string }` describing what went wrong, or `null` if
|
|
200
|
+
* the LLM call itself fails.
|
|
201
|
+
*/
|
|
202
|
+
async generateSkill(analysis, gapAnalysis, lowScoringSkills) {
|
|
203
|
+
try {
|
|
204
|
+
const response = await this.llm.complete({
|
|
205
|
+
messages: [
|
|
206
|
+
{ role: "system", content: buildLearnGenerationSystemPrompt() },
|
|
207
|
+
{
|
|
208
|
+
role: "user",
|
|
209
|
+
content: buildLearnGenerationUserPrompt(analysis, gapAnalysis, lowScoringSkills)
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
maxTokens: 6e3,
|
|
213
|
+
temperature: 0.3
|
|
214
|
+
});
|
|
215
|
+
const json = this.extractJson(response.content);
|
|
216
|
+
if (json === null) return null;
|
|
217
|
+
const parsed = JSON.parse(json);
|
|
218
|
+
if (typeof parsed.name !== "string") return null;
|
|
219
|
+
if (typeof parsed.description !== "string") return null;
|
|
220
|
+
if (typeof parsed.body !== "string") return null;
|
|
221
|
+
const normalizedName = toKebabCase(parsed.name);
|
|
222
|
+
if (!normalizedName) return null;
|
|
223
|
+
const allowedTools = Array.isArray(parsed.allowedTools) ? parsed.allowedTools.filter((t) => typeof t === "string") : [];
|
|
224
|
+
return {
|
|
225
|
+
name: normalizedName,
|
|
226
|
+
description: parsed.description,
|
|
227
|
+
allowedTools,
|
|
228
|
+
body: parsed.body
|
|
229
|
+
};
|
|
230
|
+
} catch (error) {
|
|
231
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
232
|
+
if (process.env.DEBUG) {
|
|
233
|
+
console.error(`[LearnAdvisor] generateSkill failed: ${msg}`);
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/* ── Private helpers ─────────────────────────────────────── */
|
|
239
|
+
/**
|
|
240
|
+
* Extract a JSON string from LLM output that may contain markdown
|
|
241
|
+
* code fences or surrounding prose.
|
|
242
|
+
*
|
|
243
|
+
* Strategy:
|
|
244
|
+
* 1. If content starts with `{` or `[`, return as-is (already JSON).
|
|
245
|
+
* 2. Try extracting from ` ```json ... ``` ` blocks.
|
|
246
|
+
* 3. Try finding `{...}` in the text via greedy regex.
|
|
247
|
+
* 4. Return null if nothing found.
|
|
248
|
+
*/
|
|
249
|
+
extractJson(content) {
|
|
250
|
+
const trimmed = content.trim();
|
|
251
|
+
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
|
|
252
|
+
return trimmed;
|
|
253
|
+
}
|
|
254
|
+
const fenceMatch = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
|
|
255
|
+
if (fenceMatch?.[1]) {
|
|
256
|
+
return fenceMatch[1].trim();
|
|
257
|
+
}
|
|
258
|
+
const braceMatch = trimmed.match(/\{[\s\S]*\}/);
|
|
259
|
+
if (braceMatch) {
|
|
260
|
+
return braceMatch[0];
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Validate that an unknown value looks like a `LearnRecommendation`.
|
|
266
|
+
*/
|
|
267
|
+
isValidRecommendation(rec) {
|
|
268
|
+
if (rec === null || typeof rec !== "object") return false;
|
|
269
|
+
const r = rec;
|
|
270
|
+
return typeof r.slug === "string" && typeof r.score === "number" && typeof r.reason === "string";
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Validate that an unknown value looks like a `LearnAuditEntry`.
|
|
274
|
+
*/
|
|
275
|
+
isValidAuditEntry(entry) {
|
|
276
|
+
if (entry === null || typeof entry !== "object") return false;
|
|
277
|
+
const e = entry;
|
|
278
|
+
return typeof e.skill === "string" && typeof e.status === "string" && VALID_AUDIT_STATUSES.has(e.status) && typeof e.reason === "string";
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
export {
|
|
283
|
+
LearnAdvisor
|
|
284
|
+
};
|
|
285
|
+
/**
|
|
286
|
+
* @license
|
|
287
|
+
* Copyright 2025 Autohand AI LLC
|
|
288
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
289
|
+
*
|
|
290
|
+
* Learn Prompts — LLM prompt builders for the /learn advisor
|
|
291
|
+
*
|
|
292
|
+
* Phase 1: Analyze project, audit installed skills, rank catalog
|
|
293
|
+
* Phase 2: Generate a custom skill when no catalog match is good enough
|
|
294
|
+
*/
|
|
295
|
+
/**
|
|
296
|
+
* @license
|
|
297
|
+
* Copyright 2025 Autohand AI LLC
|
|
298
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
299
|
+
*
|
|
300
|
+
* LearnAdvisor — LLM orchestration for the /learn command.
|
|
301
|
+
*
|
|
302
|
+
* Phase 1 (`analyze`): Analyze the project, audit installed skills,
|
|
303
|
+
* and rank community catalog entries by relevance.
|
|
304
|
+
*
|
|
305
|
+
* Phase 2 (`generateSkill`): When no catalog skill scores well, generate
|
|
306
|
+
* a custom skill tailored to the project.
|
|
307
|
+
*
|
|
308
|
+
* This class does NO file I/O, registry fetching, or skill installation.
|
|
309
|
+
* It only calls the LLM and parses structured JSON responses.
|
|
310
|
+
*/
|