From 87402c4c8e0c437314fc6c1426502d9a48d9e435 Mon Sep 17 00:00:00 2001 From: Dillon DuPont Date: Tue, 29 Jul 2025 10:45:38 -0400 Subject: [PATCH] Added TS Usage --- .../docs/home/computer-sdk/commands.mdx | 239 +++++++++++----- .../docs/home/computer-sdk/computers.mdx | 89 ++++-- .../docs/home/libraries/computer/index.mdx | 260 ++++++++++++------ docs/src/mdx-components.tsx | 2 + 4 files changed, 420 insertions(+), 170 deletions(-) diff --git a/docs/content/docs/home/computer-sdk/commands.mdx b/docs/content/docs/home/computer-sdk/commands.mdx index 45191763..1404ee3f 100644 --- a/docs/content/docs/home/computer-sdk/commands.mdx +++ b/docs/content/docs/home/computer-sdk/commands.mdx @@ -11,105 +11,220 @@ These commands map to the same actions available in the [Computer Server API Com Execute shell commands and get detailed results: -```python -# Run shell command -result = await computer.interface.run_command(cmd) -# result.stdout, result.stderr, result.returncode -``` + + + ```python + # Run shell command + result = await computer.interface.run_command(cmd) + # result.stdout, result.stderr, result.returncode + ``` + + + ```typescript + // Run shell command + const result = await computer.interface.runCommand(cmd); + // result.stdout, result.stderr, result.returncode + ``` + + ## Mouse Actions Precise mouse control and interaction: -```python -# Basic clicks -await computer.interface.left_click(x, y) # Left click at coordinates -await computer.interface.right_click(x, y) # Right click at coordinates -await computer.interface.double_click(x, y) # Double click at coordinates + + + ```python + # Basic clicks + await computer.interface.left_click(x, y) # Left click at coordinates + await computer.interface.right_click(x, y) # Right click at coordinates + await computer.interface.double_click(x, y) # Double click at coordinates -# Cursor movement and dragging -await computer.interface.move_cursor(x, y) # Move cursor to coordinates -await computer.interface.drag_to(x, y, duration) # Drag to coordinates -await computer.interface.get_cursor_position() # Get current cursor position + # Cursor movement and dragging + await computer.interface.move_cursor(x, y) # Move cursor to coordinates + await computer.interface.drag_to(x, y, duration) # Drag to coordinates + await computer.interface.get_cursor_position() # Get current cursor position -# Advanced mouse control -await computer.interface.mouse_down(x, y, button="left") # Press and hold a mouse button -await computer.interface.mouse_up(x, y, button="left") # Release a mouse button -``` + # Advanced mouse control + await computer.interface.mouse_down(x, y, button="left") # Press and hold a mouse button + await computer.interface.mouse_up(x, y, button="left") # Release a mouse button + ``` + + + ```typescript + // Basic clicks + await computer.interface.leftClick(x, y); // Left click at coordinates + await computer.interface.rightClick(x, y); // Right click at coordinates + await computer.interface.doubleClick(x, y); // Double click at coordinates + + // Cursor movement and dragging + await computer.interface.moveCursor(x, y); // Move cursor to coordinates + await computer.interface.dragTo(x, y, duration); // Drag to coordinates + await computer.interface.getCursorPosition(); // Get current cursor position + + // Advanced mouse control + await computer.interface.mouseDown(x, y, "left"); // Press and hold a mouse button + await computer.interface.mouseUp(x, y, "left"); // Release a mouse button + ``` + + ## Keyboard Actions Text input and key combinations: -```python -# Text input -await computer.interface.type_text("Hello") # Type text -await computer.interface.press_key("enter") # Press a single key + + + ```python + # Text input + await computer.interface.type_text("Hello") # Type text + await computer.interface.press_key("enter") # Press a single key -# Key combinations and advanced control -await computer.interface.hotkey("command", "c") # Press key combination -await computer.interface.key_down("command") # Press and hold a key -await computer.interface.key_up("command") # Release a key -``` + # Key combinations and advanced control + await computer.interface.hotkey("command", "c") # Press key combination + await computer.interface.key_down("command") # Press and hold a key + await computer.interface.key_up("command") # Release a key + ``` + + + ```typescript + // Text input + await computer.interface.typeText("Hello"); // Type text + await computer.interface.pressKey("enter"); // Press a single key + + // Key combinations and advanced control + await computer.interface.hotkey("command", "c"); // Press key combination + await computer.interface.keyDown("command"); // Press and hold a key + await computer.interface.keyUp("command"); // Release a key + ``` + + ## Scrolling Actions Mouse wheel and scrolling control: -```python -# Scrolling -await computer.interface.scroll(x, y) # Scroll the mouse wheel -await computer.interface.scroll_down(clicks) # Scroll down -await computer.interface.scroll_up(clicks) # Scroll up -``` + + + ```python + # Scrolling + await computer.interface.scroll(x, y) # Scroll the mouse wheel + await computer.interface.scroll_down(clicks) # Scroll down + await computer.interface.scroll_up(clicks) # Scroll up + ``` + + + ```typescript + // Scrolling + await computer.interface.scroll(x, y); // Scroll the mouse wheel + await computer.interface.scrollDown(clicks); // Scroll down + await computer.interface.scrollUp(clicks); // Scroll up + ``` + + ## Screen Actions Screen capture and display information: -```python -# Screen operations -await computer.interface.screenshot() # Take a screenshot -await computer.interface.get_screen_size() # Get screen dimensions -``` + + + ```python + # Screen operations + await computer.interface.screenshot() # Take a screenshot + await computer.interface.get_screen_size() # Get screen dimensions + ``` + + + ```typescript + // Screen operations + await computer.interface.screenshot(); // Take a screenshot + await computer.interface.getScreenSize(); // Get screen dimensions + ``` + + ## Clipboard Actions System clipboard management: -```python -# Clipboard operations -await computer.interface.set_clipboard(text) # Set clipboard content -await computer.interface.copy_to_clipboard() # Get clipboard content -``` + + + ```python + # Clipboard operations + await computer.interface.set_clipboard(text) # Set clipboard content + await computer.interface.copy_to_clipboard() # Get clipboard content + ``` + + + ```typescript + // Clipboard operations + await computer.interface.setClipboard(text); // Set clipboard content + await computer.interface.copyToClipboard(); // Get clipboard content + ``` + + ## File System Operations Direct file and directory manipulation: -```python -# File existence checks -await computer.interface.file_exists(path) # Check if file exists -await computer.interface.directory_exists(path) # Check if directory exists + + + ```python + # File existence checks + await computer.interface.file_exists(path) # Check if file exists + await computer.interface.directory_exists(path) # Check if directory exists -# File content operations -await computer.interface.read_text(path, encoding="utf-8") # Read file content -await computer.interface.write_text(path, content, encoding="utf-8") # Write file content -await computer.interface.read_bytes(path) # Read file content as bytes -await computer.interface.write_bytes(path, content) # Write file content as bytes + # File content operations + await computer.interface.read_text(path, encoding="utf-8") # Read file content + await computer.interface.write_text(path, content, encoding="utf-8") # Write file content + await computer.interface.read_bytes(path) # Read file content as bytes + await computer.interface.write_bytes(path, content) # Write file content as bytes -# File and directory management -await computer.interface.delete_file(path) # Delete file -await computer.interface.create_dir(path) # Create directory -await computer.interface.delete_dir(path) # Delete directory -await computer.interface.list_dir(path) # List directory contents -``` + # File and directory management + await computer.interface.delete_file(path) # Delete file + await computer.interface.create_dir(path) # Create directory + await computer.interface.delete_dir(path) # Delete directory + await computer.interface.list_dir(path) # List directory contents + ``` + + + ```typescript + // File existence checks + await computer.interface.fileExists(path); // Check if file exists + await computer.interface.directoryExists(path); // Check if directory exists + + // File content operations + await computer.interface.readText(path, "utf-8"); // Read file content + await computer.interface.writeText(path, content, "utf-8"); // Write file content + await computer.interface.readBytes(path); // Read file content as bytes + await computer.interface.writeBytes(path, content); // Write file content as bytes + + // File and directory management + await computer.interface.deleteFile(path); // Delete file + await computer.interface.createDir(path); // Create directory + await computer.interface.deleteDir(path); // Delete directory + await computer.interface.listDir(path); // List directory contents + ``` + + ## Accessibility Access system accessibility information: -```python -# Accessibility -await computer.interface.get_accessibility_tree() # Get accessibility tree -``` + + + ```python + # Accessibility + await computer.interface.get_accessibility_tree() # Get accessibility tree + ``` + + + ```typescript + // Accessibility + await computer.interface.getAccessibilityTree(); // Get accessibility tree + ``` + + diff --git a/docs/content/docs/home/computer-sdk/computers.mdx b/docs/content/docs/home/computer-sdk/computers.mdx index f7730872..62608b68 100644 --- a/docs/content/docs/home/computer-sdk/computers.mdx +++ b/docs/content/docs/home/computer-sdk/computers.mdx @@ -11,18 +11,35 @@ C/ua Computers are preconfigured virtual machines running the Computer Server. T This is a cloud container running the Computer Server. This is the easiest & safest way to get a c/ua computer, and can be done by going on the trycua.com website. -```python -from computer import Computer + + + ```python + from computer import Computer -computer = Computer( - os_type="linux", - provider_type="cloud", - name="your-container-name", - api_key="your-api-key" -) + computer = Computer( + os_type="linux", + provider_type="cloud", + name="your-container-name", + api_key="your-api-key" + ) -await computer.run() # Connect to the container -``` + await computer.run() # Connect to the container + ``` + + + ```typescript + import { Computer, OSType } from '@trycua/computer'; + + const computer = new Computer({ + osType: OSType.LINUX, + name: "your-container-name", + apiKey: "your-api-key" + }); + + await computer.run(); // Connect to the container + ``` + + # c/ua local containers @@ -40,15 +57,31 @@ lume run macos-sequoia-cua:latest ``` 3. Connect with Computer -```python -computer = Computer( - os_type="macos", - provider_type="lume", - name="macos-sequoia-cua:latest" -) + + + ```python + computer = Computer( + os_type="macos", + provider_type="lume", + name="macos-sequoia-cua:latest" + ) -await computer.run() # Connect to the container -``` + await computer.run() # Connect to the container + ``` + + + ```typescript + import { Computer, OSType } from '@trycua/computer'; + + const computer = new Computer({ + osType: OSType.MACOS, + name: "macos-sequoia-cua:latest" + }); + + await computer.run(); // Connect to the container + ``` + + # Your host desktop @@ -60,7 +93,19 @@ python -m computer-server ``` Connect with: -```python -computer = Computer(use_host_computer_server=True) -await computer.run() # Connect to the host desktop -``` + + + ```python + computer = Computer(use_host_computer_server=True) + await computer.run() # Connect to the host desktop + ``` + + + ```typescript + import { Computer } from '@trycua/computer'; + + const computer = new Computer({ useHostComputerServer: true }); + await computer.run(); // Connect to the host desktop + ``` + + diff --git a/docs/content/docs/home/libraries/computer/index.mdx b/docs/content/docs/home/libraries/computer/index.mdx index 1f5aa44b..324b8d57 100644 --- a/docs/content/docs/home/libraries/computer/index.mdx +++ b/docs/content/docs/home/libraries/computer/index.mdx @@ -13,111 +13,199 @@ The Computer library provides a Computer class that can be used to control and a ### Basic Usage Connect to a c/ua cloud container: -```python -from computer import Computer + + + ```python + from computer import Computer -computer = Computer( - os_type="linux", - provider_type="cloud", - name="your-container-name", - api_key="your-api-key" -) + computer = Computer( + os_type="linux", + provider_type="cloud", + name="your-container-name", + api_key="your-api-key" + ) -computer = await computer.run() # Connect to a c/ua cloud container -``` + computer = await computer.run() # Connect to a c/ua cloud container + ``` + + + ```typescript + import { Computer, OSType } from '@trycua/computer'; + + const computer = new Computer({ + osType: OSType.LINUX, + name: "your-container-name", + apiKey: "your-api-key" + }); + + await computer.run(); // Connect to a c/ua cloud container + ``` + + Connect to a c/ua local container: -```python -from computer import Computer + + + ```python + from computer import Computer -computer = Computer( - os_type="macos" -) + computer = Computer( + os_type="macos" + ) -computer = await computer.run() # Connect to the container -``` + computer = await computer.run() # Connect to the container + ``` + + + ```typescript + import { Computer, OSType } from '@trycua/computer'; + + const computer = new Computer({ + osType: OSType.MACOS + }); + + await computer.run(); // Connect to the container + ``` + + ### Interface Actions -```python -# Shell Actions -result = await computer.interface.run_command(cmd) # Run shell command -# result.stdout, result.stderr, result.returncode + + + ```python + # Shell Actions + result = await computer.interface.run_command(cmd) # Run shell command + # result.stdout, result.stderr, result.returncode -# Mouse Actions -await computer.interface.left_click(x, y) # Left click at coordinates -await computer.interface.right_click(x, y) # Right click at coordinates -await computer.interface.double_click(x, y) # Double click at coordinates -await computer.interface.move_cursor(x, y) # Move cursor to coordinates -await computer.interface.drag_to(x, y, duration) # Drag to coordinates -await computer.interface.get_cursor_position() # Get current cursor position -await computer.interface.mouse_down(x, y, button="left") # Press and hold a mouse button -await computer.interface.mouse_up(x, y, button="left") # Release a mouse button + # Mouse Actions + await computer.interface.left_click(x, y) # Left click at coordinates + await computer.interface.right_click(x, y) # Right click at coordinates + await computer.interface.double_click(x, y) # Double click at coordinates + await computer.interface.move_cursor(x, y) # Move cursor to coordinates + await computer.interface.drag_to(x, y, duration) # Drag to coordinates + await computer.interface.get_cursor_position() # Get current cursor position + await computer.interface.mouse_down(x, y, button="left") # Press and hold a mouse button + await computer.interface.mouse_up(x, y, button="left") # Release a mouse button -# Keyboard Actions -await computer.interface.type_text("Hello") # Type text -await computer.interface.press_key("enter") # Press a single key -await computer.interface.hotkey("command", "c") # Press key combination -await computer.interface.key_down("command") # Press and hold a key -await computer.interface.key_up("command") # Release a key + # Keyboard Actions + await computer.interface.type_text("Hello") # Type text + await computer.interface.press_key("enter") # Press a single key + await computer.interface.hotkey("command", "c") # Press key combination + await computer.interface.key_down("command") # Press and hold a key + await computer.interface.key_up("command") # Release a key -# Scrolling Actions -await computer.interface.scroll(x, y) # Scroll the mouse wheel -await computer.interface.scroll_down(clicks) # Scroll down -await computer.interface.scroll_up(clicks) # Scroll up + # Scrolling Actions + await computer.interface.scroll(x, y) # Scroll the mouse wheel + await computer.interface.scroll_down(clicks) # Scroll down + await computer.interface.scroll_up(clicks) # Scroll up -# Screen Actions -await computer.interface.screenshot() # Take a screenshot -await computer.interface.get_screen_size() # Get screen dimensions + # Screen Actions + await computer.interface.screenshot() # Take a screenshot + await computer.interface.get_screen_size() # Get screen dimensions -# Clipboard Actions -await computer.interface.set_clipboard(text) # Set clipboard content -await computer.interface.copy_to_clipboard() # Get clipboard content + # Clipboard Actions + await computer.interface.set_clipboard(text) # Set clipboard content + await computer.interface.copy_to_clipboard() # Get clipboard content -# File System Operations -await computer.interface.file_exists(path) # Check if file exists -await computer.interface.directory_exists(path) # Check if directory exists -await computer.interface.read_text(path, encoding="utf-8") # Read file content -await computer.interface.write_text(path, content, encoding="utf-8") # Write file content -await computer.interface.read_bytes(path) # Read file content as bytes -await computer.interface.write_bytes(path, content) # Write file content as bytes -await computer.interface.delete_file(path) # Delete file -await computer.interface.create_dir(path) # Create directory -await computer.interface.delete_dir(path) # Delete directory -await computer.interface.list_dir(path) # List directory contents + # File System Operations + await computer.interface.file_exists(path) # Check if file exists + await computer.interface.directory_exists(path) # Check if directory exists + await computer.interface.read_text(path, encoding="utf-8") # Read file content + await computer.interface.write_text(path, content, encoding="utf-8") # Write file content + await computer.interface.read_bytes(path) # Read file content as bytes + await computer.interface.write_bytes(path, content) # Write file content as bytes + await computer.interface.delete_file(path) # Delete file + await computer.interface.create_dir(path) # Create directory + await computer.interface.delete_dir(path) # Delete directory + await computer.interface.list_dir(path) # List directory contents -# Accessibility -await computer.interface.get_accessibility_tree() # Get accessibility tree + # Accessibility + await computer.interface.get_accessibility_tree() # Get accessibility tree -# Delay Configuration -# Set default delay between all actions (in seconds) -computer.interface.delay = 0.5 # 500ms delay between actions + # Delay Configuration + # Set default delay between all actions (in seconds) + computer.interface.delay = 0.5 # 500ms delay between actions -# Or specify delay for individual actions -await computer.interface.left_click(x, y, delay=1.0) # 1 second delay after click -await computer.interface.type_text("Hello", delay=0.2) # 200ms delay after typing -await computer.interface.press_key("enter", delay=0.5) # 500ms delay after key press + # Or specify delay for individual actions + await computer.interface.left_click(x, y, delay=1.0) # 1 second delay after click + await computer.interface.type_text("Hello", delay=0.2) # 200ms delay after typing + await computer.interface.press_key("enter", delay=0.5) # 500ms delay after key press -# Python Virtual Environment Operations -await computer.venv_install("demo_venv", ["requests", "macos-pyxa"]) # Install packages in a virtual environment -await computer.venv_cmd("demo_venv", "python -c 'import requests; print(requests.get(`https://httpbin.org/ip`).json())'") # Run a shell command in a virtual environment -await computer.venv_exec("demo_venv", python_function_or_code, *args, **kwargs) # Run a Python function in a virtual environment and return the result / raise an exception + # Python Virtual Environment Operations + await computer.venv_install("demo_venv", ["requests", "macos-pyxa"]) # Install packages in a virtual environment + await computer.venv_cmd("demo_venv", "python -c 'import requests; print(requests.get(`https://httpbin.org/ip`).json())'') # Run a shell command in a virtual environment + await computer.venv_exec("demo_venv", python_function_or_code, *args, **kwargs) # Run a Python function in a virtual environment and return the result / raise an exception -# Example: Use sandboxed functions to execute code in a Cua Container -from computer.helpers import sandboxed + # Example: Use sandboxed functions to execute code in a Cua Container + from computer.helpers import sandboxed -@sandboxed("demo_venv") -def greet_and_print(name): - """Get the HTML of the current Safari tab""" - import PyXA - safari = PyXA.Application("Safari") - html = safari.current_document.source() - print(f"Hello from inside the container, {name}!") - return {"greeted": name, "safari_html": html} + @sandboxed("demo_venv") + def greet_and_print(name): + """Get the HTML of the current Safari tab""" + import PyXA + safari = PyXA.Application("Safari") + html = safari.current_document.source() + print(f"Hello from inside the container, {name}!") + return {"greeted": name, "safari_html": html} -# When a @sandboxed function is called, it will execute in the container -result = await greet_and_print("Cua") -# Result: {"greeted": "Cua", "safari_html": "..."} -# stdout and stderr are also captured and printed / raised -print("Result from sandboxed function:", result) -``` + # When a @sandboxed function is called, it will execute in the container + result = await greet_and_print("Cua") + # Result: {"greeted": "Cua", "safari_html": "..."} + # stdout and stderr are also captured and printed / raised + print("Result from sandboxed function:", result) + ``` + + + ```typescript + // Shell Actions + const result = await computer.interface.runCommand(cmd); // Run shell command + // result.stdout, result.stderr, result.returncode + + // Mouse Actions + await computer.interface.leftClick(x, y); // Left click at coordinates + await computer.interface.rightClick(x, y); // Right click at coordinates + await computer.interface.doubleClick(x, y); // Double click at coordinates + await computer.interface.moveCursor(x, y); // Move cursor to coordinates + await computer.interface.dragTo(x, y, duration); // Drag to coordinates + await computer.interface.getCursorPosition(); // Get current cursor position + await computer.interface.mouseDown(x, y, "left"); // Press and hold a mouse button + await computer.interface.mouseUp(x, y, "left"); // Release a mouse button + + // Keyboard Actions + await computer.interface.typeText("Hello"); // Type text + await computer.interface.pressKey("enter"); // Press a single key + await computer.interface.hotkey("command", "c"); // Press key combination + await computer.interface.keyDown("command"); // Press and hold a key + await computer.interface.keyUp("command"); // Release a key + + // Scrolling Actions + await computer.interface.scroll(x, y); // Scroll the mouse wheel + await computer.interface.scrollDown(clicks); // Scroll down + await computer.interface.scrollUp(clicks); // Scroll up + + // Screen Actions + await computer.interface.screenshot(); // Take a screenshot + await computer.interface.getScreenSize(); // Get screen dimensions + + // Clipboard Actions + await computer.interface.setClipboard(text); // Set clipboard content + await computer.interface.copyToClipboard(); // Get clipboard content + + // File System Operations + await computer.interface.fileExists(path); // Check if file exists + await computer.interface.directoryExists(path); // Check if directory exists + await computer.interface.readText(path, "utf-8"); // Read file content + await computer.interface.writeText(path, content, "utf-8"); // Write file content + await computer.interface.readBytes(path); // Read file content as bytes + await computer.interface.writeBytes(path, content); // Write file content as bytes + await computer.interface.deleteFile(path); // Delete file + await computer.interface.createDir(path); // Create directory + await computer.interface.deleteDir(path); // Delete directory + await computer.interface.listDir(path); // List directory contents + + // Accessibility + await computer.interface.getAccessibilityTree(); // Get accessibility tree + ``` + + diff --git a/docs/src/mdx-components.tsx b/docs/src/mdx-components.tsx index 2631afa2..3b27cf8c 100644 --- a/docs/src/mdx-components.tsx +++ b/docs/src/mdx-components.tsx @@ -1,4 +1,5 @@ import defaultMdxComponents from 'fumadocs-ui/mdx'; +import * as TabsComponents from 'fumadocs-ui/components/tabs'; import type { MDXComponents } from 'mdx/types'; import { Mermaid } from './components/mermaid'; import IOU from './components/iou'; @@ -9,6 +10,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { ...defaultMdxComponents, Mermaid, IOU, + ...TabsComponents, ...components, }; }