Skip to main content
Glama

Voice Mode

by mbailey
migration_helpers.py•4.61 kB
"""Helper functions for migrating old service installations.""" import os import subprocess import logging from pathlib import Path from typing import List, Optional logger = logging.getLogger("voicemode") def check_old_whisper_installations() -> List[Path]: """Check for old whisper service installations.""" old_files = [] if os.uname().sysname == "Darwin": launchd_dir = Path.home() / "Library" / "LaunchAgents" old_names = [ "com.voicemode.whisper-server.plist", "com.whisper.server.plist" ] for name in old_names: path = launchd_dir / name if path.exists(): old_files.append(path) elif os.uname().sysname == "Linux": systemd_dir = Path.home() / ".config" / "systemd" / "user" old_names = ["whisper-server.service"] for name in old_names: path = systemd_dir / name if path.exists(): old_files.append(path) return old_files def check_old_kokoro_installations() -> List[Path]: """Check for old kokoro service installations.""" old_files = [] if os.uname().sysname == "Darwin": launchd_dir = Path.home() / "Library" / "LaunchAgents" # Check for any kokoro plist with port numbers for plist in launchd_dir.glob("com.voicemode.kokoro-*.plist"): old_files.append(plist) elif os.uname().sysname == "Linux": systemd_dir = Path.home() / ".config" / "systemd" / "user" old_names = ["kokoro-fastapi.service"] for name in old_names: path = systemd_dir / name if path.exists(): old_files.append(path) return old_files def auto_migrate_if_needed(service_name: str) -> Optional[str]: """ Automatically migrate old service files if found. Returns: Migration message if migration was performed, None otherwise """ if service_name == "whisper": old_files = check_old_whisper_installations() elif service_name == "kokoro": old_files = check_old_kokoro_installations() else: return None if not old_files: return None logger.info(f"Found old {service_name} service files, migrating automatically...") migrated = [] removed = [] errors = [] system = os.uname().sysname for old_path in old_files: try: if system == "Darwin": # Handle macOS launchd files if service_name == "whisper" and old_path.name in ["com.voicemode.whisper-server.plist", "com.whisper.server.plist"]: # Unload old service subprocess.run(["launchctl", "unload", str(old_path)], capture_output=True) # Remove file old_path.unlink() removed.append(str(old_path)) logger.info(f"Removed old plist: {old_path}") elif service_name == "kokoro" and "kokoro-" in old_path.name: # Remove extra kokoro instances subprocess.run(["launchctl", "unload", str(old_path)], capture_output=True) old_path.unlink() removed.append(str(old_path)) logger.info(f"Removed old plist: {old_path}") elif system == "Linux": # Handle Linux systemd files old_name = old_path.name # Stop and disable old service subprocess.run(["systemctl", "--user", "stop", old_name], capture_output=True) subprocess.run(["systemctl", "--user", "disable", old_name], capture_output=True) # Remove file old_path.unlink() removed.append(str(old_path)) logger.info(f"Removed old service: {old_path}") # Reload systemd subprocess.run(["systemctl", "--user", "daemon-reload"], capture_output=True) except Exception as e: errors.append(f"Failed to migrate {old_path}: {e}") logger.warning(f"Failed to migrate {old_path}: {e}") if migrated or removed: migration_msg = f"Cleaned up old {service_name} service files: " if removed: migration_msg += f"{len(removed)} removed" if errors: migration_msg += f" ({len(errors)} errors)" return migration_msg return None

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mbailey/voicemode'

If you have feedback or need assistance with the MCP directory API, please join our Discord server