easytouch-linux 1.0.6

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 (4) hide show
  1. package/README.md +450 -0
  2. package/et +0 -0
  3. package/install.js +19 -0
  4. package/package.json +43 -0
package/README.md ADDED
@@ -0,0 +1,450 @@
1
+ # EasyTouch (et)
2
+
3
+ 跨平台系统自动化操作工具,支持 Windows、Linux、macOS。提供 CLI 命令行和 MCP 服务器两种使用方式,支持鼠标键盘控制、屏幕截图、窗口管理、系统信息查询、浏览器操作等功能。
4
+
5
+ 目前:
6
+
7
+ - [x] Windows
8
+ - [ ] Linux
9
+ - [ ] MAC(目前缺少设备验证功能)
10
+
11
+
12
+
13
+ 大家平时使用各类 AI 编程工具,写页面是不是经常碰到 AI 写的页面怎么也不满意,写出来跟设计稿差异很大,这是因为 AI 只能通过读写代码来改进代码,它看不到界面,不像人类有感官。
14
+
15
+ 所以 EasyTouch 是给 AI 装上手和眼睛。
16
+
17
+ ![image-20260224090852873](images/image-20260224090852873.png)
18
+
19
+ ![image-20260224093052367](images/image-20260224093052367.png)
20
+
21
+ ![image-20260224093505950](images/image-20260224093505950.png)
22
+
23
+
24
+
25
+ ## 功能概览
26
+
27
+ | 模块 | 功能 |
28
+ |------|------|
29
+ | 🖱️ 鼠标控制 | 移动、点击、滚动、获取位置 |
30
+ | ⌨️ 键盘控制 | 按键、组合键、文本输入 |
31
+ | 📷 屏幕操作 | 截图、获取像素颜色、多显示器支持 |
32
+ | 🪟 窗口管理 | 列出、查找、激活窗口 |
33
+ | 🖥️ 系统信息 | CPU、内存、磁盘、进程 |
34
+ | 📋 剪贴板 | 文本读写、文件列表 |
35
+ | 🌐 浏览器控制 | 启动浏览器、页面导航、元素交互、截图 |
36
+
37
+
38
+
39
+ 提示:在 Linux 里,由于桌面环境差异很大,有些功能在某些桌面系统下可能不可用,详见 [Linux](#Linux) 环境说明。
40
+
41
+
42
+
43
+ ### 安装
44
+
45
+ ```bash
46
+ # Windows
47
+ npm i @whuanle/easytouch-windows
48
+
49
+ # Linux
50
+ npm i @whuanle/easytouch-linux
51
+
52
+ # macOS
53
+ npm i @whuanle/easytouch-mac
54
+ ```
55
+
56
+
57
+
58
+ 或者从[https://github.com/whuanle/EasyTouch/releases](https://github.com/whuanle/EasyTouch/releases)下载对应平台的可执行文件,并添加环境变量。
59
+
60
+
61
+
62
+ 执行 `et --help` 命令测试是否正常工作:
63
+
64
+ ```
65
+ PS E:\workspace\EasyTouch> et --help
66
+ EasyTouch Windows Automation Tool
67
+
68
+ Usage: et <command> [options]
69
+
70
+ Commands:
71
+ mouse_move --x <n> --y <n> [--relative] [--duration <ms>]
72
+ mouse_click [--button left|right|middle] [--double]
73
+ mouse_position
74
+ key_press --key <key>
75
+ type_text --text <text> [--interval <ms>] [--human]
76
+ screenshot [--output <path>] [--x <n>] [--y <n>] [--width <n>] [--height <n>]
77
+ pixel_color --x <n> --y <n>
78
+ window_list [--visible-only] [--filter <text>]
79
+ window_find [--title <text>] [--class <name>] [--pid <n>]
80
+ window_activate --title <text> | --handle <n>
81
+ window_foreground
82
+ os_info, cpu_info, memory_info, disk_list
83
+ process_list [--filter <text>]
84
+ clipboard_get_text, clipboard_set_text --text <text>
85
+
86
+ help Show this help
87
+ version Show version
88
+ {"success":true}
89
+ ```
90
+
91
+
92
+
93
+ ### 浏览器操作支持
94
+
95
+ 支持浏览器:`chromium` / `firefox` / `webkit` / `edge`(`edge` 走 Chromium 通道 `msedge`)。
96
+
97
+ 浏览器操作建议按会话流程执行:先启动,再获取 `browserId`,后续所有命令都使用该 `browserId`。
98
+
99
+ ```bash
100
+ et browser_launch --browser edge --headless false
101
+ et browser_list
102
+ # 使用 browserId 执行后续命令
103
+ et browser_navigate --browser-id browser_1 --url "https://example.com"
104
+ ```
105
+
106
+
107
+
108
+ ### 作为 Skills 给 AI 使用
109
+
110
+ 只需要执行命令安装 skills 即可。
111
+
112
+ ```bash
113
+ npx skills add https://github.com/whuanle/EasyTouch
114
+ ```
115
+
116
+
117
+
118
+ 注:skills 里面不带脚本,需提前使用 `npm i @whuanle/easytouch-windows` 安装工具。
119
+
120
+ ![image-20260224090411080](images/image-20260224090411080.png)
121
+
122
+
123
+
124
+ ### 作为 MCP 工具使用
125
+
126
+ 如果只是给 AI 工具使用,建议使用 skills 即可,配置 MCP 可能会麻烦一些。
127
+
128
+ 在 Claude、Cursor 等工具中,配置 MCP 的方式都是大同小异,通过 npm/bun 等方式安装的 EasyTouch,程序文件在 `$basedir/node_modules/@whuanle/easytouch-windows` 下面,。
129
+
130
+
131
+
132
+ 在配置文件中添加:
133
+
134
+ **Windows**
135
+
136
+ ```json
137
+ {
138
+ "mcpServers": {
139
+ "easytouch": {
140
+ "command": "C:\\path\\to\\et.exe",
141
+ "args": ["--mcp"]
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ **NPM 安装方式**
148
+
149
+ ```json
150
+ {
151
+ "mcpServers": {
152
+ "easytouch": {
153
+ "command": "npx",
154
+ "args": ["-y", "easytouch-windows", "--mcp"]
155
+ }
156
+ }
157
+ }
158
+ ```
159
+
160
+ **Linux / macOS**
161
+
162
+ ```json
163
+ {
164
+ "mcpServers": {
165
+ "easytouch": {
166
+ "command": "/path/to/et",
167
+ "args": ["--mcp"]
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+
174
+
175
+
176
+
177
+ ## CLI 命令参考
178
+
179
+ ### 鼠标控制
180
+
181
+ ```bash
182
+ # 移动鼠标(绝对坐标)
183
+ et mouse_move --x 100 --y 200
184
+
185
+ # 相对移动
186
+ t mouse_move --x 50 --y -30 --relative
187
+
188
+ # 平滑移动(500ms 动画)
189
+ et mouse_move --x 100 --y 200 --duration 500
190
+
191
+ # 左键单击(默认)
192
+ et mouse_click
193
+
194
+ # 右键双击
195
+ t mouse_click --button right --double
196
+
197
+ # 向上滚动3格
198
+ t mouse_scroll --amount 3
199
+
200
+ # 水平滚动
201
+ t mouse_scroll --amount 3 --horizontal
202
+
203
+ # 获取当前位置
204
+ t mouse_position
205
+ ```
206
+
207
+ ### 键盘控制
208
+
209
+ ```bash
210
+ # 按下单个键
211
+ t key_press --key "enter"
212
+
213
+ # 组合键
214
+ t key_press --key "ctrl+c"
215
+ t key_press --key "alt+tab"
216
+ t key_press --key "win+d"
217
+
218
+ # 输入文本
219
+ t type_text --text "Hello World"
220
+
221
+ # 模拟人工打字(带随机间隔)
222
+ t type_text --text "Hello World" --human --interval 50
223
+ ```
224
+
225
+ ### 屏幕操作
226
+
227
+ ```bash
228
+ # 全屏截图
229
+ t screenshot --output screenshot.png
230
+
231
+ # 区域截图
232
+ t screenshot --x 100 --y 100 --width 800 --height 600 --output region.png
233
+
234
+ # 获取像素颜色
235
+ t pixel_color --x 100 --y 200
236
+
237
+ # 列出显示器
238
+ t screen_list
239
+ ```
240
+
241
+ ### 窗口管理
242
+
243
+ ```bash
244
+ # 列出可见窗口
245
+ t window_list
246
+
247
+ # 按标题过滤
248
+ t window_list --filter "Chrome"
249
+
250
+ # 查找窗口
251
+ t window_find --title "记事本"
252
+
253
+ # 激活窗口
254
+ t window_activate --title "记事本"
255
+
256
+ # 获取前台窗口
257
+ t window_foreground
258
+ ```
259
+
260
+ ### 系统信息
261
+
262
+ ```bash
263
+ # 操作系统信息
264
+ et os_info
265
+
266
+ # CPU 信息
267
+ et cpu_info
268
+
269
+ # 内存信息
270
+ et memory_info
271
+
272
+ # 磁盘列表
273
+ et disk_list
274
+
275
+ # 进程列表
276
+ et process_list --filter "chrome"
277
+
278
+ # 锁定屏幕
279
+ et lock_screen
280
+ ```
281
+
282
+ ### 剪贴板
283
+
284
+ ```bash
285
+ # 获取文本
286
+ et clipboard_get_text
287
+
288
+ # 设置文本
289
+ et clipboard_set_text --text "Hello World"
290
+
291
+ # 清空
292
+ et clipboard_clear
293
+
294
+ # 获取文件列表
295
+ et clipboard_get_files
296
+ ```
297
+
298
+
299
+
300
+ ### 浏览器控制
301
+
302
+
303
+
304
+ 使用 `et browser_launch --browser` 命令启动浏览器后(匿名模式),使用 `et browser_list` 获取浏览器实例列表,之后可以使用不同的命令控制浏览器,最后可以自行关闭或使用 `et browser_close` 关闭浏览器。
305
+
306
+
307
+
308
+ ```bash
309
+ # 列出浏览器实例
310
+ et browser_list
311
+
312
+ # 启动 Chromium(无头模式)
313
+ et browser_launch --browser chromium --headless
314
+
315
+ # 启动 Edge(有界面)
316
+ et browser_launch --browser edge --headless false
317
+
318
+ # 打开页面
319
+ et browser_navigate --browser-id <id> --url "https://example.com"
320
+
321
+ # 导航控制
322
+ et browser_go_back --browser-id <id>
323
+ et browser_go_forward --browser-id <id>
324
+ et browser_reload --browser-id <id>
325
+
326
+ # 点击元素
327
+ et browser_click --browser-id <id> --selector "#submit"
328
+
329
+ # 输入内容
330
+ et browser_fill --browser-id <id> --selector "input[name='q']" --value "EasyTouch"
331
+
332
+ # 滚动页面(按像素)
333
+ et browser_scroll --browser-id <id> --x 0 --y 800 --behavior smooth
334
+
335
+ # 下拉选择
336
+ et browser_select --browser-id <id> --selector "#city" --values "beijing"
337
+
338
+ # 文件上传(多个文件用逗号分隔)
339
+ et browser_upload --browser-id <id> --selector "input[type='file']" --files "a.txt,b.txt"
340
+
341
+ # 页面截图
342
+ et browser_screenshot --browser-id <id> --output page.png --full-page true
343
+
344
+ # 执行脚本
345
+ et browser_evaluate --browser-id <id> --script "document.title"
346
+
347
+ # 读取页面信息
348
+ et browser_page_info --browser-id <id>
349
+
350
+ # Cookie 管理
351
+ et browser_get_cookies --browser-id <id>
352
+ et browser_set_cookie --browser-id <id> --name token --value abc --domain example.com --path / --http-only true --secure true --same-site lax
353
+ et browser_clear_cookies --browser-id <id>
354
+
355
+ # 执行本地 JS/TS Playwright 测试脚本
356
+ et browser_run_script --script-path "./tests/example.spec.ts" --browser edge --headless true
357
+
358
+ # 透传 Playwright CLI 参数(CSV)
359
+ et browser_run_script --script-path "./tests/login.spec.ts" --browser chromium --extra-args "--reporter=list,--workers=1"
360
+
361
+ # 文本断言(自动化测试)
362
+ et browser_assert_text --browser-id <id> --selector "h1" --expected-text "Example Domain" --exact-match true
363
+
364
+ # 关闭浏览器
365
+ et browser_close --browser-id <id>
366
+ ```
367
+
368
+
369
+
370
+ ### MCP Tools
371
+
372
+ | Tool | 描述 |
373
+ |------|------|
374
+ | `mouse_move` | 移动鼠标 |
375
+ | `mouse_click` | 点击鼠标 |
376
+ | `mouse_position` | 获取鼠标位置 |
377
+ | `key_press` | 按下按键 |
378
+ | `type_text` | 输入文本 |
379
+ | `screenshot` | 截图 |
380
+ | `pixel_color` | 获取像素颜色 |
381
+ | `window_list` | 列出窗口 |
382
+ | `window_find` | 查找窗口 |
383
+ | `window_activate` | 激活窗口 |
384
+ | `system_info` | 系统信息 |
385
+ | `process_list` | 进程列表 |
386
+ | `clipboard_get_text` | 获取剪贴板文本 |
387
+ | `clipboard_set_text` | 设置剪贴板文本 |
388
+ | `browser_launch` | 启动浏览器 |
389
+ | `browser_navigate` | 页面导航 |
390
+ | `browser_click` | 点击页面元素 |
391
+ | `browser_fill` | 填充输入框 |
392
+ | `browser_find` | 查找页面元素 |
393
+ | `browser_get_text` | 获取页面文本 |
394
+ | `browser_screenshot` | 浏览器截图 |
395
+ | `browser_evaluate` | 执行页面脚本 |
396
+ | `browser_wait_for` | 等待元素状态 |
397
+ | `browser_assert_text` | 断言页面或元素文本 |
398
+ | `browser_page_info` | 获取页面信息 |
399
+ | `browser_go_back` / `browser_go_forward` / `browser_reload` | 页面导航控制 |
400
+ | `browser_scroll` | 页面/元素滚动 |
401
+ | `browser_select` | 下拉选择 |
402
+ | `browser_upload` | 文件上传 |
403
+ | `browser_get_cookies` / `browser_set_cookie` / `browser_clear_cookies` | Cookie 管理 |
404
+ | `browser_run_script` | 执行 JS/TS Playwright 测试脚本 |
405
+ | `browser_close` | 关闭浏览器 |
406
+ | `browser_list` | 列出浏览器实例 |
407
+
408
+
409
+
410
+ 更多 MCP 使用文档见 [skills/SKILLS.md](skills/SKILLS.md)
411
+
412
+
413
+
414
+ ## 平台说明
415
+
416
+ ### Windows
417
+ - 完全支持所有功能
418
+ - 部分功能可能需要管理员权限
419
+
420
+ ### Linux
421
+ - 官方验证环境:Ubuntu Desktop(22.04 / 24.04)
422
+ - 其他发行版和桌面环境为 best-effort,建议先用测试脚本验证
423
+ - 建议在图形界面环境中使用(优先 X11 会话)
424
+ - 有些功能可能需要 sudo 管理员权限
425
+
426
+ Linux 依赖可手动安装(Ubuntu):
427
+
428
+ ```bash
429
+ # 基础依赖(推荐)
430
+ sudo apt install xdotool xclip xsel imagemagick gnome-screenshot
431
+
432
+ # Wayland 补充依赖(按需)
433
+ sudo apt install ydotool wl-clipboard grim
434
+ ```
435
+
436
+ 安装后可执行脚本测试兼容性:
437
+
438
+ ```bash
439
+ node scripts/test-easytouch.js --cli-only --verbose
440
+ ```
441
+
442
+ ### macOS
443
+ - 需要授予辅助功能权限(系统设置 → 隐私与安全性 → 辅助功能)
444
+ - 截图功能需要屏幕录制权限
445
+
446
+
447
+
448
+ ## 许可证
449
+
450
+ MIT License
package/et ADDED
Binary file
package/install.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+
6
+ const binaryPath = path.join(__dirname, 'et');
7
+
8
+ try {
9
+ if (!fs.existsSync(binaryPath)) {
10
+ console.error(`❌ EasyTouch binary not found: ${binaryPath}`);
11
+ process.exit(1);
12
+ }
13
+
14
+ fs.chmodSync(binaryPath, 0o755);
15
+ console.log(`✓ Set executable permission: ${binaryPath}`);
16
+ } catch (error) {
17
+ console.error(`❌ Failed to set executable permission: ${error.message}`);
18
+ process.exit(1);
19
+ }
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "easytouch-linux",
3
+ "version": "1.0.6",
4
+ "description": "Linux system automation tool with MCP support",
5
+ "author": "MaomiAgent Team",
6
+ "license": "MIT",
7
+ "main": "et",
8
+ "bin": {
9
+ "et": "et"
10
+ },
11
+ "scripts": {
12
+ "postinstall": "node install.js"
13
+ },
14
+ "os": [
15
+ "linux"
16
+ ],
17
+ "cpu": [
18
+ "x64"
19
+ ],
20
+ "keywords": [
21
+ "linux",
22
+ "automation",
23
+ "mcp",
24
+ "mouse",
25
+ "keyboard",
26
+ "screenshot",
27
+ "window-management"
28
+ ],
29
+ "mcp": {
30
+ "transport": "stdio",
31
+ "command": "et",
32
+ "args": ["--mcp"]
33
+ },
34
+ "files": [
35
+ "et",
36
+ "install.js",
37
+ "SKILL.md"
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/whuanle/EasyTouch"
42
+ }
43
+ }