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
@@ -1,19 +1,10 @@
1
- import {
2
- saveConfig
3
- } from "./chunk-ZBIBLOZL.js";
4
- import {
5
- showModal,
6
- showPassword
7
- } from "./chunk-3KBBARKO.js";
8
-
9
- // src/commands/search.ts
10
- import chalk from "chalk";
11
-
12
1
  // src/actions/web.ts
13
2
  import * as https from "https";
14
3
  import * as http from "http";
4
+ import { existsSync } from "fs";
5
+ import { spawn } from "child_process";
15
6
  var globalSearchConfig = {
16
- provider: "duckduckgo"
7
+ provider: "google"
17
8
  };
18
9
  function configureSearch(config) {
19
10
  globalSearchConfig = { ...globalSearchConfig, ...config };
@@ -21,19 +12,176 @@ function configureSearch(config) {
21
12
  function getSearchConfig() {
22
13
  return { ...globalSearchConfig };
23
14
  }
15
+ function isSearchConfigured() {
16
+ const config = getSearchConfig();
17
+ const braveKey = config.braveApiKey ?? process.env.BRAVE_SEARCH_API_KEY;
18
+ const parallelKey = config.parallelApiKey ?? process.env.PARALLEL_API_KEY;
19
+ switch (config.provider) {
20
+ case "brave":
21
+ return !!braveKey;
22
+ case "parallel":
23
+ return !!parallelKey;
24
+ case "google":
25
+ return true;
26
+ // Google scraping doesn't need an API key
27
+ case "duckduckgo":
28
+ default:
29
+ return false;
30
+ }
31
+ }
32
+ function findChromePath() {
33
+ const platform = process.platform;
34
+ const paths = [];
35
+ if (platform === "darwin") {
36
+ paths.push(
37
+ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
38
+ "/Applications/Chromium.app/Contents/MacOS/Chromium",
39
+ "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
40
+ );
41
+ }
42
+ if (platform === "linux") {
43
+ paths.push(
44
+ "/usr/bin/google-chrome",
45
+ "/usr/bin/google-chrome-stable",
46
+ "/usr/bin/chromium",
47
+ "/usr/bin/chromium-browser",
48
+ "/snap/bin/chromium"
49
+ );
50
+ }
51
+ if (platform === "win32") {
52
+ const programFiles = process.env.PROGRAMFILES ?? "C:\\Program Files";
53
+ const programFilesX86 = process.env["PROGRAMFILES(X86)"] ?? "C:\\Program Files (x86)";
54
+ const localAppData = process.env.LOCALAPPDATA ?? "";
55
+ paths.push(
56
+ `${programFiles}\\Google\\Chrome\\Application\\chrome.exe`,
57
+ `${programFilesX86}\\Google\\Chrome\\Application\\chrome.exe`,
58
+ `${localAppData}\\Google\\Chrome\\Application\\chrome.exe`
59
+ );
60
+ }
61
+ for (const p of paths) {
62
+ if (existsSync(p)) {
63
+ return p;
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ function parseGoogleResultsFromDOM(html, maxResults) {
69
+ if (html.includes("unusual traffic") || html.includes("captcha-form") || html.includes("g-recaptcha") || html.includes("sorry/index")) {
70
+ return [];
71
+ }
72
+ if (html.includes("<noscript") && !html.includes('class="g"')) {
73
+ return [];
74
+ }
75
+ const results = [];
76
+ const gBlockRegex = /<div\s+class="g"[^>]*>([\s\S]*?)(?=<div\s+class="g"|<footer|$)/gi;
77
+ let blockMatch;
78
+ while ((blockMatch = gBlockRegex.exec(html)) !== null && results.length < maxResults) {
79
+ const block = blockMatch[1];
80
+ let url = null;
81
+ const urlMatch = block.match(/<a[^>]*href="(\/url\?q=([^&"]+)|https?:\/\/[^"]+)"[^>]*>/i);
82
+ if (urlMatch) {
83
+ if (urlMatch[2]) {
84
+ url = decodeURIComponent(urlMatch[2]);
85
+ } else {
86
+ url = urlMatch[1];
87
+ }
88
+ }
89
+ if (!url || url.includes("google.com") || !url.startsWith("http")) {
90
+ continue;
91
+ }
92
+ const titleMatch = block.match(/<h3[^>]*>([\s\S]*?)<\/h3>/i);
93
+ const title = titleMatch ? htmlToText(titleMatch[1]).trim() : "";
94
+ if (!title) continue;
95
+ let snippet = "";
96
+ const snippetMatch = block.match(
97
+ /class="(?:VwiC3b|st|aCOpRe|s3v9rd)[^"]*"[^>]*>([\s\S]*?)<\/(?:div|span)>/i
98
+ );
99
+ if (snippetMatch) {
100
+ snippet = htmlToText(snippetMatch[1]).trim().slice(0, 300);
101
+ }
102
+ results.push({ title, url, snippet });
103
+ }
104
+ if (results.length === 0) {
105
+ const linkH3Regex = /<a[^>]*href="(\/url\?q=(https?:\/\/[^&"]+)[^"]*|https?:\/\/[^"]+)"[^>]*>[\s\S]*?<h3[^>]*>([\s\S]*?)<\/h3>/gi;
106
+ let match;
107
+ while ((match = linkH3Regex.exec(html)) !== null && results.length < maxResults) {
108
+ const url = match[2] ? decodeURIComponent(match[2]) : match[1];
109
+ const title = htmlToText(match[3]).trim();
110
+ if (!url || !title || url.includes("google.com") || !url.startsWith("http")) continue;
111
+ results.push({ title, url, snippet: "" });
112
+ }
113
+ }
114
+ return results;
115
+ }
116
+ async function chromeHeadlessFetch(url, timeout = 2e4) {
117
+ const chromePath = findChromePath();
118
+ if (!chromePath) {
119
+ throw new Error(
120
+ "Google Chrome or Chromium not found. Install Chrome or configure a different search provider with /search."
121
+ );
122
+ }
123
+ return new Promise((resolve, reject) => {
124
+ const args = [
125
+ "--headless=new",
126
+ "--dump-dom",
127
+ "--no-sandbox",
128
+ "--disable-gpu",
129
+ "--disable-extensions",
130
+ "--disable-dev-shm-usage",
131
+ "--disable-background-networking",
132
+ "--disable-default-apps",
133
+ "--disable-sync",
134
+ "--no-first-run",
135
+ "--mute-audio",
136
+ url
137
+ ];
138
+ let stdout = "";
139
+ let stderr = "";
140
+ let killed = false;
141
+ const proc = spawn(chromePath, args, {
142
+ stdio: ["ignore", "pipe", "pipe"],
143
+ timeout
144
+ });
145
+ proc.stdout.on("data", (data) => {
146
+ stdout += data.toString();
147
+ if (stdout.length > 5e5) {
148
+ killed = true;
149
+ proc.kill("SIGTERM");
150
+ }
151
+ });
152
+ proc.stderr.on("data", (data) => {
153
+ stderr += data.toString();
154
+ });
155
+ proc.on("close", (code) => {
156
+ if (killed) {
157
+ resolve(stdout.slice(0, 5e5));
158
+ return;
159
+ }
160
+ if (code !== 0 && code !== null) {
161
+ reject(new Error(`Chrome exited with code ${code}: ${stderr.slice(0, 500)}`));
162
+ return;
163
+ }
164
+ resolve(stdout);
165
+ });
166
+ proc.on("error", (err) => {
167
+ reject(new Error(`Failed to launch Chrome: ${err.message}`));
168
+ });
169
+ });
170
+ }
24
171
  async function simpleFetch(url, options = {}) {
25
172
  const timeout = options.timeout ?? 1e4;
26
173
  const maxLength = options.maxLength ?? 5e4;
27
174
  return new Promise((resolve, reject) => {
28
175
  const parsedUrl = new URL(url);
29
176
  const protocol = parsedUrl.protocol === "https:" ? https : http;
177
+ const defaultHeaders = {
178
+ "User-Agent": "Autohand-CLI/1.0 (https://autohand.ai)",
179
+ "Accept": "text/html,application/json,text/plain,*/*",
180
+ "Accept-Language": "en-US,en;q=0.9"
181
+ };
30
182
  const req = protocol.get(url, {
31
183
  timeout,
32
- headers: {
33
- "User-Agent": "Autohand-CLI/1.0 (https://autohand.ai)",
34
- "Accept": "text/html,application/json,text/plain,*/*",
35
- "Accept-Language": "en-US,en;q=0.9"
36
- }
184
+ headers: options.headers ?? defaultHeaders
37
185
  }, (res) => {
38
186
  if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
39
187
  simpleFetch(res.headers.location, options).then(resolve).catch(reject);
@@ -97,11 +245,65 @@ async function webSearch(query, options = {}) {
97
245
  );
98
246
  }
99
247
  return parallelSearch(enhancedQuery, parallelApiKey, maxResults);
248
+ case "google":
249
+ return googleSearch(enhancedQuery, maxResults);
100
250
  case "duckduckgo":
101
251
  default:
102
252
  return duckduckgoSearch(enhancedQuery, maxResults);
103
253
  }
104
254
  }
255
+ async function googleSearch(query, maxResults) {
256
+ const searchUrl = `https://www.google.com/search?q=${encodeURIComponent(query)}&num=${maxResults}&hl=en`;
257
+ const chromePath = findChromePath();
258
+ if (chromePath) {
259
+ try {
260
+ const html = await chromeHeadlessFetch(searchUrl, 25e3);
261
+ const results = parseGoogleResultsFromDOM(html, maxResults);
262
+ if (results.length > 0) {
263
+ return results;
264
+ }
265
+ if (html.includes("unusual traffic") || html.includes("captcha") || html.includes("g-recaptcha")) {
266
+ throw new Error(
267
+ "Google blocked this search with a CAPTCHA. Your IP may be rate-limited. Configure Brave Search (free 2K queries/month) with /search command: https://brave.com/search/api/"
268
+ );
269
+ }
270
+ } catch (error) {
271
+ const msg = error instanceof Error ? error.message : String(error);
272
+ if (msg.includes("CAPTCHA") || msg.includes("blocked")) {
273
+ throw error;
274
+ }
275
+ }
276
+ }
277
+ try {
278
+ const html = await simpleFetch(searchUrl, {
279
+ timeout: 15e3,
280
+ maxLength: 2e5,
281
+ headers: {
282
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
283
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
284
+ "Accept-Language": "en-US,en;q=0.9"
285
+ }
286
+ });
287
+ if (html.includes("unusual traffic") || html.includes("captcha") || html.includes("sorry/index")) {
288
+ throw new Error(
289
+ "Google blocked this search request. Configure Brave Search (free 2K queries/month) with /search command: https://brave.com/search/api/"
290
+ );
291
+ }
292
+ const results = parseGoogleResultsFromDOM(html, maxResults);
293
+ if (results.length > 0) {
294
+ return results;
295
+ }
296
+ } catch (error) {
297
+ const msg = error instanceof Error ? error.message : String(error);
298
+ if (msg.includes("blocked") || msg.includes("CAPTCHA")) {
299
+ throw new Error(`Google search failed: ${msg}`);
300
+ }
301
+ }
302
+ const hasChrome = !!chromePath;
303
+ throw new Error(
304
+ `Google search failed: Could not retrieve results${hasChrome ? "" : " (Chrome not installed)"}. Configure Brave Search for reliable results: /search \u2192 Brave (free 2K queries/month at https://brave.com/search/api/)`
305
+ );
306
+ }
105
307
  async function duckduckgoSearch(query, maxResults) {
106
308
  try {
107
309
  const searchUrl = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
@@ -462,117 +664,15 @@ function formatPackageInfo(info) {
462
664
  return lines.join("\n");
463
665
  }
464
666
 
465
- // src/commands/search.ts
466
- async function search(ctx) {
467
- const currentConfig = getSearchConfig();
468
- const config = ctx.config;
469
- console.log(chalk.bold("\nWeb Search Configuration\n"));
470
- console.log(chalk.gray(`Current provider: ${chalk.cyan(currentConfig.provider)}`));
471
- const braveKeySet = !!(currentConfig.braveApiKey || process.env.BRAVE_SEARCH_API_KEY);
472
- const parallelKeySet = !!(currentConfig.parallelApiKey || process.env.PARALLEL_API_KEY);
473
- console.log(chalk.gray(`Brave API key: ${braveKeySet ? chalk.green("configured") : chalk.yellow("not set")}`));
474
- console.log(chalk.gray(`Parallel API key: ${parallelKeySet ? chalk.green("configured") : chalk.yellow("not set")}`));
475
- console.log();
476
- const providerOptions = [
477
- {
478
- label: `DuckDuckGo ${chalk.gray("(no API key required, may be blocked by CAPTCHA)")}`,
479
- value: "duckduckgo"
480
- },
481
- {
482
- label: `Brave Search ${chalk.gray("(requires API key)")} ${braveKeySet ? chalk.green("\u2713") : ""}`,
483
- value: "brave"
484
- },
485
- {
486
- label: `Parallel.ai ${chalk.gray("(requires API key)")} ${parallelKeySet ? chalk.green("\u2713") : ""}`,
487
- value: "parallel"
488
- }
489
- ];
490
- try {
491
- const result = await showModal({
492
- title: "Select search provider:",
493
- options: providerOptions,
494
- initialIndex: providerOptions.findIndex((c) => c.value === currentConfig.provider)
495
- });
496
- if (!result) {
497
- console.log(chalk.gray("Search configuration cancelled."));
498
- return null;
499
- }
500
- const provider = result.value;
501
- let braveApiKey = currentConfig.braveApiKey;
502
- let parallelApiKey = currentConfig.parallelApiKey;
503
- if (provider === "brave" && !braveKeySet) {
504
- console.log(chalk.gray("\nGet your free Brave Search API key at: https://brave.com/search/api/\n"));
505
- const apiKey = await showPassword({
506
- title: "Enter Brave Search API key:"
507
- });
508
- if (apiKey?.trim()) {
509
- braveApiKey = apiKey.trim();
510
- } else {
511
- console.log(chalk.yellow("No API key entered. Brave Search will not work without an API key."));
512
- return null;
513
- }
514
- }
515
- if (provider === "parallel" && !parallelKeySet) {
516
- console.log(chalk.gray("\nGet your Parallel.ai API key at: https://platform.parallel.ai\n"));
517
- const apiKey = await showPassword({
518
- title: "Enter Parallel.ai API key:"
519
- });
520
- if (apiKey?.trim()) {
521
- parallelApiKey = apiKey.trim();
522
- } else {
523
- console.log(chalk.yellow("No API key entered. Parallel.ai Search will not work without an API key."));
524
- return null;
525
- }
526
- }
527
- configureSearch({
528
- provider,
529
- braveApiKey,
530
- parallelApiKey
531
- });
532
- if (config) {
533
- config.search = {
534
- provider,
535
- braveApiKey,
536
- parallelApiKey
537
- };
538
- await saveConfig(config);
539
- console.log(chalk.green(`
540
- \u2713 Search provider set to ${provider} and saved to config`));
541
- } else {
542
- console.log(chalk.green(`
543
- \u2713 Search provider set to ${provider} (session only)`));
544
- }
545
- switch (provider) {
546
- case "duckduckgo":
547
- console.log(chalk.gray("Note: DuckDuckGo may block automated requests with a CAPTCHA."));
548
- break;
549
- case "brave":
550
- console.log(chalk.gray("Brave Search is now active. Free tier allows 2,000 queries/month."));
551
- break;
552
- case "parallel":
553
- console.log(chalk.gray("Parallel.ai Search is now active with deep research capabilities."));
554
- break;
555
- }
556
- return null;
557
- } catch (error) {
558
- throw error;
559
- }
560
- }
561
- var metadata = {
562
- command: "/search",
563
- description: "configure web search provider (brave, duckduckgo, parallel)",
564
- implemented: true
565
- };
566
-
567
667
  export {
568
668
  configureSearch,
669
+ getSearchConfig,
670
+ isSearchConfigured,
569
671
  webSearch,
570
672
  fetchUrl,
571
673
  getPackageInfo,
572
674
  formatSearchResults,
573
- formatPackageInfo,
574
- search,
575
- metadata
675
+ formatPackageInfo
576
676
  };
577
677
  /**
578
678
  * @license
@@ -582,8 +682,3 @@ export {
582
682
  * Web search and URL fetching capabilities for up-to-date information
583
683
  * about packages, dependencies, documentation, and changelogs.
584
684
  */
585
- /**
586
- * @license
587
- * Copyright 2025 Autohand AI LLC
588
- * SPDX-License-Identifier: Apache-2.0
589
- */
@@ -1,16 +1,16 @@
1
- import {
2
- saveConfig
3
- } from "./chunk-ZBIBLOZL.js";
4
1
  import {
5
2
  showModal
6
- } from "./chunk-3KBBARKO.js";
3
+ } from "./chunk-YZXUDM5X.js";
4
+ import {
5
+ saveConfig
6
+ } from "./chunk-P47WPOXN.js";
7
7
  import {
8
8
  LANGUAGE_DISPLAY_NAMES,
9
9
  SUPPORTED_LOCALES,
10
10
  changeLanguage,
11
11
  getCurrentLocale,
12
12
  t
13
- } from "./chunk-NMWEDN4Z.js";
13
+ } from "./chunk-APIXPPMT.js";
14
14
 
15
15
  // src/commands/language.ts
16
16
  import chalk from "chalk";
@@ -26,7 +26,9 @@ var AUTOHAND_PATHS = {
26
26
  /** Plan files for plan mode */
27
27
  plans: _path2.default.join(AUTOHAND_HOME, "plans"),
28
28
  /** MCP community registry cache */
29
- mcpCache: _path2.default.join(AUTOHAND_HOME, "community-mcp", "cache")
29
+ mcpCache: _path2.default.join(AUTOHAND_HOME, "community-mcp", "cache"),
30
+ /** Auto-report data */
31
+ reporting: _path2.default.join(AUTOHAND_HOME, "reporting")
30
32
  };
31
33
  var AUTOHAND_FILES = {
32
34
  /** Main config file */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  showModal
3
- } from "./chunk-3KBBARKO.js";
3
+ } from "./chunk-YZXUDM5X.js";
4
4
 
5
5
  // src/commands/completion.ts
6
6
  import chalk2 from "chalk";
@@ -28,7 +28,17 @@ var DEFAULT_CONFIG = {
28
28
  "/help",
29
29
  "/formatters",
30
30
  "/lint",
31
- "/export"
31
+ "/export",
32
+ "/mcp",
33
+ "/about",
34
+ "/status",
35
+ "/hooks",
36
+ "/theme",
37
+ "/completion",
38
+ "/share",
39
+ "/plan",
40
+ "/search",
41
+ "/skills"
32
42
  ],
33
43
  options: [
34
44
  { flag: "--prompt", description: "Run a single instruction" },
@@ -54,7 +64,7 @@ function generateBashCompletion(config = DEFAULT_CONFIG) {
54
64
  # Or save to /etc/bash_completion.d/autohand
55
65
 
56
66
  _autohand_completions() {
57
- local cur prev opts slash_commands
67
+ local cur prev opts slash_commands subcommands mcp_subcommands
58
68
  COMPREPLY=()
59
69
  cur="\${COMP_WORDS[COMP_CWORD]}"
60
70
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
@@ -62,9 +72,21 @@ _autohand_completions() {
62
72
  # Command line options
63
73
  opts="${opts}"
64
74
 
75
+ # Subcommands
76
+ subcommands="resume login logout mcp sessions init completion"
77
+
78
+ # MCP subcommands
79
+ mcp_subcommands="add remove list install"
80
+
65
81
  # Slash commands (for interactive mode)
66
82
  slash_commands="${slashCmds}"
67
83
 
84
+ # Complete mcp subcommands
85
+ if [[ "\${COMP_WORDS[1]}" == "mcp" ]] && [[ \${COMP_CWORD} -eq 2 ]]; then
86
+ COMPREPLY=( $(compgen -W "\${mcp_subcommands}" -- \${cur}) )
87
+ return 0
88
+ fi
89
+
68
90
  # Complete options
69
91
  if [[ \${cur} == -* ]]; then
70
92
  COMPREPLY=( $(compgen -W "\${opts}" -- \${cur}) )
@@ -84,12 +106,17 @@ _autohand_completions() {
84
106
  return 0
85
107
  ;;
86
108
  --model)
87
- # Could be extended to fetch available models
88
109
  COMPREPLY=()
89
110
  return 0
90
111
  ;;
91
112
  esac
92
113
 
114
+ # Complete subcommands at position 1
115
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
116
+ COMPREPLY=( $(compgen -W "\${subcommands}" -- \${cur}) )
117
+ return 0
118
+ fi
119
+
93
120
  # Default: complete with files
94
121
  COMPREPLY=( $(compgen -f -- \${cur}) )
95
122
  return 0
@@ -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 _chunkXBUMKEFNcjs = require('./chunk-XBUMKEFN.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);
@@ -28,7 +28,17 @@ var DEFAULT_CONFIG = {
28
28
  "/help",
29
29
  "/formatters",
30
30
  "/lint",
31
- "/export"
31
+ "/export",
32
+ "/mcp",
33
+ "/about",
34
+ "/status",
35
+ "/hooks",
36
+ "/theme",
37
+ "/completion",
38
+ "/share",
39
+ "/plan",
40
+ "/search",
41
+ "/skills"
32
42
  ],
33
43
  options: [
34
44
  { flag: "--prompt", description: "Run a single instruction" },
@@ -54,7 +64,7 @@ function generateBashCompletion(config = DEFAULT_CONFIG) {
54
64
  # Or save to /etc/bash_completion.d/autohand
55
65
 
56
66
  _autohand_completions() {
57
- local cur prev opts slash_commands
67
+ local cur prev opts slash_commands subcommands mcp_subcommands
58
68
  COMPREPLY=()
59
69
  cur="\${COMP_WORDS[COMP_CWORD]}"
60
70
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
@@ -62,9 +72,21 @@ _autohand_completions() {
62
72
  # Command line options
63
73
  opts="${opts}"
64
74
 
75
+ # Subcommands
76
+ subcommands="resume login logout mcp sessions init completion"
77
+
78
+ # MCP subcommands
79
+ mcp_subcommands="add remove list install"
80
+
65
81
  # Slash commands (for interactive mode)
66
82
  slash_commands="${slashCmds}"
67
83
 
84
+ # Complete mcp subcommands
85
+ if [[ "\${COMP_WORDS[1]}" == "mcp" ]] && [[ \${COMP_CWORD} -eq 2 ]]; then
86
+ COMPREPLY=( $(compgen -W "\${mcp_subcommands}" -- \${cur}) )
87
+ return 0
88
+ fi
89
+
68
90
  # Complete options
69
91
  if [[ \${cur} == -* ]]; then
70
92
  COMPREPLY=( $(compgen -W "\${opts}" -- \${cur}) )
@@ -84,12 +106,17 @@ _autohand_completions() {
84
106
  return 0
85
107
  ;;
86
108
  --model)
87
- # Could be extended to fetch available models
88
109
  COMPREPLY=()
89
110
  return 0
90
111
  ;;
91
112
  esac
92
113
 
114
+ # Complete subcommands at position 1
115
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
116
+ COMPREPLY=( $(compgen -W "\${subcommands}" -- \${cur}) )
117
+ return 0
118
+ fi
119
+
93
120
  # Default: complete with files
94
121
  COMPREPLY=( $(compgen -f -- \${cur}) )
95
122
  return 0
@@ -284,7 +311,7 @@ async function execute(args) {
284
311
  { label: "Zsh", value: "zsh" },
285
312
  { label: "Fish", value: "fish" }
286
313
  ];
287
- const shellResult = await _chunkXBUMKEFNcjs.showModal.call(void 0, {
314
+ const shellResult = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
288
315
  title: "Select your shell:",
289
316
  options: shellOptions,
290
317
  initialIndex: shellOptions.findIndex((o) => o.value === (detected || "bash"))
@@ -300,7 +327,7 @@ async function execute(args) {
300
327
  { label: "Install completion to default location", value: "install" },
301
328
  { label: "Show installation instructions", value: "instructions" }
302
329
  ];
303
- const actionResult = await _chunkXBUMKEFNcjs.showModal.call(void 0, {
330
+ const actionResult = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
304
331
  title: "What would you like to do?",
305
332
  options: actionOptions
306
333
  });
@@ -2,7 +2,7 @@ import {
2
2
  getCurrentLocale,
3
3
  onLanguageChange,
4
4
  t
5
- } from "./chunk-NMWEDN4Z.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,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk2U5HFVROcjs = require('./chunk-2U5HFVRO.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: _chunk2U5HFVROcjs.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.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",