diff --git a/agent/prompt/builder.py b/agent/prompt/builder.py index ffc27606..c9d48454 100644 --- a/agent/prompt/builder.py +++ b/agent/prompt/builder.py @@ -171,6 +171,7 @@ def _build_tooling_section(tools: List[Any], language: str) -> List[str]: "env_config": "管理API密钥和技能配置", "scheduler": "管理定时任务和提醒", "send": "发送本地文件给用户(仅限本地文件,URL直接放在回复文本中)", + "vision": "分析图片内容(识别、描述、OCR文字提取等)", } # Preferred display order @@ -179,7 +180,7 @@ def _build_tooling_section(tools: List[Any], language: str) -> List[str]: "bash", "terminal", "web_search", "web_fetch", "browser", "memory_search", "memory_get", - "env_config", "scheduler", "send", + "env_config", "scheduler", "send", "vision", ] # Build name -> summary mapping for available tools diff --git a/cli/commands/install.py b/cli/commands/install.py index 5d4220fd..525848b0 100644 --- a/cli/commands/install.py +++ b/cli/commands/install.py @@ -7,6 +7,7 @@ import subprocess import click MIN_PLAYWRIGHT_VERSION = "1.49.0" +MIN_GLIBC_VERSION = (2, 28) def _has_display() -> bool: @@ -40,11 +41,45 @@ def _version_tuple(v: str): return (0, 0, 0) +def _get_glibc_version(): + """Return glibc version as (major, minor) tuple, or None if unavailable.""" + if sys.platform != "linux": + return None + try: + import ctypes + libc = ctypes.CDLL("libc.so.6") + gnu_get_libc_version = libc.gnu_get_libc_version + gnu_get_libc_version.restype = ctypes.c_char_p + ver = gnu_get_libc_version().decode() + parts = ver.split(".") + return (int(parts[0]), int(parts[1])) + except Exception: + return None + + @click.command("install-browser") def install_browser(): """Install browser tool dependencies (Playwright + Chromium).""" python = sys.executable + # Pre-check: glibc version on Linux + if sys.platform == "linux": + glibc = _get_glibc_version() + if glibc and glibc < MIN_GLIBC_VERSION: + glibc_str = f"{glibc[0]}.{glibc[1]}" + click.echo(click.style( + f"Your system glibc version is {glibc_str}, " + f"but Playwright requires glibc >= {MIN_GLIBC_VERSION[0]}.{MIN_GLIBC_VERSION[1]}.\n" + f"(e.g. Ubuntu 18.04 ships glibc 2.27, CentOS 7 ships glibc 2.17)\n\n" + f"Options:\n" + f" 1. Upgrade your OS (e.g. Ubuntu 20.04+, Debian 10+, CentOS 8+)\n" + f" 2. Use Docker with a newer Linux image\n" + f" 3. Install an older playwright version manually (not recommended):\n" + f" pip install playwright==1.30.0 && playwright install chromium", + fg="red", + )) + raise SystemExit(1) + # Step 1: Install / upgrade playwright package click.echo(click.style("[1/3] Installing playwright Python package...", fg="yellow")) ret = subprocess.call([python, "-m", "pip", "install", f"playwright>={MIN_PLAYWRIGHT_VERSION}"]) @@ -84,7 +119,7 @@ def install_browser(): cmd.append("--only-shell") click.echo(" (headless shell for Linux server)") else: - click.echo(" (full Chromium - upgrade to playwright>=1.57 for headless-only shell)") + click.echo(" (full Chromium - upgrade to playwright>=1.57 for smaller headless-only install)") elif sys.platform == "linux": click.echo(" (full browser for Linux desktop)")