autohand-cli 0.7.13 → 0.8.0

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 (394) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/AgentRegistry-7LDL5HJH.js +10 -0
  3. package/dist/AgentRegistry-NQCLWABO.cjs +10 -0
  4. package/dist/{AutomodeManager-NGRAO2MH.js → AutomodeManager-MWLKGPZK.js} +2 -0
  5. package/dist/{AutomodeManager-ZKQMBM4T.cjs → AutomodeManager-NYIZNODK.cjs} +3 -1
  6. package/dist/CommunitySkillsCache-6QPRMTJO.js +8 -0
  7. package/dist/CommunitySkillsCache-GTQMOCCO.cjs +8 -0
  8. package/dist/{GitHubRegistryFetcher-US2JJID4.js → GitHubRegistryFetcher-6JQ5JEDZ.js} +1 -0
  9. package/dist/{GitHubRegistryFetcher-K744NNAJ.cjs → GitHubRegistryFetcher-S7QFUEKV.cjs} +1 -0
  10. package/dist/HookManager-Q2KYMCP4.cjs +7 -0
  11. package/dist/HookManager-TTP4Y6DC.js +7 -0
  12. package/dist/ImportWizard-IWVPRKFF.cjs +466 -0
  13. package/dist/ImportWizard-KASGQPUY.js +466 -0
  14. package/dist/McpClientManager-7RM6YT35.js +8 -0
  15. package/dist/McpClientManager-RKD7C6OY.cjs +8 -0
  16. package/dist/MemoryManager-GUNLRP5S.js +8 -0
  17. package/dist/MemoryManager-TNSGKDKX.cjs +8 -0
  18. package/dist/PermissionManager-2GO5PQ6M.cjs +11 -0
  19. package/dist/{PermissionManager-U5OMGR3L.js → PermissionManager-K7UWSNB6.js} +4 -3
  20. package/dist/ProjectProfiler-UMJJSOCE.js +194 -0
  21. package/dist/ProjectProfiler-ZDWR2ODG.cjs +194 -0
  22. package/dist/ProviderFactory-EFFQBRQ6.cjs +9 -0
  23. package/dist/ProviderFactory-S3LWTQQC.js +9 -0
  24. package/dist/SessionManager-FEUAU3ZJ.cjs +10 -0
  25. package/dist/SessionManager-IKWAK2PI.js +10 -0
  26. package/dist/SkillsRegistry-GDEGFP6O.cjs +9 -0
  27. package/dist/SkillsRegistry-SI5RUHQ4.js +9 -0
  28. package/dist/SubAgent-I75HELJG.js +11 -0
  29. package/dist/SubAgent-K3QP6WHC.cjs +11 -0
  30. package/dist/{SyncApiClient-AYXYSOJM.js → SyncApiClient-LVIO4C2S.js} +1 -0
  31. package/dist/{SyncApiClient-ID3KXEMA.cjs → SyncApiClient-ZNYMT36M.cjs} +1 -0
  32. package/dist/about-B2AGTV6N.js +12 -0
  33. package/dist/about-V2HWEZZO.cjs +12 -0
  34. package/dist/actionExecutor-6XCVL2SJ.js +19 -0
  35. package/dist/actionExecutor-YRUJNB5G.cjs +19 -0
  36. package/dist/add-dir-7FBQ5IFV.js +10 -0
  37. package/dist/add-dir-ALBSYRV3.cjs +10 -0
  38. package/dist/agents/builtin/code-cleaner.md +14 -0
  39. package/dist/agents/builtin/docs-writer.md +14 -0
  40. package/dist/agents/builtin/researcher.md +14 -0
  41. package/dist/agents/builtin/reviewer.md +15 -0
  42. package/dist/agents/builtin/tester.md +15 -0
  43. package/dist/agents/builtin/todo-resolver.md +15 -0
  44. package/dist/agents-FCGEWTA3.cjs +12 -0
  45. package/dist/agents-FENGUSJD.js +12 -0
  46. package/dist/agents-new-FU3O55CO.js +14 -0
  47. package/dist/agents-new-SAFTJ7TK.cjs +14 -0
  48. package/dist/assets/icon.png +0 -0
  49. package/dist/automode-CYLGXQ4A.cjs +10 -0
  50. package/dist/automode-O7G3DUYN.js +10 -0
  51. package/dist/{cc-UTTLESTY.js → cc-7LEIJ3KF.js} +1 -0
  52. package/dist/{cc-2W6M7J45.cjs → cc-Q5MM4AWC.cjs} +1 -0
  53. package/dist/{chunk-N4ZSG6JJ.cjs → chunk-22D2CNTP.cjs} +2 -2
  54. package/dist/chunk-24QIWILL.js +51 -0
  55. package/dist/{chunk-MYNHJHDZ.js → chunk-2AA5MFES.js} +1 -1
  56. package/dist/{chunk-2JMWWYMZ.js → chunk-2ELK5DMH.js} +44 -10
  57. package/dist/chunk-2JYIR3EC.cjs +1176 -0
  58. package/dist/{chunk-RRZFJIIB.js → chunk-2RIAPTET.js} +90 -66
  59. package/dist/{chunk-TSY7JHIV.cjs → chunk-33A755XB.cjs} +2 -2
  60. package/dist/chunk-3OEDGIFW.js +42 -0
  61. package/dist/{chunk-P5VDZ6PV.js → chunk-3PDTTAKJ.js} +1 -1
  62. package/dist/{chunk-ULMPJUJW.cjs → chunk-3WCOFXQS.cjs} +23 -23
  63. package/dist/{chunk-ONAY5SD2.cjs → chunk-4HKTYHNL.cjs} +22 -16
  64. package/dist/{chunk-Z4J4W6YQ.cjs → chunk-4JNNTOGF.cjs} +2 -48
  65. package/dist/chunk-55B6SBHK.js +260 -0
  66. package/dist/chunk-5DDDUUBM.cjs +29 -0
  67. package/dist/{chunk-TQB222ZB.js → chunk-5EIEWVYX.js} +2 -2
  68. package/dist/{chunk-SMHY3Q7B.cjs → chunk-5GGX6WNY.cjs} +54 -22
  69. package/dist/{chunk-3S4DEIJP.cjs → chunk-5IXII4HX.cjs} +2 -2
  70. package/dist/{chunk-3KBBARKO.js → chunk-5OBNULPU.js} +85 -28
  71. package/dist/{chunk-VVBBEYTH.cjs → chunk-5YJG6H6P.cjs} +10 -10
  72. package/dist/{chunk-PKOAXQKW.cjs → chunk-63WXWFDI.cjs} +11 -11
  73. package/dist/{chunk-DSKVMFRM.cjs → chunk-643VRA5S.cjs} +12 -4
  74. package/dist/{chunk-L5ZFPWHY.js → chunk-6OYHF6MF.js} +12 -4
  75. package/dist/chunk-7GDVDSNI.js +1176 -0
  76. package/dist/chunk-7QEE6SW6.cjs +260 -0
  77. package/dist/chunk-7UOUW76C.js +603 -0
  78. package/dist/{chunk-SZP4ULM5.cjs → chunk-AFN7LH5N.cjs} +17 -17
  79. package/dist/chunk-AHD5JJ6F.cjs +78 -0
  80. package/dist/{chunk-WLTVF77A.js → chunk-ALYU6VTM.js} +1 -1
  81. package/dist/{chunk-BRXIEKJ3.cjs → chunk-AMT2UZBI.cjs} +5 -5
  82. package/dist/{chunk-SFNT5DYE.cjs → chunk-BT35E7NE.cjs} +4 -4
  83. package/dist/{chunk-NUHYCFHW.cjs → chunk-BVKXEQVG.cjs} +54 -65
  84. package/dist/chunk-CDMGQR4L.cjs +4470 -0
  85. package/dist/chunk-CNBKZEX5.cjs +109 -0
  86. package/dist/{chunk-GD4AFYJ3.js → chunk-CVVEYUFR.js} +1 -1
  87. package/dist/chunk-CWALFEGU.js +58 -0
  88. package/dist/{chunk-MTALRU7R.cjs → chunk-D3YCFT5O.cjs} +3 -3
  89. package/dist/{chunk-METF3I6W.cjs → chunk-D6VG7B5X.cjs} +10 -4
  90. package/dist/{chunk-TOTDRAWG.js → chunk-DH7DKCUL.js} +1 -1
  91. package/dist/{chunk-RFNCTE4V.cjs → chunk-DLG43ZJ7.cjs} +2 -2
  92. package/dist/chunk-DN573ME7.cjs +1675 -0
  93. package/dist/{chunk-63BXZQZW.js → chunk-E23CMMNJ.js} +20 -4
  94. package/dist/{chunk-4HA7IHLJ.cjs → chunk-EEGK5DYE.cjs} +32 -16
  95. package/dist/{chunk-DTFR3WD6.js → chunk-EF4LKUQY.js} +1 -1
  96. package/dist/{chunk-PWLLLJHU.js → chunk-EGFT4PGW.js} +3 -1
  97. package/dist/{chunk-S47TCZDL.js → chunk-EIU7K7CM.js} +7 -7
  98. package/dist/{chunk-BISFR6ZL.js → chunk-EPNYD4NV.js} +1 -1
  99. package/dist/chunk-EZMINVLU.js +123 -0
  100. package/dist/{chunk-LYMTYC67.js → chunk-F23EVNJU.js} +2 -2
  101. package/dist/chunk-FHK7UDOJ.cjs +42 -0
  102. package/dist/chunk-FMB3TSWP.cjs +218 -0
  103. package/dist/{chunk-XBUMKEFN.cjs → chunk-FPAE6ORV.cjs} +91 -34
  104. package/dist/{chunk-DEAEO7RI.js → chunk-FYZ67R4R.js} +1 -1
  105. package/dist/{chunk-6SHHB2VD.js → chunk-G7SZIOHF.js} +2 -2
  106. package/dist/{chunk-FB6JWNJS.js → chunk-GBHDROGL.js} +54 -65
  107. package/dist/chunk-GCHELXLO.js +131 -0
  108. package/dist/{chunk-7YX3OD4B.js → chunk-GHSBZ3YB.js} +2 -2
  109. package/dist/chunk-GLBAF54O.js +218 -0
  110. package/dist/chunk-GO3N7LRW.cjs +131 -0
  111. package/dist/{chunk-KW4SQWBU.cjs → chunk-H6ZGZEBG.cjs} +57 -23
  112. package/dist/{chunk-CTJILRNQ.cjs → chunk-HA7OAVOB.cjs} +15 -15
  113. package/dist/{chunk-NMWEDN4Z.js → chunk-HFMLWH7B.js} +108 -0
  114. package/dist/{chunk-D2XFTCRP.js → chunk-HQ7YZKXE.js} +1 -1
  115. package/dist/{chunk-L42HTMMR.cjs → chunk-HTLINWX6.cjs} +2 -2
  116. package/dist/chunk-IETRBBMP.cjs +603 -0
  117. package/dist/chunk-IQ5RXU6O.js +1675 -0
  118. package/dist/{chunk-B5HIJJ4B.js → chunk-ITB3FS72.js} +11 -5
  119. package/dist/{chunk-B6EBHCK2.cjs → chunk-IUMJYXBX.cjs} +6 -6
  120. package/dist/{chunk-ZBIBLOZL.js → chunk-IVM5F2AE.js} +500 -317
  121. package/dist/{chunk-GRSVQ5YZ.js → chunk-IWVQ2EW3.js} +44 -12
  122. package/dist/chunk-JJWCQLOU.cjs +59 -0
  123. package/dist/{chunk-KXAAEROY.js → chunk-JMFDD7IZ.js} +2 -2
  124. package/dist/chunk-JSBRDJBE.js +30 -0
  125. package/dist/chunk-LJFUXC56.cjs +123 -0
  126. package/dist/chunk-LL3PQ2U6.js +4470 -0
  127. package/dist/chunk-LQ4LQQG6.cjs +27 -0
  128. package/dist/chunk-LQGVEP3E.js +109 -0
  129. package/dist/{chunk-425MT6Y5.cjs → chunk-LVE6Z5SL.cjs} +9 -9
  130. package/dist/{chunk-XL77XYI2.cjs → chunk-LXDOQTXQ.cjs} +4 -4
  131. package/dist/{chunk-BG4OQUKP.js → chunk-MBBY4ZIK.js} +1 -1
  132. package/dist/{chunk-XQLWN4Y3.cjs → chunk-MGMXR67S.cjs} +9 -9
  133. package/dist/{chunk-FHUNAB2K.cjs → chunk-MHLE6AVN.cjs} +33 -6
  134. package/dist/chunk-MHSDHPC4.cjs +58 -0
  135. package/dist/chunk-MUBW5UDH.cjs +55 -0
  136. package/dist/{chunk-R3H25HQZ.cjs → chunk-MVWOQBCC.cjs} +11 -11
  137. package/dist/chunk-N254NRHT.cjs +30 -0
  138. package/dist/{chunk-SRLY7K6J.js → chunk-OBLIITWJ.js} +2 -2
  139. package/dist/{chunk-SIGWDEPS.cjs → chunk-OI7OIGNB.cjs} +10 -10
  140. package/dist/{chunk-V7YTCNMN.cjs → chunk-OPR34VHL.cjs} +5 -5
  141. package/dist/chunk-OUHQZFN4.js +78 -0
  142. package/dist/{chunk-HMRDNRTH.js → chunk-PEC45WYS.js} +2 -2
  143. package/dist/{chunk-OSUWEUZE.js → chunk-PUOE5BCN.js} +1 -1
  144. package/dist/chunk-Q2VYSHWU.js +59 -0
  145. package/dist/chunk-Q3MJ6CYS.cjs +193 -0
  146. package/dist/{chunk-B2K7JZRW.js → chunk-Q5RN7RXC.js} +2 -2
  147. package/dist/{chunk-43XS26AQ.cjs → chunk-Q5RX3XGB.cjs} +4 -4
  148. package/dist/chunk-QCLYBIMM.cjs +51 -0
  149. package/dist/chunk-QMAKTSZB.cjs +48 -0
  150. package/dist/chunk-QT2VZNFA.js +29 -0
  151. package/dist/{chunk-3AWZFG5G.js → chunk-QUFAULH7.js} +10 -4
  152. package/dist/{chunk-RJP3SZ7Q.cjs → chunk-RD5XAJR2.cjs} +492 -309
  153. package/dist/chunk-RGR6ME5J.cjs +844 -0
  154. package/dist/{chunk-EOGKE5GD.cjs → chunk-RKJTGGMU.cjs} +221 -126
  155. package/dist/{chunk-NMGF2KUN.js → chunk-RO46YAPI.js} +1 -1
  156. package/dist/{chunk-2U5HFVRO.cjs → chunk-RVUQKMXX.cjs} +108 -0
  157. package/dist/chunk-S52YW5ZQ.js +844 -0
  158. package/dist/{chunk-ZLOTP56B.cjs → chunk-S6BDWWUG.cjs} +5 -5
  159. package/dist/{chunk-6DWXHBAY.js → chunk-SAHBLB3E.js} +222 -127
  160. package/dist/chunk-SALLHB2I.js +27 -0
  161. package/dist/{chunk-GIZL57FE.cjs → chunk-SEKD5FH3.cjs} +3 -1
  162. package/dist/{chunk-DZHR34H6.cjs → chunk-SHFA46CS.cjs} +8 -8
  163. package/dist/{chunk-MILZEEUV.js → chunk-SIHRD34Z.js} +2 -2
  164. package/dist/{chunk-BPTBKO7D.js → chunk-SO3QQJAZ.js} +216 -36
  165. package/dist/{chunk-HSPWX4Z2.cjs → chunk-SRQW3B6J.cjs} +223 -43
  166. package/dist/{chunk-MY3TZER2.js → chunk-T63AMO6H.js} +1 -1
  167. package/dist/{chunk-X765A7J5.js → chunk-TERCG25S.js} +1 -1
  168. package/dist/{chunk-WOGJXDBU.cjs → chunk-TFSRRZWP.cjs} +3 -3
  169. package/dist/{chunk-RRZS5A53.js → chunk-TQHOVHRS.js} +1 -1
  170. package/dist/{chunk-JHOQABEF.js → chunk-TWEKBHUO.js} +5 -5
  171. package/dist/chunk-U3WDY42C.cjs +42 -0
  172. package/dist/{chunk-CKN2BLHK.cjs → chunk-UBS46QL3.cjs} +2 -2
  173. package/dist/{chunk-H3GBSPK5.js → chunk-UGTFKUW4.js} +14 -6
  174. package/dist/chunk-UJTCTTUF.cjs +271 -0
  175. package/dist/{chunk-RUZB43HU.cjs → chunk-UTI6ZQEY.cjs} +22 -14
  176. package/dist/{chunk-OLG7LZBD.js → chunk-VG34MG2U.js} +1 -1
  177. package/dist/{chunk-ZKZRFH37.cjs → chunk-VJYPP6PP.cjs} +6 -6
  178. package/dist/{chunk-YHGTBPEC.js → chunk-VNQ5GL34.js} +1 -1
  179. package/dist/{chunk-XDVG3NM4.js → chunk-W3X6PAC7.js} +2 -48
  180. package/dist/{chunk-FK2DVRPJ.js → chunk-WFUUXADU.js} +2 -2
  181. package/dist/{chunk-R5OO7MEB.cjs → chunk-WGTJOIB7.cjs} +22 -22
  182. package/dist/{chunk-VHBUKGRG.js → chunk-WJDPVW7T.js} +4 -4
  183. package/dist/chunk-WNUVPKBW.js +42 -0
  184. package/dist/{chunk-EV53SLSB.cjs → chunk-WPVWQSL7.cjs} +4 -4
  185. package/dist/chunk-WQ3VJXZB.js +118 -0
  186. package/dist/chunk-WTNBX2JO.js +271 -0
  187. package/dist/chunk-XAV24VYN.js +48 -0
  188. package/dist/chunk-XDLH4EDL.cjs +118 -0
  189. package/dist/{chunk-U7CZFKPL.cjs → chunk-XMNHZRUB.cjs} +2 -2
  190. package/dist/chunk-XUDSXGGV.cjs +1822 -0
  191. package/dist/{chunk-YESQ7XR3.js → chunk-XWASJ2QL.js} +4 -4
  192. package/dist/chunk-Y2SXUCNJ.js +55 -0
  193. package/dist/{chunk-AIH6GUGB.cjs → chunk-YDCDGTK6.cjs} +5 -5
  194. package/dist/chunk-YFXTE422.cjs +92 -0
  195. package/dist/chunk-YKS55CMT.js +1822 -0
  196. package/dist/{chunk-KC5FPUOF.cjs → chunk-YRLYSQEQ.cjs} +2 -2
  197. package/dist/{chunk-JWPI6O5Z.js → chunk-YS34SVY5.js} +31 -4
  198. package/dist/{chunk-FEVHH525.cjs → chunk-YYB42DCU.cjs} +4 -4
  199. package/dist/chunk-ZK6HOR62.js +92 -0
  200. package/dist/{chunk-BHV7CBNT.js → chunk-ZSE42BRE.js} +1 -1
  201. package/dist/clear-ES5WCZRF.cjs +12 -0
  202. package/dist/clear-J7XS6T5W.js +12 -0
  203. package/dist/completion-XQTDTJLK.cjs +14 -0
  204. package/dist/completion-XR6ZONJQ.js +14 -0
  205. package/dist/config-2TB3A55J.js +18 -0
  206. package/dist/config-RDMVIV26.cjs +18 -0
  207. package/dist/constants-6CPCJ3DY.cjs +21 -0
  208. package/dist/{constants-V6J54N3X.js → constants-UFM5B232.js} +2 -1
  209. package/dist/{defaultHooks-WLMRQUXG.cjs → defaultHooks-RCXPHF4M.cjs} +3 -1
  210. package/dist/{defaultHooks-R56VYG7I.js → defaultHooks-RDRMER3Z.js} +2 -0
  211. package/dist/export-EWAYH353.cjs +12 -0
  212. package/dist/export-ZWA6XGVS.js +12 -0
  213. package/dist/extractSessionMemories-SDW2MVBQ.cjs +7 -0
  214. package/dist/extractSessionMemories-V7K42ZHW.js +7 -0
  215. package/dist/feedback-5RV6ODW4.js +15 -0
  216. package/dist/feedback-ZPITHFJR.cjs +15 -0
  217. package/dist/filesystem-3SGCW2BF.js +10 -0
  218. package/dist/filesystem-MCFXJQ6R.cjs +10 -0
  219. package/dist/formatters-6K7QVWQL.cjs +10 -0
  220. package/dist/formatters-DQHO5I36.js +10 -0
  221. package/dist/{help-RU24K66K.js → help-I5GRCA3S.js} +3 -2
  222. package/dist/help-X52PZM24.cjs +12 -0
  223. package/dist/history-4WIOZ4TW.cjs +14 -0
  224. package/dist/{history-AV4XBFRK.js → history-OCHJBJW7.js} +3 -2
  225. package/dist/hooks-IAVTXUAI.cjs +13 -0
  226. package/dist/hooks-YF6HL23E.js +13 -0
  227. package/dist/{i18n-BSAPXM56.js → i18n-KHBXUALK.js} +2 -1
  228. package/dist/i18n-MVQIAZWS.cjs +33 -0
  229. package/dist/ide-4R3BEBIS.js +12 -0
  230. package/dist/ide-C7WSPQTR.cjs +12 -0
  231. package/dist/import-2ICSKDL7.cjs +10 -0
  232. package/dist/import-EAAX5HJR.js +170 -0
  233. package/dist/import-KRVVYJCZ.js +10 -0
  234. package/dist/import-PQJPNXA4.cjs +170 -0
  235. package/dist/index.cjs +8671 -12373
  236. package/dist/index.js +8739 -12441
  237. package/dist/init-6K3NRDOM.js +10 -0
  238. package/dist/init-AOUGGITS.cjs +10 -0
  239. package/dist/language-Q7YFDVSR.cjs +18 -0
  240. package/dist/language-Y6ZC7LET.js +18 -0
  241. package/dist/{lint-44UQJ673.cjs → lint-D5UOJWIK.cjs} +1 -0
  242. package/dist/{lint-TA2ZHVLM.js → lint-NJPZWVN2.js} +1 -0
  243. package/dist/{localProjectPermissions-WQYMGI42.js → localProjectPermissions-N77HA3XK.js} +3 -2
  244. package/dist/localProjectPermissions-UFSMNTBJ.cjs +18 -0
  245. package/dist/login-6OAH2NEH.cjs +20 -0
  246. package/dist/login-DL3377MD.js +20 -0
  247. package/dist/logout-ELQBUMTU.cjs +18 -0
  248. package/dist/logout-TLYA5W45.js +18 -0
  249. package/dist/mcp-BHOIBYUB.js +18 -0
  250. package/dist/mcp-TNUEXR5T.cjs +18 -0
  251. package/dist/{mcp-install-2KVKRAMQ.cjs → mcp-install-GROTZHAW.cjs} +26 -14
  252. package/dist/{mcp-install-77UXRN6R.js → mcp-install-KSADVDBE.js} +21 -9
  253. package/dist/memory-6DRFA43C.js +10 -0
  254. package/dist/memory-IORZE6WF.cjs +10 -0
  255. package/dist/message-JUBOK2VU.js +9 -0
  256. package/dist/message-ZJ5AYAMT.cjs +9 -0
  257. package/dist/model-CJPSPGIC.cjs +10 -0
  258. package/dist/model-MQXC56ES.js +10 -0
  259. package/dist/new-7D2B7IWM.cjs +12 -0
  260. package/dist/new-7VYM36RC.js +12 -0
  261. package/dist/{patch-BAAQIYSW.js → patch-5F6VBIT3.js} +2 -0
  262. package/dist/{patch-J32X2QQP.cjs → patch-MOD7QC3D.cjs} +3 -1
  263. package/dist/permissions-MM77OSFO.js +13 -0
  264. package/dist/permissions-W2F62DJ6.cjs +13 -0
  265. package/dist/{plan-JFGNRL2S.js → plan-G5CEKJI4.js} +1 -0
  266. package/dist/{plan-B3CW5DXJ.cjs → plan-QKOHE3LH.cjs} +1 -0
  267. package/dist/quit-7D2RDGTD.cjs +10 -0
  268. package/dist/quit-PKBSEJOL.js +10 -0
  269. package/dist/registry-A5XLMQVC.cjs +1828 -0
  270. package/dist/registry-WQLWHOLY.js +1828 -0
  271. package/dist/resume-FBKXSDOA.js +13 -0
  272. package/dist/resume-KLPDYPWQ.cjs +13 -0
  273. package/dist/search-7RNYTCNO.js +17 -0
  274. package/dist/search-UESMQZC3.cjs +17 -0
  275. package/dist/{session-T3TAZ5ZU.cjs → session-BSU2L5UI.cjs} +1 -0
  276. package/dist/{session-H5QWKE5E.js → session-SZMRN5KG.js} +1 -0
  277. package/dist/sessions-TSSUFWIJ.cjs +10 -0
  278. package/dist/sessions-WAXBUQTU.js +10 -0
  279. package/dist/settings-D6JXX5RG.js +30 -0
  280. package/dist/settings-RKYGXKDG.cjs +30 -0
  281. package/dist/share-GLX4YHS4.cjs +14 -0
  282. package/dist/share-U2M2KBFJ.js +14 -0
  283. package/dist/skills-63QLZMUO.cjs +14 -0
  284. package/dist/{skills-LJZA6PVJ.js → skills-BAMMXP3Q.js} +3 -2
  285. package/dist/{skills-install-MQINL3EC.js → skills-install-QNQWC2MV.js} +99 -28
  286. package/dist/{skills-install-IKJZN4G2.cjs → skills-install-UMK5H3SO.cjs} +107 -36
  287. package/dist/skills-new-NYKNHJHV.cjs +15 -0
  288. package/dist/skills-new-NZFGFKML.js +15 -0
  289. package/dist/slashCommands-EJ23C3Z4.cjs +69 -0
  290. package/dist/slashCommands-JQIL4EWX.js +69 -0
  291. package/dist/status-BKC7GBNQ.js +11 -0
  292. package/dist/status-FU3CPJWQ.cjs +11 -0
  293. package/dist/sync-3IEIHXIP.cjs +18 -0
  294. package/dist/sync-7JMZVEQD.cjs +40 -0
  295. package/dist/{sync-EXYX7HXW.js → sync-KWX67OUN.js} +3 -2
  296. package/dist/sync-YVPFT7SL.js +18 -0
  297. package/dist/tasks-5FPBIFLC.js +9 -0
  298. package/dist/tasks-TXGKGNH6.cjs +9 -0
  299. package/dist/team-GVK5L73L.cjs +9 -0
  300. package/dist/team-RWIKCLTG.js +9 -0
  301. package/dist/teammate-3C4MLRGH.js +139 -0
  302. package/dist/teammate-7C3UDQSH.cjs +139 -0
  303. package/dist/theme-A2CEHI7W.js +18 -0
  304. package/dist/theme-LNOQOVR4.cjs +18 -0
  305. package/dist/ui/questionModal.cjs +7 -25
  306. package/dist/ui/questionModal.js +6 -24
  307. package/dist/undo-F2IZJQUV.js +10 -0
  308. package/dist/undo-QEV42XLU.cjs +10 -0
  309. package/dist/update-TVAJMMBC.js +82 -0
  310. package/dist/update-Z6BIIQDC.cjs +82 -0
  311. package/package.json +10 -4
  312. package/dist/CommunitySkillsCache-ILWHWE5P.js +0 -7
  313. package/dist/CommunitySkillsCache-KHC6RUJW.cjs +0 -7
  314. package/dist/HookManager-X47HCM5G.cjs +0 -6
  315. package/dist/HookManager-ZXKHCD7U.js +0 -6
  316. package/dist/MemoryManager-6ZT7IDO5.cjs +0 -7
  317. package/dist/MemoryManager-AJGS5AKB.js +0 -7
  318. package/dist/PermissionManager-HG6W2DGU.cjs +0 -10
  319. package/dist/SessionManager-BJ2G6VV4.cjs +0 -9
  320. package/dist/SessionManager-ENPGYK5J.js +0 -9
  321. package/dist/SkillsRegistry-6ZFOCT25.cjs +0 -8
  322. package/dist/SkillsRegistry-C2SHOZ5D.js +0 -8
  323. package/dist/about-BIZH6I2U.cjs +0 -11
  324. package/dist/about-PPIVMAPA.js +0 -11
  325. package/dist/add-dir-7FD4DMDA.cjs +0 -9
  326. package/dist/add-dir-LOYJ4YB5.js +0 -9
  327. package/dist/agents-2Y6ASV7C.js +0 -10
  328. package/dist/agents-UOSPKLQL.cjs +0 -10
  329. package/dist/agents-new-23NSGAM5.js +0 -13
  330. package/dist/agents-new-WI2EL7IJ.cjs +0 -13
  331. package/dist/automode-LGWTY3UX.js +0 -9
  332. package/dist/automode-WLBQ7MN7.cjs +0 -9
  333. package/dist/chunk-5UBW2BGC.js +0 -33
  334. package/dist/chunk-AXP53LTU.cjs +0 -169
  335. package/dist/chunk-IZBCMJHJ.cjs +0 -33
  336. package/dist/completion-7WGMHKOR.cjs +0 -13
  337. package/dist/completion-KH33NSGP.js +0 -13
  338. package/dist/constants-RBQTR32A.cjs +0 -20
  339. package/dist/export-3QN3IH7A.js +0 -11
  340. package/dist/export-BI54X3MP.cjs +0 -11
  341. package/dist/feedback-TBF2CUJR.js +0 -14
  342. package/dist/feedback-XXHPSUUO.cjs +0 -14
  343. package/dist/formatters-N5IJKYZY.cjs +0 -8
  344. package/dist/formatters-UG6VZJJ5.js +0 -8
  345. package/dist/help-4VSLIMP4.cjs +0 -11
  346. package/dist/history-73VBEMSI.cjs +0 -13
  347. package/dist/hooks-62UDQBGH.cjs +0 -12
  348. package/dist/hooks-XORDJD5X.js +0 -12
  349. package/dist/i18n-X2IU2EZD.cjs +0 -32
  350. package/dist/ide-RPKZALQV.js +0 -11
  351. package/dist/ide-YMNXJB6A.cjs +0 -11
  352. package/dist/init-J5HR4R7U.js +0 -9
  353. package/dist/init-JCC7RVMC.cjs +0 -9
  354. package/dist/language-AZISJCEZ.js +0 -16
  355. package/dist/language-F65RA6FZ.cjs +0 -16
  356. package/dist/localProjectPermissions-2EATUDZM.cjs +0 -17
  357. package/dist/login-5HLPMECE.js +0 -18
  358. package/dist/login-ISWYYBXP.cjs +0 -18
  359. package/dist/logout-3EKZM5J3.cjs +0 -16
  360. package/dist/logout-GE7TSZ24.js +0 -16
  361. package/dist/mcp-EW64QRFA.cjs +0 -15
  362. package/dist/mcp-VHS7AMF2.js +0 -15
  363. package/dist/memory-2I473RU3.js +0 -9
  364. package/dist/memory-JZ6NPSP3.cjs +0 -9
  365. package/dist/model-GXZLARPT.js +0 -9
  366. package/dist/model-Y274DBDO.cjs +0 -9
  367. package/dist/new-BG5VIGZ7.cjs +0 -9
  368. package/dist/new-YXFDQOA7.js +0 -9
  369. package/dist/permissions-QILEAGBP.cjs +0 -12
  370. package/dist/permissions-WVEOVMWO.js +0 -12
  371. package/dist/quit-NC32OEJG.cjs +0 -9
  372. package/dist/quit-WRRIGU33.js +0 -9
  373. package/dist/resume-GJIKIDPR.cjs +0 -12
  374. package/dist/resume-RMJNCAOK.js +0 -12
  375. package/dist/search-UIWIXB73.js +0 -14
  376. package/dist/search-WQNXDA2E.cjs +0 -14
  377. package/dist/sessions-HPFX2GDD.js +0 -9
  378. package/dist/sessions-SAQU6MFA.cjs +0 -9
  379. package/dist/share-IE6UTPKF.cjs +0 -13
  380. package/dist/share-NQXIMFSQ.js +0 -13
  381. package/dist/skills-YTYGART7.cjs +0 -13
  382. package/dist/skills-new-3WCU3CWB.js +0 -14
  383. package/dist/skills-new-O5LFVFZU.cjs +0 -14
  384. package/dist/slashCommands-3FFAL4SL.js +0 -55
  385. package/dist/slashCommands-JASFW3E4.cjs +0 -55
  386. package/dist/status-4NDGXPIM.js +0 -10
  387. package/dist/status-RHJIBHP2.cjs +0 -10
  388. package/dist/sync-3GFSEIAZ.js +0 -16
  389. package/dist/sync-6M3WRKMH.cjs +0 -39
  390. package/dist/sync-CQNQDNTJ.cjs +0 -16
  391. package/dist/theme-EMJGULMI.cjs +0 -16
  392. package/dist/theme-FGDSXNU3.js +0 -16
  393. package/dist/undo-CTXQYE7C.cjs +0 -9
  394. package/dist/undo-HX2ZMECP.js +0 -9
