diff --git a/openspace/local_server/README.md b/openspace/local_server/README.md index ca69ae2..d31524c 100644 --- a/openspace/local_server/README.md +++ b/openspace/local_server/README.md @@ -40,11 +40,7 @@ Set `"mode": "server"` in `openspace/config/config_grounding.json`: 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. +> **Note:** `atomacos` is excluded because it requires `pyautogui<0.9.42` (appears unmaintained). Accessibility-tree features are currently unavailable. **Permissions required** (macOS will prompt automatically on first run): - **Accessibility** (for GUI control) diff --git a/openspace/local_server/platform_adapters/macos_adapter.py b/openspace/local_server/platform_adapters/macos_adapter.py index 00d8028..0dbaf6d 100644 --- a/openspace/local_server/platform_adapters/macos_adapter.py +++ b/openspace/local_server/platform_adapters/macos_adapter.py @@ -5,11 +5,16 @@ from openspace.utils.logging import Logger try: import AppKit - import atomacos MACOS_LIBS_AVAILABLE = True except ImportError: MACOS_LIBS_AVAILABLE = False +try: + import atomacos + ATOMACOS_AVAILABLE = True +except ImportError: + ATOMACOS_AVAILABLE = False + logger = Logger.get_logger(__name__) _warning_shown = False @@ -21,8 +26,9 @@ class MacOSAdapter: 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-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 + if not ATOMACOS_AVAILABLE: + logger.debug("atomacos not installed; accessibility-tree features unavailable (conflicts with pyautogui>=0.9.54)") self.available = MACOS_LIBS_AVAILABLE def capture_screenshot_with_cursor(self, output_path: str) -> bool: @@ -164,6 +170,8 @@ class MacOSAdapter: """ if not MACOS_LIBS_AVAILABLE: return {'error': 'macOS accessibility libraries not available'} + if not ATOMACOS_AVAILABLE: + return {'error': 'atomacos is not installed; accessibility-tree features require it'} try: # Get frontmost application @@ -178,7 +186,6 @@ class MacOSAdapter: logger.info(f"Getting accessibility tree: {app_name} ({bundle_id})") - # Use atomacos to get application reference try: if bundle_id: app_ref = atomacos.getAppRefByBundleId(bundle_id) diff --git a/openspace/local_server/requirements.txt b/openspace/local_server/requirements.txt index e03319a..f73aeda 100644 --- a/openspace/local_server/requirements.txt +++ b/openspace/local_server/requirements.txt @@ -8,8 +8,7 @@ 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 is intentionally excluded for now: atomacos 3.2+/3.3 requires -# pyautogui<0.9.42, which conflicts with OpenSpace's pyautogui>=0.9.54. +# atomacos excluded: requires pyautogui<0.9.42, conflicts with >=0.9.54 # # Linux-specific dependencies (local server) # python-xlib>=0.33; sys_platform == 'linux' diff --git a/requirements.txt b/requirements.txt index a925686..c53814c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,8 +19,7 @@ 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 is intentionally excluded for now: atomacos 3.2+/3.3 requires -# pyautogui<0.9.42, which conflicts with OpenSpace's pyautogui>=0.9.54. +# atomacos excluded: requires pyautogui<0.9.42, conflicts with >=0.9.54 # # Linux-specific dependencies (local server) # python-xlib>=0.33; sys_platform == 'linux'