autohand-cli 0.8.0 → 0.8.3

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.
Files changed (371) hide show
  1. package/README.md +97 -2
  2. package/dist/{AgentRegistry-NQCLWABO.cjs → AgentRegistry-HRPN6ZOF.cjs} +1 -1
  3. package/dist/{AgentRegistry-7LDL5HJH.js → AgentRegistry-ODDXPAFR.js} +1 -1
  4. package/dist/{AutomodeManager-NYIZNODK.cjs → AutomodeManager-6ATBE7Q5.cjs} +1 -1
  5. package/dist/{AutomodeManager-MWLKGPZK.js → AutomodeManager-EOVHGRPP.js} +1 -1
  6. package/dist/{CommunitySkillsCache-GTQMOCCO.cjs → CommunitySkillsCache-KE435RAR.cjs} +1 -1
  7. package/dist/{CommunitySkillsCache-6QPRMTJO.js → CommunitySkillsCache-QLE57BN5.js} +1 -1
  8. package/dist/{GitHubRegistryFetcher-S7QFUEKV.cjs → GitHubRegistryFetcher-I45SESIL.cjs} +1 -1
  9. package/dist/{GitHubRegistryFetcher-6JQ5JEDZ.js → GitHubRegistryFetcher-NT5GFZXS.js} +1 -1
  10. package/dist/HookManager-B2F35M27.js +7 -0
  11. package/dist/HookManager-PFAFE3FK.cjs +7 -0
  12. package/dist/{ImportWizard-IWVPRKFF.cjs → ImportWizard-CJRZPPHL.cjs} +12 -12
  13. package/dist/{ImportWizard-KASGQPUY.js → ImportWizard-OHRKBANZ.js} +5 -5
  14. package/dist/LearnAdvisor-FLBA6FDD.js +9 -0
  15. package/dist/LearnAdvisor-GG3CXQF3.cjs +9 -0
  16. package/dist/{McpClientManager-RKD7C6OY.cjs → McpClientManager-NQ3EW2IF.cjs} +1 -1
  17. package/dist/{McpClientManager-7RM6YT35.js → McpClientManager-VBIMGKXU.js} +1 -1
  18. package/dist/{MemoryManager-GUNLRP5S.js → MemoryManager-2LAT7IHS.js} +1 -1
  19. package/dist/{MemoryManager-TNSGKDKX.cjs → MemoryManager-2LQPIYVE.cjs} +1 -1
  20. package/dist/{PermissionManager-K7UWSNB6.js → PermissionManager-7NQHRCHY.js} +2 -2
  21. package/dist/PermissionManager-X57BXHJ6.cjs +11 -0
  22. package/dist/{ProjectProfiler-UMJJSOCE.js → ProjectProfiler-P4QJQWWA.js} +1 -1
  23. package/dist/{ProjectProfiler-ZDWR2ODG.cjs → ProjectProfiler-UG42W6WD.cjs} +1 -1
  24. package/dist/{ProviderFactory-S3LWTQQC.js → ProviderFactory-2IYJ5OPW.js} +2 -2
  25. package/dist/ProviderFactory-KPJOGQWF.cjs +9 -0
  26. package/dist/{SessionManager-IKWAK2PI.js → SessionManager-4U4JFQ3C.js} +1 -1
  27. package/dist/{SessionManager-FEUAU3ZJ.cjs → SessionManager-YBJAZXNO.cjs} +1 -1
  28. package/dist/SkillsRegistry-7O72A6TZ.cjs +9 -0
  29. package/dist/{SkillsRegistry-SI5RUHQ4.js → SkillsRegistry-RFEINXRT.js} +2 -2
  30. package/dist/{SubAgent-I75HELJG.js → SubAgent-JT4HZHN7.js} +2 -2
  31. package/dist/{SubAgent-K3QP6WHC.cjs → SubAgent-VPNYDWAU.cjs} +3 -3
  32. package/dist/{SyncApiClient-LVIO4C2S.js → SyncApiClient-B5RT2ECG.js} +1 -1
  33. package/dist/{SyncApiClient-ZNYMT36M.cjs → SyncApiClient-HQXJL5BT.cjs} +1 -1
  34. package/dist/about-4DB5KTHW.js +12 -0
  35. package/dist/about-LXAOXZFT.cjs +12 -0
  36. package/dist/actionExecutor-23JB2WUC.js +19 -0
  37. package/dist/actionExecutor-X5UEZSKH.cjs +19 -0
  38. package/dist/add-dir-TUJM3PG5.js +10 -0
  39. package/dist/add-dir-YC37DMSF.cjs +10 -0
  40. package/dist/{agents-FENGUSJD.js → agents-YF3BSUU5.js} +3 -3
  41. package/dist/agents-ZOUHPMYR.cjs +12 -0
  42. package/dist/agents-new-HSH4GQPG.js +14 -0
  43. package/dist/agents-new-VYUDOCE7.cjs +14 -0
  44. package/dist/autoSkill-LQEVQFIH.js +20 -0
  45. package/dist/autoSkill-X5W52WOE.cjs +20 -0
  46. package/dist/automode-R6P3VHLS.js +10 -0
  47. package/dist/automode-SJGM7VEI.cjs +10 -0
  48. package/dist/{cc-7LEIJ3KF.js → cc-AYEP2CA3.js} +1 -1
  49. package/dist/{cc-Q5MM4AWC.cjs → cc-S2QLQFBR.cjs} +1 -1
  50. package/dist/{chunk-MUBW5UDH.cjs → chunk-245KJE5Y.cjs} +4 -4
  51. package/dist/{chunk-6OYHF6MF.js → chunk-2UC22DJU.js} +3 -3
  52. package/dist/{chunk-N254NRHT.cjs → chunk-3HT76LNN.cjs} +9 -2
  53. package/dist/{chunk-XMNHZRUB.cjs → chunk-3K2ESU53.cjs} +2 -2
  54. package/dist/{chunk-OI7OIGNB.cjs → chunk-3L53OA4E.cjs} +10 -10
  55. package/dist/{chunk-XUDSXGGV.cjs → chunk-3O3MOK5C.cjs} +169 -46
  56. package/dist/{chunk-WJDPVW7T.js → chunk-3VTAFAL2.js} +4 -4
  57. package/dist/{chunk-2RIAPTET.js → chunk-3WICOC33.js} +71 -57
  58. package/dist/chunk-3WVJEL7K.cjs +568 -0
  59. package/dist/{chunk-JJWCQLOU.cjs → chunk-47CKWKEX.cjs} +2 -2
  60. package/dist/{chunk-SRQW3B6J.cjs → chunk-56SWIDEL.cjs} +24 -17
  61. package/dist/{chunk-OBLIITWJ.js → chunk-5K6NGAVM.js} +2 -2
  62. package/dist/chunk-64H4FRM3.cjs +340 -0
  63. package/dist/{chunk-VNQ5GL34.js → chunk-6ZCULLCA.js} +1 -1
  64. package/dist/{chunk-RVUQKMXX.cjs → chunk-7BTSG4ME.cjs} +5067 -2204
  65. package/dist/{chunk-H6ZGZEBG.cjs → chunk-7TQH3CL4.cjs} +9 -9
  66. package/dist/{chunk-YYB42DCU.cjs → chunk-A4IJHHV7.cjs} +10 -4
  67. package/dist/{chunk-OPR34VHL.cjs → chunk-ADUFCS4Q.cjs} +174 -8
  68. package/dist/{chunk-IUMJYXBX.cjs → chunk-AEJH23FO.cjs} +6 -6
  69. package/dist/{chunk-HFMLWH7B.js → chunk-APIXPPMT.js} +5067 -2204
  70. package/dist/{chunk-ZSE42BRE.js → chunk-AYS2ASM7.js} +1 -1
  71. package/dist/{chunk-7GDVDSNI.js → chunk-B53A2NM2.js} +989 -135
  72. package/dist/{chunk-ITB3FS72.js → chunk-BJXSNT46.js} +4 -4
  73. package/dist/{chunk-IVM5F2AE.js → chunk-BYONM7UM.js} +1 -1
  74. package/dist/{chunk-EEGK5DYE.cjs → chunk-C5IJIM2V.cjs} +20 -14
  75. package/dist/{chunk-UJTCTTUF.cjs → chunk-CB4E2T5N.cjs} +49 -8
  76. package/dist/{chunk-UBS46QL3.cjs → chunk-CZXGCVTR.cjs} +2 -2
  77. package/dist/{chunk-AFN7LH5N.cjs → chunk-DJDE4DTT.cjs} +17 -17
  78. package/dist/{chunk-CVVEYUFR.js → chunk-DNUOXBHL.js} +108 -3
  79. package/dist/{chunk-DN573ME7.cjs → chunk-DRWDEHE5.cjs} +4 -4
  80. package/dist/{chunk-5GGX6WNY.cjs → chunk-DV2ZHK7B.cjs} +22 -22
  81. package/dist/{chunk-BT35E7NE.cjs → chunk-DVUHHH3B.cjs} +4 -4
  82. package/dist/{chunk-MHSDHPC4.cjs → chunk-DVZOENQ7.cjs} +2 -2
  83. package/dist/chunk-EFX2QSZX.cjs +33 -0
  84. package/dist/{chunk-Y2SXUCNJ.js → chunk-EGMZDTSL.js} +1 -1
  85. package/dist/{chunk-7QEE6SW6.cjs → chunk-EGPXJERY.cjs} +26 -26
  86. package/dist/{chunk-Q5RN7RXC.js → chunk-FTYY5JJD.js} +2 -2
  87. package/dist/{chunk-T63AMO6H.js → chunk-G27PQQFD.js} +1 -1
  88. package/dist/{chunk-CWALFEGU.js → chunk-G4CAKI3V.js} +1 -1
  89. package/dist/{chunk-D6VG7B5X.cjs → chunk-GCXYXLRA.cjs} +2 -1
  90. package/dist/{chunk-FYZ67R4R.js → chunk-GJH7XMSK.js} +14 -0
  91. package/dist/chunk-H2ZRHQQV.js +33 -0
  92. package/dist/{chunk-OUHQZFN4.js → chunk-HBXAA3XB.js} +6 -1
  93. package/dist/{chunk-XWASJ2QL.js → chunk-HBZU3RBZ.js} +3 -3
  94. package/dist/{chunk-E23CMMNJ.js → chunk-HIVRCQS2.js} +8 -2
  95. package/dist/{chunk-TFSRRZWP.cjs → chunk-HLHTG5ZU.cjs} +15 -1
  96. package/dist/{chunk-3WCOFXQS.cjs → chunk-HNRPK5MY.cjs} +23 -23
  97. package/dist/{chunk-MGMXR67S.cjs → chunk-HPHJ73GU.cjs} +9 -9
  98. package/dist/{chunk-63WXWFDI.cjs → chunk-HVKOZ2VP.cjs} +11 -11
  99. package/dist/{chunk-LQ4LQQG6.cjs → chunk-HXGBSJL5.cjs} +2 -2
  100. package/dist/{chunk-GCHELXLO.js → chunk-IDFF5J2E.js} +2 -2
  101. package/dist/{chunk-D3YCFT5O.cjs → chunk-IFFXSTOM.cjs} +3 -3
  102. package/dist/{chunk-SHFA46CS.cjs → chunk-J2GSFVUV.cjs} +8 -8
  103. package/dist/{chunk-5EIEWVYX.js → chunk-JCLYQ2JC.js} +2 -2
  104. package/dist/{chunk-4HKTYHNL.cjs → chunk-JJLYWH5Y.cjs} +17 -17
  105. package/dist/{chunk-SALLHB2I.js → chunk-JYTDYJVW.js} +1 -1
  106. package/dist/{chunk-CDMGQR4L.cjs → chunk-K2C56QGS.cjs} +226 -50
  107. package/dist/{chunk-643VRA5S.cjs → chunk-KANW6OYC.cjs} +3 -3
  108. package/dist/{chunk-5YJG6H6P.cjs → chunk-KLWJIPU2.cjs} +10 -10
  109. package/dist/{chunk-G7SZIOHF.js → chunk-KPELYZ6L.js} +2 -2
  110. package/dist/{chunk-2ELK5DMH.js → chunk-KQGPTCQJ.js} +3 -3
  111. package/dist/{chunk-S6BDWWUG.cjs → chunk-KWXVKLQ5.cjs} +5 -5
  112. package/dist/{chunk-EIU7K7CM.js → chunk-L3TWPROA.js} +5 -5
  113. package/dist/{chunk-JS7IPR7P.js → chunk-LIEXWM2M.js} +12 -1
  114. package/dist/{chunk-JMFDD7IZ.js → chunk-LWUJFGOZ.js} +2 -2
  115. package/dist/{chunk-LXDOQTXQ.cjs → chunk-MERYP6AM.cjs} +113 -8
  116. package/dist/{chunk-RO46YAPI.js → chunk-MYISNQH4.js} +1 -1
  117. package/dist/chunk-MZAPWNAC.cjs +207 -0
  118. package/dist/{chunk-Q2VYSHWU.js → chunk-N23UAW4I.js} +1 -1
  119. package/dist/{chunk-5DDDUUBM.cjs → chunk-N2BLVUPM.cjs} +3 -3
  120. package/dist/{chunk-TWEKBHUO.js → chunk-N7LI55V4.js} +3 -3
  121. package/dist/{chunk-YKS55CMT.js → chunk-NA6WQDYW.js} +152 -29
  122. package/dist/{chunk-LL3PQ2U6.js → chunk-NAGQ2PDC.js} +195 -19
  123. package/dist/chunk-NAJ4IZKD.cjs +504 -0
  124. package/dist/{chunk-DH7DKCUL.js → chunk-NDMIPTV4.js} +1 -1
  125. package/dist/{chunk-YDCDGTK6.cjs → chunk-NNPAM4HC.cjs} +5 -5
  126. package/dist/{chunk-GHSBZ3YB.js → chunk-NTSDP2WB.js} +2 -2
  127. package/dist/chunk-OHUZKDGX.js +348 -0
  128. package/dist/{chunk-AMT2UZBI.cjs → chunk-OLSBBZW6.cjs} +5 -5
  129. package/dist/{chunk-SIHRD34Z.js → chunk-OOKY3HPZ.js} +8 -2
  130. package/dist/{chunk-MVWOQBCC.cjs → chunk-OUZQXMHL.cjs} +11 -11
  131. package/dist/chunk-PGESAU2W.cjs +2030 -0
  132. package/dist/{chunk-IQ5RXU6O.js → chunk-QEGOB6QV.js} +1 -1
  133. package/dist/{chunk-JSBRDJBE.js → chunk-QGM4M3NI.js} +8 -1
  134. package/dist/{chunk-EF4LKUQY.js → chunk-QNGEW5TC.js} +1 -1
  135. package/dist/{chunk-QT2VZNFA.js → chunk-QXH5RCFI.js} +2 -2
  136. package/dist/chunk-R33VKSH5.cjs +348 -0
  137. package/dist/chunk-RDF37HKB.cjs +326 -0
  138. package/dist/{chunk-55B6SBHK.js → chunk-SJAVBCOA.js} +3 -3
  139. package/dist/{chunk-YS34SVY5.js → chunk-SKV2F3NM.js} +1 -1
  140. package/dist/{chunk-MHLE6AVN.cjs → chunk-SKYG33B2.cjs} +3 -3
  141. package/dist/{chunk-EPNYD4NV.js → chunk-SLQAYV3W.js} +1 -1
  142. package/dist/{chunk-IWVQ2EW3.js → chunk-SV2WA57F.js} +5 -5
  143. package/dist/{chunk-DLG43ZJ7.cjs → chunk-SYVYLZZF.cjs} +2 -2
  144. package/dist/{chunk-QUFAULH7.js → chunk-SZOLA6FR.js} +2 -1
  145. package/dist/{chunk-WGTJOIB7.cjs → chunk-T2M64VHA.cjs} +13 -13
  146. package/dist/{chunk-TQHOVHRS.js → chunk-TNZRZQ7Q.js} +1 -1
  147. package/dist/chunk-TUAITHWL.js +326 -0
  148. package/dist/{chunk-WFUUXADU.js → chunk-TUD3Z3BD.js} +170 -4
  149. package/dist/{chunk-LVE6Z5SL.cjs → chunk-U46VYPLR.cjs} +7 -7
  150. package/dist/{chunk-PGRH5Q77.cjs → chunk-U55TWFJI.cjs} +12 -1
  151. package/dist/{chunk-SO3QQJAZ.js → chunk-ULDM2SNB.js} +11 -4
  152. package/dist/{chunk-HA7OAVOB.cjs → chunk-VEKDGU2Q.cjs} +12 -12
  153. package/dist/{chunk-HQ7YZKXE.js → chunk-VWDHR4HV.js} +2 -2
  154. package/dist/{chunk-GO3N7LRW.cjs → chunk-W7RYQJLO.cjs} +6 -6
  155. package/dist/{chunk-F23EVNJU.js → chunk-WHE2SWHU.js} +1 -1
  156. package/dist/{chunk-PEC45WYS.js → chunk-X2MSVKDV.js} +1 -1
  157. package/dist/{chunk-RD5XAJR2.cjs → chunk-X2YOZQIP.cjs} +6 -6
  158. package/dist/{chunk-Q5RX3XGB.cjs → chunk-X5VSP65C.cjs} +2 -2
  159. package/dist/{chunk-TERCG25S.js → chunk-XRZEUWKF.js} +1 -1
  160. package/dist/{chunk-VJYPP6PP.cjs → chunk-XTB6VJVQ.cjs} +6 -6
  161. package/dist/chunk-XVUHNWMX.js +340 -0
  162. package/dist/{chunk-UGTFKUW4.js → chunk-XX2ZO7DS.js} +2 -2
  163. package/dist/{chunk-33A755XB.cjs → chunk-Y45G6ZO5.cjs} +3 -3
  164. package/dist/{chunk-UTI6ZQEY.cjs → chunk-Y72HH2TF.cjs} +9 -9
  165. package/dist/{chunk-PUOE5BCN.js → chunk-YGN4CQIP.js} +1 -1
  166. package/dist/{chunk-5OBNULPU.js → chunk-YZXUDM5X.js} +1 -1
  167. package/dist/{chunk-AHD5JJ6F.cjs → chunk-Z36XBUMX.cjs} +6 -1
  168. package/dist/chunk-ZLSGXMGQ.js +568 -0
  169. package/dist/chunk-ZSPXQYG2.js +504 -0
  170. package/dist/{chunk-FPAE6ORV.cjs → chunk-ZYQMLKOK.cjs} +6 -6
  171. package/dist/{chunk-WTNBX2JO.js → chunk-ZYVS43MU.js} +47 -6
  172. package/dist/{clear-J7XS6T5W.js → clear-A3N4GK2S.js} +3 -3
  173. package/dist/clear-GK4IEUUS.cjs +12 -0
  174. package/dist/communityInstaller-LOP2EDH5.js +19 -0
  175. package/dist/communityInstaller-XXC7RLE4.cjs +19 -0
  176. package/dist/completion-HWABSAEL.js +14 -0
  177. package/dist/completion-IUUVQG4D.cjs +14 -0
  178. package/dist/config-HF7WOLZF.cjs +18 -0
  179. package/dist/{config-2TB3A55J.js → config-HPJPKTO6.js} +4 -4
  180. package/dist/{constants-UFM5B232.js → constants-LISJW3DD.js} +1 -1
  181. package/dist/{constants-6CPCJ3DY.cjs → constants-PEO3P2SJ.cjs} +1 -1
  182. package/dist/{defaultHooks-RCXPHF4M.cjs → defaultHooks-IHSJR2AX.cjs} +1 -1
  183. package/dist/{defaultHooks-RDRMER3Z.js → defaultHooks-KUKHK3AG.js} +1 -1
  184. package/dist/export-QJAV2FCZ.js +12 -0
  185. package/dist/export-XSRFXGWU.cjs +12 -0
  186. package/dist/{extractSessionMemories-V7K42ZHW.js → extractSessionMemories-A2JX5WJ2.js} +1 -1
  187. package/dist/{extractSessionMemories-SDW2MVBQ.cjs → extractSessionMemories-XL3MS37F.cjs} +1 -1
  188. package/dist/feedback-4TCIL3ML.cjs +15 -0
  189. package/dist/feedback-SJ6VVEY3.js +15 -0
  190. package/dist/{filesystem-MCFXJQ6R.cjs → filesystem-W56QZUJF.cjs} +1 -1
  191. package/dist/{filesystem-3SGCW2BF.js → filesystem-Z7BWAWMZ.js} +1 -1
  192. package/dist/{formatters-6K7QVWQL.cjs → formatters-53XTCNGQ.cjs} +1 -1
  193. package/dist/{formatters-DQHO5I36.js → formatters-T6KV4BPP.js} +1 -1
  194. package/dist/{help-I5GRCA3S.js → help-GFQXNZOK.js} +3 -3
  195. package/dist/help-ISBVQL3S.cjs +12 -0
  196. package/dist/{history-OCHJBJW7.js → history-E3N6BJP7.js} +3 -3
  197. package/dist/history-XQ4GTSFU.cjs +14 -0
  198. package/dist/hooks-CJNKJ5PF.js +13 -0
  199. package/dist/hooks-UTMBTAXT.cjs +13 -0
  200. package/dist/i18n-N7QQ7A5M.cjs +33 -0
  201. package/dist/{i18n-KHBXUALK.js → i18n-SY7QRM22.js} +2 -2
  202. package/dist/ide-RTA4UJV4.js +12 -0
  203. package/dist/ide-VWVOLIFF.cjs +12 -0
  204. package/dist/immediateCommandRouter-BW34JNXL.js +9 -0
  205. package/dist/immediateCommandRouter-SHOVNB5X.cjs +9 -0
  206. package/dist/{import-PQJPNXA4.cjs → import-ADI37ZUR.cjs} +4 -4
  207. package/dist/import-KGKKZ3B7.js +10 -0
  208. package/dist/{import-EAAX5HJR.js → import-W7SVLSTC.js} +4 -4
  209. package/dist/import-ZLJVONXH.cjs +10 -0
  210. package/dist/index.cjs +6270 -2431
  211. package/dist/index.js +6262 -2423
  212. package/dist/init-7MFK626E.js +10 -0
  213. package/dist/init-TBKAB4LZ.cjs +10 -0
  214. package/dist/language-MDSHEXHB.cjs +18 -0
  215. package/dist/language-PXTQSHIG.js +18 -0
  216. package/dist/learn-623TW5EK.cjs +20 -0
  217. package/dist/learn-BCPV7GM2.js +20 -0
  218. package/dist/{lint-D5UOJWIK.cjs → lint-4NDGCSCL.cjs} +1 -1
  219. package/dist/{lint-NJPZWVN2.js → lint-FZ7ZJUB3.js} +1 -1
  220. package/dist/{localProjectPermissions-UFSMNTBJ.cjs → localProjectPermissions-BHQXEWZJ.cjs} +1 -1
  221. package/dist/{localProjectPermissions-N77HA3XK.js → localProjectPermissions-GMOUYQM6.js} +1 -1
  222. package/dist/login-QMVEETWJ.js +20 -0
  223. package/dist/login-QYMXAL3K.cjs +20 -0
  224. package/dist/logout-2CMTDAOJ.js +18 -0
  225. package/dist/logout-ZOHVZAUK.cjs +18 -0
  226. package/dist/mcp-IUVKK65S.js +18 -0
  227. package/dist/mcp-TXC7PYG3.cjs +18 -0
  228. package/dist/{mcp-install-KSADVDBE.js → mcp-install-2FEROZTL.js} +8 -8
  229. package/dist/{mcp-install-GROTZHAW.cjs → mcp-install-WM6BQRI5.cjs} +12 -12
  230. package/dist/memory-J73WZH2I.js +10 -0
  231. package/dist/memory-WRIHDEPK.cjs +10 -0
  232. package/dist/{message-ZJ5AYAMT.cjs → message-4OKO775J.cjs} +1 -1
  233. package/dist/{message-JUBOK2VU.js → message-X3LOAAM7.js} +1 -1
  234. package/dist/model-AES267IN.js +10 -0
  235. package/dist/model-RLP75SF5.cjs +10 -0
  236. package/dist/{new-7VYM36RC.js → new-5CLF3MKH.js} +3 -3
  237. package/dist/new-HLSFL6A4.cjs +12 -0
  238. package/dist/{patch-MOD7QC3D.cjs → patch-DJ2GPFST.cjs} +1 -1
  239. package/dist/{patch-5F6VBIT3.js → patch-NIJWIRHS.js} +1 -1
  240. package/dist/permissions-GP6FTGZ2.js +13 -0
  241. package/dist/permissions-O6EKKPOG.cjs +13 -0
  242. package/dist/{plan-G5CEKJI4.js → plan-65HMS5HQ.js} +1 -1
  243. package/dist/{plan-QKOHE3LH.cjs → plan-MCAXDIM2.cjs} +1 -1
  244. package/dist/quit-TQX6GXA5.cjs +10 -0
  245. package/dist/quit-XDZYRSPU.js +10 -0
  246. package/dist/{registry-A5XLMQVC.cjs → registry-IVT4G2RT.cjs} +299 -19
  247. package/dist/{registry-WQLWHOLY.js → registry-PTHWERKC.js} +290 -10
  248. package/dist/repeat-BSPS5TWD.cjs +13 -0
  249. package/dist/repeat-EVCWUL6Z.js +13 -0
  250. package/dist/resume-2GOPDLL4.cjs +13 -0
  251. package/dist/resume-37IUVDA6.js +13 -0
  252. package/dist/search-7KUSHIBL.cjs +17 -0
  253. package/dist/search-OJGDRIMA.js +17 -0
  254. package/dist/{session-BSU2L5UI.cjs → session-LXKC4X5Q.cjs} +1 -1
  255. package/dist/{session-SZMRN5KG.js → session-NMMO4QOL.js} +1 -1
  256. package/dist/sessions-6GWEBMKS.js +10 -0
  257. package/dist/sessions-CYYCHSQG.cjs +10 -0
  258. package/dist/settings-2D7CAO66.cjs +30 -0
  259. package/dist/{settings-D6JXX5RG.js → settings-BXR6SBJP.js} +8 -8
  260. package/dist/share-BXQY5IQU.js +14 -0
  261. package/dist/share-OSFXZBGS.cjs +14 -0
  262. package/dist/skills-FL6O6AOM.cjs +26 -0
  263. package/dist/skills-PG542VEB.cjs +76 -0
  264. package/dist/skills-PNKQZRNK.js +26 -0
  265. package/dist/skills-ZZCIAS7C.js +76 -0
  266. package/dist/{skills-install-UMK5H3SO.cjs → skills-install-67DOBPJC.cjs} +12 -12
  267. package/dist/{skills-install-QNQWC2MV.js → skills-install-SRC3Z2MS.js} +8 -8
  268. package/dist/skills-new-XFMEHHIF.cjs +15 -0
  269. package/dist/skills-new-ZNZPHUKS.js +15 -0
  270. package/dist/slashCommands-LLCNPK3X.js +76 -0
  271. package/dist/slashCommands-RXZZS6RE.cjs +76 -0
  272. package/dist/status-BCECUJXT.cjs +11 -0
  273. package/dist/status-EFO7MQU3.js +11 -0
  274. package/dist/sync-IJYJ6KKM.js +18 -0
  275. package/dist/sync-LFT6SBPF.cjs +18 -0
  276. package/dist/{sync-7JMZVEQD.cjs → sync-U7SDPBNZ.cjs} +1 -1
  277. package/dist/{sync-KWX67OUN.js → sync-VU2NSJ4O.js} +1 -1
  278. package/dist/{tasks-5FPBIFLC.js → tasks-R5MBGAQ6.js} +1 -1
  279. package/dist/{tasks-TXGKGNH6.cjs → tasks-V4WB3MFR.cjs} +1 -1
  280. package/dist/team-JESCHGWB.js +9 -0
  281. package/dist/team-VQQKWGZB.cjs +9 -0
  282. package/dist/{teammate-3C4MLRGH.js → teammate-SD26GR37.js} +7 -7
  283. package/dist/{teammate-7C3UDQSH.cjs → teammate-SXRVXNQV.cjs} +7 -7
  284. package/dist/theme-AWBHSG7J.cjs +18 -0
  285. package/dist/theme-TQLBPJ2E.js +18 -0
  286. package/dist/ui/questionModal.cjs +6 -6
  287. package/dist/ui/questionModal.js +5 -5
  288. package/dist/undo-IBBGP7A2.cjs +10 -0
  289. package/dist/undo-OL2EDBRY.js +10 -0
  290. package/dist/{update-TVAJMMBC.js → update-53WMKYVS.js} +1 -1
  291. package/dist/{update-Z6BIIQDC.cjs → update-NV6QRYY7.cjs} +1 -1
  292. package/package.json +2 -1
  293. package/dist/HookManager-Q2KYMCP4.cjs +0 -7
  294. package/dist/HookManager-TTP4Y6DC.js +0 -7
  295. package/dist/PermissionManager-2GO5PQ6M.cjs +0 -11
  296. package/dist/ProviderFactory-EFFQBRQ6.cjs +0 -9
  297. package/dist/SkillsRegistry-GDEGFP6O.cjs +0 -9
  298. package/dist/about-B2AGTV6N.js +0 -12
  299. package/dist/about-V2HWEZZO.cjs +0 -12
  300. package/dist/actionExecutor-6XCVL2SJ.js +0 -19
  301. package/dist/actionExecutor-YRUJNB5G.cjs +0 -19
  302. package/dist/add-dir-7FBQ5IFV.js +0 -10
  303. package/dist/add-dir-ALBSYRV3.cjs +0 -10
  304. package/dist/agents-FCGEWTA3.cjs +0 -12
  305. package/dist/agents-new-FU3O55CO.js +0 -14
  306. package/dist/agents-new-SAFTJ7TK.cjs +0 -14
  307. package/dist/automode-CYLGXQ4A.cjs +0 -10
  308. package/dist/automode-O7G3DUYN.js +0 -10
  309. package/dist/chunk-2JYIR3EC.cjs +0 -1176
  310. package/dist/chunk-Q3MJ6CYS.cjs +0 -193
  311. package/dist/clear-ES5WCZRF.cjs +0 -12
  312. package/dist/completion-XQTDTJLK.cjs +0 -14
  313. package/dist/completion-XR6ZONJQ.js +0 -14
  314. package/dist/config-RDMVIV26.cjs +0 -18
  315. package/dist/export-EWAYH353.cjs +0 -12
  316. package/dist/export-ZWA6XGVS.js +0 -12
  317. package/dist/feedback-5RV6ODW4.js +0 -15
  318. package/dist/feedback-ZPITHFJR.cjs +0 -15
  319. package/dist/help-X52PZM24.cjs +0 -12
  320. package/dist/history-4WIOZ4TW.cjs +0 -14
  321. package/dist/hooks-IAVTXUAI.cjs +0 -13
  322. package/dist/hooks-YF6HL23E.js +0 -13
  323. package/dist/i18n-MVQIAZWS.cjs +0 -33
  324. package/dist/ide-4R3BEBIS.js +0 -12
  325. package/dist/ide-C7WSPQTR.cjs +0 -12
  326. package/dist/import-2ICSKDL7.cjs +0 -10
  327. package/dist/import-KRVVYJCZ.js +0 -10
  328. package/dist/init-6K3NRDOM.js +0 -10
  329. package/dist/init-AOUGGITS.cjs +0 -10
  330. package/dist/language-Q7YFDVSR.cjs +0 -18
  331. package/dist/language-Y6ZC7LET.js +0 -18
  332. package/dist/login-6OAH2NEH.cjs +0 -20
  333. package/dist/login-DL3377MD.js +0 -20
  334. package/dist/logout-ELQBUMTU.cjs +0 -18
  335. package/dist/logout-TLYA5W45.js +0 -18
  336. package/dist/mcp-BHOIBYUB.js +0 -18
  337. package/dist/mcp-TNUEXR5T.cjs +0 -18
  338. package/dist/memory-6DRFA43C.js +0 -10
  339. package/dist/memory-IORZE6WF.cjs +0 -10
  340. package/dist/model-CJPSPGIC.cjs +0 -10
  341. package/dist/model-MQXC56ES.js +0 -10
  342. package/dist/new-7D2B7IWM.cjs +0 -12
  343. package/dist/permissions-MM77OSFO.js +0 -13
  344. package/dist/permissions-W2F62DJ6.cjs +0 -13
  345. package/dist/quit-7D2RDGTD.cjs +0 -10
  346. package/dist/quit-PKBSEJOL.js +0 -10
  347. package/dist/resume-FBKXSDOA.js +0 -13
  348. package/dist/resume-KLPDYPWQ.cjs +0 -13
  349. package/dist/search-7RNYTCNO.js +0 -17
  350. package/dist/search-UESMQZC3.cjs +0 -17
  351. package/dist/sessions-TSSUFWIJ.cjs +0 -10
  352. package/dist/sessions-WAXBUQTU.js +0 -10
  353. package/dist/settings-RKYGXKDG.cjs +0 -30
  354. package/dist/share-GLX4YHS4.cjs +0 -14
  355. package/dist/share-U2M2KBFJ.js +0 -14
  356. package/dist/skills-63QLZMUO.cjs +0 -14
  357. package/dist/skills-BAMMXP3Q.js +0 -14
  358. package/dist/skills-new-NYKNHJHV.cjs +0 -15
  359. package/dist/skills-new-NZFGFKML.js +0 -15
  360. package/dist/slashCommands-EJ23C3Z4.cjs +0 -69
  361. package/dist/slashCommands-JQIL4EWX.js +0 -69
  362. package/dist/status-BKC7GBNQ.js +0 -11
  363. package/dist/status-FU3CPJWQ.cjs +0 -11
  364. package/dist/sync-3IEIHXIP.cjs +0 -18
  365. package/dist/sync-YVPFT7SL.js +0 -18
  366. package/dist/team-GVK5L73L.cjs +0 -9
  367. package/dist/team-RWIKCLTG.js +0 -9
  368. package/dist/theme-A2CEHI7W.js +0 -18
  369. package/dist/theme-LNOQOVR4.cjs +0 -18
  370. package/dist/undo-F2IZJQUV.js +0 -10
  371. package/dist/undo-QEV42XLU.cjs +0 -10