@@ -1,71 +1,10 @@
1
1
  import {
2
2
  Theme,
3
3
  detectColorMode,
4
+ getTheme,
5
+ isThemeInitialized,
4
6
  setTheme
5
7
  } from "./chunk-JS7IPR7P.js";
6
- import {
7
- AUTOHAND_FILES
8
- } from "./chunk-PWLLLJHU.js";
9
-
10
- // src/ui/theme/loader.ts
11
- import { readFileSync, existsSync, readdirSync } from "fs";
12
- import { join } from "path";
13
- import { homedir } from "os";
14
-
15
- // src/ui/theme/types.ts
16
- var COLOR_TOKENS = [
17
- // Core UI
18
- "accent",
19
- "border",
20
- "borderAccent",
21
- "borderMuted",
22
- "success",
23
- "error",
24
- "warning",
25
- "muted",
26
- "dim",
27
- "text",
28
- // Backgrounds & Content
29
- "userMessageBg",
30
- "userMessageText",
31
- "toolPendingBg",
32
- "toolSuccessBg",
33
- "toolErrorBg",
34
- "toolTitle",
35
- "toolOutput",
36
- // Diff Colors
37
- "diffAdded",
38
- "diffRemoved",
39
- "diffContext",
40
- // Syntax Highlighting
41
- "syntaxComment",
42
- "syntaxKeyword",
43
- "syntaxFunction",
44
- "syntaxVariable",
45
- "syntaxString",
46
- "syntaxNumber",
47
- "syntaxType",
48
- "syntaxOperator",
49
- "syntaxPunctuation",
50
- // Markdown
51
- "mdHeading",
52
- "mdLink",
53
- "mdLinkUrl",
54
- "mdCode",
55
- "mdCodeBlock",
56
- "mdCodeBlockBorder",
57
- "mdQuote",
58
- "mdQuoteBorder",
59
- "mdHr",
60
- "mdListBullet"
61
- ];
62
- function isHexColor(value) {
63
- if (typeof value !== "string") return false;
64
- return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);
65
- }
66
- function is256ColorIndex(value) {
67
- return typeof value === "number" && value >= 0 && value <= 255 && Number.isInteger(value);
68
- }
69
8
 
