claude-code-best 1.1.0 → 1.2.1

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 (542) hide show
  1. package/README.md +66 -75
  2. package/dist/chunk-03hxwxzh.js +344 -0
  3. package/dist/chunk-07069jq1.js +30 -0
  4. package/dist/{chunk-kq098bkj.js → chunk-08g51x43.js} +254 -320
  5. package/dist/{chunk-7tqhx6dr.js → chunk-093r60b7.js} +109 -213
  6. package/dist/{chunk-ahjgghpe.js → chunk-0aya4737.js} +1 -1
  7. package/dist/{chunk-b4mnbry0.js → chunk-0fsdxz74.js} +4 -4
  8. package/dist/chunk-0jzdwbdc.js +14 -0
  9. package/dist/chunk-0mbxeb5q.js +406 -0
  10. package/dist/chunk-0pryepme.js +66 -0
  11. package/dist/chunk-0qsm7jac.js +169 -0
  12. package/dist/{chunk-1cbn5kxf.js → chunk-0rpb2bdp.js} +3 -2
  13. package/dist/chunk-0se7sxd4.js +38 -0
  14. package/dist/{chunk-3m7ge6tj.js → chunk-0xnepnph.js} +14 -12
  15. package/dist/{chunk-q7tvkc86.js → chunk-0zsam7pn.js} +10 -115
  16. package/dist/{chunk-44fpr6jq.js → chunk-168xb8v1.js} +4 -2
  17. package/dist/{chunk-bj0rvnjw.js → chunk-19h3a9pw.js} +40 -30
  18. package/dist/chunk-19wjkpe7.js +115 -0
  19. package/dist/{chunk-wsqhnjj3.js → chunk-1atfzck5.js} +24 -24
  20. package/dist/{chunk-0e1xsncc.js → chunk-1cwdhk7a.js} +1 -1
  21. package/dist/{chunk-c8jv6rtj.js → chunk-1hq59w8z.js} +78 -69
  22. package/dist/chunk-1qzk963z.js +108 -0
  23. package/dist/{chunk-fk06pejm.js → chunk-1rrmvwjn.js} +9 -9
  24. package/dist/{chunk-d18z9pna.js → chunk-1thgdca1.js} +2 -2
  25. package/dist/chunk-1tjnmcw7.js +68 -0
  26. package/dist/chunk-1xj83yc8.js +219 -0
  27. package/dist/chunk-21j2jfen.js +435 -0
  28. package/dist/{chunk-wc6wwwyb.js → chunk-21z7acxh.js} +3 -3
  29. package/dist/chunk-22gbbc5x.js +313 -0
  30. package/dist/chunk-238g70xa.js +1 -1
  31. package/dist/{chunk-vpb723tx.js → chunk-23ad5t92.js} +5 -5
  32. package/dist/{chunk-vbbf707n.js → chunk-24r3gfks.js} +39 -29
  33. package/dist/chunk-24sahbec.js +71 -0
  34. package/dist/chunk-28az45r7.js +112 -0
  35. package/dist/{chunk-9g827w4j.js → chunk-2q39ej51.js} +6 -6
  36. package/dist/chunk-2qwgfjcj.js +5370 -0
  37. package/dist/{chunk-0cpnzx7t.js → chunk-2rgvd09y.js} +118 -151
  38. package/dist/chunk-2wq8q15s.js +475 -0
  39. package/dist/{chunk-bqq4zamw.js → chunk-2ys5wcxk.js} +3 -3
  40. package/dist/{chunk-t24ytdcw.js → chunk-31nce7eh.js} +12 -10
  41. package/dist/chunk-31q6p2ke.js +123 -0
  42. package/dist/chunk-3394wc12.js +1024 -0
  43. package/dist/{chunk-33khw5gy.js → chunk-365zvqv3.js} +7 -7
  44. package/dist/{chunk-9g2ncq68.js → chunk-36gkb95k.js} +124 -128
  45. package/dist/{chunk-khdjg2v9.js → chunk-37y42ayh.js} +39 -29
  46. package/dist/chunk-3816xd5p.js +195 -0
  47. package/dist/chunk-3a6bynts.js +656 -0
  48. package/dist/{chunk-qvd0k5dn.js → chunk-3avfhw6x.js} +190 -348
  49. package/dist/{chunk-660kcy7p.js → chunk-3b25ycrx.js} +14 -8
  50. package/dist/chunk-3b4xhwhp.js +113 -0
  51. package/dist/chunk-3fjzvf0e.js +128 -0
  52. package/dist/chunk-3fvc0a79.js +67 -0
  53. package/dist/chunk-3g50kcwk.js +513 -0
  54. package/dist/chunk-3jnmy0nd.js +114 -0
  55. package/dist/chunk-3jzsxj3v.js +310 -0
  56. package/dist/{chunk-frbv3xqa.js → chunk-3mpfxbab.js} +2 -2
  57. package/dist/{chunk-aqa7w38f.js → chunk-3v03e2kz.js} +5 -5
  58. package/dist/chunk-3x5hdd5g.js +1030 -0
  59. package/dist/{chunk-mecs0gpc.js → chunk-3xv7rjsy.js} +14 -11
  60. package/dist/{chunk-j3215c49.js → chunk-3ygnhge8.js} +232 -372
  61. package/dist/chunk-42x5tjk2.js +42 -0
  62. package/dist/chunk-430tvx8d.js +110 -0
  63. package/dist/{chunk-dh6c8y1j.js → chunk-43h8sw5x.js} +3 -3
  64. package/dist/chunk-44d150tz.js +1175 -0
  65. package/dist/chunk-45dj834r.js +115 -0
  66. package/dist/{chunk-yhd82045.js → chunk-46fcr28b.js} +30 -9
  67. package/dist/{chunk-wm2f2f1z.js → chunk-474y75ga.js} +2 -2
  68. package/dist/{chunk-6fkwz9yk.js → chunk-478rpnqm.js} +8 -8
  69. package/dist/{chunk-83z0wrnz.js → chunk-47j9e6m2.js} +2 -2
  70. package/dist/chunk-47wqjw88.js +112 -0
  71. package/dist/{chunk-v4t6dyyh.js → chunk-4cp6193g.js} +2 -2
  72. package/dist/chunk-4h102wt5.js +65 -0
  73. package/dist/{chunk-3mgywd32.js → chunk-4hv90qcz.js} +1 -1
  74. package/dist/chunk-4k2270je.js +295 -0
  75. package/dist/{chunk-2wcbcdky.js → chunk-4k842par.js} +5 -5
  76. package/dist/chunk-4nspekjp.js +69 -0
  77. package/dist/chunk-4pjqtps4.js +151 -0
  78. package/dist/chunk-4sehjy27.js +112 -0
  79. package/dist/{chunk-pgnnrm2v.js → chunk-4t86n23n.js} +21 -17
  80. package/dist/{chunk-2de1vaxf.js → chunk-4whfjn78.js} +68 -78
  81. package/dist/{chunk-41mpwc8h.js → chunk-53c9gb9c.js} +19 -15
  82. package/dist/chunk-53kt8caz.js +122 -0
  83. package/dist/chunk-5a6ahhvy.js +594 -0
  84. package/dist/{chunk-12pv5fez.js → chunk-5gbqknz6.js} +10 -8
  85. package/dist/{chunk-hfzj1m07.js → chunk-5kkvfgzs.js} +14 -5
  86. package/dist/{chunk-4ycz58wj.js → chunk-5pxygepg.js} +68 -8
  87. package/dist/{chunk-2w8633e3.js → chunk-5rgbq3kf.js} +61 -100
  88. package/dist/{chunk-ggqx30m9.js → chunk-5z28bqne.js} +23 -311
  89. package/dist/{chunk-7ejt5gqq.js → chunk-5z8w2q5k.js} +65 -48
  90. package/dist/chunk-60k6v40t.js +70 -0
  91. package/dist/{chunk-p7g7pf3f.js → chunk-61ahbn23.js} +8 -6
  92. package/dist/{chunk-rmbp2das.js → chunk-64pp4hsr.js} +21 -19
  93. package/dist/{chunk-0sb5scxx.js → chunk-652wnf1z.js} +5 -5
  94. package/dist/{chunk-q25bjaev.js → chunk-677as3nh.js} +2 -2
  95. package/dist/{chunk-xs0hwvpa.js → chunk-68pfxvxt.js} +14 -9
  96. package/dist/{chunk-epmheefa.js → chunk-69hys77v.js} +8 -8
  97. package/dist/{chunk-427m88ms.js → chunk-6p1cptq5.js} +9 -9
  98. package/dist/{chunk-0nqrscrr.js → chunk-6p3mtny2.js} +5 -5
  99. package/dist/{chunk-v1mgv1et.js → chunk-6p4cyhb3.js} +4 -3
  100. package/dist/{chunk-m17y8b22.js → chunk-6rxz872v.js} +39 -29
  101. package/dist/chunk-6sjxvthw.js +106 -0
  102. package/dist/{chunk-6mz58s8p.js → chunk-6xana182.js} +18 -14
  103. package/dist/{chunk-vaebptnz.js → chunk-6zn3fm1k.js} +39 -29
  104. package/dist/chunk-704jkbsp.js +183 -0
  105. package/dist/chunk-71sf47by.js +154 -0
  106. package/dist/chunk-73a5g713.js +78 -0
  107. package/dist/chunk-78p7h20f.js +259 -0
  108. package/dist/chunk-7a3b1d4s.js +75 -0
  109. package/dist/{chunk-fpf4cgbt.js → chunk-7bfach0x.js} +9 -9
  110. package/dist/{chunk-ckcagq32.js → chunk-7gqf9wej.js} +5 -5
  111. package/dist/{chunk-sa7nc0vv.js → chunk-7y25wk51.js} +1 -1
  112. package/dist/{chunk-vyd8jzde.js → chunk-81v55vtd.js} +96 -85
  113. package/dist/{chunk-dv1wfr85.js → chunk-8225arm6.js} +5 -4
  114. package/dist/chunk-86715d2d.js +186 -0
  115. package/dist/chunk-8ah9easf.js +365 -0
  116. package/dist/{chunk-rwexx5ns.js → chunk-8baq1s87.js} +1 -3
  117. package/dist/chunk-8fy8hx84.js +386 -0
  118. package/dist/{chunk-4pbx3g7s.js → chunk-8g747a8x.js} +1 -1
  119. package/dist/{chunk-xyqr1cww.js → chunk-8me0yq6v.js} +12 -12
  120. package/dist/{chunk-sdj9b9wh.js → chunk-8pn8tvgg.js} +9 -154
  121. package/dist/chunk-8qxyxgkb.js +161 -0
  122. package/dist/{chunk-ecsw41df.js → chunk-8xs4yp9x.js} +85 -77
  123. package/dist/{chunk-24x87knx.js → chunk-9000dg9h.js} +1327 -2882
  124. package/dist/{chunk-bmvb57qb.js → chunk-905d2hee.js} +5 -5
  125. package/dist/chunk-90qsc60s.js +378 -0
  126. package/dist/chunk-92x6xgex.js +265 -0
  127. package/dist/{chunk-jknt3rxg.js → chunk-9ctg4x6c.js} +7 -9
  128. package/dist/chunk-9e4z7dx7.js +389 -0
  129. package/dist/chunk-9hy6ejmp.js +151 -0
  130. package/dist/chunk-9jvggd30.js +173 -0
  131. package/dist/{chunk-z9tgzh90.js → chunk-9m729tsn.js} +46 -35
  132. package/dist/chunk-9r90d3jt.js +121 -0
  133. package/dist/chunk-9rx2m3cb.js +124 -0
  134. package/dist/chunk-9sr2etaw.js +110 -0
  135. package/dist/chunk-9z8hzgve.js +68 -0
  136. package/dist/{chunk-yxnwsp4f.js → chunk-9zy607vw.js} +8 -6
  137. package/dist/chunk-a0bz6g5e.js +63 -0
  138. package/dist/chunk-a136cvvz.js +27 -0
  139. package/dist/{chunk-n5t9m8h9.js → chunk-a1bjde7d.js} +7 -7
  140. package/dist/{chunk-mvss16tj.js → chunk-a2aj2mtb.js} +414 -636
  141. package/dist/{chunk-8hsyagr8.js → chunk-a3sfy6as.js} +1 -1
  142. package/dist/{chunk-8hq5kk3y.js → chunk-a4twdmhf.js} +3 -2
  143. package/dist/chunk-ae76ded0.js +30 -0
  144. package/dist/chunk-aegyxcne.js +111 -0
  145. package/dist/chunk-aj1dcvrh.js +131 -0
  146. package/dist/{chunk-1yabrspp.js → chunk-amxm6996.js} +2 -2
  147. package/dist/{chunk-t6h4wf3k.js → chunk-ar39mr9c.js} +11 -11
  148. package/dist/{chunk-r6b58y3x.js → chunk-ase86y73.js} +1 -3
  149. package/dist/chunk-asfxrz4f.js +94 -0
  150. package/dist/chunk-axj46c2c.js +196 -0
  151. package/dist/{chunk-m5eb5pt2.js → chunk-ayz6f38j.js} +6 -6
  152. package/dist/{chunk-5b7119h5.js → chunk-b00zd850.js} +8 -6
  153. package/dist/chunk-b2abjkf7.js +126 -0
  154. package/dist/{chunk-8bedvdm1.js → chunk-b81hd3m6.js} +1 -1
  155. package/dist/chunk-bcfd2zw7.js +20 -0
  156. package/dist/{chunk-n5516f5q.js → chunk-bd8zk9tn.js} +4 -4
  157. package/dist/chunk-bhdt6k7w.js +15 -0
  158. package/dist/{chunk-jy35mvy3.js → chunk-bmjmrk76.js} +7 -7
  159. package/dist/chunk-bqaqz1j1.js +126 -0
  160. package/dist/chunk-bsbmmfyt.js +17 -0
  161. package/dist/{chunk-snvypj85.js → chunk-bt64sq5y.js} +3 -2
  162. package/dist/{chunk-zq9xa1xe.js → chunk-bwevztsj.js} +109 -141
  163. package/dist/{chunk-vyc0rjyx.js → chunk-bwg7582d.js} +1 -1
  164. package/dist/{chunk-3be7ka25.js → chunk-bxcfz5gy.js} +1 -1
  165. package/dist/chunk-c2mn2fyg.js +1406 -0
  166. package/dist/chunk-c2tw0dep.js +1811 -0
  167. package/dist/{chunk-402jrnj6.js → chunk-c5bngssh.js} +8 -8
  168. package/dist/chunk-c6sjhj89.js +1284 -0
  169. package/dist/chunk-cb2hpe6k.js +443 -0
  170. package/dist/{chunk-91r0z5qq.js → chunk-ccr1s7qs.js} +1152 -1771
  171. package/dist/chunk-cewqh6rb.js +111 -0
  172. package/dist/{chunk-k9a8jemz.js → chunk-cg01f3ez.js} +7 -7
  173. package/dist/{chunk-f64npa3b.js → chunk-chsyvavm.js} +704 -4
  174. package/dist/{chunk-z8nbjar4.js → chunk-cmcbatgz.js} +7 -5
  175. package/dist/chunk-cnsj3vq2.js +35 -0
  176. package/dist/{chunk-rj86xm6z.js → chunk-cpwe0yw7.js} +1 -1
  177. package/dist/chunk-cqjmxeqv.js +269 -0
  178. package/dist/{chunk-qpm1tmzz.js → chunk-crefny3c.js} +125 -193
  179. package/dist/{chunk-ks0m9njy.js → chunk-d2jekryq.js} +8 -8
  180. package/dist/chunk-d4mdda98.js +94 -0
  181. package/dist/{chunk-26wtxbdc.js → chunk-d7886r6a.js} +6928 -6928
  182. package/dist/chunk-dfkgpfaj.js +135 -0
  183. package/dist/{chunk-9mfbqw9k.js → chunk-dm3n2qgd.js} +4 -4
  184. package/dist/chunk-dnj95atq.js +66 -0
  185. package/dist/{chunk-vjc1svpc.js → chunk-dqgzpb0q.js} +87 -77
  186. package/dist/chunk-drenq3c7.js +383 -0
  187. package/dist/chunk-drkm8yx2.js +34 -0
  188. package/dist/{chunk-ra8fbt9p.js → chunk-dvjzq9x9.js} +543 -874
  189. package/dist/{chunk-w7h2yphx.js → chunk-dwekpr47.js} +2 -2
  190. package/dist/{chunk-49k5ktrj.js → chunk-e18dg1md.js} +31 -16
  191. package/dist/chunk-e396ak46.js +111 -0
  192. package/dist/{chunk-r55r29js.js → chunk-e3c32vwa.js} +191 -276
  193. package/dist/chunk-e3m7kqkb.js +1185 -0
  194. package/dist/{chunk-9cc60ae5.js → chunk-ea9m4e0k.js} +79 -70
  195. package/dist/chunk-ecsa9nd5.js +63 -0
  196. package/dist/{chunk-cmdsbsb6.js → chunk-edzkkadh.js} +2 -2
  197. package/dist/chunk-ek1jasqg.js +142 -0
  198. package/dist/chunk-ep0hwv07.js +126 -0
  199. package/dist/{chunk-cs6y2pc9.js → chunk-ergam9ft.js} +5 -5
  200. package/dist/{chunk-ptwn7qw7.js → chunk-f2k8b4nd.js} +38 -10
  201. package/dist/{chunk-h0rbjg6x.js → chunk-f2mhrmww.js} +8 -1
  202. package/dist/{chunk-s84smrx4.js → chunk-f32cksgw.js} +155 -190
  203. package/dist/{chunk-vzqrbsd1.js → chunk-f69rgsm2.js} +5 -5
  204. package/dist/{chunk-f3bapa1x.js → chunk-f6rbj3gz.js} +12 -7
  205. package/dist/chunk-f7n3xete.js +113 -0
  206. package/dist/chunk-fbest4vx.js +109 -0
  207. package/dist/{chunk-v0wa5ref.js → chunk-fdtcb8qr.js} +13 -555
  208. package/dist/chunk-feh2j8m2.js +136 -0
  209. package/dist/chunk-feyzykye.js +10 -0
  210. package/dist/chunk-fkkysfev.js +158 -0
  211. package/dist/chunk-fn510gqw.js +216 -0
  212. package/dist/{chunk-ch53fgm5.js → chunk-ft9qsa01.js} +13 -11
  213. package/dist/chunk-fw0ckaxh.js +109 -0
  214. package/dist/{chunk-kd97kxjn.js → chunk-fz0ch109.js} +3 -2
  215. package/dist/{chunk-ks0dm6t3.js → chunk-fzn524wa.js} +17 -71
  216. package/dist/chunk-g1k68z1b.js +15 -0
  217. package/dist/{chunk-9t1x831d.js → chunk-g5nb4xhz.js} +86 -74
  218. package/dist/chunk-g82mdy27.js +429 -0
  219. package/dist/{chunk-68qevppc.js → chunk-g8sz060e.js} +82 -72
  220. package/dist/chunk-g9f19ttm.js +15 -0
  221. package/dist/{chunk-zz21rvr7.js → chunk-gdqxtdh4.js} +9 -6
  222. package/dist/chunk-get9fk3h.js +74 -0
  223. package/dist/{chunk-4x5ym4h2.js → chunk-gf6qjt7j.js} +130 -16
  224. package/dist/{chunk-bq6x1ehp.js → chunk-gpz0ddyz.js} +8 -8
  225. package/dist/{chunk-mwp7sj0q.js → chunk-gs5eeqmc.js} +110336 -114801
  226. package/dist/{chunk-qqfa0dqg.js → chunk-h4b85amj.js} +20 -32
  227. package/dist/{chunk-j4c8s7tn.js → chunk-h5zv78zq.js} +9 -6
  228. package/dist/{chunk-cgn27dqf.js → chunk-ha5d5zfj.js} +3 -3
  229. package/dist/{chunk-crr52hf4.js → chunk-han7cwc0.js} +14 -12
  230. package/dist/{chunk-dnyeb288.js → chunk-hbv0tk35.js} +74 -106
  231. package/dist/{chunk-nxsh6de2.js → chunk-hcgkak1j.js} +20 -125
  232. package/dist/{chunk-224x480q.js → chunk-hd1p4hrd.js} +8 -6
  233. package/dist/{chunk-tjaqa99q.js → chunk-hezj20qy.js} +3 -3
  234. package/dist/{chunk-z7pr85qw.js → chunk-hfdyez7b.js} +3 -3
  235. package/dist/chunk-hh7hqa2c.js +272 -0
  236. package/dist/chunk-hk4a2sks.js +83 -0
  237. package/dist/{chunk-5zh1fbrj.js → chunk-hq85v2s7.js} +3 -3
  238. package/dist/chunk-hr06142m.js +117 -0
  239. package/dist/chunk-j1b3r6v6.js +66 -0
  240. package/dist/{chunk-v8xem37v.js → chunk-j2fgn3kq.js} +8 -6
  241. package/dist/chunk-j2wgj22c.js +441 -0
  242. package/dist/{chunk-9gbamk79.js → chunk-j5bth84e.js} +5 -1
  243. package/dist/{chunk-vratq94g.js → chunk-j9gxwbe3.js} +1 -1
  244. package/dist/{chunk-cettj572.js → chunk-ja87jt56.js} +7 -131
  245. package/dist/{chunk-3r24h7t6.js → chunk-jaaxk89e.js} +1 -1
  246. package/dist/{chunk-f4jcw0ea.js → chunk-jaew3662.js} +18 -14
  247. package/dist/{chunk-e1ge9n4d.js → chunk-jb2nh0m0.js} +2 -2
  248. package/dist/{chunk-f9b4wb89.js → chunk-jb4fc073.js} +84 -75
  249. package/dist/chunk-jba8f3hz.js +108 -0
  250. package/dist/{chunk-er9vzjac.js → chunk-jbt0jgtc.js} +16 -14
  251. package/dist/{chunk-v399mzxk.js → chunk-jf0p00fz.js} +2 -2
  252. package/dist/{chunk-vygf94dw.js → chunk-jg4ge4de.js} +78 -69
  253. package/dist/chunk-jkvy2cmt.js +346 -0
  254. package/dist/{chunk-80qg1pzv.js → chunk-jmdy5vdy.js} +11 -9
  255. package/dist/{chunk-dqh7e4mt.js → chunk-jn08nxj8.js} +52 -42
  256. package/dist/{chunk-av73dywf.js → chunk-jna2tcvj.js} +8 -8
  257. package/dist/chunk-jwh384j5.js +126 -0
  258. package/dist/chunk-jwx2scxy.js +222 -0
  259. package/dist/{chunk-41xeh3t9.js → chunk-jy6c07wa.js} +4 -4
  260. package/dist/{chunk-ctmt7xh1.js → chunk-jy77nthd.js} +740 -907
  261. package/dist/{chunk-hzttn8j7.js → chunk-jyjpaqbt.js} +139 -135
  262. package/dist/chunk-jztjnw31.js +147 -0
  263. package/dist/chunk-k0jhzcwg.js +2540 -0
  264. package/dist/{chunk-myzwt5yw.js → chunk-k0kwfqr8.js} +9 -15
  265. package/dist/{chunk-bqfnp99q.js → chunk-k3s4yk22.js} +1 -1
  266. package/dist/{chunk-1dyeexvn.js → chunk-kd3mmsd2.js} +4 -4
  267. package/dist/{chunk-x51h62jq.js → chunk-ke78h68m.js} +78 -69
  268. package/dist/{chunk-1xkekb9y.js → chunk-kfd89dsd.js} +5 -3
  269. package/dist/chunk-ksvvwa9w.js +111 -0
  270. package/dist/{chunk-jy35z4n0.js → chunk-m1z5td19.js} +9 -9
  271. package/dist/{chunk-jafes477.js → chunk-m2bcpk8j.js} +4 -3
  272. package/dist/{chunk-n6fbyke9.js → chunk-m2mzpskw.js} +3 -3
  273. package/dist/{chunk-s2dmn3yg.js → chunk-m47q5mxt.js} +5 -5
  274. package/dist/{chunk-s7qj2hg5.js → chunk-m8vyp6rw.js} +2 -2
  275. package/dist/chunk-mm4m13ng.js +881 -0
  276. package/dist/{chunk-ghr4s9g6.js → chunk-mq1qrwhq.js} +79 -70
  277. package/dist/{chunk-45e9mkyr.js → chunk-mqqw60br.js} +43 -83
  278. package/dist/chunk-mtcdknc8.js +2842 -0
  279. package/dist/{chunk-cvge4pvp.js → chunk-mzd6frw6.js} +2 -2
  280. package/dist/{chunk-n2874aq5.js → chunk-n1neft0d.js} +13 -7
  281. package/dist/{chunk-bcrxtdcy.js → chunk-n2mysxn1.js} +40 -30
  282. package/dist/chunk-n4wkxbq0.js +365 -0
  283. package/dist/chunk-n57dw6h9.js +128 -0
  284. package/dist/chunk-n5wf3b82.js +118 -0
  285. package/dist/{chunk-zgrg0wk3.js → chunk-n7ce94nd.js} +27 -67
  286. package/dist/{chunk-me2ef6g4.js → chunk-n8mpqdje.js} +1 -1
  287. package/dist/{chunk-g5sg6y9q.js → chunk-na2e0dfj.js} +82 -72
  288. package/dist/chunk-netzwgv1.js +154 -0
  289. package/dist/{chunk-xszk7n10.js → chunk-nh3cd07f.js} +1 -1
  290. package/dist/{chunk-5tx8dsy0.js → chunk-npjsp3z3.js} +10493 -18453
  291. package/dist/{chunk-5hva0tsg.js → chunk-p2yv7m0g.js} +6 -6
  292. package/dist/chunk-p4rmbc1e.js +409 -0
  293. package/dist/chunk-p7jdncj4.js +122 -0
  294. package/dist/{chunk-zk2wsm7d.js → chunk-p7vkh4wx.js} +2 -2
  295. package/dist/{chunk-da4ve9t5.js → chunk-p8crqj70.js} +10 -10
  296. package/dist/{chunk-hy3g1nv8.js → chunk-prw4xz5q.js} +9 -7
  297. package/dist/{chunk-zsfxha74.js → chunk-pshjyzq4.js} +8 -7
  298. package/dist/{chunk-684kdqez.js → chunk-q08sb44h.js} +203 -304
  299. package/dist/{chunk-n7158r58.js → chunk-q78bgdtk.js} +79 -70
  300. package/dist/{chunk-e5pntxye.js → chunk-q7tpyeb3.js} +6 -4
  301. package/dist/{chunk-7ymfj7m3.js → chunk-q82r31er.js} +1 -1
  302. package/dist/chunk-qajrkk97.js +298 -0
  303. package/dist/chunk-qbrsmra3.js +23 -0
  304. package/dist/chunk-qhfn4vgv.js +66 -0
  305. package/dist/{chunk-d7mx1phm.js → chunk-qndzvkdx.js} +61 -103
  306. package/dist/{chunk-35y0r56v.js → chunk-qtfc6wdh.js} +1 -4
  307. package/dist/{chunk-v9y80148.js → chunk-qwcnwn5t.js} +100 -191
  308. package/dist/chunk-qwehvedn.js +440 -0
  309. package/dist/{chunk-2cgdr2n7.js → chunk-qwk9fq7r.js} +78 -69
  310. package/dist/chunk-qy75c2vm.js +70 -0
  311. package/dist/{chunk-rryx19hp.js → chunk-r2k2jy0y.js} +2 -2
  312. package/dist/chunk-r47p0ff0.js +61 -0
  313. package/dist/{chunk-t3bf8hcf.js → chunk-r5tk54yt.js} +2 -2
  314. package/dist/{chunk-bt9krt49.js → chunk-r8q993g6.js} +38 -32
  315. package/dist/{chunk-veb0gkcf.js → chunk-ra2rykps.js} +78 -69
  316. package/dist/{chunk-gbcqdr0x.js → chunk-rav5xp8h.js} +1 -1
  317. package/dist/chunk-rbe0tcn9.js +120 -0
  318. package/dist/chunk-rd5cfz3k.js +68 -0
  319. package/dist/{chunk-cenpqc2t.js → chunk-rdvaan98.js} +8 -6
  320. package/dist/{chunk-dr4qq42x.js → chunk-rgbbtszq.js} +9 -9
  321. package/dist/chunk-rjsb9s3q.js +206 -0
  322. package/dist/{chunk-fdwa7gem.js → chunk-rkak3kjw.js} +7 -7
  323. package/dist/{chunk-a6s8wnhe.js → chunk-rnam0xc5.js} +4 -4
  324. package/dist/chunk-rqkqbppr.js +112 -0
  325. package/dist/{chunk-ye18m1zb.js → chunk-rqvqqrpg.js} +38 -8
  326. package/dist/{chunk-rw466wqn.js → chunk-rvkvehat.js} +5284 -3093
  327. package/dist/chunk-s1baskk7.js +14 -0
  328. package/dist/{chunk-jt0pha6y.js → chunk-s5gnvx67.js} +227 -198
  329. package/dist/chunk-s7dtt7tw.js +109 -0
  330. package/dist/chunk-s9ftt1fh.js +135 -0
  331. package/dist/chunk-sc6sy490.js +240 -0
  332. package/dist/chunk-sh9er84d.js +1073 -0
  333. package/dist/{chunk-faycqscv.js → chunk-sk9xag9g.js} +2 -2
  334. package/dist/{chunk-zpc0kwkb.js → chunk-t0g8wbcq.js} +7 -7
  335. package/dist/chunk-tbgm1v8n.js +146 -0
  336. package/dist/{chunk-35b0ek0j.js → chunk-tcdv4gp8.js} +13 -9
  337. package/dist/{chunk-mt25echc.js → chunk-tezak8rx.js} +1 -1
  338. package/dist/chunk-thk6yn51.js +154 -0
  339. package/dist/{chunk-s2gm9vfk.js → chunk-tkf24yhv.js} +7 -7
  340. package/dist/{chunk-6td4c2eq.js → chunk-tkrjcekq.js} +54 -72
  341. package/dist/{chunk-9rcbyag3.js → chunk-tmdbrszg.js} +2 -2
  342. package/dist/chunk-tw2g1yhq.js +118 -0
  343. package/dist/chunk-twzjxwhf.js +182 -0
  344. package/dist/{chunk-m94pnhfa.js → chunk-v4e4f711.js} +39 -29
  345. package/dist/{chunk-b51jjfh5.js → chunk-v5k7zmqm.js} +43 -32
  346. package/dist/chunk-var1et7e.js +66 -0
  347. package/dist/chunk-vd11xbz3.js +304 -0
  348. package/dist/{chunk-hqmz36b3.js → chunk-vf612n57.js} +21 -101
  349. package/dist/chunk-vfhqj46w.js +144 -0
  350. package/dist/chunk-vkxx8ymr.js +2377 -0
  351. package/dist/{chunk-n9x557ea.js → chunk-vs094cby.js} +2332 -4220
  352. package/dist/{chunk-dxc7begm.js → chunk-vtb8z6as.js} +14 -10
  353. package/dist/{chunk-x51mdzqq.js → chunk-vzd3cjy9.js} +3 -3
  354. package/dist/chunk-w2es9743.js +439 -0
  355. package/dist/{chunk-8z039kef.js → chunk-w92b262y.js} +53 -54
  356. package/dist/chunk-wa1dpga1.js +236 -0
  357. package/dist/{chunk-qf2v384j.js → chunk-wbmacbfb.js} +9 -7
  358. package/dist/{chunk-ryj80g9p.js → chunk-wbn46nb4.js} +136 -178
  359. package/dist/{chunk-t9z6njcr.js → chunk-wtycm8km.js} +9 -9
  360. package/dist/{chunk-q6rax9kh.js → chunk-wymtgh88.js} +5 -5
  361. package/dist/{chunk-pa7saazk.js → chunk-x0aj8rh8.js} +28 -56
  362. package/dist/{chunk-1szr63w0.js → chunk-x69w7xr7.js} +86 -74
  363. package/dist/{chunk-k5gdea6r.js → chunk-x6qmm22r.js} +84 -75
  364. package/dist/{chunk-zrse3zpz.js → chunk-xbprynsc.js} +18 -46
  365. package/dist/chunk-xc0v11v6.js +914 -0
  366. package/dist/chunk-xed18bb5.js +233 -0
  367. package/dist/{chunk-gjyc3293.js → chunk-xj76qk4z.js} +288 -499
  368. package/dist/chunk-xmd9eezd.js +83 -0
  369. package/dist/chunk-xrzrbw0f.js +142 -0
  370. package/dist/{chunk-fzxg8v1y.js → chunk-xycy3c8q.js} +15 -12
  371. package/dist/chunk-y0m0rd5v.js +140 -0
  372. package/dist/chunk-y2vtmzre.js +137 -0
  373. package/dist/{chunk-vybkxr18.js → chunk-y5z1cjbk.js} +42 -32
  374. package/dist/chunk-y60q54ph.js +111 -0
  375. package/dist/{chunk-d7vv2ydf.js → chunk-y78t50v0.js} +2 -2
  376. package/dist/{chunk-xkr7as9h.js → chunk-y9bgt2k1.js} +13 -9
  377. package/dist/chunk-ycwdzwz5.js +233 -0
  378. package/dist/chunk-yfyc2y1v.js +136 -0
  379. package/dist/chunk-yg6gtf9j.js +152 -0
  380. package/dist/{chunk-kyer92r4.js → chunk-yk8vcecd.js} +33 -5
  381. package/dist/{chunk-hkn7tzgv.js → chunk-ym5r3jnk.js} +1 -1
  382. package/dist/chunk-yr6gqw17.js +132 -0
  383. package/dist/chunk-yw62vhjz.js +445 -0
  384. package/dist/{chunk-athjeyrt.js → chunk-yw79dz62.js} +4 -4
  385. package/dist/{chunk-5mrhhmas.js → chunk-yx64nmbh.js} +8 -5
  386. package/dist/chunk-yy232vtj.js +84 -0
  387. package/dist/chunk-z1bs6d7k.js +24 -0
  388. package/dist/chunk-z4mgvsdj.js +456 -0
  389. package/dist/chunk-z6e5jp2w.js +119 -0
  390. package/dist/{chunk-t7cbhqd2.js → chunk-z6zt2ns7.js} +111 -123
  391. package/dist/chunk-z735r3p2.js +114 -0
  392. package/dist/{chunk-rjz6btwk.js → chunk-z7ssqvt6.js} +4972 -4638
  393. package/dist/{chunk-bpts9jbq.js → chunk-z8nv1ah0.js} +39 -31
  394. package/dist/chunk-z9mbssbe.js +128 -0
  395. package/dist/chunk-zdctabq6.js +264 -0
  396. package/dist/{chunk-ve60fbtd.js → chunk-ze6zvkg6.js} +2 -2
  397. package/dist/{chunk-t0rgmccj.js → chunk-zejm280k.js} +1 -1
  398. package/dist/{chunk-krstc7m7.js → chunk-zfapazzd.js} +15 -11
  399. package/dist/{chunk-2j0j79p0.js → chunk-zg4ae27v.js} +8 -8
  400. package/dist/chunk-zqxe8qnw.js +3590 -0
  401. package/dist/{chunk-q6dpqj3z.js → chunk-zs2ddzfv.js} +10 -7
  402. package/dist/chunk-zy80g72r.js +512 -0
  403. package/dist/{chunk-g3t0act8.js → chunk-zzm33q8x.js} +1 -1
  404. package/dist/{chunk-s8fzxy94.js → chunk-zzzc1ead.js} +17 -13
  405. package/dist/cli.js +63 -11
  406. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  407. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  408. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  409. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  410. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  411. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  412. package/package.json +8 -5
  413. package/scripts/postinstall.cjs +319 -0
  414. package/dist/chunk-0291smg3.js +0 -42
  415. package/dist/chunk-04g2ty3v.js +0 -104
  416. package/dist/chunk-069x95ne.js +0 -764
  417. package/dist/chunk-06x02eab.js +0 -655
  418. package/dist/chunk-09pjmga5.js +0 -713
  419. package/dist/chunk-0g90je6r.js +0 -145
  420. package/dist/chunk-0paqc2yw.js +0 -15
  421. package/dist/chunk-0rddv9vb.js +0 -328
  422. package/dist/chunk-162w6yv3.js +0 -756
  423. package/dist/chunk-1gjbaa3n.js +0 -128
  424. package/dist/chunk-23wg4mnt.js +0 -404
  425. package/dist/chunk-2gbjtg7c.js +0 -102
  426. package/dist/chunk-2v1q0ezq.js +0 -102
  427. package/dist/chunk-37n7jkxe.js +0 -436
  428. package/dist/chunk-38svjnh4.js +0 -158
  429. package/dist/chunk-3bg1089y.js +0 -616
  430. package/dist/chunk-3d8ck5ne.js +0 -112
  431. package/dist/chunk-3g6rf9sz.js +0 -106
  432. package/dist/chunk-3x3rr2n5.js +0 -57
  433. package/dist/chunk-4f6q3d38.js +0 -117
  434. package/dist/chunk-4h57km3m.js +0 -74
  435. package/dist/chunk-4kyh2618.js +0 -99
  436. package/dist/chunk-4w9vc9vc.js +0 -119
  437. package/dist/chunk-53hqpp5z.js +0 -208
  438. package/dist/chunk-5deqy8r0.js +0 -143
  439. package/dist/chunk-5m2rmc2k.js +0 -128
  440. package/dist/chunk-5wp9pkpt.js +0 -539
  441. package/dist/chunk-5ym9f6w3.js +0 -263
  442. package/dist/chunk-6f938733.js +0 -1027
  443. package/dist/chunk-6nenxecd.js +0 -115
  444. package/dist/chunk-6rja0h86.js +0 -1593
  445. package/dist/chunk-70q6dp4d.js +0 -96
  446. package/dist/chunk-7bn0wzs3.js +0 -1493
  447. package/dist/chunk-7e2e0bfm.js +0 -65
  448. package/dist/chunk-7ywadnax.js +0 -490
  449. package/dist/chunk-7z33j54s.js +0 -142
  450. package/dist/chunk-8yvfkzyh.js +0 -58
  451. package/dist/chunk-9abpx1kv.js +0 -2833
  452. package/dist/chunk-9ks2nswb.js +0 -114
  453. package/dist/chunk-9wrds5tr.js +0 -109
  454. package/dist/chunk-ab2twken.js +0 -102
  455. package/dist/chunk-abncjeag.js +0 -97
  456. package/dist/chunk-am6w4x6y.js +0 -103
  457. package/dist/chunk-b1xt9jqg.js +0 -28
  458. package/dist/chunk-b73bd7db.js +0 -496
  459. package/dist/chunk-bc7nvynh.js +0 -195
  460. package/dist/chunk-br17dhef.js +0 -103
  461. package/dist/chunk-c3k0sdey.js +0 -281
  462. package/dist/chunk-c909bmyv.js +0 -103
  463. package/dist/chunk-cftsv9w4.js +0 -129
  464. package/dist/chunk-cj1a7npk.js +0 -99
  465. package/dist/chunk-cpma9zs5.js +0 -335
  466. package/dist/chunk-cyscs4k5.js +0 -1330
  467. package/dist/chunk-czr7y063.js +0 -348
  468. package/dist/chunk-d93sndem.js +0 -372
  469. package/dist/chunk-ddz8xbpd.js +0 -481
  470. package/dist/chunk-dkhqx4hk.js +0 -84
  471. package/dist/chunk-dsrharmv.js +0 -359
  472. package/dist/chunk-eqmy5d05.js +0 -56
  473. package/dist/chunk-f2crxw2c.js +0 -5400
  474. package/dist/chunk-f8zga40p.js +0 -234
  475. package/dist/chunk-fbgm2ym6.js +0 -990
  476. package/dist/chunk-fcbbsswe.js +0 -119
  477. package/dist/chunk-fda654nt.js +0 -6121
  478. package/dist/chunk-ffmv9ezj.js +0 -104
  479. package/dist/chunk-fmjte7md.js +0 -38
  480. package/dist/chunk-fqtwqxxc.js +0 -293
  481. package/dist/chunk-g8k85nkd.js +0 -802
  482. package/dist/chunk-ge4ak7dj.js +0 -127
  483. package/dist/chunk-gpqemecy.js +0 -126
  484. package/dist/chunk-h19p6s3b.js +0 -131
  485. package/dist/chunk-j0sk1rct.js +0 -998
  486. package/dist/chunk-j1wfpa1a.js +0 -70
  487. package/dist/chunk-j829fx31.js +0 -3458
  488. package/dist/chunk-jqctzrvd.js +0 -722
  489. package/dist/chunk-jx817w05.js +0 -11
  490. package/dist/chunk-ka6sab33.js +0 -174
  491. package/dist/chunk-krjsvmwp.js +0 -101
  492. package/dist/chunk-kvpe50pm.js +0 -311
  493. package/dist/chunk-mez504fj.js +0 -113
  494. package/dist/chunk-mj6wbrae.js +0 -105
  495. package/dist/chunk-n0k8xrey.js +0 -319
  496. package/dist/chunk-n0pg2kpe.js +0 -122
  497. package/dist/chunk-n4qtqkp0.js +0 -295
  498. package/dist/chunk-n9meha2m.js +0 -73
  499. package/dist/chunk-ndk7q5n3.js +0 -169
  500. package/dist/chunk-ng6n9t4h.js +0 -56
  501. package/dist/chunk-p3pz13x2.js +0 -1933
  502. package/dist/chunk-p9ez6zgq.js +0 -2656
  503. package/dist/chunk-ph750kx1.js +0 -550
  504. package/dist/chunk-pxb99zqs.js +0 -117
  505. package/dist/chunk-q1yqc5n3.js +0 -100
  506. package/dist/chunk-q5b91nhh.js +0 -40
  507. package/dist/chunk-qtfqk0jr.js +0 -131
  508. package/dist/chunk-qzfmdh1t.js +0 -388
  509. package/dist/chunk-r3cv0j9n.js +0 -456
  510. package/dist/chunk-rx0pbgym.js +0 -97
  511. package/dist/chunk-s624rd5j.js +0 -531
  512. package/dist/chunk-satndwqj.js +0 -285
  513. package/dist/chunk-ssrxnkd1.js +0 -109
  514. package/dist/chunk-t2pgctqx.js +0 -106
  515. package/dist/chunk-t7sgwf31.js +0 -644
  516. package/dist/chunk-tth904tj.js +0 -53
  517. package/dist/chunk-typpbjhy.js +0 -128
  518. package/dist/chunk-vp6nrhdq.js +0 -102
  519. package/dist/chunk-vtjm53nt.js +0 -432
  520. package/dist/chunk-w412n7tq.js +0 -469
  521. package/dist/chunk-w4153rky.js +0 -1885
  522. package/dist/chunk-wdgv15as.js +0 -212
  523. package/dist/chunk-wgn9kydv.js +0 -58
  524. package/dist/chunk-whknbrk0.js +0 -184
  525. package/dist/chunk-x1k8e1xc.js +0 -56
  526. package/dist/chunk-x45xx6sc.js +0 -105
  527. package/dist/chunk-x4xvqbe5.js +0 -1166
  528. package/dist/chunk-x8b7vft8.js +0 -132
  529. package/dist/chunk-xaycc8qe.js +0 -44
  530. package/dist/chunk-xd4785ks.js +0 -73
  531. package/dist/chunk-xjxgmxhq.js +0 -463
  532. package/dist/chunk-xx2x3tz9.js +0 -166
  533. package/dist/chunk-y2j23eem.js +0 -101
  534. package/dist/chunk-y83j09wv.js +0 -123
  535. package/dist/chunk-yh8460pb.js +0 -119
  536. package/dist/chunk-z6nhchdb.js +0 -60
  537. package/dist/chunk-zbt73sj7.js +0 -192
  538. package/dist/chunk-zmwaatmq.js +0 -118
  539. package/dist/chunk-zvdg9tex.js +0 -135
  540. package/dist/chunk-zwa780cx.js +0 -584
  541. package/dist/{chunk-whvdag1y.js → chunk-3bfs3x0h.js} +9 -9
  542. package/dist/{chunk-27xc1csx.js → chunk-dggvswz1.js} +3 -3
