|
1 | 1 | # DEV-LOG |
2 | 2 |
|
| 3 | +## Computer Use Windows 增强:窗口绑定截图 + UI Automation + OCR (2026-04-03) |
| 4 | + |
| 5 | +在三平台基础实现之上,利用 Windows 原生 API 增强 Computer Use 的 Windows 专属能力。 |
| 6 | + |
| 7 | +**新增文件:** |
| 8 | + |
| 9 | +| 文件 | 行数 | 说明 | |
| 10 | +|------|------|------| |
| 11 | +| `src/utils/computerUse/win32/windowCapture.ts` | — | `PrintWindow` 窗口绑定截图,支持被遮挡/后台窗口 | |
| 12 | +| `src/utils/computerUse/win32/windowEnum.ts` | — | `EnumWindows` 精确窗口枚举(HWND + PID + 标题) | |
| 13 | +| `src/utils/computerUse/win32/uiAutomation.ts` | — | `IUIAutomation` UI 元素树读取、按钮点击、文本写入、坐标识别 | |
| 14 | +| `src/utils/computerUse/win32/ocr.ts` | — | `Windows.Media.Ocr` 截图+文字识别(英语+中文) | |
| 15 | + |
| 16 | +**修改文件:** |
| 17 | + |
| 18 | +| 文件 | 变更 | |
| 19 | +|------|------| |
| 20 | +| `packages/@ant/computer-use-swift/src/backends/win32.ts` | `listRunning` 改用 EnumWindows;新增 `captureWindowTarget` 窗口级截图 | |
| 21 | + |
| 22 | +**验证结果(Windows x64):** |
| 23 | +- 窗口枚举:38 个可见窗口 ✅ |
| 24 | +- 窗口截图:VS Code 2575x1415, 444KB ✅(PrintWindow, 即使被遮挡) |
| 25 | +- UI Automation:坐标元素识别 ✅ |
| 26 | +- OCR:识别 VS Code 界面文字,34 行 ✅ |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## Enable Computer Use — macOS + Windows + Linux (2026-04-03) |
| 31 | + |
| 32 | +恢复 Computer Use 屏幕操控功能。参考项目仅 macOS,本次扩展为三平台支持。 |
| 33 | + |
| 34 | +**Phase 1 — MCP server stub 替换:** |
| 35 | +从参考项目复制 `@ant/computer-use-mcp` 完整实现(12 文件,6517 行)。 |
| 36 | + |
| 37 | +**Phase 2 — 移除 src/ 中 8 处 macOS 硬编码:** |
| 38 | + |
| 39 | +| 文件 | 改动 | |
| 40 | +|------|------| |
| 41 | +| `src/main.tsx:1605` | 去掉 `getPlatform() === 'macos'` | |
| 42 | +| `src/utils/computerUse/swiftLoader.ts` | 移除 darwin-only throw | |
| 43 | +| `src/utils/computerUse/executor.ts` | 平台守卫扩展为 darwin+win32+linux;剪贴板按平台分发(pbcopy→PowerShell→xclip);paste 快捷键 command→ctrl | |
| 44 | +| `src/utils/computerUse/drainRunLoop.ts` | 非 darwin 直接执行 fn() | |
| 45 | +| `src/utils/computerUse/escHotkey.ts` | 非 darwin 返回 false(Ctrl+C fallback) | |
| 46 | +| `src/utils/computerUse/hostAdapter.ts` | 非 darwin 权限检查返回 granted | |
| 47 | +| `src/utils/computerUse/common.ts` | platform + screenshotFiltering 动态化 | |
| 48 | +| `src/utils/computerUse/gates.ts` | enabled:true + hasRequiredSubscription→true | |
| 49 | + |
| 50 | +**Phase 3 — input/swift 包 dispatcher + backends 三平台架构:** |
| 51 | + |
| 52 | +``` |
| 53 | +packages/@ant/computer-use-{input,swift}/src/ |
| 54 | +├── index.ts ← dispatcher |
| 55 | +├── types.ts ← 共享接口 |
| 56 | +└── backends/ |
| 57 | + ├── darwin.ts ← macOS AppleScript(原样拆出,不改逻辑) |
| 58 | + ├── win32.ts ← Windows PowerShell |
| 59 | + └── linux.ts ← Linux xdotool/scrot/xrandr/wmctrl |
| 60 | +``` |
| 61 | + |
| 62 | +**编译开关:** `CHICAGO_MCP` 加入 DEFAULT_FEATURES + DEFAULT_BUILD_FEATURES |
| 63 | + |
| 64 | +**验证结果(Windows x64):** |
| 65 | +- `isSupported: true` ✅ |
| 66 | +- 鼠标定位 + 前台窗口信息 ✅ |
| 67 | +- 双显示器检测 2560x1440 × 2 ✅ |
| 68 | +- 全屏截图 3MB base64 ✅ |
| 69 | +- `bun run build` 463 files ✅ |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +## Enable Voice Mode / VOICE_MODE (2026-04-03) |
| 74 | + |
| 75 | +恢复 `/voice` 语音输入功能。`src/` 下所有 voice 相关源码已与官方一致(0 行差异),问题出在:① `VOICE_MODE` 编译开关未开,命令不显示;② `audio-capture-napi` 是 SoX 子进程 stub(Windows 不支持),缺少官方原生 `.node` 二进制。 |
| 76 | + |
| 77 | +**新增文件:** |
| 78 | + |
| 79 | +| 文件 | 说明 | |
| 80 | +|------|------| |
| 81 | +| `vendor/audio-capture/{platform}/audio-capture.node` | 6 个平台的原生音频二进制(cpal,来自参考项目) | |
| 82 | +| `vendor/audio-capture-src/index.ts` | 原生模块加载器(按 `${arch}-${platform}` 动态 require `.node`) | |
| 83 | + |
| 84 | +**修改文件:** |
| 85 | + |
| 86 | +| 文件 | 变更 | |
| 87 | +|------|------| |
| 88 | +| `packages/audio-capture-napi/src/index.ts` | SoX 子进程 stub → 原生 `.node` 加载器(含 `process.cwd()` workspace 路径 fallback) | |
| 89 | +| `scripts/dev.ts` | `DEFAULT_FEATURES` 加 `"VOICE_MODE"` | |
| 90 | +| `build.ts` | `DEFAULT_BUILD_FEATURES` 加 `"VOICE_MODE"` | |
| 91 | +| `docs/features/voice-mode.md` | 追加恢复计划章节(第八节) | |
| 92 | + |
| 93 | +**验证结果:** |
| 94 | + |
| 95 | +- `isNativeAudioAvailable()` → `true`(Windows x64 原生 `.node` 加载成功) |
| 96 | +- `feature('VOICE_MODE')` → `ENABLED` |
| 97 | +- `bun run build` → voice 代码编入产物 |
| 98 | + |
| 99 | +**运行时前置条件:** claude.ai OAuth 登录 + 麦克风权限 |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +## Enable Claude in Chrome MCP (2026-04-03) |
| 104 | + |
| 105 | +恢复 Chrome 浏览器控制功能。`src/` 下所有 claudeInChrome 相关源码已与官方一致(0 行差异),问题出在 `@ant/claude-for-chrome-mcp` 包是 6 行 stub(返回空工具列表和 null server)。 |
| 106 | + |
| 107 | +**替换文件:** |
| 108 | + |
| 109 | +| 文件 | 变更 | |
| 110 | +|------|------| |
| 111 | +| `packages/@ant/claude-for-chrome-mcp/src/index.ts` | 6 行 stub → 15 行完整导出 | |
| 112 | + |
| 113 | +**新增文件:** |
| 114 | + |
| 115 | +| 文件 | 行数 | 说明 | |
| 116 | +|------|------|------| |
| 117 | +| `packages/@ant/claude-for-chrome-mcp/src/types.ts` | 134 | 类型定义 | |
| 118 | +| `packages/@ant/claude-for-chrome-mcp/src/browserTools.ts` | 546 | 17 个浏览器工具定义 | |
| 119 | +| `packages/@ant/claude-for-chrome-mcp/src/mcpServer.ts` | 96 | MCP Server | |
| 120 | +| `packages/@ant/claude-for-chrome-mcp/src/mcpSocketClient.ts` | 493 | Unix Socket 客户端 | |
| 121 | +| `packages/@ant/claude-for-chrome-mcp/src/mcpSocketPool.ts` | 327 | 多 Profile 连接池 | |
| 122 | +| `packages/@ant/claude-for-chrome-mcp/src/bridgeClient.ts` | 1126 | Bridge WebSocket 客户端 | |
| 123 | +| `packages/@ant/claude-for-chrome-mcp/src/toolCalls.ts` | 301 | 工具调用路由 | |
| 124 | + |
| 125 | +**不需要 feature flag,不需要改 dev.ts/build.ts,不改 src/ 下任何文件。** |
| 126 | + |
| 127 | +**运行时依赖:** Chrome 浏览器 + Claude in Chrome 扩展(https://claude.ai/chrome) |
| 128 | + |
| 129 | +--- |
| 130 | + |
3 | 131 | ## OpenAI 接口兼容 (2026-04-03) |
4 | 132 |
|
5 | 133 | **分支**: `feature/openai` |
|
0 commit comments