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.
Files changed (414) hide show
  1. package/README.md +97 -2
  2. package/assets/icon.png +0 -0
  3. package/dist/AgentRegistry-7LDL5HJH.js +10 -0
  4. package/dist/AgentRegistry-NQCLWABO.cjs +10 -0
  5. package/dist/{AutomodeManager-NGRAO2MH.js → AutomodeManager-MWLKGPZK.js} +2 -0
  6. package/dist/{AutomodeManager-ZKQMBM4T.cjs → AutomodeManager-NYIZNODK.cjs} +3 -1
  7. package/dist/CommunitySkillsCache-6QPRMTJO.js +8 -0
  8. package/dist/CommunitySkillsCache-GTQMOCCO.cjs +8 -0
  9. package/dist/{GitHubRegistryFetcher-US2JJID4.js → GitHubRegistryFetcher-6JQ5JEDZ.js} +1 -0
  10. package/dist/{GitHubRegistryFetcher-K744NNAJ.cjs → GitHubRegistryFetcher-S7QFUEKV.cjs} +1 -0
  11. package/dist/HookManager-Q2KYMCP4.cjs +7 -0
  12. package/dist/HookManager-TTP4Y6DC.js +7 -0
  13. package/dist/ImportWizard-35YBJ4AM.cjs +466 -0
  14. package/dist/ImportWizard-XH7CINCH.js +466 -0
  15. package/dist/LearnAdvisor-A4Q5PPBI.js +9 -0
  16. package/dist/LearnAdvisor-GASQD7HT.cjs +9 -0
  17. package/dist/McpClientManager-7RM6YT35.js +8 -0
  18. package/dist/McpClientManager-RKD7C6OY.cjs +8 -0
  19. package/dist/MemoryManager-GUNLRP5S.js +8 -0
  20. package/dist/MemoryManager-TNSGKDKX.cjs +8 -0
  21. package/dist/{PermissionManager-U5OMGR3L.js → PermissionManager-ATUV34LQ.js} +4 -3
  22. package/dist/PermissionManager-KMN53FJP.cjs +11 -0
  23. package/dist/ProjectProfiler-UMJJSOCE.js +194 -0
  24. package/dist/ProjectProfiler-ZDWR2ODG.cjs +194 -0
  25. package/dist/ProviderFactory-MR5B23QJ.js +9 -0
  26. package/dist/ProviderFactory-VFGCJJX6.cjs +9 -0
  27. package/dist/SessionManager-FEUAU3ZJ.cjs +10 -0
  28. package/dist/SessionManager-IKWAK2PI.js +10 -0
  29. package/dist/SkillsRegistry-KPQFTRIT.cjs +9 -0
  30. package/dist/SkillsRegistry-XJSKPDF2.js +9 -0
  31. package/dist/SubAgent-NYH6GWQ3.js +11 -0
  32. package/dist/SubAgent-PZKBDUBA.cjs +11 -0
  33. package/dist/{SyncApiClient-AYXYSOJM.js → SyncApiClient-LVIO4C2S.js} +1 -0
  34. package/dist/{SyncApiClient-ID3KXEMA.cjs → SyncApiClient-ZNYMT36M.cjs} +1 -0
  35. package/dist/about-HHTF2YFL.js +12 -0
  36. package/dist/about-JGRVNNQC.cjs +12 -0
  37. package/dist/actionExecutor-U6IBN2TU.cjs +19 -0
  38. package/dist/actionExecutor-XT5FW3W6.js +19 -0
  39. package/dist/add-dir-247K3XRY.js +10 -0
  40. package/dist/add-dir-GS4DXKKH.cjs +10 -0
  41. package/dist/agents/builtin/code-cleaner.md +14 -0
  42. package/dist/agents/builtin/docs-writer.md +14 -0
  43. package/dist/agents/builtin/researcher.md +14 -0
  44. package/dist/agents/builtin/reviewer.md +15 -0
  45. package/dist/agents/builtin/tester.md +15 -0
  46. package/dist/agents/builtin/todo-resolver.md +15 -0
  47. package/dist/agents-R6ZEFTVR.cjs +12 -0
  48. package/dist/agents-WJPQWQF2.js +12 -0
  49. package/dist/agents-new-HKVEIBDJ.js +14 -0
  50. package/dist/agents-new-X6GTHIO6.cjs +14 -0
  51. package/dist/assets/icon.png +0 -0
  52. package/dist/autoSkill-6TGBTEQD.js +20 -0
  53. package/dist/autoSkill-H4T6VVDA.cjs +20 -0
  54. package/dist/automode-BC6NVECO.js +10 -0
  55. package/dist/automode-WN2RSOGW.cjs +10 -0
  56. package/dist/{cc-UTTLESTY.js → cc-7LEIJ3KF.js} +1 -0
  57. package/dist/{cc-2W6M7J45.cjs → cc-Q5MM4AWC.cjs} +1 -0
  58. package/dist/{chunk-N4ZSG6JJ.cjs → chunk-22D2CNTP.cjs} +2 -2
  59. package/dist/chunk-245KJE5Y.cjs +55 -0
  60. package/dist/chunk-24QIWILL.js +51 -0
  61. package/dist/{chunk-MYNHJHDZ.js → chunk-2AA5MFES.js} +1 -1
  62. package/dist/{chunk-TSY7JHIV.cjs → chunk-33A755XB.cjs} +2 -2
  63. package/dist/chunk-33RSHBDH.js +131 -0
  64. package/dist/{chunk-QRGPAUST.js → chunk-34M3HWLR.js} +2 -2
  65. package/dist/{chunk-U7CZFKPL.cjs → chunk-3K2ESU53.cjs} +2 -2
  66. package/dist/{chunk-SIGWDEPS.cjs → chunk-3L53OA4E.cjs} +10 -10
  67. package/dist/chunk-3OEDGIFW.js +42 -0
  68. package/dist/chunk-3OTU3RS3.cjs +1607 -0
  69. package/dist/{chunk-MNSTWHK3.cjs → chunk-3PCTTUNW.cjs} +11 -11
  70. package/dist/{chunk-P5VDZ6PV.js → chunk-3PDTTAKJ.js} +1 -1
  71. package/dist/chunk-47CKWKEX.cjs +59 -0
  72. package/dist/{chunk-Z4J4W6YQ.cjs → chunk-4JNNTOGF.cjs} +2 -48
  73. package/dist/{chunk-GVZPIQWB.js → chunk-4PKF7WPD.js} +11 -5
  74. package/dist/{chunk-3S4DEIJP.cjs → chunk-5IXII4HX.cjs} +2 -2
  75. package/dist/{chunk-CRQKDBLD.js → chunk-5P2NXKP3.js} +98 -64
  76. package/dist/{chunk-DSKVMFRM.cjs → chunk-643VRA5S.cjs} +12 -4
  77. package/dist/{chunk-VVBBEYTH.cjs → chunk-6HYLHBQG.cjs} +10 -10
  78. package/dist/{chunk-L5ZFPWHY.js → chunk-6OYHF6MF.js} +12 -4
  79. package/dist/{chunk-BPTBKO7D.js → chunk-6RF7UKUS.js} +224 -37
  80. package/dist/{chunk-YHGTBPEC.js → chunk-6ZCULLCA.js} +1 -1
  81. package/dist/{chunk-VHBUKGRG.js → chunk-72FKPBT5.js} +4 -4
  82. package/dist/{chunk-2U5HFVRO.cjs → chunk-7BTSG4ME.cjs} +5165 -2194
  83. package/dist/chunk-7UOUW76C.js +603 -0
  84. package/dist/{chunk-FEVHH525.cjs → chunk-A4IJHHV7.cjs} +11 -5
  85. package/dist/{chunk-B6EBHCK2.cjs → chunk-AEJH23FO.cjs} +6 -6
  86. package/dist/{chunk-WLTVF77A.js → chunk-ALYU6VTM.js} +1 -1
  87. package/dist/{chunk-NMWEDN4Z.js → chunk-APIXPPMT.js} +5165 -2194
  88. package/dist/chunk-AS6RTLN7.cjs +203 -0
  89. package/dist/{chunk-BHV7CBNT.js → chunk-AYS2ASM7.js} +1 -1
  90. package/dist/{chunk-GRSVQ5YZ.js → chunk-AYSFIUFW.js} +44 -12
  91. package/dist/{chunk-NUHYCFHW.cjs → chunk-BVKXEQVG.cjs} +54 -65
  92. package/dist/chunk-BWN2CLLM.cjs +298 -0
  93. package/dist/{chunk-4HA7IHLJ.cjs → chunk-C5IJIM2V.cjs} +38 -16
  94. package/dist/{chunk-SRLY7K6J.js → chunk-CAMZTXV6.js} +2 -2
  95. package/dist/chunk-CDBPBM2K.cjs +29 -0
  96. package/dist/chunk-CNBKZEX5.cjs +109 -0
  97. package/dist/{chunk-WQUQ5JMM.js → chunk-CWMZKFTT.js} +4 -4
  98. package/dist/{chunk-CKN2BLHK.cjs → chunk-CZXGCVTR.cjs} +2 -2
  99. package/dist/{chunk-SZP4ULM5.cjs → chunk-DJDE4DTT.cjs} +17 -17
  100. package/dist/chunk-DN573ME7.cjs +1675 -0
  101. package/dist/chunk-DRE2RXBZ.js +4498 -0
  102. package/dist/chunk-DSPQEHDT.js +29 -0
  103. package/dist/{chunk-SFNT5DYE.cjs → chunk-DVUHHH3B.cjs} +4 -4
  104. package/dist/chunk-DVZOENQ7.cjs +58 -0
  105. package/dist/{chunk-PWLLLJHU.js → chunk-EGFT4PGW.js} +3 -1
  106. package/dist/chunk-EGMZDTSL.js +55 -0
  107. package/dist/chunk-EZMINVLU.js +123 -0
  108. package/dist/chunk-FHK7UDOJ.cjs +42 -0
  109. package/dist/{chunk-KWRUQRXR.js → chunk-FKSDEWDH.js} +44 -10
  110. package/dist/chunk-FMB3TSWP.cjs +218 -0
  111. package/dist/chunk-FW774QXH.js +1838 -0
  112. package/dist/{chunk-MY3TZER2.js → chunk-G27PQQFD.js} +1 -1
  113. package/dist/{chunk-Y2ZSH3YF.cjs → chunk-G3V4SFET.cjs} +57 -23
  114. package/dist/chunk-G4CAKI3V.js +58 -0
  115. package/dist/{chunk-FB6JWNJS.js → chunk-GBHDROGL.js} +54 -65
  116. package/dist/{chunk-DEAEO7RI.js → chunk-GJH7XMSK.js} +15 -1
  117. package/dist/chunk-GLBAF54O.js +218 -0
  118. package/dist/{chunk-S47TCZDL.js → chunk-H5SWOLG6.js} +7 -7
  119. package/dist/chunk-HBXAA3XB.js +83 -0
  120. package/dist/{chunk-63BXZQZW.js → chunk-HIVRCQS2.js} +26 -4
  121. package/dist/{chunk-WOGJXDBU.cjs → chunk-HLHTG5ZU.cjs} +18 -4
  122. package/dist/{chunk-FK2DVRPJ.js → chunk-HLQV64Y5.js} +170 -4
  123. package/dist/chunk-HOAHWIQ5.cjs +260 -0
  124. package/dist/{chunk-D2XFTCRP.js → chunk-HQ7YZKXE.js} +1 -1
  125. package/dist/{chunk-L42HTMMR.cjs → chunk-HTLINWX6.cjs} +2 -2
  126. package/dist/{chunk-PKOAXQKW.cjs → chunk-HVKOZ2VP.cjs} +11 -11
  127. package/dist/chunk-HXGBSJL5.cjs +27 -0
  128. package/dist/chunk-I5IW3T2Y.js +310 -0
  129. package/dist/chunk-IETRBBMP.cjs +603 -0
  130. package/dist/{chunk-MTALRU7R.cjs → chunk-IFFXSTOM.cjs} +3 -3
  131. package/dist/{chunk-V7YTCNMN.cjs → chunk-IKGWDOGU.cjs} +174 -8
  132. package/dist/chunk-IQ5RXU6O.js +1675 -0
  133. package/dist/{chunk-ZBIBLOZL.js → chunk-IVM5F2AE.js} +500 -317
  134. package/dist/chunk-J4Q7XR3G.js +260 -0
  135. package/dist/{chunk-XL77XYI2.cjs → chunk-J6QET7EF.cjs} +27 -7
  136. package/dist/{chunk-TQB222ZB.js → chunk-JCLYQ2JC.js} +2 -2
  137. package/dist/chunk-JSBRDJBE.js +30 -0
  138. package/dist/{chunk-XPOHYKR3.js → chunk-JX3DFKBI.js} +2 -2
  139. package/dist/chunk-JYTDYJVW.js +27 -0
  140. package/dist/{chunk-6SHHB2VD.js → chunk-KPELYZ6L.js} +2 -2
  141. package/dist/{chunk-ZLOTP56B.cjs → chunk-KWXVKLQ5.cjs} +5 -5
  142. package/dist/chunk-L3WAH3EM.cjs +131 -0
  143. package/dist/{chunk-ZXIQCYYV.cjs → chunk-LA7H35XM.cjs} +9 -9
  144. package/dist/chunk-LENHP55G.cjs +1838 -0
  145. package/dist/chunk-LJFUXC56.cjs +123 -0
  146. package/dist/{chunk-R5OO7MEB.cjs → chunk-LNMYK2F5.cjs} +22 -22
  147. package/dist/chunk-LQGVEP3E.js +109 -0
  148. package/dist/{chunk-KXAAEROY.js → chunk-LWUJFGOZ.js} +2 -2
  149. package/dist/chunk-MAKMSQMQ.cjs +504 -0
  150. package/dist/{chunk-BG4OQUKP.js → chunk-MBBY4ZIK.js} +1 -1
  151. package/dist/chunk-MSED7RH2.cjs +267 -0
  152. package/dist/{chunk-NMGF2KUN.js → chunk-MYISNQH4.js} +1 -1
  153. package/dist/chunk-N23UAW4I.js +59 -0
  154. package/dist/chunk-N254NRHT.cjs +30 -0
  155. package/dist/{chunk-TOTDRAWG.js → chunk-NDMIPTV4.js} +1 -1
  156. package/dist/{chunk-AIH6GUGB.cjs → chunk-NNPAM4HC.cjs} +5 -5
  157. package/dist/{chunk-HSPWX4Z2.cjs → chunk-O4IF4NJT.cjs} +231 -44
  158. package/dist/{chunk-DZHR34H6.cjs → chunk-OGV4WJ5L.cjs} +8 -8
  159. package/dist/chunk-OHUZKDGX.js +348 -0
  160. package/dist/{chunk-BRXIEKJ3.cjs → chunk-OLSBBZW6.cjs} +5 -5
  161. package/dist/{chunk-MILZEEUV.js → chunk-OOKY3HPZ.js} +9 -3
  162. package/dist/chunk-P47WPOXN.js +298 -0
  163. package/dist/{chunk-ULMPJUJW.cjs → chunk-PRRCJFU3.cjs} +23 -23
  164. package/dist/{chunk-SMHY3Q7B.cjs → chunk-Q7XSCYND.cjs} +54 -22
  165. package/dist/chunk-QCLYBIMM.cjs +51 -0
  166. package/dist/chunk-QMAKTSZB.cjs +48 -0
  167. package/dist/{chunk-DTFR3WD6.js → chunk-QNGEW5TC.js} +1 -1
  168. package/dist/chunk-QOXPOR5D.js +267 -0
  169. package/dist/chunk-R33VKSH5.cjs +348 -0
  170. package/dist/{chunk-RJP3SZ7Q.cjs → chunk-RD5XAJR2.cjs} +492 -309
  171. package/dist/chunk-RGR6ME5J.cjs +844 -0
  172. package/dist/{chunk-EOGKE5GD.cjs → chunk-RKJTGGMU.cjs} +221 -126
  173. package/dist/{chunk-GD4AFYJ3.js → chunk-RO6WYEWH.js} +24 -4
  174. package/dist/chunk-S52YW5ZQ.js +844 -0
  175. package/dist/{chunk-6DWXHBAY.js → chunk-SAHBLB3E.js} +222 -127
  176. package/dist/{chunk-JHOQABEF.js → chunk-SCXX4LW5.js} +5 -5
  177. package/dist/{chunk-GIZL57FE.cjs → chunk-SEKD5FH3.cjs} +3 -1
  178. package/dist/{chunk-JWPI6O5Z.js → chunk-SKV2F3NM.js} +31 -4
  179. package/dist/{chunk-FHUNAB2K.cjs → chunk-SKYG33B2.cjs} +33 -6
  180. package/dist/{chunk-BISFR6ZL.js → chunk-SLQAYV3W.js} +1 -1
  181. package/dist/{chunk-RFNCTE4V.cjs → chunk-SYVYLZZF.cjs} +2 -2
  182. package/dist/{chunk-3XJD56Z4.js → chunk-T73IDKDF.js} +10 -3
  183. package/dist/chunk-TBEGGJNC.cjs +310 -0
  184. package/dist/{chunk-RRZS5A53.js → chunk-TNZRZQ7Q.js} +1 -1
  185. package/dist/{chunk-CH4SPVFD.cjs → chunk-TXSDBGKX.cjs} +10 -3
  186. package/dist/chunk-U3WDY42C.cjs +42 -0
  187. package/dist/{chunk-425MT6Y5.cjs → chunk-U46VYPLR.cjs} +9 -9
  188. package/dist/{chunk-OLG7LZBD.js → chunk-VG34MG2U.js} +1 -1
  189. package/dist/{chunk-XDVG3NM4.js → chunk-W3X6PAC7.js} +2 -48
  190. package/dist/{chunk-LYMTYC67.js → chunk-WHE2SWHU.js} +2 -2
  191. package/dist/chunk-WM5PAOTQ.cjs +4498 -0
  192. package/dist/chunk-WNUVPKBW.js +42 -0
  193. package/dist/{chunk-EV53SLSB.cjs → chunk-WPVWQSL7.cjs} +4 -4
  194. package/dist/chunk-WQ3VJXZB.js +118 -0
  195. package/dist/{chunk-HMRDNRTH.js → chunk-X2MSVKDV.js} +2 -2
  196. package/dist/chunk-X3WS5LDG.js +504 -0
  197. package/dist/{chunk-43XS26AQ.cjs → chunk-X5VSP65C.cjs} +4 -4
  198. package/dist/{chunk-DSCQPWUB.cjs → chunk-X5YJ34FZ.cjs} +15 -15
  199. package/dist/chunk-XAV24VYN.js +48 -0
  200. package/dist/chunk-XDLH4EDL.cjs +118 -0
  201. package/dist/{chunk-X765A7J5.js → chunk-XRZEUWKF.js} +1 -1
  202. package/dist/{chunk-ZKZRFH37.cjs → chunk-XTB6VJVQ.cjs} +6 -6
  203. package/dist/{chunk-H3GBSPK5.js → chunk-XX2ZO7DS.js} +14 -6
  204. package/dist/{chunk-RUZB43HU.cjs → chunk-Y72HH2TF.cjs} +22 -14
  205. package/dist/chunk-YFXTE422.cjs +92 -0
  206. package/dist/{chunk-OSUWEUZE.js → chunk-YGN4CQIP.js} +1 -1
  207. package/dist/{chunk-KC5FPUOF.cjs → chunk-YRLYSQEQ.cjs} +2 -2
  208. package/dist/{chunk-3KBBARKO.js → chunk-YZXUDM5X.js} +85 -28
  209. package/dist/chunk-Z36XBUMX.cjs +83 -0
  210. package/dist/chunk-ZK6HOR62.js +92 -0
  211. package/dist/{chunk-PDKNHU5G.cjs → chunk-ZQE72E6W.cjs} +22 -16
  212. package/dist/chunk-ZVY2XD6T.js +1607 -0
  213. package/dist/{chunk-XBUMKEFN.cjs → chunk-ZYQMLKOK.cjs} +91 -34
  214. package/dist/clear-UO4MNWZW.cjs +12 -0
  215. package/dist/clear-ZJ5NYP6E.js +12 -0
  216. package/dist/communityInstaller-6KCFN7YZ.js +19 -0
  217. package/dist/communityInstaller-PVSOFDZD.cjs +19 -0
  218. package/dist/completion-MMF2PN2H.js +14 -0
  219. package/dist/completion-UI5WKHXI.cjs +14 -0
  220. package/dist/config-E7RINK4R.cjs +18 -0
  221. package/dist/config-ZN66VXPS.js +18 -0
  222. package/dist/constants-6CPCJ3DY.cjs +21 -0
  223. package/dist/{constants-V6J54N3X.js → constants-UFM5B232.js} +2 -1
  224. package/dist/{defaultHooks-WLMRQUXG.cjs → defaultHooks-RCXPHF4M.cjs} +3 -1
  225. package/dist/{defaultHooks-R56VYG7I.js → defaultHooks-RDRMER3Z.js} +2 -0
  226. package/dist/export-N4XIVDSL.cjs +12 -0
  227. package/dist/export-W22L4D5C.js +12 -0
  228. package/dist/extractSessionMemories-SDW2MVBQ.cjs +7 -0
  229. package/dist/extractSessionMemories-V7K42ZHW.js +7 -0
  230. package/dist/feedback-DR6ADSNE.cjs +15 -0
  231. package/dist/feedback-FEEAP4QW.js +15 -0
  232. package/dist/filesystem-3SGCW2BF.js +10 -0
  233. package/dist/filesystem-MCFXJQ6R.cjs +10 -0
  234. package/dist/formatters-6K7QVWQL.cjs +10 -0
  235. package/dist/formatters-DQHO5I36.js +10 -0
  236. package/dist/{help-LKKQU2TN.js → help-2BLR7L43.js} +3 -2
  237. package/dist/help-AQHGTS7P.cjs +12 -0
  238. package/dist/{history-AV4XBFRK.js → history-5FZ3M2AK.js} +3 -2
  239. package/dist/history-NIUDRMKA.cjs +14 -0
  240. package/dist/hooks-2EY4IPKV.js +13 -0
  241. package/dist/hooks-LJVORRIG.cjs +13 -0
  242. package/dist/i18n-ARDG2SMC.cjs +33 -0
  243. package/dist/{i18n-BSAPXM56.js → i18n-K7QOWIBH.js} +2 -1
  244. package/dist/ide-GFW6IJHD.js +12 -0
  245. package/dist/ide-N2ZNSSB3.cjs +12 -0
  246. package/dist/import-DFVN3KNZ.js +10 -0
  247. package/dist/import-QEME3E4T.cjs +170 -0
  248. package/dist/import-UXM3VK7B.js +170 -0
  249. package/dist/import-ZS6DPGU5.cjs +10 -0
  250. package/dist/index.cjs +11233 -11804
  251. package/dist/index.js +12594 -13165
  252. package/dist/init-PY75HA3S.cjs +10 -0
  253. package/dist/init-QNMWLAVY.js +10 -0
  254. package/dist/language-5UE4G2BT.cjs +18 -0
  255. package/dist/language-UXMHEZUJ.js +18 -0
  256. package/dist/learn-HJ3FLNZC.cjs +20 -0
  257. package/dist/learn-MVYS3RU5.js +20 -0
  258. package/dist/{lint-44UQJ673.cjs → lint-D5UOJWIK.cjs} +1 -0
  259. package/dist/{lint-TA2ZHVLM.js → lint-NJPZWVN2.js} +1 -0
  260. package/dist/{localProjectPermissions-WQYMGI42.js → localProjectPermissions-N77HA3XK.js} +3 -2
  261. package/dist/localProjectPermissions-UFSMNTBJ.cjs +18 -0
  262. package/dist/login-DSE7H63A.js +20 -0
  263. package/dist/login-V3MEWPKN.cjs +20 -0
  264. package/dist/logout-BMVCLKKW.js +18 -0
  265. package/dist/logout-XEG7FHOZ.cjs +18 -0
  266. package/dist/mcp-PYUR4PHO.js +18 -0
  267. package/dist/mcp-SG6JFLGC.cjs +18 -0
  268. package/dist/{mcp-install-2KVKRAMQ.cjs → mcp-install-G27HSS3Z.cjs} +26 -14
  269. package/dist/{mcp-install-77UXRN6R.js → mcp-install-VESN42PI.js} +21 -9
  270. package/dist/memory-4ZMMEZ2Z.js +10 -0
  271. package/dist/memory-QSGMVVGH.cjs +10 -0
  272. package/dist/message-JUBOK2VU.js +9 -0
  273. package/dist/message-ZJ5AYAMT.cjs +9 -0
  274. package/dist/model-NANLBZ4Z.cjs +10 -0
  275. package/dist/model-ZXNV4AF7.js +10 -0
  276. package/dist/new-5QJY5JP2.js +12 -0
  277. package/dist/new-PMMG55UX.cjs +12 -0
  278. package/dist/{patch-BAAQIYSW.js → patch-5F6VBIT3.js} +2 -0
  279. package/dist/{patch-J32X2QQP.cjs → patch-MOD7QC3D.cjs} +3 -1
  280. package/dist/permissions-LECTCJ4H.cjs +13 -0
  281. package/dist/permissions-VP5VGIBL.js +13 -0
  282. package/dist/{plan-JFGNRL2S.js → plan-G5CEKJI4.js} +1 -0
  283. package/dist/{plan-B3CW5DXJ.cjs → plan-QKOHE3LH.cjs} +1 -0
  284. package/dist/quit-BKOOPHU5.cjs +10 -0
  285. package/dist/quit-FVFNYACP.js +10 -0
  286. package/dist/registry-KWZGYJC2.js +2108 -0
  287. package/dist/registry-YN4FQPOO.cjs +2108 -0
  288. package/dist/resume-EXFQSQPH.js +13 -0
  289. package/dist/resume-PP2IQM5S.cjs +13 -0
  290. package/dist/search-C56FBN67.cjs +17 -0
  291. package/dist/search-XGZDYBF4.js +17 -0
  292. package/dist/{session-T3TAZ5ZU.cjs → session-BSU2L5UI.cjs} +1 -0
  293. package/dist/{session-H5QWKE5E.js → session-SZMRN5KG.js} +1 -0
  294. package/dist/sessions-54KI3F2Q.js +10 -0
  295. package/dist/sessions-DDTSPNVW.cjs +10 -0
  296. package/dist/settings-BDO37TTO.cjs +30 -0
  297. package/dist/settings-FHRDFPLK.js +30 -0
  298. package/dist/share-IERCTBGN.cjs +14 -0
  299. package/dist/share-TGROUE6R.js +14 -0
  300. package/dist/skills-6OL4OSGA.js +76 -0
  301. package/dist/skills-FYY6F2WV.cjs +76 -0
  302. package/dist/skills-OM4IGBAA.cjs +26 -0
  303. package/dist/skills-S3GRN323.js +26 -0
  304. package/dist/{skills-install-MQINL3EC.js → skills-install-6CSWC24P.js} +97 -26
  305. package/dist/{skills-install-IKJZN4G2.cjs → skills-install-O3LZ2ETC.cjs} +106 -35
  306. package/dist/skills-new-ALD2PTHN.js +15 -0
  307. package/dist/skills-new-PWLKK7GW.cjs +15 -0
  308. package/dist/slashCommands-L4ZD33LJ.js +75 -0
  309. package/dist/slashCommands-YY2VUUDF.cjs +75 -0
  310. package/dist/status-3PC5XWSS.cjs +11 -0
  311. package/dist/status-KCLVOYPD.js +11 -0
  312. package/dist/sync-6SDWG5RK.js +18 -0
  313. package/dist/sync-7JMZVEQD.cjs +40 -0
  314. package/dist/{sync-EXYX7HXW.js → sync-KWX67OUN.js} +3 -2
  315. package/dist/sync-WHURZL3U.cjs +18 -0
  316. package/dist/tasks-5FPBIFLC.js +9 -0
  317. package/dist/tasks-TXGKGNH6.cjs +9 -0
  318. package/dist/team-5YXP3JGR.js +9 -0
  319. package/dist/team-IIWEZKNR.cjs +9 -0
  320. package/dist/teammate-2KMKJXAM.cjs +139 -0
  321. package/dist/teammate-L6EZQ3I2.js +139 -0
  322. package/dist/theme-BE5A4FPN.cjs +18 -0
  323. package/dist/theme-YMFCQP7J.js +18 -0
  324. package/dist/ui/questionModal.cjs +7 -25
  325. package/dist/ui/questionModal.js +6 -24
  326. package/dist/undo-KZHUUZTD.cjs +10 -0
  327. package/dist/undo-NEIEHQVX.js +10 -0
  328. package/dist/update-TVAJMMBC.js +82 -0
  329. package/dist/update-Z6BIIQDC.cjs +82 -0
  330. package/package.json +10 -3
  331. package/dist/CommunitySkillsCache-ILWHWE5P.js +0 -7
  332. package/dist/CommunitySkillsCache-KHC6RUJW.cjs +0 -7
  333. package/dist/HookManager-X47HCM5G.cjs +0 -6
  334. package/dist/HookManager-ZXKHCD7U.js +0 -6
  335. package/dist/MemoryManager-6ZT7IDO5.cjs +0 -7
  336. package/dist/MemoryManager-AJGS5AKB.js +0 -7
  337. package/dist/PermissionManager-HG6W2DGU.cjs +0 -10
  338. package/dist/SessionManager-BJ2G6VV4.cjs +0 -9
  339. package/dist/SessionManager-ENPGYK5J.js +0 -9
  340. package/dist/SkillsRegistry-6ZFOCT25.cjs +0 -8
  341. package/dist/SkillsRegistry-C2SHOZ5D.js +0 -8
  342. package/dist/about-3BJTNSLK.js +0 -11
  343. package/dist/about-EABQNJGV.cjs +0 -11
  344. package/dist/add-dir-7FD4DMDA.cjs +0 -9
  345. package/dist/add-dir-LOYJ4YB5.js +0 -9
  346. package/dist/agents-2Y6ASV7C.js +0 -10
  347. package/dist/agents-UOSPKLQL.cjs +0 -10
  348. package/dist/agents-new-23NSGAM5.js +0 -13
  349. package/dist/agents-new-WI2EL7IJ.cjs +0 -13
  350. package/dist/automode-LGWTY3UX.js +0 -9
  351. package/dist/automode-WLBQ7MN7.cjs +0 -9
  352. package/dist/chunk-5UBW2BGC.js +0 -33
  353. package/dist/chunk-I6DBWNLN.cjs +0 -169
  354. package/dist/chunk-IZBCMJHJ.cjs +0 -33
  355. package/dist/completion-7WGMHKOR.cjs +0 -13
  356. package/dist/completion-KH33NSGP.js +0 -13
  357. package/dist/constants-RBQTR32A.cjs +0 -20
  358. package/dist/export-3QN3IH7A.js +0 -11
  359. package/dist/export-BI54X3MP.cjs +0 -11
  360. package/dist/feedback-CI4OIPOS.cjs +0 -14
  361. package/dist/feedback-GFPL5STE.js +0 -14
  362. package/dist/formatters-N5IJKYZY.cjs +0 -8
  363. package/dist/formatters-UG6VZJJ5.js +0 -8
  364. package/dist/help-CWMUGD3V.cjs +0 -11
  365. package/dist/history-73VBEMSI.cjs +0 -13
  366. package/dist/hooks-62UDQBGH.cjs +0 -12
  367. package/dist/hooks-XORDJD5X.js +0 -12
  368. package/dist/i18n-X2IU2EZD.cjs +0 -32
  369. package/dist/ide-RPKZALQV.js +0 -11
  370. package/dist/ide-YMNXJB6A.cjs +0 -11
  371. package/dist/init-J5HR4R7U.js +0 -9
  372. package/dist/init-JCC7RVMC.cjs +0 -9
  373. package/dist/language-AZISJCEZ.js +0 -16
  374. package/dist/language-F65RA6FZ.cjs +0 -16
  375. package/dist/localProjectPermissions-2EATUDZM.cjs +0 -17
  376. package/dist/login-5HLPMECE.js +0 -18
  377. package/dist/login-ISWYYBXP.cjs +0 -18
  378. package/dist/logout-3EKZM5J3.cjs +0 -16
  379. package/dist/logout-GE7TSZ24.js +0 -16
  380. package/dist/mcp-EW64QRFA.cjs +0 -15
  381. package/dist/mcp-VHS7AMF2.js +0 -15
  382. package/dist/memory-2I473RU3.js +0 -9
  383. package/dist/memory-JZ6NPSP3.cjs +0 -9
  384. package/dist/model-GXZLARPT.js +0 -9
  385. package/dist/model-Y274DBDO.cjs +0 -9
  386. package/dist/new-BG5VIGZ7.cjs +0 -9
  387. package/dist/new-YXFDQOA7.js +0 -9
  388. package/dist/permissions-QILEAGBP.cjs +0 -12
  389. package/dist/permissions-WVEOVMWO.js +0 -12
  390. package/dist/quit-NC32OEJG.cjs +0 -9
  391. package/dist/quit-WRRIGU33.js +0 -9
  392. package/dist/resume-GJIKIDPR.cjs +0 -12
  393. package/dist/resume-RMJNCAOK.js +0 -12
  394. package/dist/search-UIWIXB73.js +0 -14
  395. package/dist/search-WQNXDA2E.cjs +0 -14
  396. package/dist/sessions-HPFX2GDD.js +0 -9
  397. package/dist/sessions-SAQU6MFA.cjs +0 -9
  398. package/dist/share-2WH5ZVOO.cjs +0 -13
  399. package/dist/share-PSSWWVV5.js +0 -13
  400. package/dist/skills-LJZA6PVJ.js +0 -13
  401. package/dist/skills-YTYGART7.cjs +0 -13
  402. package/dist/skills-new-3WCU3CWB.js +0 -14
  403. package/dist/skills-new-O5LFVFZU.cjs +0 -14
  404. package/dist/slashCommands-7IRDOXOQ.cjs +0 -55
  405. package/dist/slashCommands-C6CAQA25.js +0 -55
  406. package/dist/status-4EDV2LSY.cjs +0 -10
  407. package/dist/status-NU7TJDCE.js +0 -10
  408. package/dist/sync-3GFSEIAZ.js +0 -16
  409. package/dist/sync-6M3WRKMH.cjs +0 -39
  410. package/dist/sync-CQNQDNTJ.cjs +0 -16
  411. package/dist/theme-EMJGULMI.cjs +0 -16
  412. package/dist/theme-FGDSXNU3.js +0 -16
  413. package/dist/undo-CTXQYE7C.cjs +0 -9
  414. package/dist/undo-HX2ZMECP.js +0 -9
