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,603 @@
1
+ import {
2
+ GitIgnoreParser
3
+ } from "./chunk-EZMINVLU.js";
4
+
5
+ // src/actions/filesystem.ts
6
+ import fs from "fs-extra";
7
+ import path from "path";
8
+ import { spawnSync } from "child_process";
9
+ import { applyPatch as applyUnifiedPatch } from "diff";
10
+ var FILE_LIMITS = {
11
+ /** Maximum file size for read operations (10MB) */
12
+ MAX_READ_SIZE: 10 * 1024 * 1024,
13
+ /** Maximum file size for write operations (50MB) */
14
+ MAX_WRITE_SIZE: 50 * 1024 * 1024,
15
+ /** Maximum number of files in a single directory listing */
16
+ MAX_DIR_ENTRIES: 1e4,
17
+ /** Maximum search results to return */
18
+ MAX_SEARCH_RESULTS: 1e3,
19
+ /** Maximum undo stack size */
20
+ MAX_UNDO_STACK: 100
21
+ };
22
+ var FileActionManager = class {
23
+ constructor(workspaceRoot, additionalDirs = []) {
24
+ this.undoStack = [];
25
+ // Preview mode state
26
+ this.previewMode = false;
27
+ this.pendingChanges = [];
28
+ this.batchId = null;
29
+ this.changeCounter = 0;
30
+ this.onBatchChange = null;
31
+ this.currentToolId = "";
32
+ this.currentToolName = "";
33
+ const resolvedRoot = path.resolve(workspaceRoot);
34
+ try {
35
+ this.workspaceRoot = fs.realpathSync(resolvedRoot);
36
+ } catch {
37
+ this.workspaceRoot = resolvedRoot;
38
+ }
39
+ this.additionalDirs = [];
40
+ for (const dir of additionalDirs) {
41
+ if (!dir || dir.trim() === "") {
42
+ throw new Error("Empty string is not a valid additional directory");
43
+ }
44
+ const resolved = path.resolve(dir);
45
+ let normalized;
46
+ try {
47
+ normalized = fs.realpathSync(resolved);
48
+ } catch {
49
+ normalized = resolved;
50
+ }
51
+ if (normalized.endsWith(path.sep) && normalized.length > 1) {
52
+ normalized = normalized.slice(0, -1);
53
+ }
54
+ if (!this.additionalDirs.includes(normalized)) {
55
+ this.additionalDirs.push(normalized);
56
+ }
57
+ }
58
+ }
59
+ /**
60
+ * Get all allowed directories (workspace root + additional dirs)
61
+ */
62
+ getAllowedDirectories() {
63
+ return [this.workspaceRoot, ...this.additionalDirs];
64
+ }
65
+ /**
66
+ * Add a new additional directory at runtime (for /add-dir command)
67
+ */
68
+ addAdditionalDirectory(dir) {
69
+ if (!dir || dir.trim() === "") {
70
+ throw new Error("Empty string is not a valid additional directory");
71
+ }
72
+ const resolved = path.resolve(dir);
73
+ let normalized;
74
+ try {
75
+ normalized = fs.realpathSync(resolved);
76
+ } catch {
77
+ normalized = resolved;
78
+ }
79
+ if (normalized.endsWith(path.sep) && normalized.length > 1) {
80
+ normalized = normalized.slice(0, -1);
81
+ }
82
+ if (!this.additionalDirs.includes(normalized) && normalized !== this.workspaceRoot) {
83
+ this.additionalDirs.push(normalized);
84
+ }
85
+ }
86
+ /**
87
+ * Enter preview mode - changes will be batched instead of written
88
+ */
89
+ enterPreviewMode(batchId, onBatchChange) {
90
+ this.previewMode = true;
91
+ this.batchId = batchId;
92
+ this.pendingChanges = [];
93
+ this.changeCounter = 0;
94
+ this.onBatchChange = onBatchChange ?? null;
95
+ }
96
+ /**
97
+ * Exit preview mode
98
+ */
99
+ exitPreviewMode() {
100
+ this.previewMode = false;
101
+ this.batchId = null;
102
+ this.onBatchChange = null;
103
+ }
104
+ /**
105
+ * Check if in preview mode
106
+ */
107
+ isInPreviewMode() {
108
+ return this.previewMode;
109
+ }
110
+ /**
111
+ * Get current batch ID
112
+ */
113
+ getBatchId() {
114
+ return this.batchId;
115
+ }
116
+ /**
117
+ * Set current tool context for batched changes
118
+ */
119
+ setCurrentTool(toolId, toolName) {
120
+ this.currentToolId = toolId;
121
+ this.currentToolName = toolName;
122
+ }
123
+ /**
124
+ * Get all pending changes
125
+ */
126
+ getPendingChanges() {
127
+ return [...this.pendingChanges];
128
+ }
129
+ /**
130
+ * Clear pending changes without applying
131
+ */
132
+ clearPendingChanges() {
133
+ this.pendingChanges = [];
134
+ this.changeCounter = 0;
135
+ }
136
+ /**
137
+ * Apply pending changes (selected or all)
138
+ */
139
+ async applyPendingChanges(changeIds) {
140
+ const changesToApply = changeIds ? this.pendingChanges.filter((c) => changeIds.includes(c.id)) : this.pendingChanges;
141
+ const applied = [];
142
+ const errors = [];
143
+ const wasPreviewMode = this.previewMode;
144
+ this.previewMode = false;
145
+ for (const change of changesToApply) {
146
+ try {
147
+ const fullPath = this.resolvePath(change.filePath);
148
+ if (change.changeType === "delete") {
149
+ await fs.remove(fullPath);
150
+ } else {
151
+ await fs.ensureDir(path.dirname(fullPath));
152
+ await fs.writeFile(fullPath, change.proposedContent, "utf8");
153
+ }
154
+ applied.push(change.id);
155
+ } catch (err) {
156
+ errors.push({
157
+ id: change.id,
158
+ error: err instanceof Error ? err.message : String(err)
159
+ });
160
+ }
161
+ }
162
+ this.previewMode = wasPreviewMode;
163
+ const appliedSet = new Set(applied);
164
+ this.pendingChanges = this.pendingChanges.filter((c) => !appliedSet.has(c.id));
165
+ return { applied, errors };
166
+ }
167
+ /**
168
+ * Add a change to the pending batch (internal use)
169
+ */
170
+ addBatchedChange(filePath, changeType, originalContent, proposedContent, description) {
171
+ const change = {
172
+ id: `change_${this.batchId}_${++this.changeCounter}`,
173
+ filePath,
174
+ changeType,
175
+ originalContent,
176
+ proposedContent,
177
+ description,
178
+ toolId: this.currentToolId,
179
+ toolName: this.currentToolName
180
+ };
181
+ this.pendingChanges.push(change);
182
+ if (this.onBatchChange) {
183
+ this.onBatchChange(change);
184
+ }
185
+ }
186
+ get root() {
187
+ return this.workspaceRoot;
188
+ }
189
+ async readFile(target) {
190
+ const filePath = this.resolvePath(target);
191
+ const exists = await fs.pathExists(filePath);
192
+ if (!exists) {
193
+ throw new Error(`File ${target} not found in workspace.`);
194
+ }
195
+ const stats = await fs.stat(filePath);
196
+ if (stats.size > FILE_LIMITS.MAX_READ_SIZE) {
197
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
198
+ const limitMB = (FILE_LIMITS.MAX_READ_SIZE / 1024 / 1024).toFixed(0);
199
+ throw new Error(`File ${target} is too large (${sizeMB}MB). Maximum allowed: ${limitMB}MB`);
200
+ }
201
+ return fs.readFile(filePath, "utf8");
202
+ }
203
+ async writeFile(target, contents, description) {
204
+ const contentSize = Buffer.byteLength(contents, "utf8");
205
+ if (contentSize > FILE_LIMITS.MAX_WRITE_SIZE) {
206
+ const sizeMB = (contentSize / 1024 / 1024).toFixed(2);
207
+ const limitMB = (FILE_LIMITS.MAX_WRITE_SIZE / 1024 / 1024).toFixed(0);
208
+ throw new Error(`Content too large to write (${sizeMB}MB). Maximum allowed: ${limitMB}MB`);
209
+ }
210
+ const filePath = this.resolvePath(target);
211
+ const exists = await fs.pathExists(filePath);
212
+ const previous = exists ? await fs.readFile(filePath, "utf8") : "";
213
+ const changeType = exists ? "modify" : "create";
214
+ if (this.previewMode) {
215
+ this.addBatchedChange(
216
+ target,
217
+ changeType,
218
+ previous,
219
+ contents,
220
+ description ?? `${changeType === "create" ? "Create" : "Modify"} ${target}`
221
+ );
222
+ return;
223
+ }
224
+ await fs.ensureDir(path.dirname(filePath));
225
+ if (this.undoStack.length >= FILE_LIMITS.MAX_UNDO_STACK) {
226
+ this.undoStack.shift();
227
+ }
228
+ this.undoStack.push({ absolutePath: filePath, previousContents: previous });
229
+ await fs.writeFile(filePath, contents, "utf8");
230
+ }
231
+ async appendFile(target, contents) {
232
+ const current = await this.readFileSafe(target);
233
+ await this.writeFile(target, `${current}${contents}`);
234
+ }
235
+ async applyPatch(target, patch, description) {
236
+ const filePath = this.resolvePath(target);
237
+ const current = await this.readFileSafe(target);
238
+ const updated = applyUnifiedPatch(current, patch);
239
+ if (updated === false) {
240
+ throw new Error(`Failed to apply patch to ${target}`);
241
+ }
242
+ if (this.previewMode) {
243
+ this.addBatchedChange(
244
+ target,
245
+ "modify",
246
+ current,
247
+ updated,
248
+ description ?? `Apply patch to ${target}`
249
+ );
250
+ return;
251
+ }
252
+ this.undoStack.push({ absolutePath: filePath, previousContents: current });
253
+ await fs.writeFile(filePath, updated, "utf8");
254
+ }
255
+ async undoLast() {
256
+ const entry = this.undoStack.pop();
257
+ if (!entry) {
258
+ throw new Error("Undo stack is empty");
259
+ }
260
+ await fs.writeFile(entry.absolutePath, entry.previousContents, "utf8");
261
+ }
262
+ search(query, relativePath) {
263
+ const searchDir = this.resolvePath(relativePath ?? ".");
264
+ const rgResult = spawnSync("rg", [
265
+ "--line-number",
266
+ "--color",
267
+ "never",
268
+ "--no-binary",
269
+ // Skip binary files
270
+ "--max-count",
271
+ String(FILE_LIMITS.MAX_SEARCH_RESULTS),
272
+ // Enforce result limit
273
+ "--glob",
274
+ "!*.{exe,dll,so,dylib,bin,o,a,lib,pyc,pyo,class,jar,war,ear}",
275
+ "--glob",
276
+ "!*.{png,jpg,jpeg,gif,bmp,ico,svg,webp,tiff}",
277
+ "--glob",
278
+ "!*.{mp3,mp4,avi,mov,mkv,wav,flac,ogg,webm}",
279
+ "--glob",
280
+ "!*.{pdf,doc,docx,xls,xlsx,ppt,pptx}",
281
+ "--glob",
282
+ "!*.{zip,tar,gz,bz2,7z,rar,dmg,iso}",
283
+ "--glob",
284
+ "!*.{woff,woff2,ttf,eot,otf}",
285
+ "--glob",
286
+ "!**/node_modules/**",
287
+ "--glob",
288
+ "!**/.git/**",
289
+ "--glob",
290
+ "!**/dist/**",
291
+ "--glob",
292
+ "!**/build/**",
293
+ "--glob",
294
+ "!**/binaries/**",
295
+ query,
296
+ "."
297
+ ], {
298
+ cwd: searchDir,
299
+ encoding: "utf8"
300
+ });
301
+ if (rgResult.status === 0 && rgResult.stdout) {
302
+ const results = rgResult.stdout.trim().split("\n").filter(Boolean).slice(0, FILE_LIMITS.MAX_SEARCH_RESULTS).map((line) => {
303
+ const [file, lineNo, ...rest] = line.split(":");
304
+ return {
305
+ file: path.relative(this.workspaceRoot, path.join(searchDir, file)),
306
+ line: Number(lineNo),
307
+ text: rest.join(":")
308
+ };
309
+ });
310
+ return results;
311
+ }
312
+ return this.walkFallback(query, searchDir);
313
+ }
314
+ searchWithContext(query, options = {}) {
315
+ const limit = options.limit ?? 10;
316
+ const contextLines = options.context ?? 2;
317
+ const results = this.search(query, options.relativePath);
318
+ return results.slice(0, limit).map((hit) => this.renderContext(hit, contextLines)).join("\n\n");
319
+ }
320
+ semanticSearch(query, opts = {}) {
321
+ const limit = opts.limit ?? 5;
322
+ const window = opts.window ?? 400;
323
+ const baseDir = this.resolvePath(opts.relativePath ?? ".");
324
+ const ignoreFilter = new GitIgnoreParser(baseDir);
325
+ const results = [];
326
+ const stack = [baseDir];
327
+ const lowerQuery = query.toLowerCase();
328
+ while (stack.length && results.length < limit) {
329
+ const current = stack.pop();
330
+ if (!current) continue;
331
+ const relative = path.relative(this.workspaceRoot, current);
332
+ const normalizedRel = relative.replace(/\\/g, "/");
333
+ if (path.basename(current).startsWith(".") || ignoreFilter.isIgnored(normalizedRel)) {
334
+ continue;
335
+ }
336
+ try {
337
+ const stats = fs.statSync(current);
338
+ if (stats.isDirectory()) {
339
+ const entries = fs.readdirSync(current);
340
+ for (const entry of entries) {
341
+ if (!entry.startsWith(".")) {
342
+ stack.push(path.join(current, entry));
343
+ }
344
+ }
345
+ continue;
346
+ }
347
+ if (!stats.isFile()) {
348
+ continue;
349
+ }
350
+ const ext = path.extname(current).toLowerCase();
351
+ const binaryExtensions = /* @__PURE__ */ new Set([
352
+ ".exe",
353
+ ".dll",
354
+ ".so",
355
+ ".dylib",
356
+ ".bin",
357
+ ".o",
358
+ ".a",
359
+ ".lib",
360
+ ".pyc",
361
+ ".pyo",
362
+ ".class",
363
+ ".jar",
364
+ ".war",
365
+ ".ear",
366
+ ".png",
367
+ ".jpg",
368
+ ".jpeg",
369
+ ".gif",
370
+ ".bmp",
371
+ ".ico",
372
+ ".svg",
373
+ ".webp",
374
+ ".tiff",
375
+ ".mp3",
376
+ ".mp4",
377
+ ".avi",
378
+ ".mov",
379
+ ".mkv",
380
+ ".wav",
381
+ ".flac",
382
+ ".ogg",
383
+ ".webm",
384
+ ".pdf",
385
+ ".doc",
386
+ ".docx",
387
+ ".xls",
388
+ ".xlsx",
389
+ ".ppt",
390
+ ".pptx",
391
+ ".zip",
392
+ ".tar",
393
+ ".gz",
394
+ ".bz2",
395
+ ".7z",
396
+ ".rar",
397
+ ".dmg",
398
+ ".iso",
399
+ ".woff",
400
+ ".woff2",
401
+ ".ttf",
402
+ ".eot",
403
+ ".otf"
404
+ ]);
405
+ if (binaryExtensions.has(ext)) {
406
+ continue;
407
+ }
408
+ if (normalizedRel.includes("node_modules/") || normalizedRel.includes("/dist/") || normalizedRel.includes("/build/") || normalizedRel.includes("/binaries/")) {
409
+ continue;
410
+ }
411
+ const contents = fs.readFileSync(current, "utf8");
412
+ const haystack = contents.toLowerCase();
413
+ const idx = haystack.indexOf(lowerQuery);
414
+ if (idx === -1) continue;
415
+ const start = Math.max(0, idx - window);
416
+ const end = Math.min(contents.length, idx + query.length + window);
417
+ const prefixEllipsis = start > 0 ? "\u2026" : "";
418
+ const suffixEllipsis = end < contents.length ? "\u2026" : "";
419
+ const snippet = `${prefixEllipsis}${contents.slice(start, end)}${suffixEllipsis}`;
420
+ results.push({
421
+ file: normalizedRel || path.basename(current),
422
+ snippet
423
+ });
424
+ } catch {
425
+ continue;
426
+ }
427
+ }
428
+ return results;
429
+ }
430
+ async readFileSafe(target) {
431
+ const filePath = this.resolvePath(target);
432
+ if (!await fs.pathExists(filePath)) {
433
+ return "";
434
+ }
435
+ const stats = await fs.stat(filePath);
436
+ if (stats.size > FILE_LIMITS.MAX_READ_SIZE) {
437
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
438
+ const limitMB = (FILE_LIMITS.MAX_READ_SIZE / 1024 / 1024).toFixed(0);
439
+ throw new Error(`File ${target} is too large (${sizeMB}MB). Maximum allowed: ${limitMB}MB`);
440
+ }
441
+ return fs.readFile(filePath, "utf8");
442
+ }
443
+ resolvePath(target) {
444
+ const normalized = path.isAbsolute(target) ? target : path.join(this.workspaceRoot, target);
445
+ const resolved = path.resolve(normalized);
446
+ let realPath;
447
+ try {
448
+ realPath = fs.realpathSync(resolved);
449
+ } catch {
450
+ const parentDir = path.dirname(resolved);
451
+ try {
452
+ const realParent = fs.realpathSync(parentDir);
453
+ realPath = path.join(realParent, path.basename(resolved));
454
+ } catch {
455
+ realPath = resolved;
456
+ }
457
+ }
458
+ const allAllowedRoots = [this.workspaceRoot, ...this.additionalDirs];
459
+ for (const allowedRoot of allAllowedRoots) {
460
+ let realRoot;
461
+ try {
462
+ realRoot = fs.realpathSync(allowedRoot);
463
+ } catch {
464
+ realRoot = allowedRoot;
465
+ }
466
+ const rootWithSep = realRoot.endsWith(path.sep) ? realRoot : `${realRoot}${path.sep}`;
467
+ if (realPath === realRoot || realPath.startsWith(rootWithSep)) {
468
+ return resolved;
469
+ }
470
+ }
471
+ const allowedDirsList = allAllowedRoots.join(", ");
472
+ throw new Error(`Path ${target} escapes the allowed directories: ${allowedDirsList}`);
473
+ }
474
+ walkFallback(query, baseDir) {
475
+ const hits = [];
476
+ const stack = [baseDir];
477
+ while (stack.length && hits.length < FILE_LIMITS.MAX_SEARCH_RESULTS) {
478
+ const current = stack.pop();
479
+ if (!current) {
480
+ continue;
481
+ }
482
+ const basename = path.basename(current);
483
+ const relative = path.relative(this.workspaceRoot, current);
484
+ if (basename.startsWith(".") || relative.includes("node_modules") || relative.startsWith("dist")) {
485
+ continue;
486
+ }
487
+ try {
488
+ const stats = fs.statSync(current);
489
+ if (stats.isDirectory()) {
490
+ const entries = fs.readdirSync(current);
491
+ for (const entry of entries) {
492
+ if (!entry.startsWith(".")) {
493
+ stack.push(path.join(current, entry));
494
+ }
495
+ }
496
+ } else if (stats.isFile()) {
497
+ const contents = fs.readFileSync(current, "utf8");
498
+ const lines = contents.split(/\r?\n/);
499
+ for (let idx = 0; idx < lines.length && hits.length < FILE_LIMITS.MAX_SEARCH_RESULTS; idx++) {
500
+ const line = lines[idx];
501
+ if (line.includes(query)) {
502
+ hits.push({
503
+ file: path.relative(this.workspaceRoot, current),
504
+ line: idx + 1,
505
+ text: line.trim()
506
+ });
507
+ }
508
+ }
509
+ }
510
+ } catch {
511
+ continue;
512
+ }
513
+ }
514
+ return hits;
515
+ }
516
+ async createDirectory(relativePath) {
517
+ const dirPath = this.resolvePath(relativePath);
518
+ await fs.ensureDir(dirPath);
519
+ }
520
+ async listDirectory(relativePath) {
521
+ const dirPath = this.resolvePath(relativePath);
522
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
523
+ if (entries.length > FILE_LIMITS.MAX_DIR_ENTRIES) {
524
+ throw new Error(`Directory has too many entries (${entries.length}). Maximum allowed: ${FILE_LIMITS.MAX_DIR_ENTRIES}`);
525
+ }
526
+ return entries.map((entry) => ({
527
+ name: entry.name,
528
+ isDirectory: entry.isDirectory()
529
+ }));
530
+ }
531
+ async deletePath(relativePath, description) {
532
+ const fullPath = this.resolvePath(relativePath);
533
+ const exists = await fs.pathExists(fullPath);
534
+ if (!exists) {
535
+ throw new Error(`${relativePath} does not exist.`);
536
+ }
537
+ const stats = await fs.stat(fullPath);
538
+ const previousContents = stats.isFile() ? await fs.readFile(fullPath, "utf8") : "";
539
+ if (this.previewMode) {
540
+ this.addBatchedChange(
541
+ relativePath,
542
+ "delete",
543
+ previousContents,
544
+ "",
545
+ description ?? `Delete ${relativePath}`
546
+ );
547
+ return;
548
+ }
549
+ this.undoStack.push({
550
+ absolutePath: fullPath,
551
+ previousContents
552
+ });
553
+ await fs.remove(fullPath);
554
+ }
555
+ async renamePath(from, to) {
556
+ const fromPath = this.resolvePath(from);
557
+ const toPath = this.resolvePath(to);
558
+ await fs.ensureDir(path.dirname(toPath));
559
+ await fs.move(fromPath, toPath, { overwrite: true });
560
+ }
561
+ async copyPath(from, to) {
562
+ const fromPath = this.resolvePath(from);
563
+ const toPath = this.resolvePath(to);
564
+ await fs.copy(fromPath, toPath, { overwrite: true });
565
+ }
566
+ async replaceInFile(relativePath, searchValue, replaceValue) {
567
+ const current = await this.readFile(relativePath);
568
+ const updated = current.replace(searchValue, replaceValue);
569
+ await this.writeFile(relativePath, updated);
570
+ }
571
+ async formatFile(relativePath, formatter) {
572
+ const current = await this.readFile(relativePath);
573
+ const formatted = await formatter(current, relativePath);
574
+ await this.writeFile(relativePath, formatted);
575
+ }
576
+ renderContext(hit, contextLines) {
577
+ const filePath = this.resolvePath(hit.file);
578
+ if (!fs.existsSync(filePath)) {
579
+ return `${hit.file}:${hit.line}`;
580
+ }
581
+ const contents = fs.readFileSync(filePath, "utf8");
582
+ const lines = contents.split(/\r?\n/);
583
+ const start = Math.max(0, hit.line - 1 - contextLines);
584
+ const end = Math.min(lines.length, hit.line - 1 + contextLines + 1);
585
+ const snippet = lines.slice(start, end).map((line, idx) => {
586
+ const number = start + idx + 1;
587
+ const marker = number === hit.line ? ">" : " ";
588
+ return `${marker} ${number.toString().padStart(4, " ")} | ${line}`;
589
+ });
590
+ return `${hit.file}:${hit.line}
591
+ ${snippet.join("\n")}`;
592
+ }
593
+ };
594
+
595
+ export {
596
+ FILE_LIMITS,
597
+ FileActionManager
598
+ };
599
+ /**
600
+ * @license
601
+ * Copyright 2025 Autohand AI LLC
602
+ * SPDX-License-Identifier: Apache-2.0
603
+ */
@@ -1,13 +1,19 @@
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(); } } 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/automode.ts
6
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
7
7
  var metadata = {
8
8
  command: "/automode",
9
- description: _chunk2U5HFVROcjs.t.call(void 0, "commands.automode.description"),
10
- implemented: true
9
+ description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.automode.description"),
10
+ implemented: true,
11
+ subcommands: [
12
+ { name: "status", description: "Show current loop state" },
13
+ { name: "pause", description: "Pause the active loop" },
14
+ { name: "resume", description: "Resume paused loop" },
15
+ { name: "cancel", description: "Cancel the active loop" }
16
+ ]
11
17
  };
