
    @=j(                       U d Z ddlmZ ddlmZmZ dddi ddg d	d
dddg ddddddddddddddddddddddidddd d!dg d"d#dd$ddg d%d&d'd(d)dd*dd+dd,dd-dddiddd.d d/dddiddd0d d1dg d2d3dd4dd5dd6dd7dd8dd9dd:dd;dd<d=dd>d?dd>d@ddAdgdBdCZdDedE<   dIdGZdHS )JuN  Schema for the generic `computer_use` tool.

Model-agnostic. Any tool-calling model can drive this. Vision-capable models
should prefer `capture(mode='som')` then `click(element=N)` — much more
reliable than pixel coordinates. Pixel coordinates remain supported for
models that were trained on them (e.g. Claude's computer-use RL).
    )annotations)AnyDictcomputer_useu  Drive the desktop in the background via cua-driver — screenshots, mouse, keyboard, scroll, drag — without stealing the user's cursor or keyboard focus. Supported on macOS, Windows, and Linux. Preferred workflow: call with action='capture' (mode='som' gives numbered element overlays), then click by `element` index for reliability. Pixel coordinates are supported for models trained on them. Works on any window — hidden, minimized, or behind another app. Requires cua-driver to be installed.objectactionstring)captureclickdouble_clickright_clickmiddle_clickdragscrolltypekey	set_valuewait	list_apps	focus_appu
  Which action to perform. `capture` is free (no side effects). All other actions require approval unless auto-approved. Use `set_value` for select/popup elements and sliders — it selects the matching option directly without opening the native menu (no focus steal).)r   enumdescriptionmode)somvisionaxu  Capture mode. `som` (default) is a screenshot with numbered overlays on every interactable element plus the AX tree — best for vision models, lets you click by element index. `vision` is a plain screenshot. `ax` is the accessibility tree only (no image; useful for text-only models).appu  Optional. Limit capture/action to a specific app (by name, e.g. 'Safari', or bundle ID, 'com.apple.Safari'). If omitted, operates on the frontmost app's window. Pass app='screen' (or 'desktop') to capture the OS desktop/shell surface — e.g. to see the wallpaper or click the taskbar. Note: capture is per-window; a single image cannot span multiple monitors, so on a multi-screen setup capture one window or display at a time.)r   r   max_elementsintegeru  Optional cap on the AX `elements` array returned by `action='capture'`. Default 100, hard maximum 1000. Dense UIs (Electron apps such as Obsidian or VS Code, JetBrains IDEs) can publish 500+ AX nodes — capping prevents a single capture from blowing session context. When the cap trims the response, `total_elements` and `truncated_elements` are surfaced in the result so you can re-call with `app=` to narrow scope or raise `max_elements` when the full tree is required. Has no effect on `mode='som'` / `mode='vision'` when a screenshot is included in the response; only the rare image-missing fallback returns an `elements` array and is subject to the cap.d      i  )r   r   defaultminimummaximumelementzoThe 1-based SOM index returned by the last `capture(mode='som')` call. Strongly preferred over raw coordinates.
coordinatearrayr      zPixel coordinates [x, y] in logical screen space (as returned by capture width/height). Only use this if no element index is available.)r   itemsminItemsmaxItemsr   button)leftrightmiddlezMouse button. Defaults to left.	modifiers)
cmdshiftoptionaltctrlfnwinwindowssupermeta)r   r   z%Modifier keys held during the action.)r   r)   r   from_elementzSource element index (drag).
to_elementzTarget element index (drag).from_coordinatez3Source [x,y] (drag; use when no element available).to_coordinatez3Target [x,y] (drag; use when no element available).	direction)updownr-   r.   zScroll direction.amountzScroll wheel ticks. Default 3.valuezFor action='set_value': the value to set on the element. For AXPopUpButton / select dropdowns, pass the option's display label (e.g. 'Blue'). For sliders and other AXValue-settable elements, pass the numeric or string value.textz+Text to type (respects the current layout).keyszUKey combo, e.g. 'cmd+s', 'ctrl+alt+t', 'return', 'escape', 'tab'. Use '+' to combine.numberzSeconds to wait. Max 30.booleanu   Only for action='focus_app'. If true, brings the window to front (DISRUPTS the user). Default false — input is routed to the app without raising, matching the background co-work model.zIf true, take a follow-up capture after the action and include it in the response. Saves a round-trip when you need to verify an action's effect.)secondsraise_windowcapture_after)r   
propertiesrequired)namer   
parametersDict[str, Any]COMPUTER_USE_SCHEMAreturnc                     t           S )z2Return the generic OpenAI function-calling schema.)rP        ?/home/rurouni/.hermes/hermes-agent/tools/computer_use/schema.pyget_computer_use_schemarV      s    rT   N)rQ   rO   )	__doc__
__future__r   typingr   r   rP   __annotations__rV   rS   rT   rU   <module>r[      sv     # " " " " "         	 w
    H% w
6  ///-	 7w
N  7 Ow
j !* ) kw
X !' Yw
h  ),5
 
iw
~  333@ w
H $     G
 
Iw
` Y-KM Maw
d 9+IK Kew
h  ),1T	   iw
t  ),1T	 uw
B  7772 Cw
L !? Mw
V  S Ww
j  L kw
r  ; sw
B !9  "=  "B _w
 w
 w
p Ju{ {I' I'  I I I IX     rT   