@@ -5,7 +5,7 @@ import {
5
5
  Server,
6
6
  init_server,
7
7
  init_types
8
- } from "./chunk-v4t6dyyh.js";
8
+ } from "./chunk-4cp6193g.js";
9
9
  import {
10
10
  __esm
11
11
  } from "./chunk-qp2qdcda.js";
@@ -293,6 +293,263 @@ function buildComputerUseTools(caps, coordinateMode, installedAppNames) {
293
293
  required: ["app"]
294
294
  }
295
295
  },
296
+ ...caps.platform === "win32" ? [
297
+ {
298
+ name: "window_management",
299
+ description: "Manage the bound application window via Win32 API calls (ShowWindow, SetWindowPos, SendMessage). " + "All operations target the bound HWND directly \u2014 NO global shortcuts (Win+Down, Alt+F4, etc.). " + "The window must have been opened via open_application first. " + "Actions: minimize (hide to taskbar), maximize (fill screen), restore (undo min/max), " + "close (graceful WM_CLOSE), focus (bring to front), move_offscreen (move to -32000,-32000 for background operation). " + "Use move_resize to reposition or resize the window to specific coordinates.",
300
+ inputSchema: {
301
+ type: "object",
302
+ properties: {
303
+ action: {
304
+ type: "string",
305
+ enum: ["minimize", "maximize", "restore", "close", "focus", "move_offscreen", "move_resize", "get_rect"],
306
+ description: "minimize: ShowWindow(SW_MINIMIZE). " + "maximize: ShowWindow(SW_MAXIMIZE). " + "restore: ShowWindow(SW_RESTORE) \u2014 undo minimize or maximize. " + "close: SendMessage(WM_CLOSE) \u2014 graceful close. " + "focus: SetForegroundWindow + BringWindowToTop. " + "move_offscreen: SetWindowPos(-32000,-32000) \u2014 keeps window usable by SendMessage/PrintWindow but invisible. " + "move_resize: SetWindowPos to specific x,y,width,height. " + "get_rect: GetWindowRect \u2014 returns current position and size."
307
+ },
308
+ x: { type: "integer", description: "X position for move_resize." },
309
+ y: { type: "integer", description: "Y position for move_resize." },
310
+ width: { type: "integer", description: "Width for move_resize." },
311
+ height: { type: "integer", description: "Height for move_resize." }
312
+ },
313
+ required: ["action"]
314
+ }
315
+ },
316
+ {
317
+ name: "click_element",
318
+ description: "Click a GUI element by its accessible name, role, or automationId \u2014 no pixel coordinates needed. " + "Uses Windows UI Automation to find the element and InvokePattern to click it. " + "Prefer this over left_click when the element name is visible in the accessibility snapshot. " + "Falls back to BoundingRect center-click if InvokePattern is not supported.",
319
+ inputSchema: {
320
+ type: "object",
321
+ properties: {
322
+ name: {
323
+ type: "string",
324
+ description: 'Accessible name of the element (e.g. "Save", "File", "Search..."). Case-insensitive partial match.'
325
+ },
326
+ role: {
327
+ type: "string",
328
+ description: 'Control type (e.g. "Button", "MenuItem", "Edit", "Link"). Optional \u2014 narrows the search.'
329
+ },
330
+ automationId: {
331
+ type: "string",
332
+ description: "Exact automationId from the accessibility snapshot. Most precise selector."
333
+ }
334
+ },
335
+ required: []
336
+ }
337
+ },
338
+ {
339
+ name: "type_into_element",
340
+ description: "Type text into a named GUI element using Windows UI Automation ValuePattern. " + "Finds the element by name/role/automationId, then sets its value directly \u2014 " + "no need to click first or use pixel coordinates. Works on Edit, ComboBox, and other value-holding controls.",
341
+ inputSchema: {
342
+ type: "object",
343
+ properties: {
344
+ name: { type: "string", description: "Accessible name of the target element." },
345
+ role: { type: "string", description: 'Control type (optional, e.g. "Edit").' },
346
+ automationId: { type: "string", description: "Exact automationId." },
347
+ text: { type: "string", description: "Text to type/set into the element." }
348
+ },
349
+ required: ["text"]
350
+ }
351
+ },
352
+ {
353
+ name: "open_terminal",
354
+ description: "Open a new terminal window and launch an AI agent CLI. " + "This is a workflow tool that automates: open terminal \u2192 type startup command \u2192 press Enter \u2192 wait \u2192 verify. " + "Supported agents: claude (runs 'claude'), codex (runs 'codex'), gemini (runs 'gemini'), " + "or any custom command. After launching, the tool binds to the new terminal window " + "and takes a screenshot to verify the agent started successfully. " + "Use this when the user says: 'open Claude Code', 'start a Codex terminal', 'launch Gemini', etc.",
355
+ inputSchema: {
356
+ type: "object",
357
+ properties: {
358
+ agent: {
359
+ type: "string",
360
+ enum: ["claude", "codex", "gemini", "custom"],
361
+ description: "Which agent to launch. " + "claude: runs 'claude' command. " + "codex: runs 'codex' command. " + "gemini: runs 'gemini' command. " + "custom: runs the command specified in 'command' parameter."
362
+ },
363
+ command: {
364
+ type: "string",
365
+ description: "Custom command to run in the terminal. Only used when agent='custom'. Example: 'python app.py'"
366
+ },
367
+ terminal: {
368
+ type: "string",
369
+ enum: ["wt", "powershell", "cmd"],
370
+ description: "Which terminal to open. Default: 'wt' (Windows Terminal). 'powershell' for PowerShell window, 'cmd' for Command Prompt."
371
+ },
372
+ working_directory: {
373
+ type: "string",
374
+ description: "Working directory for the terminal. If omitted, uses current directory."
375
+ }
376
+ },
377
+ required: ["agent"]
378
+ }
379
+ },
380
+ {
381
+ name: "bind_window",
382
+ description: "Bind to a specific window for all subsequent operations (screenshot, click, type, etc.). " + "Once bound, screenshots capture only that window via PrintWindow, and all input goes through SendMessageW \u2014 " + "no cursor movement, no focus steal, no interference with the user's desktop. " + "Actions: bind (by title, hwnd, or pid), unbind (release binding), status (show current binding), list (show all visible windows). " + "Use 'list' first to see available windows, then 'bind' with a title or hwnd. " + "open_application auto-binds the launched window, but use this tool to bind to already-running windows or switch between windows.",
383
+ inputSchema: {
384
+ type: "object",
385
+ properties: {
386
+ action: {
387
+ type: "string",
388
+ enum: ["bind", "unbind", "status", "list"],
389
+ description: "bind: Bind to a window (specify title, hwnd, or pid). " + "unbind: Release the current binding, return to full-screen mode. " + "status: Show the currently bound window (hwnd, title, rect). " + "list: List all visible windows with hwnd, pid, and title."
390
+ },
391
+ title: {
392
+ type: "string",
393
+ description: "Window title to search for (partial match, case-insensitive). For 'bind' action."
394
+ },
395
+ hwnd: {
396
+ type: "string",
397
+ description: "Exact window handle from 'list' output. For 'bind' action."
398
+ },
399
+ pid: {
400
+ type: "integer",
401
+ description: "Process ID to find window for. For 'bind' action."
402
+ }
403
+ },
404
+ required: ["action"]
405
+ }
406
+ },
407
+ {
408
+ name: "activate_window",
409
+ description: "Activate the bound window: bring it to foreground, click to ensure keyboard focus, " + "and optionally send an initial key sequence. Use this before any input operations to guarantee " + "the window is ready to receive keyboard/mouse events. " + "Combines SetForegroundWindow + BringWindowToTop + SendMessage(WM_LBUTTONDOWN) in one call.",
410
+ inputSchema: {
411
+ type: "object",
412
+ properties: {
413
+ click_x: { type: "integer", description: "X coordinate to click after activation (client-area). If omitted, clicks center of window." },
414
+ click_y: { type: "integer", description: "Y coordinate to click after activation (client-area). If omitted, clicks center of window." }
415
+ },
416
+ required: []
417
+ }
418
+ },
419
+ {
420
+ name: "prompt_respond",
421
+ description: "Handle interactive CLI/terminal prompts (Yes/No, selection menus, confirmations). " + "Sends a sequence of key events to the bound window to navigate and confirm a prompt. " + "This is a convenience wrapper around bound-window keyboard input for common prompt flows. " + "Typical flows: " + "1) Yes/No prompt \u2192 send 'y' or 'n' + Enter. " + "2) Arrow-key selection menu \u2192 send arrow_down/arrow_up N times + Enter. " + "3) Text input prompt \u2192 type the response + Enter. " + "After responding, take a screenshot to verify the result.",
422
+ inputSchema: {
423
+ type: "object",
424
+ properties: {
425
+ response_type: {
426
+ type: "string",
427
+ enum: ["yes", "no", "enter", "escape", "select", "type"],
428
+ description: "yes: send 'y' + Enter. " + "no: send 'n' + Enter. " + "enter: send Enter only. " + "escape: send Escape (cancel). " + "select: use arrow keys to navigate to an option, then Enter. Requires 'arrow_count'. " + "type: type custom text then Enter. Requires 'text'."
429
+ },
430
+ arrow_direction: {
431
+ type: "string",
432
+ enum: ["up", "down"],
433
+ description: "Arrow key direction for 'select' type. Default: 'down'."
434
+ },
435
+ arrow_count: {
436
+ type: "integer",
437
+ description: "Number of arrow key presses for 'select' type. Default: 1.",
438
+ minimum: 0,
439
+ maximum: 50
440
+ },
441
+ text: {
442
+ type: "string",
443
+ description: "Text to type for 'type' response_type."
444
+ }
445
+ },
446
+ required: ["response_type"]
447
+ }
448
+ },
449
+ {
450
+ name: "status_indicator",
451
+ description: "Control the visual status indicator overlay on the bound window. " + "The indicator is a small floating label at the bottom of the window that shows what Computer Use is doing. " + "It auto-shows during click/type/key/scroll operations, but you can also send custom messages. " + "Actions: show (display a custom message), hide (dismiss), status (check if active).",
452
+ inputSchema: {
453
+ type: "object",
454
+ properties: {
455
+ action: {
456
+ type: "string",
457
+ enum: ["show", "hide", "status"],
458
+ description: "show: display a custom message on the indicator. hide: dismiss the indicator. status: check if indicator is active."
459
+ },
460
+ message: {
461
+ type: "string",
462
+ description: "Custom message to display (for 'show' action). Supports emoji. Auto-fades after 2 seconds."
463
+ }
464
+ },
465
+ required: ["action"]
466
+ }
467
+ },
468
+ {
469
+ name: "virtual_keyboard",
470
+ description: "Send keyboard input directly to the bound window via SendMessageW \u2014 independent of the physical keyboard. " + "The user can keep typing on their own keyboard without interference. " + "Supports: single keys, key combinations (Ctrl+S, Alt+F4), text input, and hold-key operations. " + "All input targets the bound HWND only \u2014 no global keyboard events.",
471
+ inputSchema: {
472
+ type: "object",
473
+ properties: {
474
+ action: {
475
+ type: "string",
476
+ enum: ["type", "combo", "press", "release", "hold"],
477
+ description: "type: Send text string via WM_CHAR (Unicode, supports Chinese/emoji). " + "combo: Send a key combination like ctrl+s, alt+f4, ctrl+shift+a (press all, release in reverse). " + "press: Press a key down and hold it (pair with 'release'). " + "release: Release a previously pressed key. " + "hold: Press key(s) for a duration then release."
478
+ },
479
+ text: {
480
+ type: "string",
481
+ description: "For 'type': the text to input. For 'combo': key combination string (e.g. 'ctrl+s', 'alt+tab', 'ctrl+shift+a'). For 'press'/'release': single key name (e.g. 'shift', 'ctrl', 'a')."
482
+ },
483
+ duration: {
484
+ type: "number",
485
+ description: "For 'hold': seconds to hold the key(s) before releasing. Default: 1."
486
+ },
487
+ repeat: {
488
+ type: "integer",
489
+ description: "Number of times to repeat the action. Default: 1.",
490
+ minimum: 1,
491
+ maximum: 100
492
+ }
493
+ },
494
+ required: ["action", "text"]
495
+ }
496
+ },
497
+ {
498
+ name: "virtual_mouse",
499
+ description: "Control a virtual mouse on the bound window via SendMessageW \u2014 independent of the physical mouse. " + "The user's real cursor stays free. All operations target the bound HWND only.",
500
+ inputSchema: {
501
+ type: "object",
502
+ properties: {
503
+ action: {
504
+ type: "string",
505
+ enum: ["click", "double_click", "right_click", "move", "drag", "down", "up"],
506
+ description: "click: left-click at coordinate. " + "double_click: double left-click. " + "right_click: right-click. " + "move: move virtual cursor (visual only, no click). " + "drag: press at start, move to end, release. Requires coordinate (end) and start_coordinate. " + "down: press left button at coordinate (hold). " + "up: release left button at coordinate."
507
+ },
508
+ coordinate: {
509
+ type: "array",
510
+ items: { type: "number" },
511
+ minItems: 2,
512
+ maxItems: 2,
513
+ description: "(x, y) client-area coordinate on the bound window."
514
+ },
515
+ start_coordinate: {
516
+ type: "array",
517
+ items: { type: "number" },
518
+ minItems: 2,
519
+ maxItems: 2,
520
+ description: "(x, y) start point for drag. If omitted, drags from current virtual cursor position."
521
+ }
522
+ },
523
+ required: ["action", "coordinate"]
524
+ }
525
+ },
526
+ {
527
+ name: "mouse_wheel",
528
+ description: "Scroll inside the bound window using mouse wheel (WM_MOUSEWHEEL / WM_MOUSEHWHEEL). " + "Unlike the generic 'scroll' tool which uses WM_VSCROLL (only works on scrollbar controls), " + "mouse_wheel simulates the physical mouse wheel and works on Excel spreadsheets, web pages, " + "code editors, PDF viewers, and any modern UI. " + "Specify the click point within the window where the scroll should occur \u2014 " + "this determines which panel/pane/element receives the scroll.",
529
+ inputSchema: {
530
+ type: "object",
531
+ properties: {
532
+ coordinate: {
533
+ type: "array",
534
+ items: { type: "number" },
535
+ minItems: 2,
536
+ maxItems: 2,
537
+ description: "(x, y) client-area coordinate where the scroll should occur. Determines which element receives the scroll."
538
+ },
539
+ delta: {
540
+ type: "integer",
541
+ description: "Scroll amount in 'clicks'. Positive = scroll up, negative = scroll down. Each click = 3 lines typically. Use -3 to -5 for page-like scrolling."
542
+ },
543
+ direction: {
544
+ type: "string",
545
+ enum: ["vertical", "horizontal"],
546
+ description: "Scroll direction. Default: 'vertical'. Use 'horizontal' for side-scrolling (e.g. wide Excel sheets, timeline views)."
547
+ }
548
+ },
549
+ required: ["coordinate", "delta"]
550
+ }
551
+ }
552
+ ] : [],
296
553
  {
297
554
  name: "switch_display",
298
555
  description: "Switch which monitor subsequent screenshots capture. Use this when the " + "application you need is on a different monitor than the one shown. " + "The screenshot tool tells you which monitor it captured and lists " + "other attached monitors by name \u2014 pass one of those names here. " + "After switching, call screenshot to see the new monitor. " + 'Pass "auto" to return to automatic monitor selection.',
@@ -1166,6 +1423,9 @@ async function runInputActionGates(adapter, overrides, subGates, actionKind) {
1166
1423
  overrides.onAppsHidden?.(hidden);
1167
1424
  }
1168
1425
  }