70
9
  // src/ui/theme/themes.ts
71
10
  var darkTheme = {
@@ -102,7 +41,7 @@ var darkTheme = {
102
41
  borderMuted: "gray800",
103
42
  success: "green",
104
43
  error: "red",
105
- warning: "yellow",
44
+ warning: "orange",
106
45
  muted: "gray500",
107
46
  dim: "gray200",
108
47
  text: "gray200",
@@ -371,6 +310,92 @@ var tuiTheme = {
371
310
  mdListBullet: "pauaTeal"
372
311
  }
373
312
  };
313
+ var githubDarkTheme = {
314
+ name: "github-dark",
315
+ vars: {
316
+ // GitHub Dark ANSI palette (colors 0–15)
317
+ gray: "#6e7681",
318
+ // ANSI 0/8 - muted gray
319
+ red: "#f97583",
320
+ // ANSI 1 - coral red
321
+ green: "#3fb950",
322
+ // ANSI 2 - green
323
+ yellow: "#d29922",
324
+ // ANSI 3 - orange/yellow
325
+ blue: "#79c0ff",
326
+ // ANSI 4 - blue
327
+ purple: "#d2a8ff",
328
+ // ANSI 5 - purple
329
+ cyan: "#56d4dd",
330
+ // ANSI 6 - cyan
331
+ lightGray: "#8b949e",
332
+ // ANSI 7 - light gray
333
+ brightRed: "#ffa198",
334
+ // ANSI 9 - light pink
335
+ brightGreen: "#56d364",
336
+ // ANSI 10 - light green
337
+ brightYellow: "#e3b341",
338
+ // ANSI 11 - light orange
339
+ brightBlue: "#a5d6ff",
340
+ // ANSI 12 - light blue
341
+ brightCyan: "#76e4f7",
342
+ // ANSI 14 - light cyan
343
+ white: "#ffffff",
344
+ // ANSI 15 - white
345
+ // GitHub Dark semantic backgrounds
346
+ bg: "#0d1117",
347
+ bgSurface: "#161b22",
348
+ bgOverlay: "#1c2128",
349
+ borderDefault: "#30363d",
350
+ fgDefault: "#e6edf3"
351
+ },
352
+ colors: {
353
+ // Core UI
354
+ accent: "blue",
355
+ border: "borderDefault",
356
+ borderAccent: "blue",
357
+ borderMuted: "#21262d",
358
+ success: "green",
359
+ error: "red",
360
+ warning: "yellow",
361
+ muted: "lightGray",
362
+ dim: "fgDefault",
363
+ text: "fgDefault",
364
+ // Backgrounds & Content
365
+ userMessageBg: "bgSurface",
366
+ userMessageText: "fgDefault",
367
+ toolPendingBg: "bgOverlay",
368
+ toolSuccessBg: "#0f2d16",
369
+ toolErrorBg: "#3d1418",
370
+ toolTitle: "blue",
371
+ toolOutput: "lightGray",
372
+ // Diff Colors
373
+ diffAdded: "green",
374
+ diffRemoved: "red",
375
+ diffContext: "lightGray",
376
+ // Syntax Highlighting
377
+ syntaxComment: "gray",
378
+ syntaxKeyword: "red",
379
+ syntaxFunction: "purple",
380
+ syntaxVariable: "brightBlue",
381
+ syntaxString: "brightBlue",
382
+ syntaxNumber: "blue",
383
+ syntaxType: "brightRed",
384
+ syntaxOperator: "red",
385
+ syntaxPunctuation: "lightGray",
386
+ // Markdown
387
+ mdHeading: "blue",
388
+ mdLink: "blue",
389
+ mdLinkUrl: "lightGray",
390
+ mdCode: "brightCyan",
391
+ mdCodeBlock: "fgDefault",
392
+ mdCodeBlockBorder: "borderDefault",
393
+ mdQuote: "lightGray",
394
+ mdQuoteBorder: "borderDefault",
395
+ mdHr: "borderDefault",
396
+ mdListBullet: "blue"
397
+ }
398
+ };
374
399
  var lightTheme = {
375
400
  name: "light",
376
401
  vars: {
@@ -449,14 +474,337 @@ var builtInThemes = {
449
474
  light: lightTheme,
450
475
  dracula: draculaTheme,
451
476
  sandy: sandyTheme,
452
- tui: tuiTheme
477
+ tui: tuiTheme,
478
+ "github-dark": githubDarkTheme
453
479
  };
454
480
  function getDefaultThemeName() {
455
481
  return "dark";
456
482
  }
457
483
 
458
484
  // src/ui/theme/loader.ts
459
- var CUSTOM_THEMES_DIR = join(homedir(), ".autohand", "themes");
485
+ import { readFileSync as readFileSync2, existsSync as existsSync2, readdirSync as readdirSync2 } from "fs";
486
+ import { join as join2 } from "path";
487
+ import { homedir as homedir2 } from "os";
488
+
489
+ // src/ui/theme/types.ts
490
+ var COLOR_TOKENS = [
491
+ // Core UI
492
+ "accent",
493
+ "border",
494
+ "borderAccent",
495
+ "borderMuted",
496
+ "success",
497
+ "error",
498
+ "warning",
499
+ "muted",
500
+ "dim",
501
+ "text",
502
+ // Backgrounds & Content
503
+ "userMessageBg",
504
+ "userMessageText",
505
+ "toolPendingBg",
506
+ "toolSuccessBg",
507
+ "toolErrorBg",
508
+ "toolTitle",
509
+ "toolOutput",
510
+ // Diff Colors
511
+ "diffAdded",
512
+ "diffRemoved",
513
+ "diffContext",
514
+ // Syntax Highlighting
515
+ "syntaxComment",
516
+ "syntaxKeyword",
517
+ "syntaxFunction",
518
+ "syntaxVariable",
519
+ "syntaxString",
520
+ "syntaxNumber",
521
+ "syntaxType",
522
+ "syntaxOperator",
523
+ "syntaxPunctuation",
524
+ // Markdown
525
+ "mdHeading",
526
+ "mdLink",
527
+ "mdLinkUrl",
528
+ "mdCode",
529
+ "mdCodeBlock",
530
+ "mdCodeBlockBorder",
531
+ "mdQuote",
532
+ "mdQuoteBorder",
533
+ "mdHr",
534
+ "mdListBullet"
535
+ ];
536
+ function isHexColor(value) {
537
+ if (typeof value !== "string") return false;
538
+ return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);
539
+ }
540
+ function is256ColorIndex(value) {
541
+ return typeof value === "number" && value >= 0 && value <= 255 && Number.isInteger(value);
542
+ }
543
+
544
+ // src/ui/theme/ghosttyLoader.ts
545
+ import { readFileSync, existsSync, readdirSync } from "fs";
546
+ import { execSync } from "child_process";
547
+ import { join } from "path";
548
+ import { homedir, platform } from "os";
549
+ function getGhosttyThemeDirs() {
550
+ const dirs = [];
551
+ if (platform() === "darwin") {
552
+ dirs.push("/Applications/Ghostty.app/Contents/Resources/ghostty/themes");
553
+ }
554
+ const xdgDataDirs = process.env.XDG_DATA_DIRS?.split(":") ?? ["/usr/share", "/usr/local/share"];
555
+ for (const dir of xdgDataDirs) {
556
+ dirs.push(join(dir, "ghostty", "themes"));
557
+ }
558
+ const configHome = process.env.XDG_CONFIG_HOME ?? join(process.env.HOME ?? "", ".config");
559
+ dirs.push(join(configHome, "ghostty", "themes"));
560
+ return dirs;
561
+ }
562
+ function findGhosttyThemesDir() {
563
+ for (const dir of getGhosttyThemeDirs()) {
564
+ if (existsSync(dir)) {
565
+ return dir;
566
+ }
567
+ }
568
+ return null;
569
+ }
570
+ function parseGhosttyTheme(content) {
571
+ const palette = /* @__PURE__ */ new Map();
572
+ let background = "#1a1a1a";
573
+ let foreground = "#e0e0e0";
574
+ let cursorColor;
575
+ let cursorText;
576
+ let selectionBackground;
577
+ let selectionForeground;
578
+ for (const line of content.split("\n")) {
579
+ const trimmed = line.trim();
580
+ if (!trimmed || trimmed.startsWith("#")) continue;
581
+ const eqIdx = trimmed.indexOf("=");
582
+ if (eqIdx === -1) continue;
583
+ const key = trimmed.slice(0, eqIdx).trim();
584
+ const value = trimmed.slice(eqIdx + 1).trim();
585
+ if (key === "palette") {
586
+ const paletteEq = value.indexOf("=");
587
+ if (paletteEq !== -1) {
588
+ const idx = parseInt(value.slice(0, paletteEq), 10);
589
+ const color = value.slice(paletteEq + 1).trim();
590
+ if (!isNaN(idx) && idx >= 0 && idx <= 15 && /^#[0-9a-fA-F]{6}$/.test(color)) {
591
+ palette.set(idx, color);
592
+ }
593
+ }
594
+ } else if (key === "background") {
595
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) background = value;
596
+ } else if (key === "foreground") {
597
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) foreground = value;
598
+ } else if (key === "cursor-color") {
599
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) cursorColor = value;
600
+ } else if (key === "cursor-text") {
601
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) cursorText = value;
602
+ } else if (key === "selection-background") {
603
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) selectionBackground = value;
604
+ } else if (key === "selection-foreground") {
605
+ if (/^#[0-9a-fA-F]{6}$/.test(value)) selectionForeground = value;
606
+ }
607
+ }
608
+ return { palette, background, foreground, cursorColor, cursorText, selectionBackground, selectionForeground };
609
+ }
610
+ function adjustBrightness(hex, factor) {
611
+ const r = parseInt(hex.slice(1, 3), 16);
612
+ const g = parseInt(hex.slice(3, 5), 16);
613
+ const b = parseInt(hex.slice(5, 7), 16);
614
+ const clamp = (n) => Math.max(0, Math.min(255, Math.round(n)));
615
+ return `#${clamp(r * factor).toString(16).padStart(2, "0")}${clamp(g * factor).toString(16).padStart(2, "0")}${clamp(b * factor).toString(16).padStart(2, "0")}`;
616
+ }
617
+ function mixColors(hex1, hex2, ratio) {
618
+ const r1 = parseInt(hex1.slice(1, 3), 16);
619
+ const g1 = parseInt(hex1.slice(3, 5), 16);
620
+ const b1 = parseInt(hex1.slice(5, 7), 16);
621
+ const r2 = parseInt(hex2.slice(1, 3), 16);
622
+ const g2 = parseInt(hex2.slice(3, 5), 16);
623
+ const b2 = parseInt(hex2.slice(5, 7), 16);
624
+ const clamp = (n) => Math.max(0, Math.min(255, Math.round(n)));
625
+ const r = clamp(r1 + (r2 - r1) * ratio);
626
+ const g = clamp(g1 + (g2 - g1) * ratio);
627
+ const b = clamp(b1 + (b2 - b1) * ratio);
628
+ return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
629
+ }
630
+ function getLuminance(hex) {
631
+ const r = parseInt(hex.slice(1, 3), 16) / 255;
632
+ const g = parseInt(hex.slice(3, 5), 16) / 255;
633
+ const b = parseInt(hex.slice(5, 7), 16) / 255;
634
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
635
+ }
636
+ function ghosttyPaletteToTheme(name, gp) {
637
+ const p = (idx, fallback) => gp.palette.get(idx) ?? fallback;
638
+ const bg = gp.background;
639
+ const fg = gp.foreground;
640
+ const isDark = getLuminance(bg) < 0.5;
641
+ const bgSurface = isDark ? adjustBrightness(bg, 1.3) : adjustBrightness(bg, 0.95);
642
+ const bgOverlay = isDark ? adjustBrightness(bg, 1.5) : adjustBrightness(bg, 0.9);
643
+ const borderColor = isDark ? adjustBrightness(bg, 2) : adjustBrightness(bg, 0.8);
644
+ const borderMuted = isDark ? adjustBrightness(bg, 1.6) : adjustBrightness(bg, 0.88);
645
+ const green = p(2, "#4caf50");
646
+ const red = p(1, "#f44336");
647
+ const toolSuccessBg = mixColors(bg, green, 0.15);
648
+ const toolErrorBg = mixColors(bg, red, 0.15);
649
+ return {
650
+ name,
651
+ vars: {
652
+ // ANSI palette
653
+ black: p(0, "#000000"),
654
+ red: p(1, "#cc0000"),
655
+ green: p(2, "#4caf50"),
656
+ yellow: p(3, "#cdcd00"),
657
+ blue: p(4, "#0000cd"),
658
+ magenta: p(5, "#cd00cd"),
659
+ cyan: p(6, "#00cdcd"),
660
+ white: p(7, "#e5e5e5"),
661
+ brightBlack: p(8, "#666666"),
662
+ brightRed: p(9, "#ff0000"),
663
+ brightGreen: p(10, "#00ff00"),
664
+ brightYellow: p(11, "#ffff00"),
665
+ brightBlue: p(12, "#0000ff"),
666
+ brightMagenta: p(13, "#ff00ff"),
667
+ brightCyan: p(14, "#00ffff"),
668
+ brightWhite: p(15, "#ffffff"),
669
+ // Derived
670
+ bg,
671
+ fg,
672
+ bgSurface,
673
+ bgOverlay,
674
+ borderColor,
675
+ borderMuted,
676
+ toolSuccessBg,
677
+ toolErrorBg
678
+ },
679
+ colors: {
680
+ // Core UI
681
+ accent: "blue",
682
+ border: "borderColor",
683
+ borderAccent: "blue",
684
+ borderMuted: "borderMuted",
685
+ success: "green",
686
+ error: "red",
687
+ warning: "yellow",
688
+ muted: "brightBlack",
689
+ dim: "fg",
690
+ text: "fg",
691
+ // Backgrounds & Content
692
+ userMessageBg: "bgSurface",
693
+ userMessageText: "fg",
694
+ toolPendingBg: "bgOverlay",
695
+ toolSuccessBg: "toolSuccessBg",
696
+ toolErrorBg: "toolErrorBg",
697
+ toolTitle: "blue",
698
+ toolOutput: "white",
699
+ // Diff Colors
700
+ diffAdded: "green",
701
+ diffRemoved: "red",
702
+ diffContext: "brightBlack",
703
+ // Syntax Highlighting
704
+ syntaxComment: "brightBlack",
705
+ syntaxKeyword: "magenta",
706
+ syntaxFunction: "blue",
707
+ syntaxVariable: "cyan",
708
+ syntaxString: "green",
709
+ syntaxNumber: "yellow",
710
+ syntaxType: "brightCyan",
711
+ syntaxOperator: "red",
712
+ syntaxPunctuation: "white",
713
+ // Markdown
714
+ mdHeading: "blue",
715
+ mdLink: "cyan",
716
+ mdLinkUrl: "brightBlack",
717
+ mdCode: "yellow",
718
+ mdCodeBlock: "fg",
719
+ mdCodeBlockBorder: "borderColor",
720
+ mdQuote: "white",
721
+ mdQuoteBorder: "brightBlack",
722
+ mdHr: "borderColor",
723
+ mdListBullet: "cyan"
724
+ }
725
+ };
726
+ }
727
+ function loadGhosttyTheme(themeName) {
728
+ const dir = findGhosttyThemesDir();
729
+ if (!dir) return null;
730
+ const filePath = join(dir, themeName);
731
+ if (!existsSync(filePath)) return null;
732
+ try {
733
+ const content = readFileSync(filePath, "utf-8");
734
+ const palette = parseGhosttyTheme(content);
735
+ return ghosttyPaletteToTheme(themeName, palette);
736
+ } catch {
737
+ return null;
738
+ }
739
+ }
740
+ function isInsideGhostty() {
741
+ return process.env.TERM_PROGRAM === "ghostty";
742
+ }
743
+ function detectSystemAppearance() {
744
+ if (platform() === "darwin") {
745
+ try {
746
+ const result = execSync("defaults read -g AppleInterfaceStyle 2>/dev/null", {
747
+ encoding: "utf-8",
748
+ timeout: 500,
749
+ stdio: ["pipe", "pipe", "pipe"]
750
+ });
751
+ return result.trim().toLowerCase() === "dark" ? "dark" : "light";
752
+ } catch {
753
+ return "light";
754
+ }
755
+ }
756
+ const gtkTheme = process.env.GTK_THEME ?? "";
757
+ if (gtkTheme.toLowerCase().includes("dark")) return "dark";
758
+ return "dark";
759
+ }
760
+ function readGhosttyConfigTheme() {
761
+ const configDir = process.env.XDG_CONFIG_HOME ? join(process.env.XDG_CONFIG_HOME, "ghostty") : join(homedir(), ".config", "ghostty");
762
+ const configPath = join(configDir, "config");
763
+ if (!existsSync(configPath)) return null;
764
+ try {
765
+ const content = readFileSync(configPath, "utf-8");
766
+ let themeLine;
767
+ for (const line of content.split("\n")) {
768
+ const trimmed = line.trim();
769
+ if (trimmed.startsWith("#") || !trimmed.startsWith("theme")) continue;
770
+ const eq = trimmed.indexOf("=");
771
+ if (eq === -1) continue;
772
+ const key = trimmed.slice(0, eq).trim();
773
+ if (key === "theme") {
774
+ themeLine = trimmed.slice(eq + 1).trim();
775
+ }
776
+ }
777
+ if (!themeLine) return null;
778
+ if (themeLine.includes(",") && (themeLine.includes("dark:") || themeLine.includes("light:"))) {
779
+ const parts = themeLine.split(",").map((p) => p.trim());
780
+ let dark;
781
+ let light;
782
+ for (const part of parts) {
783
+ if (part.startsWith("dark:")) dark = part.slice("dark:".length).trim();
784
+ if (part.startsWith("light:")) light = part.slice("light:".length).trim();
785
+ }
786
+ return { dark, light };
787
+ }
788
+ return { single: themeLine };
789
+ } catch {
790
+ return null;
791
+ }
792
+ }
793
+ function detectGhosttyTheme() {
794
+ if (!isInsideGhostty()) return null;
795
+ const config = readGhosttyConfigTheme();
796
+ if (!config) return null;
797
+ if (config.single) {
798
+ return config.single;
799
+ }
800
+ const appearance = detectSystemAppearance();
801
+ if (appearance === "dark" && config.dark) return config.dark;
802
+ if (appearance === "light" && config.light) return config.light;
803
+ return config.dark ?? config.light ?? null;
804
+ }
805
+
806
+ // src/ui/theme/loader.ts
807
+ var CUSTOM_THEMES_DIR = join2(homedir2(), ".autohand", "themes");
460
808
  var ThemeLoadError = class extends Error {
461
809
  constructor(message, themeName, cause) {
462
810
  super(message);
@@ -487,15 +835,19 @@ function getThemeDefinition(themeName) {
487
835
  if (themeName in builtInThemes) {
488
836
  return builtInThemes[themeName];
489
837
  }
490
- const customThemePath = join(CUSTOM_THEMES_DIR, `${themeName}.json`);
491
- if (existsSync(customThemePath)) {
838
+ const customThemePath = join2(CUSTOM_THEMES_DIR, `${themeName}.json`);
839
+ if (existsSync2(customThemePath)) {
492
840
  return loadCustomTheme(customThemePath, themeName);
493
841
  }
842
+ const ghosttyTheme = loadGhosttyTheme(themeName);
843
+ if (ghosttyTheme) {
844
+ return ghosttyTheme;
845
+ }
494
846
  throw new ThemeLoadError(`Theme "${themeName}" not found`, themeName);
495
847
  }
496
848
  function loadCustomTheme(filePath, themeName) {
497
849
  try {
498
- const content = readFileSync(filePath, "utf-8");
850
+ const content = readFileSync2(filePath, "utf-8");
499
851
  const parsed = JSON.parse(content);
500
852
  return validateAndMergeTheme(parsed, themeName);
501
853
  } catch (error) {
@@ -583,25 +935,59 @@ function resolveColorValue(value, vars, themeName, visited) {
583
935
  }
584
936
  throw new ThemeLoadError(`Invalid color value: ${value}`, themeName);
585
937
  }
938
+ var CURATED_GHOSTTY_THEMES = [
939
+ "Atom One Dark",
940
+ "Ayu Mirage",
941
+ "Catppuccin Frappe",
942
+ "Catppuccin Latte",
943
+ "Catppuccin Macchiato",
944
+ "Catppuccin Mocha",
945
+ "Everforest Dark Hard",
946
+ "Gruvbox Dark",
947
+ "Gruvbox Light",
948
+ "Kanagawa Wave",
949
+ "Monokai Pro",
950
+ "Nord",
951
+ "One Half Dark",
952
+ "Rose Pine",
953
+ "Rose Pine Dawn",
954
+ "Rose Pine Moon",
955
+ "Solarized Osaka Night",
956
+ "TokyoNight",
957
+ "TokyoNight Storm"
958
+ ];
586
959
  function listAvailableThemes() {
587
- const themes = new Set(Object.keys(builtInThemes));
588
- if (existsSync(CUSTOM_THEMES_DIR)) {
960
+ const builtIn = Object.keys(builtInThemes).sort();
961
+ const ghostty = [];
962
+ for (const name of CURATED_GHOSTTY_THEMES) {
963
+ if (loadGhosttyTheme(name)) {
964
+ ghostty.push(name);
965
+ }
966
+ }
967
+ ghostty.sort();
968
+ const custom = [];
969
+ if (existsSync2(CUSTOM_THEMES_DIR)) {
589
970
  try {
590
- const files = readdirSync(CUSTOM_THEMES_DIR);
971
+ const files = readdirSync2(CUSTOM_THEMES_DIR);
591
972
  for (const file of files) {
592
973
  if (file.endsWith(".json")) {
593
- themes.add(file.slice(0, -5));
974
+ const name = file.slice(0, -5);
975
+ if (!builtIn.includes(name)) {
976
+ custom.push(name);
977
+ }
594
978
  }
595
979
  }
596
980
  } catch {
597
981
  }
598
982
  }
599
- return Array.from(themes).sort();
983
+ custom.sort();
984
+ return [...builtIn, ...ghostty, ...custom];
600
985
  }
601
986
  function themeExists(themeName) {
602
987
  if (themeName in builtInThemes) return true;
603
- const customPath = join(CUSTOM_THEMES_DIR, `${themeName}.json`);
604
- return existsSync(customPath);
988
+ const customPath = join2(CUSTOM_THEMES_DIR, `${themeName}.json`);
989
+ if (existsSync2(customPath)) return true;
990
+ return loadGhosttyTheme(themeName) !== null;
605
991
  }
606
992
  function detectTerminalBackground() {
607
993
  const colorFgBg = process.env.COLORFGBG;
@@ -620,6 +1006,16 @@ function detectTerminalBackground() {
620
1006
  return "dark";
621
1007
  }
622
1008
  function autoInitTheme(themeName) {
1009
+ if (themeName && themeName !== getDefaultThemeName()) {
1010
+ return initTheme(themeName);
1011
+ }
1012
+ const ghosttyThemeName = detectGhosttyTheme();
1013
+ if (ghosttyThemeName) {
1014
+ try {
1015
+ return initTheme(ghosttyThemeName);
1016
+ } catch {
1017
+ }
1018
+ }
623
1019
  if (themeName) {
624
1020
  return initTheme(themeName);
625
1021
  }
@@ -645,255 +1041,42 @@ var defaultContextValue = {
645
1041
  }
646
1042
  };
647
1043
  var ThemeContext = createContext(defaultContextValue);
648
-
649
- // src/config.ts
650
- import fs from "fs-extra";
651
- import path from "path";
652
- import YAML from "yaml";
653
- var DEFAULT_CONFIG_PATH = AUTOHAND_FILES.configJson;
654
- var YAML_CONFIG_PATH = AUTOHAND_FILES.configYaml;
655
- var YML_CONFIG_PATH = AUTOHAND_FILES.configYml;
656
- var DEFAULT_BASE_URL = "https://openrouter.ai/api/v1";
657
- var DEFAULT_OLLAMA_URL = "http://localhost:11434";
658
- var DEFAULT_LLAMACPP_URL = "http://localhost:8080";
659
- var DEFAULT_OPENAI_URL = "https://api.openai.com/v1";
660
- var DEFAULT_MLX_URL = "http://localhost:8080";
661
- var DEFAULT_LLMGATEWAY_URL = "https://api.llmgateway.io/v1";
662
- async function detectConfigPath(customPath) {
663
- if (customPath) {
664
- return path.resolve(customPath);
665
- }
666
- const envPath = process.env.AUTOHAND_CONFIG;
667
- if (envPath) {
668
- return path.resolve(envPath);
669
- }
670
- if (await fs.pathExists(YAML_CONFIG_PATH)) {
671
- return YAML_CONFIG_PATH;
672
- }
673
- if (await fs.pathExists(YML_CONFIG_PATH)) {
674
- return YML_CONFIG_PATH;
675
- }
676
- return DEFAULT_CONFIG_PATH;
677
- }
678
- function isYamlFile(filePath) {
679
- const ext = path.extname(filePath).toLowerCase();
680
- return ext === ".yaml" || ext === ".yml";
681
- }
682
- async function parseConfigFile(configPath) {
683
- const content = await fs.readFile(configPath, "utf8");
684
- if (isYamlFile(configPath)) {
685
- return YAML.parse(content);
686
- }
687
- return JSON.parse(content);
688
- }
689
- async function loadConfig(customPath) {
690
- const configPath = await detectConfigPath(customPath);
691
- await fs.ensureDir(path.dirname(configPath));
692
- let isNewConfig = false;
693
- if (!await fs.pathExists(configPath)) {
694
- const defaultConfig = {
695
- provider: "openrouter",
696
- openrouter: {
697
- apiKey: "",
698
- baseUrl: "https://openrouter.ai/api/v1",
699
- model: "anthropic/claude-sonnet-4-20250514"
700
- },
701
- workspace: {
702
- defaultRoot: process.cwd(),
703
- allowDangerousOps: false
704
- },
705
- ui: {
706
- theme: "dark",
707
- autoConfirm: false
708
- },
709
- telemetry: {
710
- enabled: false
711
- }
712
- };
713
- await fs.writeJson(configPath, defaultConfig, { spaces: 2 });
714
- isNewConfig = true;
715
- }
716
- let parsed;
717
- try {
718
- parsed = await parseConfigFile(configPath);
719
- } catch (error) {
720
- throw new Error(`Failed to parse config at ${configPath}: ${error.message}`);
721
- }
722
- const normalized = normalizeConfig(parsed);
723
- const withEnv = mergeEnvVariables(normalized);
724
- validateConfig(withEnv, configPath);
725
- const themeName = withEnv.ui?.theme || "dark";
726
- autoInitTheme(themeName);
727
- return { ...withEnv, configPath, isNewConfig };
728
- }
729
- function mergeEnvVariables(config) {
730
- return {
731
- ...config,
732
- api: {
733
- baseUrl: process.env.AUTOHAND_API_URL || config.api?.baseUrl || "https://api.autohand.ai",
734
- companySecret: process.env.AUTOHAND_SECRET || config.api?.companySecret || ""
1044
+ var ThemeProvider = ({ theme: providedTheme, themeName, children }) => {
1045
+ const theme = useMemo(() => {
1046
+ if (providedTheme) return providedTheme;
1047
+ if (isThemeInitialized()) {
1048
+ return getTheme();
735
1049
  }
736
- };
737
- }
738
- function normalizeConfig(config) {
739
- if (isModernConfig(config)) {
740
- const provider = config.provider ?? "openrouter";
741
- return { provider, ...config };
742
- }
743
- if (isLegacyConfig(config)) {
744
- return {
745
- provider: "openrouter",
746
- openrouter: {
747
- apiKey: config.api_key ?? "replace-me",
748
- baseUrl: config.base_url ?? DEFAULT_BASE_URL,
749
- model: config.model ?? "anthropic/claude-3.5-sonnet"
750
- },
751
- workspace: {
752
- defaultRoot: process.cwd(),
753
- allowDangerousOps: false
754
- },
755
- ui: {
756
- autoConfirm: config.dry_run ?? false,
757
- theme: "dark"
758
- }
759
- };
760
- }
761
- return config;
762
- }
763
- function isModernConfig(config) {
764
- return typeof config.openrouter === "object" || typeof config.ollama === "object" || typeof config.llamacpp === "object" || typeof config.openai === "object" || typeof config.mlx === "object";
765
- }
766
- function isLegacyConfig(config) {
767
- return typeof config.api_key === "string";
768
- }
769
- function validateConfig(config, configPath) {
770
- if (config.workspace) {
771
- if (config.workspace.defaultRoot && typeof config.workspace.defaultRoot !== "string") {
772
- throw new Error(`workspace.defaultRoot must be a string in ${configPath}`);
773
- }
774
- if (config.workspace.allowDangerousOps !== void 0 && typeof config.workspace.allowDangerousOps !== "boolean") {
775
- throw new Error(`workspace.allowDangerousOps must be boolean in ${configPath}`);
776
- }
777
- }
778
- if (config.ui) {
779
- if (config.ui.theme && typeof config.ui.theme !== "string") {
780
- throw new Error(`ui.theme must be a string in ${configPath}`);
1050
+ if (themeName) {
1051
+ return initTheme(themeName);
781
1052
  }
782
- if (config.ui.theme && !themeExists(config.ui.theme)) {
783
- throw new Error(`ui.theme '${config.ui.theme}' not found. Use 'dark', 'light', or a custom theme in ~/.autohand/themes/`);
784
- }
785
- if (config.ui.autoConfirm !== void 0 && typeof config.ui.autoConfirm !== "boolean") {
786
- throw new Error(`ui.autoConfirm must be boolean in ${configPath}`);
787
- }
788
- }
789
- if (config.mcp) {
790
- if (config.mcp.enabled !== void 0 && typeof config.mcp.enabled !== "boolean") {
791
- throw new Error(`mcp.enabled must be boolean in ${configPath}`);
792
- }
793
- if (config.mcp.servers !== void 0) {
794
- if (!Array.isArray(config.mcp.servers)) {
795
- throw new Error(`mcp.servers must be an array in ${configPath}`);
796
- }
797
- for (const server of config.mcp.servers) {
798
- if (!server.name || typeof server.name !== "string") {
799
- throw new Error(`mcp.servers[].name must be a non-empty string in ${configPath}`);
800
- }
801
- if (!["stdio", "sse", "http"].includes(server.transport)) {
802
- throw new Error(`mcp.servers[].transport must be 'stdio', 'sse', or 'http' in ${configPath}`);
803
- }
804
- if (server.transport === "stdio" && (!server.command || typeof server.command !== "string")) {
805
- throw new Error(`mcp.servers[].command is required for stdio transport in ${configPath}`);
806
- }
807
- if ((server.transport === "sse" || server.transport === "http") && (!server.url || typeof server.url !== "string")) {
808
- throw new Error(`mcp.servers[].url is required for ${server.transport} transport in ${configPath}`);
809
- }
810
- }
811
- }
812
- }
813
- if (config.externalAgents) {
814
- if (config.externalAgents.enabled !== void 0 && typeof config.externalAgents.enabled !== "boolean") {
815
- throw new Error(`externalAgents.enabled must be boolean in ${configPath}`);
816
- }
817
- if (config.externalAgents.paths !== void 0) {
818
- if (!Array.isArray(config.externalAgents.paths)) {
819
- throw new Error(`externalAgents.paths must be an array in ${configPath}`);
820
- }
821
- for (const p of config.externalAgents.paths) {
822
- if (typeof p !== "string") {
823
- throw new Error(`externalAgents.paths must contain only strings in ${configPath}`);
824
- }
825
- }
826
- }
827
- }
828
- }
829
- function resolveWorkspaceRoot(config, requestedPath) {
830
- const candidate = requestedPath ?? process.cwd() ?? config.workspace?.defaultRoot;
831
- return path.resolve(candidate);
832
- }
833
- function getProviderConfig(config, provider) {
834
- const chosen = provider ?? config.provider ?? "openrouter";
835
- const configByProvider = {
836
- openrouter: config.openrouter,
837
- ollama: config.ollama,
838
- llamacpp: config.llamacpp,
839
- openai: config.openai,
840
- mlx: config.mlx,
841
- llmgateway: config.llmgateway
842
- };
843
- const entry = configByProvider[chosen];
844
- if (!entry) {
845
- return null;
846
- }
847
- if (chosen === "openrouter" || chosen === "llmgateway") {
848
- const { apiKey, model } = entry;
849
- if (!apiKey || apiKey === "replace-me" || !model) {
850
- return null;
851
- }
852
- } else {
853
- if (!entry.model) {
854
- return null;
855
- }
856
- }
857
- return {
858
- ...entry,
859
- baseUrl: entry.baseUrl ?? defaultBaseUrlFor(chosen, entry.port)
860
- };
861
- }
862
- function defaultBaseUrlFor(provider, port) {
863
- if (provider === "openrouter") return DEFAULT_BASE_URL;
864
- if (provider === "llmgateway") return DEFAULT_LLMGATEWAY_URL;
865
- const p = port ? port.toString() : void 0;
866
- switch (provider) {
867
- case "ollama":
868
- return p ? `http://localhost:${p}` : DEFAULT_OLLAMA_URL;
869
- case "llamacpp":
870
- return p ? `http://localhost:${p}` : DEFAULT_LLAMACPP_URL;
871
- case "openai":
872
- return DEFAULT_OPENAI_URL;
873
- case "mlx":
874
- return p ? `http://localhost:${p}` : DEFAULT_MLX_URL;
875
- default:
876
- return void 0;
877
- }
878
- }
879
- async function saveConfig(config) {
880
- const { configPath, ...data } = config;
881
- if (isYamlFile(configPath)) {
882
- const yamlContent = YAML.stringify(data, { indent: 2 });
883
- await fs.writeFile(configPath, yamlContent, "utf8");
884
- } else {
885
- await fs.writeJson(configPath, data, { spaces: 2 });
886
- }
1053
+ return initTheme();
1054
+ }, [providedTheme, themeName]);
1055
+ const value = useMemo(
1056
+ () => ({
1057
+ theme,
1058
+ colors: theme.colors,
1059
+ name: theme.name,
1060
+ getColor: (token) => theme.getColor(token)
1061
+ }),
1062
+ [theme]
1063
+ );
1064
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
1065
+ };
1066
+ function useTheme() {
1067
+ const context = useContext(ThemeContext);
1068
+ return context;
887
1069
  }
888
1070
 
889
1071
  export {
1072
+ builtInThemes,
890
1073
  CUSTOM_THEMES_DIR,
891
1074
  initTheme,
892
1075
  listAvailableThemes,
893
- loadConfig,
894
- resolveWorkspaceRoot,
895
- getProviderConfig,
896
- saveConfig
1076
+ themeExists,
1077
+ autoInitTheme,
1078
+ ThemeProvider,
1079
+ useTheme
897
1080
  };
898
1081
  /**
899
1082
  * @license