computer-agent-mcp 0.1.0__tar.gz

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 (49) hide show
  1. computer_agent_mcp-0.1.0/PKG-INFO +517 -0
  2. computer_agent_mcp-0.1.0/README.md +490 -0
  3. computer_agent_mcp-0.1.0/computer_agent_mcp/__init__.py +6 -0
  4. computer_agent_mcp-0.1.0/computer_agent_mcp/__main__.py +8 -0
  5. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/busy.ani +0 -0
  6. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/diagonal_resize_nesw.ani +0 -0
  7. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/diagonal_resize_nwse.ani +0 -0
  8. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/hand_select.ani +0 -0
  9. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/help_select.ani +0 -0
  10. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/horizontal_resize.ani +0 -0
  11. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/link_select.ani +0 -0
  12. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/move.ani +0 -0
  13. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/normal_select.ani +0 -0
  14. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/precision_select.ani +0 -0
  15. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/text_select.ani +0 -0
  16. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/unavailable.ani +0 -0
  17. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/vertical_resize.ani +0 -0
  18. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/wait.ani +0 -0
  19. computer_agent_mcp-0.1.0/computer_agent_mcp/assets/cursor/working_in_background.ani +0 -0
  20. computer_agent_mcp-0.1.0/computer_agent_mcp/config.py +91 -0
  21. computer_agent_mcp-0.1.0/computer_agent_mcp/debug.py +73 -0
  22. computer_agent_mcp-0.1.0/computer_agent_mcp/executor.py +450 -0
  23. computer_agent_mcp-0.1.0/computer_agent_mcp/keys.py +84 -0
  24. computer_agent_mcp-0.1.0/computer_agent_mcp/models.py +231 -0
  25. computer_agent_mcp-0.1.0/computer_agent_mcp/monitor.py +231 -0
  26. computer_agent_mcp-0.1.0/computer_agent_mcp/openai_adapter.py +147 -0
  27. computer_agent_mcp-0.1.0/computer_agent_mcp/platform.py +27 -0
  28. computer_agent_mcp-0.1.0/computer_agent_mcp/platform_base.py +395 -0
  29. computer_agent_mcp-0.1.0/computer_agent_mcp/platform_windows.py +233 -0
  30. computer_agent_mcp-0.1.0/computer_agent_mcp/prompts.py +107 -0
  31. computer_agent_mcp-0.1.0/computer_agent_mcp/response_parsing.py +64 -0
  32. computer_agent_mcp-0.1.0/computer_agent_mcp/runner.py +701 -0
  33. computer_agent_mcp-0.1.0/computer_agent_mcp/server.py +259 -0
  34. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/PKG-INFO +517 -0
  35. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/SOURCES.txt +47 -0
  36. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/dependency_links.txt +1 -0
  37. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/entry_points.txt +2 -0
  38. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/requires.txt +9 -0
  39. computer_agent_mcp-0.1.0/computer_agent_mcp.egg-info/top_level.txt +4 -0
  40. computer_agent_mcp-0.1.0/pyproject.toml +49 -0
  41. computer_agent_mcp-0.1.0/setup.cfg +4 -0
  42. computer_agent_mcp-0.1.0/tests/test_config.py +34 -0
  43. computer_agent_mcp-0.1.0/tests/test_executor.py +71 -0
  44. computer_agent_mcp-0.1.0/tests/test_monitor.py +10 -0
  45. computer_agent_mcp-0.1.0/tests/test_platform_base.py +143 -0
  46. computer_agent_mcp-0.1.0/tests/test_platform_windows.py +9 -0
  47. computer_agent_mcp-0.1.0/tests/test_response_parsing.py +33 -0
  48. computer_agent_mcp-0.1.0/tests/test_runner.py +604 -0
  49. computer_agent_mcp-0.1.0/tests/test_server.py +74 -0