1426
+ if (adapter.executor.capabilities.screenshotFiltering === "none") {
1427
+ return null;
1428
+ }
1169
1429
  const frontmost = await adapter.executor.getFrontmostApp();
1170
1430
  const tierByBundleId = new Map(overrides.allowedApps.map((a) => [a.bundleId, a.tier]));
1171
1431
  const frontmostTier = frontmost ? tierByBundleId.get(frontmost.bundleId) : undefined;
@@ -1199,6 +1459,9 @@ async function runInputActionGates(adapter, overrides, subGates, actionKind) {
1199
1459
  return errorResult(`"${frontmost.displayName}" is not in the allowed applications and is ` + `currently in front. Take a new screenshot \u2014 it may have appeared ` + `since your last one.`, "app_not_granted");
1200
1460
  }
1201
1461
  async function runHitTestGate(adapter, overrides, subGates, x, y, actionKind) {
1462
+ if (adapter.executor.capabilities.screenshotFiltering === "none") {
1463
+ return null;
1464
+ }
1202
1465
  const target = await adapter.executor.appUnderPoint(x, y);
1203
1466
  if (!target)
1204
1467
  return null;
@@ -1281,9 +1544,9 @@ function resolveRequestedApps(requestedNames, installed, alreadyGrantedBundleIds
1281
1544
  resolved = byLowerDisplayName.get(requested.toLowerCase());
1282
1545
  }
1283
1546
  if (!resolved) {
1284
- const lower = requested.toLowerCase();
1285
- for (const app of installed) {
1286
- if (app.displayName.toLowerCase().includes(lower)) {
1547
+ const clean = requested.toLowerCase().replace(/\.exe$/, "").trim();
1548
+ for (const [name, app] of byLowerDisplayName) {
1549
+ if (name.includes(clean) || clean.includes(name)) {
1287
1550
  resolved = app;
1288
1551
  break;
1289
1552
  }
@@ -1922,6 +2185,8 @@ async function handleScreenshot(adapter, overrides, subGates) {
1922
2185
  content: [
1923
2186
  ...monitorNote2 ? [{ type: "text", text: monitorNote2 }] : [],
1924
2187
  ...hiddenNote2 ? [{ type: "text", text: hiddenNote2 }] : [],
2188
+ ...shot2.accessibilityText ? [{ type: "text", text: `GUI elements in this window:
2189
+ ${shot2.accessibilityText}` }] : [],
1925
2190
  {
1926
2191
  type: "image",
1927
2192
  data: shot2.base64,
@@ -1949,6 +2214,8 @@ async function handleScreenshot(adapter, overrides, subGates) {
1949
2214
  content: [
1950
2215
  ...monitorNote ? [{ type: "text", text: monitorNote }] : [],
1951
2216
  ...hiddenNote ? [{ type: "text", text: hiddenNote }] : [],
2217
+ ...shot.accessibilityText ? [{ type: "text", text: `GUI elements in this window:
2218
+ ${shot.accessibilityText}` }] : [],
1952
2219
  {
1953
2220
  type: "image",
1954
2221
  data: shot.base64,
@@ -2207,6 +2474,355 @@ async function handleOpenApplication(adapter, args, overrides) {
2207
2474
  }
2208
2475
  return okText(`Opened "${app}".`);
2209
2476
  }
2477
+ async function handleVirtualMouse(adapter, args) {
2478
+ if (!adapter.executor.virtualMouse) {
2479
+ return errorResult("virtual_mouse is only available on Windows with a bound window.", "feature_unavailable");
2480
+ }
2481
+ const action = requireString(args, "action");
2482
+ if (action instanceof Error)
2483
+ return errorResult(action.message, "bad_args");
2484
+ const coord = args.coordinate;
2485
+ if (!Array.isArray(coord) || coord.length < 2) {
2486
+ return errorResult("coordinate [x, y] is required.", "bad_args");
2487
+ }
2488
+ const validActions = new Set(["click", "double_click", "right_click", "move", "drag", "down", "up"]);
2489
+ if (!validActions.has(action)) {
2490
+ return errorResult(`Invalid action "${action}". Valid: ${[...validActions].join(", ")}`, "bad_args");
2491
+ }
2492
+ const startCoord = Array.isArray(args.start_coordinate) ? args.start_coordinate : undefined;
2493
+ const ok = await adapter.executor.virtualMouse({
2494
+ action,
2495
+ x: coord[0],
2496
+ y: coord[1],
2497
+ startX: startCoord?.[0],
2498
+ startY: startCoord?.[1]
2499
+ });
2500
+ if (!ok) {
2501
+ return errorResult("No window is currently bound.", "bad_args");
2502
+ }
2503
+ const desc = {
2504
+ click: `Click at (${coord[0]},${coord[1]})`,
2505
+ double_click: `Double-click at (${coord[0]},${coord[1]})`,
2506
+ right_click: `Right-click at (${coord[0]},${coord[1]})`,
2507
+ move: `Moved to (${coord[0]},${coord[1]})`,
2508
+ drag: `Dragged ${startCoord ? `(${startCoord[0]},${startCoord[1]})` : "current"} \u2192 (${coord[0]},${coord[1]})`,
2509
+ down: `Button down at (${coord[0]},${coord[1]})`,
2510
+ up: `Button up at (${coord[0]},${coord[1]})`
2511
+ };
2512
+ return okText(desc[action] ?? action);
2513
+ }
2514
+ async function handleVirtualKeyboard(adapter, args) {
2515
+ if (!adapter.executor.virtualKeyboard) {
2516
+ return errorResult("virtual_keyboard is only available on Windows with a bound window.", "feature_unavailable");
2517
+ }
2518
+ const action = requireString(args, "action");
2519
+ if (action instanceof Error)
2520
+ return errorResult(action.message, "bad_args");
2521
+ const text = requireString(args, "text");
2522
+ if (text instanceof Error)
2523
+ return errorResult(text.message, "bad_args");
2524
+ const validActions = new Set(["type", "combo", "press", "release", "hold"]);
2525
+ if (!validActions.has(action)) {
2526
+ return errorResult(`Invalid action "${action}". Valid: ${[...validActions].join(", ")}`, "bad_args");
2527
+ }
2528
+ const duration = typeof args.duration === "number" ? args.duration : undefined;
2529
+ const repeat = typeof args.repeat === "number" ? args.repeat : undefined;
2530
+ const ok = await adapter.executor.virtualKeyboard({
2531
+ action,
2532
+ text,
2533
+ duration,
2534
+ repeat
2535
+ });
2536
+ if (!ok) {
2537
+ return errorResult("No window is currently bound. Use open_application or bind_window first.", "bad_args");
2538
+ }
2539
+ const desc = {
2540
+ type: `Typed "${text.length > 40 ? text.slice(0, 40) + "..." : text}"`,
2541
+ combo: `Sent ${text}`,
2542
+ press: `Pressed ${text} (holding)`,
2543
+ release: `Released ${text}`,
2544
+ hold: `Held ${text} for ${duration ?? 1}s`
2545
+ };
2546
+ return okText(`${desc[action]}${repeat && repeat > 1 ? ` \xD7${repeat}` : ""}`);
2547
+ }
2548
+ async function handleStatusIndicator(adapter, args) {
2549
+ if (!adapter.executor.statusIndicator) {
2550
+ return errorResult("status_indicator is only available on Windows.", "feature_unavailable");
2551
+ }
2552
+ const action = requireString(args, "action");
2553
+ if (action instanceof Error)
2554
+ return errorResult(action.message, "bad_args");
2555
+ if (!["show", "hide", "status"].includes(action)) {
2556
+ return errorResult(`Invalid action "${action}". Valid: show, hide, status.`, "bad_args");
2557
+ }
2558
+ const message = typeof args.message === "string" ? args.message : undefined;
2559
+ if (action === "show" && !message) {
2560
+ return errorResult("'show' requires a message parameter.", "bad_args");
2561
+ }
2562
+ const result = await adapter.executor.statusIndicator(action, message);
2563
+ if (action === "status") {
2564
+ return okText(result.active ? "Indicator is active on the bound window." : "Indicator is not active (no window bound).");
2565
+ }
2566
+ if (action === "show") {
2567
+ return okText(`Indicator showing: "${message}"`);
2568
+ }
2569
+ return okText("Indicator hidden.");
2570
+ }
2571
+ async function handleMouseWheel(adapter, args) {
2572
+ if (!adapter.executor.mouseWheel) {
2573
+ return errorResult("mouse_wheel is only available on Windows with a bound window.", "feature_unavailable");
2574
+ }
2575
+ const coord = args.coordinate;
2576
+ if (!Array.isArray(coord) || coord.length < 2) {
2577
+ return errorResult("coordinate must be [x, y] array.", "bad_args");
2578
+ }
2579
+ const delta = typeof args.delta === "number" ? args.delta : undefined;
2580
+ if (delta === undefined) {
2581
+ return errorResult("delta is required (positive=up, negative=down).", "bad_args");
2582
+ }
2583
+ const horizontal = args.direction === "horizontal";
2584
+ const ok = await adapter.executor.mouseWheel(coord[0], coord[1], delta, horizontal);
2585
+ if (!ok) {
2586
+ return errorResult("No window is currently bound. Use open_application or bind_window first.", "bad_args");
2587
+ }
2588
+ return okText(`Mouse wheel: ${horizontal ? "horizontal" : "vertical"} scroll ${delta > 0 ? "up" : "down"} ${Math.abs(delta)} click(s) at (${coord[0]},${coord[1]}).`);
2589
+ }
2590
+ async function handleActivateWindow(adapter, args) {
2591
+ if (!adapter.executor.activateWindow) {
2592
+ return errorResult("activate_window is only available on Windows with a bound window.", "feature_unavailable");
2593
+ }
2594
+ const clickX = typeof args.click_x === "number" ? args.click_x : undefined;
2595
+ const clickY = typeof args.click_y === "number" ? args.click_y : undefined;
2596
+ const ok = await adapter.executor.activateWindow(clickX, clickY);
2597
+ if (!ok) {
2598
+ return errorResult("No window is currently bound. Use open_application or bind_window first.", "bad_args");
2599
+ }
2600
+ return okText("Window activated and focused. Ready for input.");
2601
+ }
2602
+ async function handlePromptRespond(adapter, args) {
2603
+ if (!adapter.executor.respondToPrompt) {
2604
+ return errorResult("prompt_respond is only available on Windows with a bound window.", "feature_unavailable");
2605
+ }
2606
+ const responseType = requireString(args, "response_type");
2607
+ if (responseType instanceof Error)
2608
+ return errorResult(responseType.message, "bad_args");
2609
+ const validTypes = new Set(["yes", "no", "enter", "escape", "select", "type"]);
2610
+ if (!validTypes.has(responseType)) {
2611
+ return errorResult(`Invalid response_type "${responseType}". Valid: ${[...validTypes].join(", ")}`, "bad_args");
2612
+ }
2613
+ if (responseType === "select" && typeof args.arrow_count !== "number") {
2614
+ return errorResult("'select' requires arrow_count parameter.", "bad_args");
2615
+ }
2616
+ if (responseType === "type" && typeof args.text !== "string") {
2617
+ return errorResult("'type' requires text parameter.", "bad_args");
2618
+ }
2619
+ const ok = await adapter.executor.respondToPrompt({
2620
+ responseType,
2621
+ arrowDirection: typeof args.arrow_direction === "string" ? args.arrow_direction : undefined,
2622
+ arrowCount: typeof args.arrow_count === "number" ? args.arrow_count : undefined,
2623
+ text: typeof args.text === "string" ? args.text : undefined
2624
+ });
2625
+ if (!ok) {
2626
+ return errorResult("No window is currently bound. Use open_application or bind_window first.", "bad_args");
2627
+ }
2628
+ const descriptions = {
2629
+ yes: "Sent 'y' + Enter.",
2630
+ no: "Sent 'n' + Enter.",
2631
+ enter: "Sent Enter.",
2632
+ escape: "Sent Escape.",
2633
+ select: `Navigated ${args.arrow_direction ?? "down"} ${args.arrow_count ?? 1} time(s) + Enter.`,
2634
+ type: `Typed "${args.text}" + Enter.`
2635
+ };
2636
+ return okText(`Prompt responded: ${descriptions[responseType] ?? responseType}. Take a screenshot to verify.`);
2637
+ }
2638
+ async function handleOpenTerminal(adapter, args) {
2639
+ if (!adapter.executor.openTerminal) {
2640
+ return errorResult("open_terminal is only available on Windows.", "feature_unavailable");
2641
+ }
2642
+ const agent = requireString(args, "agent");
2643
+ if (agent instanceof Error)
2644
+ return errorResult(agent.message, "bad_args");
2645
+ const validAgents = new Set(["claude", "codex", "gemini", "custom"]);
2646
+ if (!validAgents.has(agent)) {
2647
+ return errorResult(`Invalid agent "${agent}". Valid: claude, codex, gemini, custom.`, "bad_args");
2648
+ }
2649
+ if (agent === "custom" && typeof args.command !== "string") {
2650
+ return errorResult("agent='custom' requires 'command' parameter.", "bad_args");
2651
+ }
2652
+ const result = await adapter.executor.openTerminal({
2653
+ agent,
2654
+ command: typeof args.command === "string" ? args.command : undefined,
2655
+ terminal: typeof args.terminal === "string" ? args.terminal : undefined,
2656
+ workingDirectory: typeof args.working_directory === "string" ? args.working_directory : undefined
2657
+ });
2658
+ if (!result) {
2659
+ return errorResult("Failed to open terminal. Windows Terminal (wt.exe) may not be installed.", "launch_failed");
2660
+ }
2661
+ if (!result.launched) {
2662
+ return okText(`Terminal opened (hwnd=${result.hwnd}, "${result.title}") but no command was sent. Window is now bound.`);
2663
+ }
2664
+ const agentNames = {
2665
+ claude: "Claude Code",
2666
+ codex: "Codex",
2667
+ gemini: "Gemini",
2668
+ custom: args.command
2669
+ };
2670
+ return okText(`Terminal opened and ${agentNames[agent] ?? agent} launched.
2671
+ ` + `Window: hwnd=${result.hwnd} "${result.title}"
2672
+ ` + `Command: '${agent === "custom" ? args.command : agent}' + Enter
2673
+ ` + `Status: bound to this terminal. Take a screenshot to verify the agent started.`);
2674
+ }
2675
+ async function handleBindWindow(adapter, args) {
2676
+ const action = requireString(args, "action");
2677
+ if (action instanceof Error)
2678
+ return errorResult(action.message, "bad_args");
2679
+ switch (action) {
2680
+ case "list": {
2681
+ if (!adapter.executor.listVisibleWindows) {
2682
+ return errorResult("bind_window is only available on Windows.", "feature_unavailable");
2683
+ }
2684
+ const windows = await adapter.executor.listVisibleWindows();
2685
+ if (windows.length === 0)
2686
+ return okText("No visible windows found.");
2687
+ const lines = windows.map((w) => `hwnd=${w.hwnd} pid=${w.pid} "${w.title}"`);
2688
+ return okText(`Visible windows (${windows.length}):
2689
+ ${lines.join(`
2690
+ `)}`);
2691
+ }
2692
+ case "status": {
2693
+ if (!adapter.executor.getBindingStatus) {
2694
+ return errorResult("bind_window is only available on Windows.", "feature_unavailable");
2695
+ }
2696
+ const status = await adapter.executor.getBindingStatus();
2697
+ if (!status || !status.bound) {
2698
+ return okText("No window is currently bound. Use bind_window(action='list') to see available windows, then bind_window(action='bind', title='...') to bind.");
2699
+ }
2700
+ let text = `Bound to: hwnd=${status.hwnd}`;
2701
+ if (status.title)
2702
+ text += ` "${status.title}"`;
2703
+ if (status.pid)
2704
+ text += ` pid=${status.pid}`;
2705
+ if (status.rect)
2706
+ text += ` rect=(${status.rect.x},${status.rect.y} ${status.rect.width}x${status.rect.height})`;
2707
+ return okText(text);
2708
+ }
2709
+ case "bind": {
2710
+ if (!adapter.executor.bindToWindow) {
2711
+ return errorResult("bind_window is only available on Windows.", "feature_unavailable");
2712
+ }
2713
+ const title = typeof args.title === "string" ? args.title : undefined;
2714
+ const hwnd = typeof args.hwnd === "string" ? args.hwnd : undefined;
2715
+ const pid = typeof args.pid === "number" ? args.pid : undefined;
2716
+ if (!title && !hwnd && !pid) {
2717
+ return errorResult("Specify at least one of: title, hwnd, or pid.", "bad_args");
2718
+ }
2719
+ const result = await adapter.executor.bindToWindow({ hwnd, title, pid });
2720
+ if (!result) {
2721
+ return errorResult(`No window found matching: ${[title && `title="${title}"`, hwnd && `hwnd=${hwnd}`, pid && `pid=${pid}`].filter(Boolean).join(", ")}. Use bind_window(action='list') to see available windows.`, "element_not_found");
2722
+ }
2723
+ return okText(`Bound to window: hwnd=${result.hwnd} pid=${result.pid} "${result.title}". All subsequent screenshot/click/type operations target this window.`);
2724
+ }
2725
+ case "unbind": {
2726
+ if (!adapter.executor.unbindFromWindow) {
2727
+ return errorResult("bind_window is only available on Windows.", "feature_unavailable");
2728
+ }
2729
+ await adapter.executor.unbindFromWindow();
2730
+ return okText("Window binding released. Operations now target the full screen.");
2731
+ }
2732
+ default:
2733
+ return errorResult(`Unknown bind_window action "${action}". Valid: list, bind, unbind, status.`, "bad_args");
2734
+ }
2735
+ }
2736
+ async function handleClickElement(adapter, args) {
2737
+ if (!adapter.executor.clickElement) {
2738
+ return errorResult("click_element is only available on Windows with a bound window.", "feature_unavailable");
2739
+ }
2740
+ const name = typeof args.name === "string" ? args.name : undefined;
2741
+ const role = typeof args.role === "string" ? args.role : undefined;
2742
+ const automationId = typeof args.automationId === "string" ? args.automationId : undefined;
2743
+ if (!name && !role && !automationId) {
2744
+ return errorResult("At least one of name, role, or automationId is required.", "bad_args");
2745
+ }
2746
+ const ok = await adapter.executor.clickElement({ name, role, automationId });
2747
+ if (!ok) {
2748
+ return errorResult(`Element not found: ${[name && `name="${name}"`, role && `role=${role}`, automationId && `id=${automationId}`].filter(Boolean).join(", ")}. Take a screenshot to see current GUI elements.`, "element_not_found");
2749
+ }
2750
+ return okText(`Clicked element: ${[name && `"${name}"`, role, automationId].filter(Boolean).join(" ")}`);
2751
+ }
2752
+ async function handleTypeIntoElement(adapter, args) {
2753
+ if (!adapter.executor.typeIntoElement) {
2754
+ return errorResult("type_into_element is only available on Windows with a bound window.", "feature_unavailable");
2755
+ }
2756
+ const text = requireString(args, "text");
2757
+ if (text instanceof Error)
2758
+ return errorResult(text.message, "bad_args");
2759
+ const name = typeof args.name === "string" ? args.name : undefined;
2760
+ const role = typeof args.role === "string" ? args.role : undefined;
2761
+ const automationId = typeof args.automationId === "string" ? args.automationId : undefined;
2762
+ const ok = await adapter.executor.typeIntoElement({ name, role, automationId }, text);
2763
+ if (!ok) {
2764
+ return errorResult(`Could not type into element: ${[name && `name="${name}"`, role && `role=${role}`, automationId && `id=${automationId}`].filter(Boolean).join(", ")}. The element was not found or doesn't support text input.`, "element_not_found");
2765
+ }
2766
+ return okText(`Typed ${text.length} chars into: ${[name && `"${name}"`, role, automationId].filter(Boolean).join(" ")}`);
2767
+ }
2768
+ async function handleWindowManagement(adapter, args) {
2769
+ const action = requireString(args, "action");
2770
+ if (action instanceof Error)
2771
+ return errorResult(action.message, "bad_args");
2772
+ const VALID_ACTIONS = new Set([
2773
+ "minimize",
2774
+ "maximize",
2775
+ "restore",
2776
+ "close",
2777
+ "focus",
2778
+ "move_offscreen",
2779
+ "move_resize",
2780
+ "get_rect"
2781
+ ]);
2782
+ if (!VALID_ACTIONS.has(action)) {
2783
+ return errorResult(`Unknown window_management action "${action}". Valid: ${[...VALID_ACTIONS].join(", ")}`, "bad_args");
2784
+ }
2785
+ if (!adapter.executor.manageWindow) {
2786
+ return errorResult("window_management is only available on Windows with a bound window.", "feature_unavailable");
2787
+ }
2788
+ if (action === "get_rect") {
2789
+ if (!adapter.executor.getWindowRect) {
2790
+ return errorResult("getWindowRect not available.", "feature_unavailable");
2791
+ }
2792
+ const rect = await adapter.executor.getWindowRect();
2793
+ if (!rect) {
2794
+ return errorResult("No window is currently bound. Call open_application first.", "bad_args");
2795
+ }
2796
+ return okText(`Window rect: x=${rect.x}, y=${rect.y}, width=${rect.width}, height=${rect.height}`);
2797
+ }
2798
+ if (action === "move_resize") {
2799
+ const x = typeof args.x === "number" ? args.x : undefined;
2800
+ const y = typeof args.y === "number" ? args.y : undefined;
2801
+ if (x === undefined || y === undefined) {
2802
+ return errorResult("move_resize requires x and y parameters.", "bad_args");
2803
+ }
2804
+ const width = typeof args.width === "number" ? args.width : undefined;
2805
+ const height = typeof args.height === "number" ? args.height : undefined;
2806
+ const ok2 = await adapter.executor.manageWindow(action, { x, y, width, height });
2807
+ if (!ok2) {
2808
+ return errorResult("No window is currently bound. Call open_application first.", "bad_args");
2809
+ }
2810
+ return okText(width && height ? `Moved window to (${x}, ${y}) and resized to ${width}\xD7${height}.` : `Moved window to (${x}, ${y}).`);
2811
+ }
2812
+ const ok = await adapter.executor.manageWindow(action);
2813
+ if (!ok) {
2814
+ return errorResult("No window is currently bound. Call open_application first.", "bad_args");
2815
+ }
2816
+ const descriptions = {
2817
+ minimize: "Window minimized (ShowWindow SW_MINIMIZE).",
2818
+ maximize: "Window maximized (ShowWindow SW_MAXIMIZE).",
2819
+ restore: "Window restored (ShowWindow SW_RESTORE).",
2820
+ close: "Window closed (SendMessage WM_CLOSE). The window binding has been released.",
2821
+ focus: "Window brought to front (SetForegroundWindow).",
2822
+ move_offscreen: "Window moved offscreen (-32000,-32000). Still usable via SendMessage/PrintWindow."
2823
+ };
2824
+ return okText(descriptions[action] ?? `Action "${action}" completed.`);
2825
+ }
2210
2826
  async function handleSwitchDisplay(adapter, args, overrides) {
2211
2827
  const display = requireString(args, "display");
2212
2828
  if (display instanceof Error)
@@ -2432,6 +3048,68 @@ function firstTextContent(r) {
2432
3048
  return first && first.type === "text" ? first.text : "";
2433
3049
  }
2434
3050
  async function dispatchAction(name, a, adapter, overrides, subGates) {
3051
+ const hasBoundWindow = await adapter.executor.hasBoundWindow?.() === true && adapter.executor.virtualMouse && adapter.executor.virtualKeyboard;
3052
+ if (hasBoundWindow) {
3053
+ const coord = Array.isArray(a.coordinate) ? a.coordinate : undefined;
3054
+ switch (name) {
3055
+ case "left_click":
3056
+ if (coord)
3057
+ return handleVirtualMouse(adapter, { action: "click", coordinate: coord });
3058
+ break;
3059
+ case "double_click":
3060
+ if (coord)
3061
+ return handleVirtualMouse(adapter, { action: "double_click", coordinate: coord });
3062
+ break;
3063
+ case "right_click":
3064
+ if (coord)
3065
+ return handleVirtualMouse(adapter, { action: "right_click", coordinate: coord });
3066
+ break;
3067
+ case "mouse_move":
3068
+ if (coord)
3069
+ return handleVirtualMouse(adapter, { action: "move", coordinate: coord });
3070
+ break;
3071
+ case "left_click_drag":
3072
+ if (coord)
3073
+ return handleVirtualMouse(adapter, {
3074
+ action: "drag",
3075
+ coordinate: coord,
3076
+ start_coordinate: Array.isArray(a.start_coordinate) ? a.start_coordinate : undefined
3077
+ });
3078
+ break;
3079
+ case "left_mouse_down":
3080
+ if (coord)
3081
+ return handleVirtualMouse(adapter, { action: "down", coordinate: coord });
3082
+ break;
3083
+ case "left_mouse_up":
3084
+ if (coord)
3085
+ return handleVirtualMouse(adapter, { action: "up", coordinate: coord });
3086
+ break;
3087
+ case "type":
3088
+ if (typeof a.text === "string")
3089
+ return handleVirtualKeyboard(adapter, { action: "type", text: a.text });
3090
+ break;
3091
+ case "key":
3092
+ if (typeof a.text === "string")
3093
+ return handleVirtualKeyboard(adapter, { action: "combo", text: a.text, repeat: a.repeat });
3094
+ break;
3095
+ case "hold_key":
3096
+ if (typeof a.text === "string")
3097
+ return handleVirtualKeyboard(adapter, {
3098
+ action: "hold",
3099
+ text: a.text,
3100
+ duration: typeof a.duration === "number" ? a.duration : 1
3101
+ });
3102
+ break;
3103
+ case "scroll":
3104
+ if (coord)
3105
+ return handleMouseWheel(adapter, {
3106
+ coordinate: coord,
3107
+ delta: a.scroll_direction === "up" ? a.scroll_amount ?? 3 : -(a.scroll_amount ?? 3),
3108
+ direction: a.scroll_direction === "left" || a.scroll_direction === "right" ? "horizontal" : "vertical"
3109
+ });
3110
+ break;
3111
+ }
3112
+ }
2435
3113
  switch (name) {
2436
3114
  case "screenshot":
2437
3115
  return handleScreenshot(adapter, overrides, subGates);
@@ -2469,6 +3147,28 @@ async function dispatchAction(name, a, adapter, overrides, subGates) {
2469
3147
  return handleLeftMouseUp(adapter, overrides, subGates);
2470
3148
  case "open_application":
2471
3149
  return handleOpenApplication(adapter, a, overrides);
3150
+ case "window_management":
3151
+ return handleWindowManagement(adapter, a);
3152
+ case "click_element":
3153
+ return handleClickElement(adapter, a);
3154
+ case "type_into_element":
3155
+ return handleTypeIntoElement(adapter, a);
3156
+ case "open_terminal":
3157
+ return handleOpenTerminal(adapter, a);
3158
+ case "bind_window":
3159
+ return handleBindWindow(adapter, a);
3160
+ case "virtual_mouse":
3161
+ return handleVirtualMouse(adapter, a);
3162
+ case "virtual_keyboard":
3163
+ return handleVirtualKeyboard(adapter, a);
3164
+ case "status_indicator":
3165
+ return handleStatusIndicator(adapter, a);
3166
+ case "mouse_wheel":
3167
+ return handleMouseWheel(adapter, a);
3168
+ case "activate_window":
3169
+ return handleActivateWindow(adapter, a);
3170
+ case "prompt_respond":
3171
+ return handlePromptRespond(adapter, a);
2472
3172
  case "switch_display":
2473
3173
  return handleSwitchDisplay(adapter, a, overrides);
2474
3174
  case "list_granted_applications":