Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Desktop.ini
.vscode/
.idea/
.pytest_cache/
.venv/

# Distribution / packaging
dist/
Expand Down
8 changes: 7 additions & 1 deletion openspace/local_server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,15 @@ Set `"mode": "server"` in `openspace/config/config_grounding.json`:
<summary><b>macOS</b></summary>

```bash
pip install pyobjc-core pyobjc-framework-cocoa pyobjc-framework-quartz atomacos
pip install pyobjc-core pyobjc-framework-cocoa pyobjc-framework-quartz
```

`atomacos` is not included in the default macOS dependency set right now because
its published releases require `pyautogui<0.9.42`, which conflicts with
OpenSpace's `pyautogui>=0.9.54`. OpenSpace will still run without it, but the
macOS accessibility-tree features will stay unavailable until that upstream
constraint is resolved.

**Permissions required** (macOS will prompt automatically on first run):
- **Accessibility** (for GUI control)
- **Screen Recording** (for screenshots and video capture)
Expand Down
5 changes: 3 additions & 2 deletions openspace/local_server/platform_adapters/macos_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ def __init__(self):
global _warning_shown
if not MACOS_LIBS_AVAILABLE and not _warning_shown:
logger.warning("macOS libraries are not fully installed, some features may not be available")
logger.info("To install missing libraries, run: pip install pyobjc-framework-Cocoa atomacos")
logger.info("To install missing libraries, run: pip install pyobjc-core pyobjc-framework-Cocoa pyobjc-framework-quartz")
logger.info("Note: atomacos is currently optional because its published versions conflict with pyautogui>=0.9.54")
_warning_shown = True
self.available = MACOS_LIBS_AVAILABLE

Expand Down Expand Up @@ -719,4 +720,4 @@ def get_terminal_output(self) -> Optional[str]:

except Exception as e:
logger.error(f"Failed to get terminal output: {e}")
return None
return None
5 changes: 3 additions & 2 deletions openspace/local_server/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ requests>=2.32.0
# pyobjc-core>=12.0; sys_platform == 'darwin'
# pyobjc-framework-cocoa>=12.0; sys_platform == 'darwin'
# pyobjc-framework-quartz>=12.0; sys_platform == 'darwin'
# atomacos>=3.2.0; sys_platform == 'darwin'
# atomacos is intentionally excluded for now: atomacos 3.2+/3.3 requires
# pyautogui<0.9.42, which conflicts with OpenSpace's pyautogui>=0.9.54.

# # Linux-specific dependencies (local server)
# python-xlib>=0.33; sys_platform == 'linux'
Expand All @@ -18,4 +19,4 @@ requests>=2.32.0
# # Windows-specific dependencies (local server)
# pywinauto>=0.6.8; sys_platform == 'win32'
# pywin32>=306; sys_platform == 'win32'
# PyGetWindow>=0.0.9; sys_platform == 'win32'
# PyGetWindow>=0.0.9; sys_platform == 'win32'
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ macos = [
"pyobjc-core>=12.0",
"pyobjc-framework-cocoa>=12.0",
"pyobjc-framework-quartz>=12.0",
"atomacos>=3.2.0",
]

linux = [
Expand Down
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ requests>=2.32.0
# pyobjc-core>=12.0; sys_platform == 'darwin'
# pyobjc-framework-cocoa>=12.0; sys_platform == 'darwin'
# pyobjc-framework-quartz>=12.0; sys_platform == 'darwin'
# atomacos>=3.2.0; sys_platform == 'darwin'
# atomacos is intentionally excluded for now: atomacos 3.2+/3.3 requires
# pyautogui<0.9.42, which conflicts with OpenSpace's pyautogui>=0.9.54.

# # Linux-specific dependencies (local server)
# python-xlib>=0.33; sys_platform == 'linux'
Expand Down