diff --git a/augment/hooks/mdm/setup.py b/augment/hooks/mdm/setup.py index 0279e34a..df451213 100644 --- a/augment/hooks/mdm/setup.py +++ b/augment/hooks/mdm/setup.py @@ -1252,7 +1252,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Augment Code Hooks - MDM Setup") @@ -1266,7 +1266,7 @@ def main(): ) print("This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -1301,27 +1301,27 @@ def main(): print("\nMissing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nGetting device identifier...") device_id = get_device_identifier() if not device_id: print("Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("Device identifier retrieved") print("\nFetching API key from MDM...") api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not api_key: - return + return False print("API key received") print("\nSetting environment variables system-wide...") success, _ = set_env_var_system_wide("UNBOUND_AUGMENT_API_KEY", api_key) if not success: print("Failed to set UNBOUND_AUGMENT_API_KEY") - return + return False debug_print("UNBOUND_AUGMENT_API_KEY set successfully") # Write the per-user unbound config now (needed by the managed hook; harmless @@ -1336,7 +1336,7 @@ def main(): print("\nConfiguring Augment managed hooks...") if not setup_managed_hooks(gateway_url=gateway_url): print("Failed to configure managed hooks") - return + return False managed_dir = get_managed_settings_dir() print(f"Created managed hooks in {managed_dir}") @@ -1357,12 +1357,16 @@ def main(): notify_setup_complete(api_key, "augment_code", backend_url=base_url, install_state=state, serial_number=device_id) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nSetup cancelled.") + sys.exit(1) except Exception as e: print(f"\nError: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/claude-code/gateway/mdm/setup.py b/claude-code/gateway/mdm/setup.py index d33a4dd9..aa4eea5a 100644 --- a/claude-code/gateway/mdm/setup.py +++ b/claude-code/gateway/mdm/setup.py @@ -905,7 +905,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Claude Code - MDM Setup") @@ -919,7 +919,7 @@ def main(): ) print("āŒ This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -950,13 +950,13 @@ def main(): print("\nāŒ Missing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nšŸ” Getting device identifier...") device_id = get_device_identifier() if not device_id: print("āŒ Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("āœ… Device identifier retrieved") @@ -966,7 +966,7 @@ def main(): print("\nšŸ”‘ Fetching API key from MDM...") claude_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not claude_api_key: - return + return False print("āœ… API key received") print("\nšŸ“ Setting environment variables system-wide...") @@ -977,13 +977,13 @@ def main(): success, env_changed = set_env_var_system_wide("UNBOUND_API_KEY", claude_api_key) if not success: print(f"āŒ Failed to set UNBOUND_API_KEY") - return + return False debug_print("UNBOUND_API_KEY set successfully") success, url_changed = set_env_var_system_wide("ANTHROPIC_BASE_URL", gateway_url) if not success: print(f"āŒ Failed to set ANTHROPIC_BASE_URL") - return + return False debug_print("ANTHROPIC_BASE_URL set successfully") # Remove leftover hooks scripts, strip leftover user-level Unbound @@ -1000,7 +1000,7 @@ def main(): print(f"āœ… Created managed settings in {managed_dir}") else: print("āŒ Failed to configure managed settings") - return + return False print("\n" + "=" * 60) print("Setup Complete!") @@ -1008,12 +1008,16 @@ def main(): notify_setup_complete(claude_api_key, "unbound-claude-code", backend_url=base_url, install_state=install_state, serial_number=device_id) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nāš ļø Setup cancelled.") + sys.exit(1) except Exception as e: print(f"\nāŒ Error: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/claude-code/hooks/mdm/setup.py b/claude-code/hooks/mdm/setup.py index bd4de6ec..47322aea 100644 --- a/claude-code/hooks/mdm/setup.py +++ b/claude-code/hooks/mdm/setup.py @@ -1534,7 +1534,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Claude Code Hooks - MDM Setup") @@ -1548,7 +1548,7 @@ def main(): ) print("This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -1587,20 +1587,20 @@ def main(): print("\nMissing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug] [--backfill]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nGetting device identifier...") device_id = get_device_identifier() if not device_id: print("Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("Device identifier retrieved") print("\nFetching API key from MDM...") api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not api_key: - return + return False print("API key received") print("\nSetting environment variables system-wide...") @@ -1612,7 +1612,7 @@ def main(): success, _ = set_env_var_system_wide("UNBOUND_CLAUDE_API_KEY", api_key) if not success: print("Failed to set UNBOUND_CLAUDE_API_KEY") - return + return False debug_print("UNBOUND_CLAUDE_API_KEY set successfully") # Remove gateway artifacts, strip leftover user-level Unbound hooks @@ -1630,7 +1630,7 @@ def main(): print(f"Created managed hooks in {managed_dir}") else: print("Failed to configure managed hooks") - return + return False print("\n" + "=" * 60) print("Setup Complete!") @@ -1641,12 +1641,16 @@ def main(): if backfill_mode: run_backfill(api_key, base_url, get_all_user_homes()) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nSetup cancelled.") + sys.exit(1) except Exception as e: print(f"\nError: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/codex/gateway/mdm/setup.py b/codex/gateway/mdm/setup.py index 4ab8c981..9c1056f5 100644 --- a/codex/gateway/mdm/setup.py +++ b/codex/gateway/mdm/setup.py @@ -868,7 +868,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Codex - MDM Setup") @@ -882,7 +882,7 @@ def main(): ) print("āŒ This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -913,13 +913,13 @@ def main(): print("\nāŒ Missing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nšŸ” Getting device identifier...") device_id = get_device_identifier() if not device_id: print("āŒ Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("āœ… Device identifier retrieved") @@ -929,7 +929,7 @@ def main(): print("\nšŸ”‘ Fetching API key from MDM...") codex_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not codex_api_key: - return + return False print("āœ… API key received") # Remove leftover hooks setup env var @@ -940,14 +940,14 @@ def main(): success, env_changed = set_env_var_system_wide("OPENAI_API_KEY", codex_api_key) if not success: print(f"āŒ Failed to set OPENAI_API_KEY") - return + return False debug_print("OPENAI_API_KEY set successfully") print("\nšŸ“ Configuring all users...") user_homes = get_all_user_homes() if not user_homes: print("āŒ No user home directories found") - return + return False config_count = 0 for username, home_dir in user_homes: if write_codex_config_for_user(username, home_dir, f"{gateway_url.rstrip('/')}/v1"): @@ -958,7 +958,7 @@ def main(): if config_count == 0: print("āŒ Failed to configure codex for any users") - return + return False print(f"āœ… Configured {config_count} user(s)") @@ -971,12 +971,16 @@ def main(): notify_setup_complete(codex_api_key, "unbound-codex", backend_url=base_url, install_state=install_state, serial_number=device_id) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nāš ļø Setup cancelled by user.") + sys.exit(1) except Exception as e: print(f"\nāŒ An error occurred: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/codex/hooks/mdm/setup.py b/codex/hooks/mdm/setup.py index c3496db4..b6a77d85 100644 --- a/codex/hooks/mdm/setup.py +++ b/codex/hooks/mdm/setup.py @@ -1678,7 +1678,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Codex Hooks - MDM Setup") @@ -1692,7 +1692,7 @@ def main(): ) print("This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -1731,20 +1731,20 @@ def main(): print("\nMissing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug] [--backfill]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nGetting device identifier...") device_id = get_device_identifier() if not device_id: print("Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("Device identifier retrieved") print("\nFetching API key from MDM...") api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not api_key: - return + return False print("API key received") print("\nSetting environment variables system-wide...") @@ -1755,7 +1755,7 @@ def main(): success, _ = set_env_var_system_wide("UNBOUND_CODEX_API_KEY", api_key) if not success: print("Failed to set UNBOUND_CODEX_API_KEY") - return + return False debug_print("UNBOUND_CODEX_API_KEY set successfully") # codex 0.125 discovers hooks from ~/.codex/hooks.json (user layer), not the @@ -1777,7 +1777,7 @@ def main(): if user_homes and installed == 0: print("Failed to configure codex hooks for any user") - return + return False print("\n" + "=" * 60) print("Setup Complete!") @@ -1788,12 +1788,16 @@ def main(): if backfill_mode: run_backfill(api_key, base_url, get_all_user_homes()) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nSetup cancelled.") + sys.exit(1) except Exception as e: print(f"\nError: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/cursor/mdm/setup.py b/cursor/mdm/setup.py index b6740e09..0f7dff5c 100644 --- a/cursor/mdm/setup.py +++ b/cursor/mdm/setup.py @@ -1044,7 +1044,7 @@ def main(): # If clear mode, run cleanup and exit if clear_mode: clear_setup() - return + return True print("=" * 60) print("Unbound Cursor Hooks - MDM Setup") @@ -1060,7 +1060,7 @@ def main(): ) print("āŒ This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False # Parse arguments base_url = "https://backend.getunbound.ai" @@ -1096,14 +1096,14 @@ def main(): print("\nāŒ Missing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False # Get device identifier print("\nšŸ” Getting device serial number...") serial_number = get_device_identifier() if not serial_number: print("āŒ Failed to get device serial number") - return + return False debug_print(f"Serial number: {serial_number}") print("āœ… Serial number retrieved") @@ -1111,7 +1111,7 @@ def main(): print("\nšŸ”‘ Fetching API key from MDM...") cursor_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, serial_number) if not cursor_api_key: - return + return False print("āœ… API key received") # Set environment variable @@ -1119,7 +1119,7 @@ def main(): success, env_changed, message = set_env_var("UNBOUND_CURSOR_API_KEY", cursor_api_key) if not success: print(f"āŒ Failed to set environment variable: {message}") - return + return False print(f"āœ… Environment variable set ({message})") # Write API key to ~/.unbound/config.json for each user and remove user-level hooks @@ -1142,7 +1142,7 @@ def main(): hooks_success, hooks_changed = setup_hooks(gateway_url=gateway_url) if not hooks_success: print("\nāŒ Failed to setup hooks") - return + return False debug_print("Hooks setup complete") print("\n" + "=" * 60) @@ -1160,12 +1160,16 @@ def main(): print("=" * 60) print("\n") + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nāš ļø Setup cancelled.") + sys.exit(1) except Exception as e: print(f"\nāŒ Error: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1) diff --git a/gemini-cli/gateway/mdm/setup.py b/gemini-cli/gateway/mdm/setup.py index 65ad03c2..eed865f1 100644 --- a/gemini-cli/gateway/mdm/setup.py +++ b/gemini-cli/gateway/mdm/setup.py @@ -682,7 +682,7 @@ def main(): if clear_mode: clear_setup() - return + return True print("=" * 60) print("Gemini CLI - MDM Setup") @@ -696,7 +696,7 @@ def main(): ) print("āŒ This script requires administrator/root privileges") print(" Please re-run with sudo.") - return + return False base_url = "https://backend.getunbound.ai" gateway_url = DEFAULT_GATEWAY_URL @@ -727,13 +727,13 @@ def main(): print("\nāŒ Missing required argument: --api-key") print("Usage: sudo python3 setup.py --api-key [--backend-url ] [--app_name ] [--debug]") print(" Or: sudo python3 setup.py --clear [--debug]") - return + return False print("\nšŸ” Getting device identifier...") device_id = get_device_identifier() if not device_id: print("āŒ Failed to get device identifier") - return + return False debug_print(f"Device identifier: {device_id}") print("āœ… Device identifier retrieved") @@ -743,20 +743,20 @@ def main(): print("\nšŸ”‘ Fetching API key from MDM...") gemini_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id) if not gemini_api_key: - return + return False print("āœ… API key received") print("\nšŸ“ Setting environment variables system-wide...") success, env_changed = set_env_var_system_wide("GEMINI_API_KEY", gemini_api_key) if not success: print(f"āŒ Failed to set GEMINI_API_KEY") - return + return False debug_print("GEMINI_API_KEY set successfully") success, url_changed = set_env_var_system_wide("GOOGLE_GEMINI_BASE_URL", f"{gateway_url.rstrip('/')}/v1") if not success: print(f"āŒ Failed to set GOOGLE_GEMINI_BASE_URL") - return + return False debug_print("GOOGLE_GEMINI_BASE_URL set successfully") for username, home_dir in get_all_user_homes(): @@ -790,12 +790,16 @@ def main(): notify_setup_complete(gemini_api_key, "gemini-cli", backend_url=base_url, install_state=install_state, serial_number=device_id) + return True + if __name__ == "__main__": try: - main() + ok = main() except KeyboardInterrupt: print("\n\nāš ļø Setup cancelled by user.") + sys.exit(1) except Exception as e: print(f"\nāŒ An error occurred: {e}") - exit(1) + sys.exit(1) + sys.exit(0 if ok else 1)