""" WebFetch Tool - 通过 Bun 适配器调用 OpenCode 网页抓取功能,包括 HTML 转 Markdown、内容提取等复杂逻辑。 """ from typing import Optional from agent.tools import tool, ToolResult, ToolContext from agent.tools.adapters.opencode_bun_adapter import OpenCodeBunAdapter # 创建适配器实例 _adapter = None def _get_adapter(): global _adapter if _adapter is None: _adapter = OpenCodeBunAdapter() return _adapter @tool(description="抓取网页内容并转换为 Markdown 格式") async def webfetch( url: str, format: str = "markdown", timeout: Optional[int] = None, uid: str = "", context: Optional[ToolContext] = None ) -> ToolResult: """ 抓取网页内容 使用 OpenCode 的 webfetch 工具(通过 Bun 适配器调用)。 包含 HTML 到 Markdown 转换、内容清理等功能。 Args: url: 网页 URL format: 输出格式(markdown, text, html),默认 markdown timeout: 超时时间(秒) uid: 用户 ID context: 工具上下文 Returns: ToolResult: 网页内容 """ adapter = _get_adapter() args = { "url": url, "format": format, } if timeout is not None: args["timeout"] = timeout return await adapter.adapt_execute( tool_name="webfetch", args=args, context=context )