@@ -0,0 +1,326 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkNAJ4IZKDcjs = require('./chunk-NAJ4IZKD.cjs');
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:** ${_nullishCoalesce(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 matching = [];
74
+ const other = [];
75
+ for (const skill of registrySkills) {
76
+ const skillLangs = (_nullishCoalesce(skill.languages, () => ( []))).map((l) => l.toLowerCase());
77
+ const skillFw = (_nullishCoalesce(skill.frameworks, () => ( []))).map((f) => f.toLowerCase());
78
+ const isMatch = skillLangs.some((l) => projectLanguages.has(l)) || skillFw.some((f) => projectFrameworks.has(f));
79
+ (isMatch ? matching : other).push(skill);
80
+ }
81
+ const MAX_SKILLS = 30;
82
+ const combined = [...matching, ...other].slice(0, MAX_SKILLS);
83
+ const formatSkill = (skill) => {
84
+ const tags = _nullishCoalesce(_optionalChain([skill, 'access', _ => _.tags, 'optionalAccess', _2 => _2.join, 'call', _3 => _3(", ")]), () => ( ""));
85
+ const languages = _nullishCoalesce(_optionalChain([skill, 'access', _4 => _4.languages, 'optionalAccess', _5 => _5.join, 'call', _6 => _6(", ")]), () => ( ""));
86
+ const frameworks = _nullishCoalesce(_optionalChain([skill, 'access', _7 => _7.frameworks, 'optionalAccess', _8 => _8.join, 'call', _9 => _9(", ")]), () => ( ""));
87
+ return `- **${skill.id}**: ${skill.description} [category: ${skill.category}] [tags: ${tags}] [languages: ${languages}] [frameworks: ${frameworks}]`;
88
+ };
89
+ if (combined.length > 0) {
90
+ parts.push("");
91
+ if (matching.length > 0) {
92
+ parts.push(`## Matching Skills (${matching.length} match project stack)`);
93
+ for (const skill of matching.slice(0, MAX_SKILLS)) {
94
+ parts.push(formatSkill(skill));
95
+ }
96
+ }
97
+ const otherToShow = combined.length - matching.length;
98
+ if (otherToShow > 0) {
99
+ parts.push("");
100
+ parts.push("## Other Skills");
101
+ for (const skill of other.slice(0, otherToShow)) {
102
+ parts.push(formatSkill(skill));
103
+ }
104
+ }
105
+ if (registrySkills.length > MAX_SKILLS) {
106
+ parts.push(` ... and ${registrySkills.length - MAX_SKILLS} more skills`);
107
+ }
108
+ }
109
+ parts.push("");
110
+ parts.push("Use the `find_agent_skills` tool to search for additional skills by keyword, category, or framework.");
111
+ }
112
+ parts.push("");
113
+ parts.push("Analyze this project, audit installed skills, and rank the catalog.");
114
+ return parts.join("\n");
115
+ }
116
+ function buildLearnGenerationSystemPrompt() {
117
+ return `You are an expert at creating Agent Skills for Autohand, an AI coding assistant.
118
+
119
+ ## Your Task
120
+ 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.
121
+
122
+ ## Skill Quality Guidelines
123
+ 1. **Clear Purpose**: Solve a specific, recurring problem for this exact stack
124
+ 2. **Concrete Examples**: Include 2-3 usage examples showing exact prompts
125
+ 3. **Actionable Steps**: Provide step-by-step workflows, not vague guidance
126
+ 4. **Tool Awareness**: Specify which tools the skill needs in allowed-tools
127
+ 5. **Platform Aware**: Use appropriate commands for the detected OS
128
+
129
+ ## Response Format
130
+ Return ONLY a JSON object:
131
+ {
132
+ "name": "kebab-case-name",
133
+ "description": "1-2 sentences explaining when to use this skill",
134
+ "allowedTools": ["tool1", "tool2"],
135
+ "body": "Full markdown body with sections: overview, ## When to Use, ## How to Use (with example prompts), ## Workflow (numbered steps), ## Tips"
136
+ }
137
+
138
+ Return ONLY the JSON object, no other text.`;
139
+ }
140
+ function buildLearnGenerationUserPrompt(analysis, gapAnalysis, lowScoringSkills) {
141
+ const parts = [];
142
+ parts.push(_chunkNAJ4IZKDcjs.buildSkillGenerationPrompt.call(void 0, analysis));
143
+ parts.push("");
144
+ parts.push("## Context");
145
+ parts.push("No existing community skills matched well for this project.");
146
+ const topThree = lowScoringSkills.slice(0, 3);
147
+ if (topThree.length > 0) {
148
+ parts.push("The closest matches were:");
149
+ for (const rec of topThree) {
150
+ parts.push(`- **${rec.slug}** (score: ${rec.score}): ${rec.reason}`);
151
+ }
152
+ }
153
+ parts.push("");
154
+ if (gapAnalysis !== null) {
155
+ parts.push(`Gap analysis: ${gapAnalysis}`);
156
+ parts.push("");
157
+ }
158
+ parts.push("Generate a skill that fills the most important gap for this project.");
159
+ return parts.join("\n");
160
+ }
161
+
162
+ // src/skills/LearnAdvisor.ts
163
+ function toKebabCase(name) {
164
+ 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();
165
+ }
166
+ var VALID_AUDIT_STATUSES = /* @__PURE__ */ new Set(["redundant", "outdated", "conflicting"]);
167
+ var LearnAdvisor = class {
168
+ constructor(llm) {
169
+ this.llm = llm;
170
+ }
171
+ /* ── Phase 1: Analyze + rank + audit ──────────────────────── */
172
+ /**
173
+ * Analyze the project, audit installed skills, and rank registry catalog.
174
+ *
175
+ * Returns a validated `LearnAnalysisResponse`. On any error (LLM failure,
176
+ * invalid JSON, malformed fields) returns a safe empty fallback.
177
+ */
178
+ async analyze(analysis, installedSkills, registrySkills) {
179
+ const fallback = {
180
+ projectSummary: "",
181
+ audit: [],
182
+ recommendations: [],
183
+ gapAnalysis: null
184
+ };
185
+ try {
186
+ const response = await this.llm.complete({
187
+ messages: [
188
+ { role: "system", content: buildLearnSystemPrompt() },
189
+ { role: "user", content: buildLearnUserPrompt(analysis, installedSkills, registrySkills) }
190
+ ],
191
+ maxTokens: 4e3,
192
+ temperature: 0.2
193
+ });
194
+ const json = this.extractJson(response.content);
195
+ if (json === null) return fallback;
196
+ const parsed = JSON.parse(json);
197
+ const projectSummary = typeof parsed.projectSummary === "string" ? parsed.projectSummary : "";
198
+ const gapAnalysis = typeof parsed.gapAnalysis === "string" ? parsed.gapAnalysis : null;
199
+ const recommendations = Array.isArray(parsed.recommendations) ? parsed.recommendations.filter(
200
+ (r) => this.isValidRecommendation(r)
201
+ ) : [];
202
+ const audit = Array.isArray(parsed.audit) ? parsed.audit.filter(
203
+ (e) => this.isValidAuditEntry(e)
204
+ ) : [];
205
+ return { projectSummary, audit, recommendations, gapAnalysis };
206
+ } catch (e2) {
207
+ return fallback;
208
+ }
209
+ }
210
+ /* ── Phase 2: Generate custom skill ──────────────────────── */
211
+ /**
212
+ * Generate a custom skill when no catalog entry scores well.
213
+ *
214
+ * Returns a validated `LearnGeneratedSkill`. On error, returns an object
215
+ * with `{ error: string }` describing what went wrong, or `null` if
216
+ * the LLM call itself fails.
217
+ */
218
+ async generateSkill(analysis, gapAnalysis, lowScoringSkills) {
219
+ try {
220
+ const response = await this.llm.complete({
221
+ messages: [
222
+ { role: "system", content: buildLearnGenerationSystemPrompt() },
223
+ {
224
+ role: "user",
225
+ content: buildLearnGenerationUserPrompt(analysis, gapAnalysis, lowScoringSkills)
226
+ }
227
+ ],
228
+ maxTokens: 6e3,
229
+ temperature: 0.3
230
+ });
231
+ const json = this.extractJson(response.content);
232
+ if (json === null) return null;
233
+ const parsed = JSON.parse(json);
234
+ if (typeof parsed.name !== "string") return null;
235
+ if (typeof parsed.description !== "string") return null;
236
+ if (typeof parsed.body !== "string") return null;
237
+ const normalizedName = toKebabCase(parsed.name);
238
+ if (!normalizedName) return null;
239
+ const allowedTools = Array.isArray(parsed.allowedTools) ? parsed.allowedTools.filter((t) => typeof t === "string") : [];
240
+ return {
241
+ name: normalizedName,
242
+ description: parsed.description,
243
+ allowedTools,
244
+ body: parsed.body
245
+ };
246
+ } catch (error) {
247
+ const msg = error instanceof Error ? error.message : String(error);
248
+ if (process.env.DEBUG) {
249
+ console.error(`[LearnAdvisor] generateSkill failed: ${msg}`);
250
+ }
251
+ return null;
252
+ }
253
+ }
254
+ /* ── Private helpers ─────────────────────────────────────── */
255
+ /**
256
+ * Extract a JSON string from LLM output that may contain markdown
257
+ * code fences or surrounding prose.
258
+ *
259
+ * Strategy:
260
+ * 1. If content starts with `{` or `[`, return as-is (already JSON).
261
+ * 2. Try extracting from ` ```json ... ``` ` blocks.
262
+ * 3. Try finding `{...}` in the text via greedy regex.
263
+ * 4. Return null if nothing found.
264
+ */
265
+ extractJson(content) {
266
+ const trimmed = content.trim();
267
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
268
+ return trimmed;
269
+ }
270
+ const fenceMatch = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
271
+ if (_optionalChain([fenceMatch, 'optionalAccess', _10 => _10[1]])) {
272
+ return fenceMatch[1].trim();
273
+ }
274
+ const braceMatch = trimmed.match(/\{[\s\S]*\}/);
275
+ if (braceMatch) {
276
+ return braceMatch[0];
277
+ }
278
+ return null;
279
+ }
280
+ /**
281
+ * Validate that an unknown value looks like a `LearnRecommendation`.
282
+ */
283
+ isValidRecommendation(rec) {
284
+ if (rec === null || typeof rec !== "object") return false;
285
+ const r = rec;
286
+ return typeof r.slug === "string" && typeof r.score === "number" && typeof r.reason === "string";
287
+ }
288
+ /**
289
+ * Validate that an unknown value looks like a `LearnAuditEntry`.
290
+ */
291
+ isValidAuditEntry(entry) {
292
+ if (entry === null || typeof entry !== "object") return false;
293
+ const e = entry;
294
+ return typeof e.skill === "string" && typeof e.status === "string" && VALID_AUDIT_STATUSES.has(e.status) && typeof e.reason === "string";
295
+ }
296
+ };
297
+
298
+
299
+
300
+ exports.LearnAdvisor = LearnAdvisor;
301
+ /**
302
+ * @license
303
+ * Copyright 2025 Autohand AI LLC
304
+ * SPDX-License-Identifier: Apache-2.0
305
+ *
306
+ * Learn Prompts — LLM prompt builders for the /learn advisor
307
+ *
308
+ * Phase 1: Analyze project, audit installed skills, rank catalog
309
+ * Phase 2: Generate a custom skill when no catalog match is good enough
310
+ */
311
+ /**
312
+ * @license
313
+ * Copyright 2025 Autohand AI LLC
314
+ * SPDX-License-Identifier: Apache-2.0
315
+ *
316
+ * LearnAdvisor — LLM orchestration for the /learn command.
317
+ *
318
+ * Phase 1 (`analyze`): Analyze the project, audit installed skills,
319
+ * and rank community catalog entries by relevance.
320
+ *
321
+ * Phase 2 (`generateSkill`): When no catalog skill scores well, generate
322
+ * a custom skill tailored to the project.
323
+ *
324
+ * This class does NO file I/O, registry fetching, or skill installation.
325
+ * It only calls the LLM and parses structured JSON responses.
326
+ */
@@ -3,13 +3,13 @@ import {
3
3
  showInput,
4
4
  showModal,
5
5
  showPassword
6
- } from "./chunk-5OBNULPU.js";
6
+ } from "./chunk-YZXUDM5X.js";
7
7
  import {
8
8
  saveConfig
9
- } from "./chunk-WTNBX2JO.js";
9
+ } from "./chunk-ZYVS43MU.js";
10
10
  import {
11
11
  t
12
- } from "./chunk-HFMLWH7B.js";
12
+ } from "./chunk-APIXPPMT.js";
13
13
 
