πŸ“„ 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)
}