@@ -0,0 +1,517 @@
1
+ Metadata-Version: 2.4
2
+ Name: computer-agent-mcp
3
+ Version: 0.1.0
4
+ Summary: Stateless black-box computer-use MCP server powered by a vision worker.
5
+ Project-URL: Homepage, https://github.com/visionki/computer-agent-mcp
6
+ Project-URL: Repository, https://github.com/visionki/computer-agent-mcp
7
+ Project-URL: Issues, https://github.com/visionki/computer-agent-mcp/issues
8
+ Keywords: mcp,model-context-protocol,computer-use,desktop-automation,openai
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: Microsoft :: Windows
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
16
+ Classifier: Topic :: Utilities
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ Requires-Dist: openai>=2.20.0
20
+ Requires-Dist: mcp[cli]>=1.13.0
21
+ Requires-Dist: pydantic>=2.8.0
22
+ Requires-Dist: mss>=10.0.0
23
+ Requires-Dist: Pillow>=10.4.0
24
+ Requires-Dist: pynput>=1.7.7
25
+ Provides-Extra: dev
26
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
27
+
28
+ # computer-agent-mcp
29
+
30
+ 一个面向通用 MCP host 的黑盒桌面任务 MCP。
31
+
32
+ 当前实现的核心思路是:
33
+
34
+ 1. 服务端捕获当前桌面截图
35
+ 2. 服务端把任务、结构化近期执行轨迹、累计过程记忆和最新截图发给内部视觉模型
36
+ 3. 模型基于当前截图返回观察、过程记忆增量、动作计划、期望结果,以及它看到的画面尺寸
37
+ 4. 服务端按模型声明尺寸与真实截图尺寸做坐标换算
38
+ 5. 服务端本地执行动作并继续循环
39
+ 6. 对外只返回任务级结果,不把截图暴露给外部主 Agent
40
+
41
+ ## 当前实现状态
42
+
43
+ 截至当前版本,项目按下面这些前提运行:
44
+
45
+ - 仅支持 Windows
46
+ - 对外是无状态 task tool
47
+ - 每次调用都必须完整描述任务
48
+ - 服务端不提供 `resume` / `continuation_token`
49
+ - 新任务会抢占旧任务
50
+ - 内部默认使用 `Responses API + message + vision`,而不是原生 `computer` tool
51
+ - 单次 run 内会维护累计 memory,但不会跨调用持久化
52
+ - 模型需要返回它实际使用的 `image_width` / `image_height`
53
+ - 服务端据此做坐标缩放
54
+ - 允许模型在单轮返回多动作 batch
55
+
56
+ 这意味着它不是“官方 computer use 的直接封装”,而是一个更偏工程化的黑盒视觉执行器。
57
+
58
+ ## 为什么这样做
59
+
60
+ 当前第三方 OpenAI-compatible 上游在原生 `computer` 路径上的兼容性并不稳定:
61
+
62
+ - 有的上游直接不支持
63
+ - 有的 `message` 和 `computer` 路径使用不同坐标系
64
+ - 有的 provider 会把图片内部归一化到更小画布
65
+
66
+ 相比之下,普通图片消息路径通常更兼容。
67
+
68
+ 因此本项目当前选择:
69
+
70
+ - 内部走更稳的 `message + vision`
71
+ - 外部保持任务级黑盒接口
72
+ - 由服务端自己处理截图、历史裁剪、坐标换算和动作执行
73
+
74
+ ## 对外工具
75
+
76
+ ### `computer_list_displays`
77
+
78
+ 列出可用显示器。
79
+
80
+ 适用场景:
81
+
82
+ - 多显示器环境
83
+ - 需要显式选择非主屏
84
+
85
+ 大多数情况下可以直接使用默认 `display_id="primary"`。
86
+
87
+ ### `computer_use_task`
88
+
89
+ 运行一个无状态黑盒桌面任务。
90
+
91
+ 输入:
92
+
93
+ - `task`
94
+ - `display_id`,默认 `primary`
95
+ - `max_steps`,可选
96
+
97
+ 返回:
98
+
99
+ - `status`
100
+ - `completed`
101
+ - `blocked`
102
+ - `failed`
103
+ - `summary`
104
+ - `result`
105
+ - `run_id`
106
+ - `steps_executed`
107
+ - `block_reason`
108
+ - `next_user_action`
109
+ - `warnings[]`
110
+ - `memory[]`
111
+ - `trace[]`
112
+ - `step_index`
113
+ - `observation`
114
+ - `memory_update`
115
+ - `summary`
116
+ - `actions[]`
117
+ - `expected_outcome`
118
+ - `execution_status`
119
+ - `execution_message`
120
+ - `resulting_window_title`
121
+
122
+ 字段语义:
123
+
124
+ - `summary`
125
+ - 简短结果或本轮意图描述
126
+ - `result`
127
+ - 更完整的最终交付内容
128
+ - `memory`
129
+ - 单次 run 内累计得到的过程记忆
130
+ - 例如已收集到的评论原文、候选项、标题、金额、页面要点
131
+ - `next_user_action`
132
+ - 仅在 `blocked` 时使用,用于告诉人类下一步该做什么
133
+ - `trace`
134
+ - 按时间线记录每一轮的:
135
+ - 当前观察
136
+ - 本轮新增记忆
137
+ - 本轮意图
138
+ - 动作
139
+ - 期望结果
140
+ - 执行结果
141
+
142
+ 注意:
143
+
144
+ - 这是无状态接口
145
+ - 每次调用都会从“当前桌面”重新开始
146
+ - 服务端不会跨调用保留截图、history 或 memory
147
+ - 如果上一次被打断,外部需要根据当前画面重新完整描述任务
148
+ - 如果结果是 `block_reason=human_override`,不要直接自动重试;应先询问用户为什么介入、当前画面是否仍可继续,再决定是否重新调用
149
+ - tool result 同时包含:
150
+ - `structuredContent`
151
+ - 完整 JSON 结果
152
+ - `content`
153
+ - 人类可读摘要,包含 `result`、累计 `memory` 和完整时间线 trace
154
+
155
+ ### 运行中 progress
156
+
157
+ 长任务执行期间,服务端会持续发送 MCP `notifications/progress`。
158
+
159
+ 典型消息包括:
160
+
161
+ - `Capturing current screen`
162
+ - `Requesting vision worker for step 1`
163
+ - `Still waiting for vision worker for step 1`
164
+ - `Step 1 action 1/2: wait 1500ms`
165
+ - `Step 1 action 1/2: waiting 1500ms (500/1500ms)`
166
+ - `Capturing updated screen after step 1`
167
+ - `Finished`
168
+
169
+ ## 运行语义
170
+
171
+ ### 无状态
172
+
173
+ 服务端不维护跨调用任务上下文。
174
+
175
+ 所以:
176
+
177
+ - 不要假设有 resume
178
+ - 不要假设会记住旧截图
179
+ - 不要假设会跨调用记住旧 memory
180
+ - 每次调用都必须给完整任务目标
181
+
182
+ 但在单次 run 内,服务端会维护两类内部状态:
183
+
184
+ - `history`
185
+ - 近期执行轨迹,告诉模型前几步做了什么
186
+ - `memory`
187
+ - 本轮任务过程中累计得到的任务相关信息
188
+ - 每轮模型只返回新增的 `memory_update`
189
+ - 服务端负责追加并在下一轮继续带回模型
190
+
191
+ ### 新任务抢占旧任务
192
+
193
+ 桌面控制本质上是单活动任务模型。
194
+
195
+ 当前实现里:
196
+
197
+ - 同时只允许一个活动任务
198
+ - 如果新任务进来,会向旧任务发送取消信号
199
+ - 旧任务会以 `superseded` 结束
200
+ - 新任务接管执行
201
+
202
+ ### 批量动作
203
+
204
+ 模型单轮可以返回多个动作:
205
+
206
+ - 服务端按顺序执行
207
+ - 一旦其中某个动作失败/超时/被人工打断,后续动作不再执行
208
+ - 执行完当前批次后再重新截图进入下一轮
209
+
210
+ 当任务目标依赖中间画面的信息读取、收集、比较或验证时,提示词会明确要求模型优先采用更小的动作批次,避免一次跳过多个可能有信息价值的中间状态。
211
+
212
+ ### 人工优先
213
+
214
+ 如果本地用户真实介入键盘或鼠标:
215
+
216
+ - 当前执行会停止
217
+ - 任务返回 `blocked`
218
+ - `block_reason` 为 `human_override`
219
+ - 外部调用方不应无条件自动重试,而应先向用户确认介入原因,以及是否希望从当前画面继续
220
+
221
+ ## 坐标与图片策略
222
+
223
+ 当前实现不主动缩小截图后再发给模型。
224
+
225
+ 取而代之的是:
226
+
227
+ - 发送当前截图原图
228
+ - 发给模型的是原始截图,不额外叠加鼠标准心;debug 保存的截图可单独叠加准心辅助排查
229
+ - Windows 默认会在单次 run 期间临时切换系统鼠标样式,用来提示“AI 正在控制”;run 结束后会自动恢复当前用户的光标方案
230
+ - 这套 Windows 控制光标资源默认放在 `computer_agent_mcp/assets/cursor/`,以语义英文文件名组织,例如 `normal_select.ani`、`text_select.ani`、`wait.ani`
231
+ - 如需关闭这项本地提示,可设置 `COMPUTER_AGENT_CONTROL_CURSOR=false`
232
+ - 如果控制光标初始化、资源加载或恢复失败,任务本身不会因此中断;服务端会降级继续执行,并把原因写入 `warnings`
233
+ - 要求模型显式返回:
234
+ - `image_width`
235
+ - `image_height`
236
+ - 以及基于该尺寸的动作坐标
237
+ - 服务端根据:
238
+ - 模型声明尺寸
239
+ - 真实截图尺寸
240
+ 做等比换算
241
+
242
+ 这样做的原因是:不同上游对视觉输入的内部工作画布并不一致,盲信 `detail=original` 不够可靠。
243
+
244
+ ## 内部动作集合
245
+
246
+ 当前内部动作语义包括:
247
+
248
+ - `move`
249
+ - `click`
250
+ - `double_click`
251
+ - `right_click`
252
+ - `drag`
253
+ - `scroll`
254
+ - `type`
255
+ - `keypress`
256
+ - `wait`
257
+
258
+ 其中:
259
+
260
+ - `scroll` 使用语义化方向
261
+ - `direction="down"` 表示页面向后滚动到更靠后的内容
262
+ - `direction="up"` 表示页面回到更靠前的内容
263
+ - 任何会触发鼠标定位的动作(如 `click` / `drag` / `scroll`)都会先以可见轨迹将指针移动到目标位置,再执行对应动作
264
+ - 上面的“AI 控制中”鼠标指示只作用于本地用户界面提示,不会叠加进发给模型的截图
265
+ - `type` 会受最大字符数限制
266
+ - `wait` / `type` / 鼠标动作执行过程中都会检查:
267
+ - 人工接管
268
+ - 新任务抢占
269
+ - kill switch
270
+ - 总任务 deadline
271
+
272
+ ## 阻塞与失败
273
+
274
+ 服务端不会主动做一套“官方式风险确认拦截”。
275
+
276
+ 当前阻塞/失败更多来自:
277
+
278
+ - 模型自己返回 `blocked`
279
+ - 人工接管
280
+ - 超时
281
+ - kill switch
282
+ - 执行器错误
283
+ - 新任务抢占
284
+
285
+ 常见 `block_reason` 可能包括:
286
+
287
+ - `human_override`
288
+ - `timeout`
289
+ - `superseded`
290
+ - `environment_error`
291
+ - `ambiguous`
292
+ - 以及模型自己返回的阻塞原因
293
+
294
+ ## 调试模式
295
+
296
+ 支持完整 run 级调试记录。
297
+
298
+ 默认目录:
299
+
300
+ - `.computer_agent_mcp_debug/<run_id>/`
301
+
302
+ 每一轮任务会生成独立 run 目录,里面通常包括:
303
+
304
+ - `events.jsonl`
305
+ - 全量事件时间线
306
+ - 现在也会记录 progress 序列
307
+ - `task.txt`
308
+ - 原始任务描述
309
+ - `run_config.json`
310
+ - 本轮运行配置摘要
311
+ - `result.json`
312
+ - 最终任务结果,包含 `result`、累计 `memory` 和 trace
313
+ - `step_XX_request.json`
314
+ - 发给模型的该轮完整请求摘要
315
+ - 图片 base64 会被占位符替代
316
+ - 包含最近 history 和当前累计 memory
317
+ - `step_XX_response.json`
318
+ - 该轮模型响应摘要
319
+ - 包含解析后的 decision、usage 和 raw response
320
+ - `images/`
321
+ - 原始截图
322
+ - 动作覆盖图
323
+
324
+ 这套输出就是你调试定位错误、模型决策错误、执行器映射错误时的主要依据。
325
+
326
+ 相关环境变量:
327
+
328
+ - `COMPUTER_AGENT_DEBUG=0`
329
+ - 关闭 debug 记录
330
+ - `COMPUTER_AGENT_DEBUG_DIR=/path/to/dir`
331
+ - 自定义 debug 根目录
332
+ - `COMPUTER_AGENT_DEBUG_SAVE_IMAGES=0`
333
+ - 保留 JSON/TXT,不保存图片
334
+
335
+ ## 使用已发布包
336
+
337
+ 这个项目适合发布成标准 Python 包,然后由 MCP host 通过 `uvx` 直接拉起,不需要用户先下载源码。
338
+
339
+ 当前 CLI 入口名是:
340
+
341
+ - `computer-agent-mcp`
342
+
343
+ 发布到 PyPI 后,可以直接这样启动:
344
+
345
+ ```bash
346
+ uvx computer-agent-mcp \
347
+ --base-url https://api.openai.com/v1 \
348
+ --model gpt-5.4
349
+ ```
350
+
351
+ API key 推荐通过环境变量提供:
352
+
353
+ - `COMPUTER_AGENT_OPENAI_API_KEY`
354
+ - `OPENAI_API_KEY`
355
+
356
+ 如果需要给上游显式发送 `User-Agent`,可以二选一:
357
+
358
+ - 启动参数:`--user-agent`
359
+ - 环境变量:`COMPUTER_AGENT_OPENAI_USER_AGENT`
360
+
361
+ 默认不发送自定义 `User-Agent`。
362
+
363
+ ### MCP host 配置示例
364
+
365
+ ```json
366
+ {
367
+ "mcpServers": {
368
+ "computer-agent": {
369
+ "command": "uvx",
370
+ "args": [
371
+ "computer-agent-mcp",
372
+ "--base-url",
373
+ "https://api.openai.com/v1",
374
+ "--model",
375
+ "gpt-5.4"
376
+ ],
377
+ "env": {
378
+ "COMPUTER_AGENT_OPENAI_API_KEY": "sk-..."
379
+ }
380
+ }
381
+ }
382
+ }
383
+ ```
384
+
385
+ ## 本地开发安装
386
+
387
+ ```bash
388
+ pip install -e .
389
+ ```
390
+
391
+ 如果你使用自己的虚拟环境,确保至少安装:
392
+
393
+ - `openai`
394
+ - `mcp[cli]`
395
+ - `pydantic`
396
+ - `mss`
397
+ - `Pillow`
398
+ - `pynput`
399
+
400
+ ## 本地运行
401
+
402
+ 当前入口为 stdio MCP server,也可以直接在源码目录运行:
403
+
404
+ ```bash
405
+ python -m computer_agent_mcp \
406
+ --api-key sk-... \
407
+ --base-url https://api.openai.com/v1 \
408
+ --model gpt-5.4 \
409
+ --user-agent "Codex Desktop/0.115.0-alpha.4"
410
+ ```
411
+
412
+ ## 发布到 PyPI
413
+
414
+ 推荐使用 `uv` 完成构建和上传。
415
+
416
+ ### 1. 更新版本号
417
+
418
+ 每次发版前先修改 `pyproject.toml` 里的 `version`。
419
+
420
+ 如果你已经安装了 `uv`,也可以直接使用:
421
+
422
+ ```bash
423
+ uv version 0.1.0
424
+ # 或
425
+ uv version --bump patch
426
+ ```
427
+
428
+ ### 2. 构建分发包
429
+
430
+ 在仓库根目录执行:
431
+
432
+ ```bash
433
+ uv build
434
+ ```
435
+
436
+ 构建完成后会得到:
437
+
438
+ - `dist/*.whl`
439
+ - `dist/*.tar.gz`
440
+
441
+ ### 3. 本地验证 wheel
442
+
443
+ 建议先在一个全新虚拟环境里安装构建产物,确认 CLI 能启动:
444
+
445
+ Windows:
446
+
447
+ ```powershell
448
+ py -m venv .publish-venv
449
+ .publish-venv\Scripts\pip install dist\computer_agent_mcp-<version>-py3-none-any.whl
450
+ .publish-venv\Scripts\computer-agent-mcp --help
451
+ ```
452
+
453
+ POSIX:
454
+
455
+ ```bash
456
+ python -m venv .publish-venv
457
+ .publish-venv/bin/pip install dist/computer_agent_mcp-<version>-py3-none-any.whl
458
+ .publish-venv/bin/computer-agent-mcp --help
459
+ ```
460
+
461
+ ### 4. 上传到 PyPI
462
+
463
+ 准备好 PyPI token 后执行:
464
+
465
+ ```bash
466
+ uv publish --token <pypi-token>
467
+ ```
468
+
469
+ 也可以通过环境变量提供 token:
470
+
471
+ - `UV_PUBLISH_TOKEN`
472
+
473
+ 如果这是你第一次向这个新项目名发布,通常应使用账号级 token;项目创建成功后,再改成项目级 token 会更稳妥。
474
+
475
+ 首个版本发布成功后,用户就可以直接通过 `uvx computer-agent-mcp` 启动。
476
+
477
+ ## 常用配置
478
+
479
+ - `--api-key`
480
+ - `--base-url`
481
+ - `--model`
482
+ - `--user-agent`
483
+ - `--openai-timeout-seconds`
484
+ - `--max-steps-default`
485
+ - `--max-duration-s-default`
486
+ - `--debug-dir`
487
+ - `--kill-switch-file`
488
+
489
+ 对应环境变量:
490
+
491
+ - `COMPUTER_AGENT_OPENAI_API_KEY`
492
+ - `COMPUTER_AGENT_OPENAI_BASE_URL`
493
+ - `COMPUTER_AGENT_OPENAI_MODEL`
494
+ - `COMPUTER_AGENT_OPENAI_USER_AGENT`
495
+ - `COMPUTER_AGENT_OPENAI_TIMEOUT_SECONDS`
496
+ - `COMPUTER_AGENT_MAX_STEPS_DEFAULT`
497
+ - `COMPUTER_AGENT_MAX_DURATION_S_DEFAULT`
498
+ - `COMPUTER_AGENT_MAX_TYPE_CHARS`
499
+ - `COMPUTER_AGENT_DEFAULT_PAUSE_MS`
500
+ - `COMPUTER_AGENT_POST_ACTION_WAIT_MS`
501
+ - `COMPUTER_AGENT_DEBUG_INCLUDE_CURSOR`
502
+ - `COMPUTER_AGENT_HUMAN_OVERRIDE`
503
+ - `COMPUTER_AGENT_MOUSE_INTERRUPT_THRESHOLD_PX`
504
+ - `COMPUTER_AGENT_KILL_SWITCH_FILE`
505
+
506
+ ## 平台说明
507
+
508
+ 当前只实现了 Windows 适配层。
509
+
510
+ 如果在非 Windows 平台启动:
511
+
512
+ - server 可以启动
513
+ - 但实际桌面工具调用会因为平台不支持而失败
514
+
515
+ ## 参考
516
+
517
+ - [REFERENCE.md](./REFERENCE.md)