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