Download src/utils/computerUse/hostAdapter.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 2.77 kB
-
https://huggingface.co/chenbhao/codev/resolve/3aea50af8b8df3f7d61484532efafcf2f4da86cd/src/utils/computerUse/hostAdapter.ts
- Command line
-
hf download hf://chenbhao/codev@3aea50af8b8df3f7d61484532efafcf2f4da86cd/src/utils/computerUse/hostAdapter.ts
-
curl -L -o hostAdapter.ts https://huggingface.co/chenbhao/codev/resolve/3aea50af8b8df3f7d61484532efafcf2f4da86cd/src/utils/computerUse/hostAdapter.ts
2.77 kB
| import type { | |
| ComputerUseHostAdapter, | |
| Logger, | |
| } from '@ant/computer-use-mcp/types' | |
| import { format } from 'util' | |
| import { logForDebugging } from '../debug.js' | |
| import { COMPUTER_USE_MCP_SERVER_NAME } from './common.js' | |
| import { createCliExecutor } from './executor.js' | |
| import { getChicagoEnabled, getChicagoSubGates } from './gates.js' | |
| import { requireComputerUseSwift } from './swiftLoader.js' | |
| class DebugLogger implements Logger { | |
| silly(message: string, ...args: unknown[]): void { | |
| logForDebugging(format(message, ...args), { level: 'debug' }) | |
| } | |
| debug(message: string, ...args: unknown[]): void { | |
| logForDebugging(format(message, ...args), { level: 'debug' }) | |
| } | |
| info(message: string, ...args: unknown[]): void { | |
| logForDebugging(format(message, ...args), { level: 'info' }) | |
| } | |
| warn(message: string, ...args: unknown[]): void { | |
| logForDebugging(format(message, ...args), { level: 'warn' }) | |
| } | |
| error(message: string, ...args: unknown[]): void { | |
| logForDebugging(format(message, ...args), { level: 'error' }) | |
| } | |
| } | |
| let cached: ComputerUseHostAdapter | undefined | |
| /** | |
| * Process-lifetime singleton. Built once on first CU tool call; native modules | |
| * (both `@ant/computer-use-input` and `@ant/computer-use-swift`) are loaded | |
| * here via the executor factory, which throws on load failure — there is no | |
| * degraded mode. | |
| */ | |
| export function getComputerUseHostAdapter(): ComputerUseHostAdapter { | |
| if (cached) return cached | |
| cached = { | |
| serverName: COMPUTER_USE_MCP_SERVER_NAME, | |
| logger: new DebugLogger(), | |
| executor: createCliExecutor({ | |
| getMouseAnimationEnabled: () => getChicagoSubGates().mouseAnimation, | |
| getHideBeforeActionEnabled: () => getChicagoSubGates().hideBeforeAction, | |
| }), | |
| ensureOsPermissions: async () => { | |
| const cu = requireComputerUseSwift() | |
| const accessibility = cu.tcc.checkAccessibility() | |
| const screenRecording = cu.tcc.checkScreenRecording() | |
| return accessibility && screenRecording | |
| ? { granted: true } | |
| : { granted: false, accessibility, screenRecording } | |
| }, | |
| isDisabled: () => !getChicagoEnabled(), | |
| getSubGates: getChicagoSubGates, | |
| // cleanup.ts always unhides at turn end — no user preference to disable it. | |
| getAutoUnhideEnabled: () => true, | |
| // Pixel-validation JPEG decode+crop. MUST be synchronous (the package | |
| // does `patch1.equals(patch2)` directly on the return value). Cowork uses | |
| // Electron's `nativeImage` (sync); our `image-processor-napi` is | |
| // sharp-compatible and async-only. Returning null → validation skipped, | |
| // click proceeds — the designed fallback per `PixelCompareResult.skipped`. | |
| // The sub-gate defaults to false anyway. | |
| cropRawPatch: () => null, | |
| } | |
| return cached | |
| } | |