14
14
  // src/commands/settings.ts
15
15
  import chalk from "chalk";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  showModal
3
- } from "./chunk-5OBNULPU.js";
3
+ } from "./chunk-YZXUDM5X.js";
4
4
 
5
5
  // src/commands/completion.ts
6
6
  import chalk2 from "chalk";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
2
 
3
- var _chunkFPAE6ORVcjs = require('./chunk-FPAE6ORV.cjs');
3
+ var _chunkZYQMLKOKcjs = require('./chunk-ZYQMLKOK.cjs');
4
4
 
5
5
  // src/commands/completion.ts
6
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
@@ -311,7 +311,7 @@ async function execute(args) {
311
311
  { label: "Zsh", value: "zsh" },
312
312
  { label: "Fish", value: "fish" }
313
313
  ];
314
- const shellResult = await _chunkFPAE6ORVcjs.showModal.call(void 0, {
314
+ const shellResult = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
315
315
  title: "Select your shell:",
316
316
  options: shellOptions,
317
317
  initialIndex: shellOptions.findIndex((o) => o.value === (detected || "bash"))
@@ -327,7 +327,7 @@ async function execute(args) {
327
327
  { label: "Install completion to default location", value: "install" },
328
328
  { label: "Show installation instructions", value: "instructions" }
329
329
  ];
330
- const actionResult = await _chunkFPAE6ORVcjs.showModal.call(void 0, {
330
+ const actionResult = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
331
331
  title: "What would you like to do?",
332
332
  options: actionOptions
333
333
  });
@@ -2,7 +2,7 @@ import {
2
2
  getCurrentLocale,
3
3
  onLanguageChange,
4
4
  t
5
- } from "./chunk-HFMLWH7B.js";
5
+ } from "./chunk-APIXPPMT.js";
6
6
 
7
7
  // src/ui/i18n/I18nContext.tsx
8
8
  import { createContext, useContext, useState, useEffect, useMemo } from "react";
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  showModal
3
- } from "./chunk-5OBNULPU.js";
3
+ } from "./chunk-YZXUDM5X.js";
4
4
  import {
5
5
  saveConfig
6
- } from "./chunk-WTNBX2JO.js";
6
+ } from "./chunk-ZYVS43MU.js";
7
7
  import {
8
8
  CUSTOM_THEMES_DIR,
9
9
  builtInThemes,
10
10
  initTheme,
11
11
  listAvailableThemes
12
- } from "./chunk-IVM5F2AE.js";
12
+ } from "./chunk-BYONM7UM.js";
13
13
  import {
14
14
  getTheme,
15
15
  isThemeInitialized
16
- } from "./chunk-JS7IPR7P.js";
16
+ } from "./chunk-LIEXWM2M.js";
17
17
  import {
18
18
  t
19
- } from "./chunk-HFMLWH7B.js";
19
+ } from "./chunk-APIXPPMT.js";
20
20
 