12
18
  function parseArgs(args) {
13
19
  const result = {};
@@ -92,7 +98,7 @@ function handleStatus(manager) {
92
98
  "",
93
99
  ` Session: ${state.sessionId}`,
94
100
  ` Status: ${state.status}`,
95
- ` ${_chunk2U5HFVROcjs.t.call(void 0, "commands.automode.iteration", { current: String(state.currentIteration), max: String(state.maxIterations) })}`,
101
+ ` ${_chunk7BTSG4MEcjs.t.call(void 0, "commands.automode.iteration", { current: String(state.currentIteration), max: String(state.maxIterations) })}`,
96
102
  ` Files created: ${state.filesCreated}`,
97
103
  ` Files modified: ${state.filesModified}`
98
104
  ];
@@ -137,7 +143,7 @@ function showHelp() {
137
143
  ${_chalk2.default.cyan("Auto-Mode: Autonomous Development Loops")}
138
144
 
139
145
  Auto-mode lets autohand work autonomously on tasks through
140
- iterative improvement cycles\u2014inspired by the Ralph technique.
146
+ iterative improvement cycles-inspired by the Ralph technique.
141
147
 
142
148
  ${_chalk2.default.yellow("Usage:")}
143
149
  /automode <prompt> Start auto-mode with a task
@@ -1,16 +1,16 @@
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/memory.ts
6
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
7
7
  async function memory(ctx) {
8
8
  const { project, user } = await ctx.memoryManager.listAll();
9
9
  console.log();
10
- console.log(_chalk2.default.bold.cyan(_chunk2U5HFVROcjs.t.call(void 0, "commands.memory.title")));
10
+ console.log(_chalk2.default.bold.cyan(_chunk7BTSG4MEcjs.t.call(void 0, "commands.memory.title")));
11
11
  console.log(_chalk2.default.gray("\u2500".repeat(50)));
12
12
  if (project.length === 0 && user.length === 0) {
13
- console.log(_chalk2.default.gray(_chunk2U5HFVROcjs.t.call(void 0, "commands.memory.noMemory")));
13
+ console.log(_chalk2.default.gray(_chunk7BTSG4MEcjs.t.call(void 0, "commands.memory.noMemory")));
14
14
  console.log();
15
15
  console.log(_chalk2.default.gray("Tip: Type # followed by text to store a memory."));
16
16
  console.log(_chalk2.default.gray("Example: # Always use TypeScript strict mode"));
@@ -18,7 +18,7 @@ async function memory(ctx) {
18
18
  }
19
19
  if (project.length > 0) {
20
20
  console.log();
21
- console.log(_chalk2.default.bold.yellow(_chunk2U5HFVROcjs.t.call(void 0, "commands.memory.projectMemory")) + _chalk2.default.gray(" (.autohand/memory/)"));
21
+ console.log(_chalk2.default.bold.yellow(_chunk7BTSG4MEcjs.t.call(void 0, "commands.memory.projectMemory")) + _chalk2.default.gray(" (.autohand/memory/)"));
22
22
  console.log();
23
23
  for (const entry of project) {
24
24
  const date = new Date(entry.updatedAt).toLocaleDateString();
@@ -30,7 +30,7 @@ async function memory(ctx) {
30
30
  }
31
31
  if (user.length > 0) {
32
32
  console.log();
33
- console.log(_chalk2.default.bold.magenta(_chunk2U5HFVROcjs.t.call(void 0, "commands.memory.userMemory")) + _chalk2.default.gray(" (~/.autohand/memory/)"));
33
+ console.log(_chalk2.default.bold.magenta(_chunk7BTSG4MEcjs.t.call(void 0, "commands.memory.userMemory")) + _chalk2.default.gray(" (~/.autohand/memory/)"));
34
34
  console.log();
35
35
  for (const entry of user) {
36
36
  const date = new Date(entry.updatedAt).toLocaleDateString();
@@ -46,7 +46,7 @@ async function memory(ctx) {
46
46
  }
47
47
  var metadata = {
48
48
  command: "/memory",
49
- description: _chunk2U5HFVROcjs.t.call(void 0, "commands.memory.description"),
49
+ description: _chunk7BTSG4MEcjs.t.call(void 0, "commands.memory.description"),
50
50
  implemented: true
51
51
  };
52
52
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PROJECT_DIR_NAME
3
- } from "./chunk-PWLLLJHU.js";
3
+ } from "./chunk-EGFT4PGW.js";
4
4
 
5
5
  // src/permissions/localProjectPermissions.ts
6
6
  import fs from "fs-extra";