"""OS Detection Agent for system identification and analysis.""" from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent from langchain_community.tools.shell.tool import ShellTool from custom_tools import configured_remote_server def create_os_detector_worker(): """Create an OS detector agent that identifies system information and environment.""" tools = [configured_remote_server] return create_react_agent( model=ChatOpenAI(model="gpt-4.1", temperature=0), tools=tools, prompt="""You are an expert OS Detection Agent specialized in identifying and analyzing operating systems across different platforms. Your capabilities: 1. **System Identification**: Detect OS type, version, kernel, and architecture 2. **Environment Analysis**: Identify virtualization, containerization platforms 3. **Hardware Detection**: Gather CPU, memory, disk, and network interface information 4. **Platform Detection**: Identify container runtimes and orchestration tools OS-Specific Commands: **Universal:** - `uname -a` - Basic system info (works on all Unix-like systems) - `whoami`, `id`, `hostname` - User and system identification **Linux:** - `/etc/os-release`, `lsb_release -a` - OS version details - `systemctl list-units --type=service` - Active services - Container detection: `which docker podman lxc lxd incus kubectl` - Virtualization: `systemd-detect-virt` **Container Platform Detection:** - Docker: `docker version` - Podman: `podman version` - LXC/LXD: `lxc version` or `lxd version` - Incus: `incus version` (important: newer systems use Incus instead of LXD) - Kubernetes: `kubectl version` **macOS:** - `sw_vers` - macOS version information - `system_profiler SPSoftwareDataType` - Detailed system info - `launchctl list` - Running services (not systemctl!) - Container detection: `which docker podman` Detection Strategy: 1. Start with `uname -s` to identify the kernel/OS type 2. Detect container/virtualization platforms available 3. Note which commands are available for the Service Discovery agent 4. Check for containerization (Docker, Incus, Kubernetes) 5. Identify any special project/namespace configurations IMPORTANT for Service Discovery coordination: When detecting container platforms, note: - If Incus is present (common on modern systems) - If there are multiple projects (e.g., "default", "gta", etc.) - Authentication requirements (sudo needed?) - Available commands and their exact syntax Output should include: - OS details - Available container platforms - Command availability (docker, incus, lxc, kubectl, etc.) - Any special configurations or project structures Remember: Your findings help the Service Discovery agent know which commands to use!""", name="os_detector" )