21
21
  // src/commands/theme.ts
22
22
  import chalk from "chalk";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkRVUQKMXXcjs = require('./chunk-RVUQKMXX.cjs');
3
+ var _chunk7BTSG4MEcjs = require('./chunk-7BTSG4ME.cjs');
4
4
 
5
5
  // src/commands/model.ts
6
6
  async function model(ctx) {
@@ -9,7 +9,7 @@ async function model(ctx) {
9
9
  }
10
10
  var metadata = {
11
11
  command: "/model",
12
- description: _chunkRVUQKMXXcjs.t.call(void 0, "commands.model.description"),
12
+ description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.model.description"),
13
13
  implemented: true
14
14
  };
15
15
 
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "autohand-cli",
4
- version: "0.8.0",
4
+ version: "0.8.3",
5
5
  license: "Apache-2.0",
6
6
  description: "Autohand interactive coding agent CLI powered by LLMs.",
7
7
  repository: {
@@ -64,6 +64,7 @@ var package_default = {
64
64
  open: "^10.1.0",
65
65
  ora: "^9.0.0",
66
66
  react: "^18.2.0",
67
+ "string-width": "^8.2.0",
67
68
  "terminal-link": "^3.0.0",
68
69
  yaml: "^2.8.2",
69
70
  zod: "^4.1.12"
@@ -4,25 +4,25 @@
4
4
  var _chunk5IXII4HXcjs = require('./chunk-5IXII4HX.cjs');
5
5
 
6
6
 
7
- var _chunk33A755XBcjs = require('./chunk-33A755XB.cjs');
7
+ var _chunkY45G6ZO5cjs = require('./chunk-Y45G6ZO5.cjs');
8
8
 
9
9
 
10
- var _chunkAMT2UZBIcjs = require('./chunk-AMT2UZBI.cjs');
10
+ var _chunkOLSBBZW6cjs = require('./chunk-OLSBBZW6.cjs');
11
11
 
12
12
 
13
- var _chunkUJTCTTUFcjs = require('./chunk-UJTCTTUF.cjs');
13
+ var _chunkCB4E2T5Ncjs = require('./chunk-CB4E2T5N.cjs');
14
14
 
15
15
 
16
16
  var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
17
17
 
18
18
 
19
- var _chunkRVUQKMXXcjs = require('./chunk-RVUQKMXX.cjs');
19
+ var _chunk7BTSG4MEcjs = require('./chunk-7BTSG4ME.cjs');
20
20
 
21
21
  // src/commands/login.ts
22
22
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
23
23
  var metadata = {
24
24
  command: "/login",
25
- description: _chunkRVUQKMXXcjs.t.call(void 0, "commands.login.description"),
25
+ description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.login.description"),
26
26
  implemented: true
27
27
  };
28
28
  async function openBrowser(url) {
@@ -56,22 +56,22 @@ function sleep(ms) {
56
56
  async function login(ctx) {
57
57
  const config = ctx.config;
58
58
  if (_optionalChain([config, 'optionalAccess', _ => _.auth, 'optionalAccess', _2 => _2.token]) && _optionalChain([config, 'optionalAccess', _3 => _3.auth, 'optionalAccess', _4 => _4.user])) {
59
- const result = await _chunkAMT2UZBIcjs.safePrompt.call(void 0, {
59
+ const result = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
60
60
  type: "confirm",
61
61
  name: "continueLogin",
62
62
  message: `Already logged in as ${_chalk2.default.cyan(config.auth.user.email)}. Log in with a different account?`,
63
63
  initial: false
64
64
  });
65
65
  if (!result || !result.continueLogin) {
66
- console.log(_chalk2.default.gray(_chunkRVUQKMXXcjs.t.call(void 0, "commands.login.cancelled")));
66
+ console.log(_chalk2.default.gray(_chunk7BTSG4MEcjs.t.call(void 0, "commands.login.cancelled")));
67
67
  return null;
68
68
  }
69
69
  }
70
- const authClient = _chunk33A755XBcjs.getAuthClient.call(void 0, );
70
+ const authClient = _chunkY45G6ZO5cjs.getAuthClient.call(void 0, );
71
71
  console.log(_chalk2.default.gray("Initiating authentication..."));
72
72
  const initResult = await authClient.initiateDeviceAuth();
73
73
  if (!initResult.success || !initResult.deviceCode || !initResult.userCode) {
74
- console.log(_chalk2.default.red(_chunkRVUQKMXXcjs.t.call(void 0, "commands.login.failed", { error: initResult.error || "Unknown error" })));
74
+ console.log(_chalk2.default.red(_chunk7BTSG4MEcjs.t.call(void 0, "commands.login.failed", { error: initResult.error || "Unknown error" })));
75
75
  return null;
76
76
  }
77
77
  console.log();
@@ -113,9 +113,9 @@ async function login(ctx) {
113
113
  expiresAt
114
114
  }
115
115
  };
116
- await _chunkUJTCTTUFcjs.saveConfig.call(void 0, updatedConfig);
116
+ await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, updatedConfig);
117
117
  console.log();
118
- console.log(_chalk2.default.green(_chunkRVUQKMXXcjs.t.call(void 0, "commands.login.success", { email: pollResult.user.name || pollResult.user.email })));
118
+ console.log(_chalk2.default.green(_chunk7BTSG4MEcjs.t.call(void 0, "commands.login.success", { email: pollResult.user.name || pollResult.user.email })));
119
119
  console.log();
120
120
  await checkAndRestoreSyncData(pollResult.token, pollResult.user.id, updatedConfig);
121
121
  return null;
@@ -141,7 +141,7 @@ async function checkAndRestoreSyncData(token, userId, config) {
141
141
  enabled: true
142
142
  }
143
143
  });
144
- const { getSyncApiClient } = await Promise.resolve().then(() => _interopRequireWildcard(require("./SyncApiClient-ZNYMT36M.cjs")));
144
+ const { getSyncApiClient } = await Promise.resolve().then(() => _interopRequireWildcard(require("./SyncApiClient-HQXJL5BT.cjs")));
145
145
  const apiClient = getSyncApiClient();
146
146
  const remoteManifest = await apiClient.getRemoteManifest(token);
147
147
  if (!remoteManifest || remoteManifest.files.length === 0) {
@@ -153,7 +153,7 @@ async function checkAndRestoreSyncData(token, userId, config) {
153
153
  console.log(_chalk2.default.cyan(`Found cloud sync data (${fileCount} files, ${sizeStr})`));
154
154
  console.log(_chalk2.default.gray("This includes your settings, agents, skills, and memory."));
155
155
  console.log();
156
- const result = await _chunkAMT2UZBIcjs.safePrompt.call(void 0, {
156
+ const result = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
157
157
  type: "confirm",
158
158
  name: "restore",
159
159
  message: "Would you like to restore your settings from the cloud?",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  t
3
- } from "./chunk-HFMLWH7B.js";
3
+ } from "./chunk-APIXPPMT.js";
4
4
 
5
5
  // src/commands/add-dir.ts
6
6
  import chalk2 from "chalk";