π File detail
utils/computerUse/inputLoader.ts
π§© .tsπ 31 linesπΎ 1,190 bytesπ text
β Back to All Filesπ― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes requireComputerUseInput β mainly functions, hooks, or classes. Dependencies touch @ant.
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import type { ComputerUseInput, ComputerUseInputAPI, } from '@ant/computer-use-input'
π€ Exports (heuristic)
requireComputerUseInput
π External import roots
Package roots from from "β¦" (relative paths omitted).
@ant
π₯οΈ Source preview
import type {
ComputerUseInput,
ComputerUseInputAPI,
} from '@ant/computer-use-input'
let cached: ComputerUseInputAPI | undefined
/**
* Package's js/index.js reads COMPUTER_USE_INPUT_NODE_PATH (baked by
* build-with-plugins.ts on darwin targets, unset otherwise β falls through to
* the node_modules prebuilds/ path).
*
* The package exports a discriminated union on `isSupported` β narrowed here
* once so callers get the bare `ComputerUseInputAPI` without re-checking.
*
* key()/keys() dispatch enigo work onto DispatchQueue.main via
* dispatch2::run_on_main, then block a tokio worker on a channel. Under
* Electron (CFRunLoop drains the main queue) this works; under libuv
* (Node/bun) the main queue never drains and the promise hangs. The executor
* calls these inside drainRunLoop().
*/
export function requireComputerUseInput(): ComputerUseInputAPI {
if (cached) return cached
// eslint-disable-next-line @typescript-eslint/no-require-imports
const input = require('@ant/computer-use-input') as ComputerUseInput
if (!input.isSupported) {
throw new Error('@ant/computer-use-input is not supported on this platform')
}
return (cached = input)
}