@@ -0,0 +1,310 @@
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 _chunkMAKMSQMQcjs = require('./chunk-MAKMSQMQ.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 relevant = registrySkills.filter((skill) => {
74
+ const skillLangs = (_nullishCoalesce(skill.languages, () => ( []))).map((l) => l.toLowerCase());
75
+ const skillFw = (_nullishCoalesce(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 = _nullishCoalesce(_optionalChain([skill, 'access', _ => _.tags, 'optionalAccess', _2 => _2.join, 'call', _3 => _3(", ")]), () => ( ""));
83
+ const languages = _nullishCoalesce(_optionalChain([skill, 'access', _4 => _4.languages, 'optionalAccess', _5 => _5.join, 'call', _6 => _6(", ")]), () => ( ""));
84
+ const frameworks = _nullishCoalesce(_optionalChain([skill, 'access', _7 => _7.frameworks, 'optionalAccess', _8 => _8.join, 'call', _9 => _9(", ")]), () => ( ""));
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(_chunkMAKMSQMQcjs.buildSkillGenerationPrompt.call(void 0, 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 (e2) {
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 (_optionalChain([fenceMatch, 'optionalAccess', _10 => _10[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
+
283
+
284
+ exports.LearnAdvisor = LearnAdvisor;
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
+ */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  t
3
- } from "./chunk-NMWEDN4Z.js";
3
+ } from "./chunk-APIXPPMT.js";
4
4
 
5
5
  // src/commands/add-dir.ts
6
6
  import chalk2 from "chalk";
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});// package.json
2
2
  var package_default = {
3
3
  name: "autohand-cli",
4
- version: "0.7.14",
4
+ version: "0.8.2",
5
5
  license: "Apache-2.0",
6
6
  description: "Autohand interactive coding agent CLI powered by LLMs.",
7
7
  repository: {
@@ -18,7 +18,8 @@ var package_default = {
18
18
  },
19
19
  main: "dist/index.js",
20
20
  files: [
21
- "dist"
21
+ "dist",
22
+ "assets"
22
23
  ],
23
24
  scripts: {
24
25
  postinstall: "node scripts/fix-ansi-styles.js || true && node scripts/fix-ink-devtools.js || true && node scripts/fix-yoga-wasm.js || true",
@@ -27,6 +28,7 @@ var package_default = {
27
28
  dev: "bun src/index.ts",
28
29
  typecheck: "tsc --noEmit",
29
30
  lint: "eslint .",
31
+ proof: "bun run lint && bun run typecheck && bun run test",
30
32
  test: "vitest run",
31
33
  start: "node dist/index.js",
32
34
  "compile:macos-arm64": "bun build ./src/index.ts --compile --target=bun-darwin-arm64 --outfile ./binaries/autohand-macos-arm64",
@@ -58,25 +60,30 @@ var package_default = {
58
60
  ink: "^4.4.1",
59
61
  "ink-spinner": "^5.0.0",
60
62
  minimatch: "^10.1.1",
63
+ "node-notifier": "^10.0.1",
61
64
  open: "^10.1.0",
62
65
  ora: "^9.0.0",
63
66
  react: "^18.2.0",
67
+ "string-width": "^8.2.0",
64
68
  "terminal-link": "^3.0.0",
65
69
  yaml: "^2.8.2",
66
70
  zod: "^4.1.12"
67
71
  },
68
72
  devDependencies: {
69
73
  "@types/diff": "^8.0.0",
70
- "react-devtools-core": "^7.0.1",
71
74
  "@types/fs-extra": "^11.0.4",
72
75
  "@types/minimatch": "^6.0.0",
73
76
  "@types/node": "^24.10.1",
77
+ "@types/node-notifier": "^8.0.5",
74
78
  "@types/react": "^18.3.3",
75
79
  "@types/terminal-link": "^1.2.0",
76
80
  "@typescript-eslint/eslint-plugin": "^8.48.1",
77
81
  "@typescript-eslint/parser": "^8.48.1",
78
82
  eslint: "^9.39.1",
83
+ "ink-testing-library": "^3.0.0",
79
84
  memfs: "^4.51.1",
85
+ "react-devtools-core": "^7.0.1",
86
+ "strip-ansi": "^7.1.2",
80
87
  tsup: "^8.5.1",
81
88
  tsx: "^4.20.6",
82
89
  typescript: "^5.9.3",
@@ -0,0 +1,42 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/commands/tasks.ts
2
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
3
+ var metadata = {
4
+ command: "/tasks",
5
+ description: "Show team task list with status and owners",
6
+ implemented: true
7
+ };
8
+ async function tasks(ctx) {
9
+ if (!ctx.teamManager) {
10
+ return _chalk2.default.yellow("Team manager not available.");
11
+ }
12
+ const team = ctx.teamManager.getTeam();
13
+ if (!team) {
14
+ return _chalk2.default.yellow("No active team. Create one first.");
15
+ }
16
+ const allTasks = ctx.teamManager.tasks.listTasks();
17
+ if (allTasks.length === 0) {
18
+ return _chalk2.default.gray("No tasks in the current team.");
19
+ }
20
+ const done = allTasks.filter((t) => t.status === "completed").length;
21
+ const lines = [
22
+ _chalk2.default.bold(`Tasks [${done}/${allTasks.length} done]`),
23
+ ""
24
+ ];
25
+ for (const task of allTasks) {
26
+ const icon = task.status === "completed" ? _chalk2.default.green("\u2713") : task.status === "in_progress" ? _chalk2.default.yellow("\u25CF") : _chalk2.default.gray("\u25CB");
27
+ const owner = task.owner ? _chalk2.default.cyan(` \u2192 ${task.owner}`) : "";
28
+ const blocked = task.blockedBy.length > 0 ? _chalk2.default.red(` (blocked by: ${task.blockedBy.join(", ")})`) : "";
29
+ lines.push(` ${icon} ${_chalk2.default.white(task.id)} ${task.subject}${owner}${blocked}`);
30
+ }
31
+ return lines.join("\n");
32
+ }
33
+
34
+
35
+
36
+
37
+ exports.metadata = metadata; exports.tasks = tasks;
38
+ /**
39
+ * @license
40
+ * Copyright 2025 Autohand AI LLC
41
+ * SPDX-License-Identifier: Apache-2.0
42
+ */
@@ -3,10 +3,10 @@
3
3
  var _chunkJHGIWNHLcjs = require('./chunk-JHGIWNHL.cjs');
4
4
 
5
5
 
6
- var _chunkBRXIEKJ3cjs = require('./chunk-BRXIEKJ3.cjs');
6
+ var _chunkOLSBBZW6cjs = require('./chunk-OLSBBZW6.cjs');
7
7
 
8
8
 
9
- var _chunkGIZL57FEcjs = require('./chunk-GIZL57FE.cjs');
9
+ var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
10
10
 
11
11
  // src/commands/skills-new.ts
12
12
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
@@ -25,7 +25,7 @@ async function createSkill(ctx) {
25
25
  console.log(_chalk2.default.red("Skills registry not available."));
26
26
  return null;
27
27
  }
28
- const answers = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, [
28
+ const answers = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, [
29
29
  {
30
30
  type: "input",
31
31
  name: "name",
@@ -65,7 +65,7 @@ async function createSkill(ctx) {
65
65
  console.log(_chalk2.default.gray("Canceled: no name provided."));
66
66
  return null;
67
67
  }
68
- const storageResult = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, {
68
+ const storageResult = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
69
69
  type: "select",
70
70
  name: "level",
71
71
  message: "Where should this skill be saved?",
@@ -81,7 +81,7 @@ async function createSkill(ctx) {
81
81
  const storageLevel = storageResult.level;
82
82
  if (skillsRegistry.hasSkill(name)) {
83
83
  console.log(_chalk2.default.yellow(`A skill named "${name}" already exists.`));
84
- const result = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, {
84
+ const result = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
85
85
  type: "confirm",
86
86
  name: "overwrite",
87
87
  message: "Do you want to overwrite it?",
@@ -100,7 +100,7 @@ async function createSkill(ctx) {
100
100
  console.log(_chalk2.default.gray(` Similarity: ${(match.score * 100).toFixed(0)}%`));
101
101
  }
102
102
  console.log();
103
- const result = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, {
103
+ const result = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
104
104
  type: "select",
105
105
  name: "proceed",
106
106
  message: "How would you like to proceed?",
@@ -150,7 +150,7 @@ Output only the raw markdown content, no code fences.`
150
150
  console.log(content.length > 800 ? content.slice(0, 800) + "\n...(truncated)" : content);
151
151
  console.log(_chalk2.default.gray("\u2500".repeat(50)));
152
152
  console.log();
153
- const confirmResult = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, {
153
+ const confirmResult = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
154
154
  type: "confirm",
155
155
  name: "confirm",
156
156
  message: "Save this skill?",
@@ -160,7 +160,7 @@ Output only the raw markdown content, no code fences.`
160
160
  console.log(_chalk2.default.gray("Canceled."));
161
161
  return null;
162
162
  }
163
- const baseDir = storageLevel === "project" ? _path2.default.join(ctx.workspaceRoot, ".autohand", "skills") : _chunkGIZL57FEcjs.AUTOHAND_PATHS.skills;
163
+ const baseDir = storageLevel === "project" ? _path2.default.join(ctx.workspaceRoot, ".autohand", "skills") : _chunkSEKD5FH3cjs.AUTOHAND_PATHS.skills;
164
164
  const skillDir = _path2.default.join(baseDir, name);
165
165
  const skillPath = _path2.default.join(skillDir, "SKILL.md");
166
166
  try {
@@ -169,7 +169,7 @@ Output only the raw markdown content, no code fences.`
169
169
  console.log(_chalk2.default.green(`\u2713 Saved new skill to ${skillPath}`));
170
170
  const success = await skillsRegistry.saveSkill(name, content);
171
171
  if (success) {
172
- const activateResult = await _chunkBRXIEKJ3cjs.safePrompt.call(void 0, {
172
+ const activateResult = await _chunkOLSBBZW6cjs.safePrompt.call(void 0, {
173
173
  type: "confirm",
174
174
  name: "activate",
175
175
  message: "Activate this skill now?",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AUTOHAND_PATHS,
3
3
  PROJECT_DIR_NAME
4
- } from "./chunk-PWLLLJHU.js";
4
+ } from "./chunk-EGFT4PGW.js";
5
5
 
6
6
  // src/memory/MemoryManager.ts
7
7
  import fs from "fs-extra";
@@ -1,6 +1,3 @@
1
- // src/commands/formatters.ts
2
- import chalk from "chalk";
3
-
4
1
  // src/actions/formatters.ts
5
2
  import { spawn } from "child_process";
6
3
  import path from "path";
@@ -282,47 +279,9 @@ async function applyFormatter(name, contents, file, workspaceRoot) {
282
279
  throw new Error(`Formatter "${name}" is not available. Run /formatters to see available formatters.`);
283
280
  }
284
281
 
285
- // src/commands/formatters.ts
286
- var metadata = {
287
- command: "/formatters",
288
- description: "List available code formatters",
289
- implemented: true
290
- };
291
- async function execute() {
292
- console.log();
293
- console.log(chalk.cyan.bold("Available Code Formatters"));
294
- console.log(chalk.gray("\u2500".repeat(60)));
295
- console.log();
296
- const formatters = await listFormatters();
297
- const builtIn = formatters.filter((f) => f.command === "built-in");
298
- const external = formatters.filter((f) => f.command !== "built-in");
299
- console.log(chalk.yellow.bold("Built-in Formatters (always available):"));
300
- console.log();
301
- for (const f of builtIn) {
302
- console.log(` ${chalk.green("\u2713")} ${chalk.white.bold(f.name)}`);
303
- console.log(` ${chalk.gray(f.description)}`);
304
- console.log(` ${chalk.gray("Extensions:")} ${f.extensions.join(", ")}`);
305
- console.log();
306
- }
307
- console.log(chalk.yellow.bold("External Formatters:"));
308
- console.log();
309
- for (const f of external) {
310
- const status = f.installed ? chalk.green("\u2713 installed") : chalk.red("\u2717 not found");
311
- console.log(` ${f.installed ? chalk.green("\u2713") : chalk.red("\u2717")} ${chalk.white.bold(f.name)} ${chalk.gray(`(${f.command})`)} - ${status}`);
312
- console.log(` ${chalk.gray(f.description)}`);
313
- console.log(` ${chalk.gray("Extensions:")} ${f.extensions.join(", ")}`);
314
- console.log();
315
- }
316
- console.log(chalk.gray("\u2500".repeat(60)));
317
- console.log(chalk.gray("Usage: The agent can use format_file action with any installed formatter."));
318
- console.log(chalk.gray("Install missing formatters via your package manager (npm, pip, cargo, etc.)"));
319
- console.log();
320
- }
321
-
322
282
  export {
323
- applyFormatter,
324
- metadata,
325
- execute
283
+ listFormatters,
284
+ applyFormatter
326
285
  };
327
286
  /**
328
287
  * @license
@@ -332,8 +291,3 @@ export {
332
291
  * Code Formatters
333
292
  * Supports prettier, black, rustfmt, gofmt, and more
334
293
  */
335
- /**
336
- * @license
337
- * Copyright 2025 Autohand AI LLC
338
- * SPDX-License-Identifier: Apache-2.0
339
- */
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-QHPFA6OE.js";
4
4
  import {
5
5
  safePrompt
6
- } from "./chunk-YHGTBPEC.js";
6
+ } from "./chunk-6ZCULLCA.js";
7
7
  import {
8
8
  AUTOHAND_PATHS
9
- } from "./chunk-PWLLLJHU.js";
9
+ } from "./chunk-EGFT4PGW.js";
10
10
 
11
11
  // src/commands/skills-new.ts
12
12
  import path from "path";