From 5c62a21f32d846f586ad40381737222f98a54d97 Mon Sep 17 00:00:00 2001 From: Panniantong Date: Tue, 24 Feb 2026 10:25:46 +0100 Subject: [PATCH] =?UTF-8?q?rename:=20Agent=20Eyes=20=E2=86=92=20Agent=20Re?= =?UTF-8?q?ach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全局重命名: - 包名: agent_eyes → agent_reach - CLI: agent-eyes → agent-reach - 类名: AgentEyes → AgentReach - 显示名: Agent Eyes → Agent Reach - GitHub: Panniantong/agent-eyes → Panniantong/Agent-Reach 所有 36 个测试通过,CLI/doctor/read/search 全部正常。 --- README.md | 32 ++++---- agent_eyes/__init__.py | 9 --- agent_eyes/integrations/skill/SKILL.md | 65 ---------------- agent_reach/__init__.py | 9 +++ .../channels/__init__.py | 2 +- {agent_eyes => agent_reach}/channels/base.py | 2 +- .../channels/bilibili.py | 6 +- .../channels/exa_search.py | 4 +- .../channels/github.py | 0 .../channels/reddit.py | 8 +- {agent_eyes => agent_reach}/channels/rss.py | 0 .../channels/twitter.py | 2 +- {agent_eyes => agent_reach}/channels/web.py | 0 .../channels/xiaohongshu.py | 6 +- .../channels/youtube.py | 0 {agent_eyes => agent_reach}/cli.py | 78 +++++++++---------- {agent_eyes => agent_reach}/config.py | 8 +- {agent_eyes => agent_reach}/cookie_extract.py | 2 +- {agent_eyes => agent_reach}/core.py | 16 ++-- {agent_eyes => agent_reach}/doctor.py | 8 +- .../guides/setup-exa.md | 8 +- .../guides/setup-groq.md | 4 +- .../guides/setup-reddit.md | 4 +- .../guides/setup-twitter.md | 0 .../guides/setup-wechat.md | 2 +- .../guides/setup-xiaohongshu.md | 4 +- .../integrations/__init__.py | 0 .../integrations/mcp_server.py | 16 ++-- agent_reach/integrations/skill/SKILL.md | 65 ++++++++++++++++ docs/README_en.md | 46 +++++------ docs/cookie-export.md | 2 +- docs/install.md | 34 ++++---- pyproject.toml | 14 ++-- tests/test_channels.py | 10 +-- tests/test_cli.py | 14 ++-- tests/test_config.py | 4 +- tests/test_core.py | 12 +-- tests/test_doctor.py | 6 +- 38 files changed, 251 insertions(+), 251 deletions(-) delete mode 100644 agent_eyes/__init__.py delete mode 100644 agent_eyes/integrations/skill/SKILL.md create mode 100644 agent_reach/__init__.py rename {agent_eyes => agent_reach}/channels/__init__.py (96%) rename {agent_eyes => agent_reach}/channels/base.py (99%) rename {agent_eyes => agent_reach}/channels/bilibili.py (95%) rename {agent_eyes => agent_reach}/channels/exa_search.py (95%) rename {agent_eyes => agent_reach}/channels/github.py (100%) rename {agent_eyes => agent_reach}/channels/reddit.py (94%) rename {agent_eyes => agent_reach}/channels/rss.py (100%) rename {agent_eyes => agent_reach}/channels/twitter.py (98%) rename {agent_eyes => agent_reach}/channels/web.py (100%) rename {agent_eyes => agent_reach}/channels/xiaohongshu.py (94%) rename {agent_eyes => agent_reach}/channels/youtube.py (100%) rename {agent_eyes => agent_reach}/cli.py (90%) rename {agent_eyes => agent_reach}/config.py (93%) rename {agent_eyes => agent_reach}/cookie_extract.py (99%) rename {agent_eyes => agent_reach}/core.py (92%) rename {agent_eyes => agent_reach}/doctor.py (92%) rename {agent_eyes => agent_reach}/guides/setup-exa.md (89%) rename {agent_eyes => agent_reach}/guides/setup-groq.md (93%) rename {agent_eyes => agent_reach}/guides/setup-reddit.md (96%) rename {agent_eyes => agent_reach}/guides/setup-twitter.md (100%) rename {agent_eyes => agent_reach}/guides/setup-wechat.md (94%) rename {agent_eyes => agent_reach}/guides/setup-xiaohongshu.md (90%) rename {agent_eyes => agent_reach}/integrations/__init__.py (100%) rename {agent_eyes => agent_reach}/integrations/mcp_server.py (90%) create mode 100644 agent_reach/integrations/skill/SKILL.md diff --git a/README.md b/README.md index 213f0e4..1a3faac 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@

- Agent Eyes + Agent Reach

-

👁️ Agent Eyes

+

👁️ Agent Reach

给你的 AI Agent 一键装上互联网能力 @@ -11,7 +11,7 @@

MIT License Python 3.8+ - GitHub Stars + GitHub Stars

@@ -20,7 +20,7 @@ --- -## 为什么需要 Agent Eyes? +## 为什么需要 Agent Reach? AI Agent 已经能访问互联网——但只是"能上网"而已。 @@ -35,10 +35,10 @@ AI Agent 已经能访问互联网——但只是"能上网"而已。 你要让 Agent 接入这些平台,就得一个一个去踩坑、装工具、调配置。 -**Agent Eyes 把这件事变成一行命令:** +**Agent Reach 把这件事变成一行命令:** ``` -帮我安装 Agent Eyes:https://raw.githubusercontent.com/Panniantong/agent-eyes/main/docs/install.md +帮我安装 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md ``` 复制给你的 Agent,30 秒后它就能读推特、搜 Reddit、看 B站了。 @@ -51,7 +51,7 @@ AI Agent 已经能访问互联网——但只是"能上网"而已。 | 🔒 **隐私安全** | Cookie 只存在你本地,不上传不外传。代码完全开源,随时可审查 | | 🔄 **持续更新** | 底层工具(yt-dlp、birdx、Jina Reader 等)定期追踪更新到最新版,你不用自己盯 | | 🤖 **兼容所有 Agent** | Claude Code、OpenClaw、Cursor、Windsurf……任何能跑命令行的 Agent 都能用 | -| 🩺 **自带诊断** | `agent-eyes doctor` 一条命令告诉你哪个通、哪个不通、怎么修 | +| 🩺 **自带诊断** | `agent-reach doctor` 一条命令告诉你哪个通、哪个不通、怎么修 | --- @@ -78,7 +78,7 @@ AI Agent 已经能访问互联网——但只是"能上网"而已。 复制给你的 AI Agent(Claude Code、OpenClaw、Cursor 等): ``` -帮我安装 Agent Eyes:https://raw.githubusercontent.com/Panniantong/agent-eyes/main/docs/install.md +帮我安装 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md ``` Agent 自动安装、检测环境、告诉你哪些功能已经可以用。 @@ -87,8 +87,8 @@ Agent 自动安装、检测环境、告诉你哪些功能已经可以用。

手动安装 ```bash -pip install https://github.com/Panniantong/agent-eyes/archive/main.zip -agent-eyes install --env=auto +pip install https://github.com/Panniantong/agent-reach/archive/main.zip +agent-reach install --env=auto ``` @@ -132,9 +132,9 @@ Reddit 和 B站封服务器 IP。买个代理(推荐 [Webshare](https://websha ## 状态一目了然 ``` -$ agent-eyes doctor +$ agent-reach doctor -👁️ Agent Eyes 状态 +👁️ Agent Reach 状态 ======================================== ✅ 装好即用: @@ -159,11 +159,11 @@ $ agent-eyes doctor ## 设计理念 -**Agent Eyes 是一个 Agent 初始化脚手架,不是框架。** +**Agent Reach 是一个 Agent 初始化脚手架,不是框架。** 你给一个新 Agent 装环境的时候,总要花时间去找工具、装依赖、调配置——Twitter 用什么读?Reddit 怎么绕封?YouTube 字幕怎么提取?每次都要重新踩一遍。 -Agent Eyes 做的事情很简单:**帮你把这些选型和配置的活儿做完了。** +Agent Reach 做的事情很简单:**帮你把这些选型和配置的活儿做完了。** | 场景 | 选型 | 为什么选它 | |------|------|-----------| @@ -179,7 +179,7 @@ Agent Eyes 做的事情很简单:**帮你把这些选型和配置的活儿做 项目结构 ``` -agent_eyes/channels/ +agent_reach/channels/ ├── web.py → Jina Reader ├── twitter.py → birdx ├── youtube.py → yt-dlp @@ -196,7 +196,7 @@ agent_eyes/channels/ ## 贡献 -欢迎提 [Issue](https://github.com/Panniantong/agent-eyes/issues) 和 [PR](https://github.com/Panniantong/agent-eyes/pulls)。 +欢迎提 [Issue](https://github.com/Panniantong/agent-reach/issues) 和 [PR](https://github.com/Panniantong/agent-reach/pulls)。 想加新平台?复制任意一个 channel 文件,改改就行——每个文件只有 ~50 行。 diff --git a/agent_eyes/__init__.py b/agent_eyes/__init__.py deleted file mode 100644 index 0ceaffc..0000000 --- a/agent_eyes/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -"""Agent Eyes — Give your AI Agent eyes to see the entire internet.""" - -__version__ = "1.0.0" -__author__ = "Neo Reid" - -from agent_eyes.core import AgentEyes - -__all__ = ["AgentEyes"] diff --git a/agent_eyes/integrations/skill/SKILL.md b/agent_eyes/integrations/skill/SKILL.md deleted file mode 100644 index 20219bd..0000000 --- a/agent_eyes/integrations/skill/SKILL.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -name: agent-eyes -description: "Give your AI Agent eyes to see the entire internet. Search + read 10+ platforms with one install." -install: pip install git+https://github.com/Panniantong/agent-eyes.git ---- - -# Agent Eyes — 给 Agent 装上眼睛 👁️ - -安装后你就能搜索和阅读全网内容。 - -## 安装 - -```bash -pip install git+https://github.com/Panniantong/agent-eyes.git -``` - -## 装完直接能用的(零配置) - -- `agent-eyes read ` — 读取任意网页、GitHub、B站、YouTube、RSS -- `agent-eyes search-github "query"` — 搜索 GitHub 仓库 -- `agent-eyes doctor` — 查看所有平台状态 - -## 解锁更多功能 - -运行 `agent-eyes setup` 进行交互式配置,或者读取以下指南: - -| 功能 | 指南文件 | -|------|---------| -| 全网搜索 + Reddit搜索 + Twitter搜索 | `agent_eyes/guides/setup-exa.md` | -| Reddit 完整阅读 | `agent_eyes/guides/setup-reddit.md` | -| Twitter 高级(时间线/线程) | `agent_eyes/guides/setup-twitter.md` | -| 小红书 | `agent_eyes/guides/setup-xiaohongshu.md` | -| 微信公众号 | `agent_eyes/guides/setup-wechat.md` | -| 视频语音转文字 | `agent_eyes/guides/setup-groq.md` | - -每个指南里有详细的步骤说明,你(Agent)可以照着做,只有需要人类操作的部分(登录、复制 key)才需要问用户。 - -## MCP Server - -如果你的 Agent 平台支持 MCP: - -```bash -pip install agent-eyes[mcp] -python -m agent_eyes.integrations.mcp_server -``` - -提供 8 个工具:read_url, read_batch, detect_platform, search, search_reddit, search_github, search_twitter, get_status - -## Python API - -```python -from agent_eyes import AgentEyes -import asyncio - -eyes = AgentEyes() - -# 读取 -result = asyncio.run(eyes.read("https://github.com/openai/gpt-4")) - -# 搜索 -results = asyncio.run(eyes.search("AI agent framework")) - -# 健康检查 -print(eyes.doctor_report()) -``` diff --git a/agent_reach/__init__.py b/agent_reach/__init__.py new file mode 100644 index 0000000..9b8bcbb --- /dev/null +++ b/agent_reach/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +"""Agent Reach — Give your AI Agent eyes to see the entire internet.""" + +__version__ = "1.0.0" +__author__ = "Neo Reid" + +from agent_reach.core import AgentReach + +__all__ = ["AgentReach"] diff --git a/agent_eyes/channels/__init__.py b/agent_reach/channels/__init__.py similarity index 96% rename from agent_eyes/channels/__init__.py rename to agent_reach/channels/__init__.py index 37e964e..d70a98e 100644 --- a/agent_eyes/channels/__init__.py +++ b/agent_reach/channels/__init__.py @@ -2,7 +2,7 @@ """ Channel registry — routes URLs to the right channel. -This is the core of Agent Eyes' pluggable architecture. +This is the core of Agent Reach' pluggable architecture. Add a new channel: just create a file and register it here. Swap a backend: just change the implementation inside the channel file. """ diff --git a/agent_eyes/channels/base.py b/agent_reach/channels/base.py similarity index 99% rename from agent_eyes/channels/base.py rename to agent_reach/channels/base.py index 7c14acf..c311750 100644 --- a/agent_eyes/channels/base.py +++ b/agent_reach/channels/base.py @@ -123,7 +123,7 @@ class Channel(ABC): # Check required config for key in self.requires_config: if config and not config.get(key): - return "off", f"需要配置 {key},运行 agent-eyes setup" + return "off", f"需要配置 {key},运行 agent-reach setup" return "ok", f"{'、'.join(self.backends) if self.backends else '内置'}" diff --git a/agent_eyes/channels/bilibili.py b/agent_reach/channels/bilibili.py similarity index 95% rename from agent_eyes/channels/bilibili.py rename to agent_reach/channels/bilibili.py index d1db50c..959e4c6 100644 --- a/agent_eyes/channels/bilibili.py +++ b/agent_reach/channels/bilibili.py @@ -34,7 +34,7 @@ class BilibiliChannel(Channel): ] is_server = any(indicators) if is_server: - return "warn", "服务器 IP 可能被封,配置代理即可解决:agent-eyes configure proxy URL" + return "warn", "服务器 IP 可能被封,配置代理即可解决:agent-reach configure proxy URL" return "ok", "本地直连可用" async def read(self, url: str, config=None) -> ReadResult: @@ -52,7 +52,7 @@ class BilibiliChannel(Channel): if not bv_id: # Fallback to Jina Reader - from agent_eyes.channels.web import WebChannel + from agent_reach.channels.web import WebChannel return await WebChannel().read(url, config) # Get video info @@ -75,7 +75,7 @@ class BilibiliChannel(Channel): title=f"Bilibili: {bv_id}", content=f"⚠️ Bilibili blocked this request ({msg}). " f"This usually means the server IP is blocked. " - f"Try: agent-eyes configure proxy http://user:pass@ip:port", + f"Try: agent-reach configure proxy http://user:pass@ip:port", url=url, platform="bilibili", ) diff --git a/agent_eyes/channels/exa_search.py b/agent_reach/channels/exa_search.py similarity index 95% rename from agent_eyes/channels/exa_search.py rename to agent_reach/channels/exa_search.py index 55c3c28..c0feee8 100644 --- a/agent_eyes/channels/exa_search.py +++ b/agent_reach/channels/exa_search.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Exa semantic search — the search backbone for Agent Eyes. +"""Exa semantic search — the search backbone for Agent Reach. Backend: Exa API (https://exa.ai) — free 1000 searches/month Swap to: Tavily, SerpAPI, or any search API @@ -37,7 +37,7 @@ class ExaSearchChannel(Channel): raise ValueError( "Exa API key not configured.\n" "Get a free key at https://exa.ai (1000 searches/month free)\n" - "Then run: agent-eyes setup" + "Then run: agent-reach setup" ) async def search(self, query: str, config=None, **kwargs) -> List[SearchResult]: diff --git a/agent_eyes/channels/github.py b/agent_reach/channels/github.py similarity index 100% rename from agent_eyes/channels/github.py rename to agent_reach/channels/github.py diff --git a/agent_eyes/channels/reddit.py b/agent_reach/channels/reddit.py similarity index 94% rename from agent_eyes/channels/reddit.py rename to agent_reach/channels/reddit.py index bfd4c5d..174006a 100644 --- a/agent_eyes/channels/reddit.py +++ b/agent_reach/channels/reddit.py @@ -31,9 +31,9 @@ class RedditChannel(Channel): elif proxy: return "ok", "代理已配置,可读取帖子。配置 REDDIT_CLIENT_ID/SECRET 可解锁高级搜索和发帖" elif has_bot: - return "warn", "OAuth Bot 已配置,但服务器直连可能被封。配个代理更稳定:agent-eyes configure proxy URL" + return "warn", "OAuth Bot 已配置,但服务器直连可能被封。配个代理更稳定:agent-reach configure proxy URL" else: - return "off", "搜索用 Exa 免费可用。读帖子需配个代理:agent-eyes configure proxy URL" + return "off", "搜索用 Exa 免费可用。读帖子需配个代理:agent-reach configure proxy URL" async def read(self, url: str, config=None) -> ReadResult: proxy = config.get("reddit_proxy") if config else None @@ -63,10 +63,10 @@ class RedditChannel(Channel): title="Reddit", content="⚠️ Reddit blocked this request (403 Forbidden). " "Reddit blocks most server IPs.\n" - "Fix: agent-eyes configure proxy http://user:pass@ip:port\n" + "Fix: agent-reach configure proxy http://user:pass@ip:port\n" "Cheap option: https://www.webshare.io ($1/month)\n\n" "Alternatively, search Reddit via Exa (free, no proxy needed): " - "agent-eyes search-reddit \"your query\"", + "agent-reach search-reddit \"your query\"", url=url, platform="reddit", ) diff --git a/agent_eyes/channels/rss.py b/agent_reach/channels/rss.py similarity index 100% rename from agent_eyes/channels/rss.py rename to agent_reach/channels/rss.py diff --git a/agent_eyes/channels/twitter.py b/agent_reach/channels/twitter.py similarity index 98% rename from agent_eyes/channels/twitter.py rename to agent_reach/channels/twitter.py index dd0fa43..d54d5a0 100644 --- a/agent_eyes/channels/twitter.py +++ b/agent_reach/channels/twitter.py @@ -145,6 +145,6 @@ class TwitterChannel(Channel): return results async def _search_exa(self, query: str, limit: int, config=None) -> List[SearchResult]: - from agent_eyes.channels.exa_search import ExaSearchChannel + from agent_reach.channels.exa_search import ExaSearchChannel exa = ExaSearchChannel() return await exa.search(f"site:x.com {query}", config=config, limit=limit) diff --git a/agent_eyes/channels/web.py b/agent_reach/channels/web.py similarity index 100% rename from agent_eyes/channels/web.py rename to agent_reach/channels/web.py diff --git a/agent_eyes/channels/xiaohongshu.py b/agent_reach/channels/xiaohongshu.py similarity index 94% rename from agent_eyes/channels/xiaohongshu.py rename to agent_reach/channels/xiaohongshu.py index 4c3b09e..cf4e80c 100644 --- a/agent_eyes/channels/xiaohongshu.py +++ b/agent_reach/channels/xiaohongshu.py @@ -26,7 +26,7 @@ class XiaoHongShuChannel(Channel): cookie = config.get("xhs_cookie") if config else None if cookie: return "ok", "Cookie 已配置,完整可用" - return "off", "需要配置 Cookie 才能访问。导入浏览器 Cookie 即可:agent-eyes configure --from-browser chrome" + return "off", "需要配置 Cookie 才能访问。导入浏览器 Cookie 即可:agent-reach configure --from-browser chrome" async def read(self, url: str, config=None) -> ReadResult: cookie = config.get("xhs_cookie") if config else None @@ -35,7 +35,7 @@ class XiaoHongShuChannel(Channel): return ReadResult( title="XiaoHongShu", content="⚠️ XiaoHongShu requires cookies to access.\n" - "Set up: agent-eyes configure xhs-cookie \"YOUR_COOKIE_STRING\"\n" + "Set up: agent-reach configure xhs-cookie \"YOUR_COOKIE_STRING\"\n" "How to get it: install Cookie-Editor extension → go to xiaohongshu.com → Export → Header String", url=url, platform="xiaohongshu", @@ -44,7 +44,7 @@ class XiaoHongShuChannel(Channel): # Extract note ID from URL note_id = self._extract_note_id(url) if not note_id: - from agent_eyes.channels.web import WebChannel + from agent_reach.channels.web import WebChannel return await WebChannel().read(url, config) headers = { diff --git a/agent_eyes/channels/youtube.py b/agent_reach/channels/youtube.py similarity index 100% rename from agent_eyes/channels/youtube.py rename to agent_reach/channels/youtube.py diff --git a/agent_eyes/cli.py b/agent_reach/cli.py similarity index 90% rename from agent_eyes/cli.py rename to agent_reach/cli.py index 6975f4b..356ebe0 100644 --- a/agent_eyes/cli.py +++ b/agent_reach/cli.py @@ -1,16 +1,16 @@ # -*- coding: utf-8 -*- """ -Agent Eyes CLI — command-line interface. +Agent Reach CLI — command-line interface. Usage: - agent-eyes read - agent-eyes search - agent-eyes search-reddit [--sub ] - agent-eyes search-github [--lang ] - agent-eyes search-twitter - agent-eyes setup - agent-eyes doctor - agent-eyes version + agent-reach read + agent-reach search + agent-reach search-reddit [--sub ] + agent-reach search-github [--lang ] + agent-reach search-twitter + agent-reach setup + agent-reach doctor + agent-reach version """ import sys @@ -19,7 +19,7 @@ import argparse import json import os -from agent_eyes import __version__ +from agent_reach import __version__ def _configure_logging(verbose: bool = False): @@ -32,7 +32,7 @@ def _configure_logging(verbose: bool = False): def main(): parser = argparse.ArgumentParser( - prog="agent-eyes", + prog="agent-reach", description="👁️ Give your AI Agent eyes to see the entire internet", ) parser.add_argument("-v", "--verbose", action="store_true", help="Show debug logs") @@ -106,7 +106,7 @@ def main(): sys.exit(0) if args.command == "version": - print(f"Agent Eyes v{__version__}") + print(f"Agent Reach v{__version__}") sys.exit(0) if args.command == "doctor": @@ -129,12 +129,12 @@ def main(): def _cmd_install(args): """One-shot deterministic installer.""" import os - from agent_eyes.config import Config - from agent_eyes.doctor import check_all, format_report + from agent_reach.config import Config + from agent_reach.doctor import check_all, format_report config = Config() print() - print("👁️ Agent Eyes Installer") + print("👁️ Agent Reach Installer") print("=" * 40) # Auto-detect environment @@ -169,7 +169,7 @@ def _cmd_install(args): print() print("🍪 Trying to import cookies from browser...") try: - from agent_eyes.cookie_extract import configure_from_browser + from agent_reach.cookie_extract import configure_from_browser results = configure_from_browser("chrome", config) found = False for platform, success, message in results: @@ -193,7 +193,7 @@ def _cmd_install(args): print() print("💡 Tip: Reddit and Bilibili block server IPs.") print(" Reddit search still works via Exa (free).") - print(" For full access: agent-eyes configure proxy http://user:pass@ip:port") + print(" For full access: agent-reach configure proxy http://user:pass@ip:port") print(" Cheap option: https://www.webshare.io ($1/month)") # Test channels @@ -207,7 +207,7 @@ def _cmd_install(args): if not config.get("exa_api_key"): print() print("🔍 Recommended: unlock search with a free Exa API key") - print(" agent-eyes configure exa-key YOUR_KEY") + print(" agent-reach configure exa-key YOUR_KEY") print(" Get free key: https://exa.ai") # Final status @@ -260,13 +260,13 @@ def _detect_environment(): def _cmd_configure(args): """Set a config value and test it, or auto-extract from browser.""" - from agent_eyes.config import Config + from agent_reach.config import Config config = Config() # ── Auto-extract from browser ── if args.from_browser: - from agent_eyes.cookie_extract import configure_from_browser + from agent_reach.cookie_extract import configure_from_browser browser = args.from_browser print(f"🔍 Extracting cookies from {browser}...") @@ -284,15 +284,15 @@ def _cmd_configure(args): print() if found_any: - print("✅ Cookies configured! Run `agent-eyes doctor` to see updated status.") + print("✅ Cookies configured! Run `agent-reach doctor` to see updated status.") else: print(f"No cookies found. Make sure you're logged into the platforms in {browser}.") return # ── Manual configure ── if not args.key: - print("Usage: agent-eyes configure ") - print(" or: agent-eyes configure --from-browser chrome") + print("Usage: agent-reach configure ") + print(" or: agent-reach configure --from-browser chrome") return value = " ".join(args.value) if args.value else "" @@ -329,8 +329,8 @@ def _cmd_configure(args): print("Testing search...", end=" ") try: import asyncio - from agent_eyes.core import AgentEyes - eyes = AgentEyes(config) + from agent_reach.core import AgentReach + eyes = AgentReach(config) results = asyncio.run(eyes.search("test", num_results=1)) if results: print("✅ Search works!") @@ -383,8 +383,8 @@ def _cmd_configure(args): else: print("❌ Could not find auth_token and ct0 in your input.") print(" Accepted formats:") - print(" 1. agent-eyes configure twitter-cookies AUTH_TOKEN CT0") - print(' 2. agent-eyes configure twitter-cookies "auth_token=xxx; ct0=yyy; ..."') + print(" 1. agent-reach configure twitter-cookies AUTH_TOKEN CT0") + print(' 2. agent-reach configure twitter-cookies "auth_token=xxx; ct0=yyy; ..."') elif args.key == "xhs-cookie": config.set("xhs_cookie", value) @@ -423,19 +423,19 @@ def _cmd_configure(args): def _cmd_doctor(): - from agent_eyes.config import Config - from agent_eyes.doctor import check_all, format_report + from agent_reach.config import Config + from agent_reach.doctor import check_all, format_report config = Config() results = check_all(config) print(format_report(results)) def _cmd_setup(): - from agent_eyes.config import Config + from agent_reach.config import Config config = Config() print() - print("👁️ Agent Eyes Setup") + print("👁️ Agent Reach Setup") print("=" * 40) print() @@ -461,7 +461,7 @@ def _cmd_setup(): config.set("exa_api_key", key) print(" ✅ 全网搜索 + Reddit搜索 + Twitter搜索 已开启!") else: - print(" ℹ️ 跳过。稍后可运行 agent-eyes setup 配置") + print(" ℹ️ 跳过。稍后可运行 agent-reach setup 配置") print() # Step 2: GitHub token @@ -514,13 +514,13 @@ def _cmd_setup(): # Summary print("=" * 40) print(f"✅ 配置已保存到 {config.config_path}") - print("运行 agent-eyes doctor 查看完整状态") + print("运行 agent-reach doctor 查看完整状态") print() async def _cmd_read(args): - from agent_eyes.core import AgentEyes - eyes = AgentEyes() + from agent_reach.core import AgentReach + eyes = AgentReach() try: result = await eyes.read(args.url) if args.as_json: @@ -537,8 +537,8 @@ async def _cmd_read(args): async def _cmd_search(args): - from agent_eyes.core import AgentEyes - eyes = AgentEyes() + from agent_reach.core import AgentReach + eyes = AgentReach() query = " ".join(args.query).strip() num = args.num @@ -563,12 +563,12 @@ async def _cmd_search(args): if "401" in error_str or "Unauthorized" in error_str: print("⚠️ Exa API key not configured or invalid.") print("Get a free key at https://exa.ai (1000 searches/month free)") - print("Then run: agent-eyes configure exa-key YOUR_KEY") + print("Then run: agent-reach configure exa-key YOUR_KEY") sys.exit(1) elif "exa" in error_str.lower() or "api_key" in error_str.lower(): print("⚠️ Exa API key not configured.") print("Get a free key at https://exa.ai") - print("Then run: agent-eyes configure exa-key YOUR_KEY") + print("Then run: agent-reach configure exa-key YOUR_KEY") sys.exit(1) else: print(f"❌ Error: {e}", file=sys.stderr) diff --git a/agent_eyes/config.py b/agent_reach/config.py similarity index 93% rename from agent_eyes/config.py rename to agent_reach/config.py index f048a62..918b106 100644 --- a/agent_eyes/config.py +++ b/agent_reach/config.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -"""Configuration management for Agent Eyes. +"""Configuration management for Agent Reach. -Stores settings in ~/.agent-eyes/config.yaml. +Stores settings in ~/.agent-reach/config.yaml. Auto-creates directory on first use. """ @@ -13,9 +13,9 @@ import yaml class Config: - """Manages Agent Eyes configuration.""" + """Manages Agent Reach configuration.""" - CONFIG_DIR = Path.home() / ".agent-eyes" + CONFIG_DIR = Path.home() / ".agent-reach" CONFIG_FILE = CONFIG_DIR / "config.yaml" # Feature → required config keys diff --git a/agent_eyes/cookie_extract.py b/agent_reach/cookie_extract.py similarity index 99% rename from agent_eyes/cookie_extract.py rename to agent_reach/cookie_extract.py index 1155d95..1be9a57 100644 --- a/agent_eyes/cookie_extract.py +++ b/agent_reach/cookie_extract.py @@ -5,7 +5,7 @@ Supports: Chrome, Firefox, Edge, Brave, Opera Extracts: Twitter, XiaoHongShu, Bilibili cookies in one shot. Usage: - agent-eyes configure --from-browser chrome + agent-reach configure --from-browser chrome """ import sys diff --git a/agent_eyes/core.py b/agent_reach/core.py similarity index 92% rename from agent_eyes/core.py rename to agent_reach/core.py index b45101c..4c20817 100644 --- a/agent_eyes/core.py +++ b/agent_reach/core.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- """ -AgentEyes — the unified entry point. +AgentReach — the unified entry point. Pure glue: routes URLs to the right channel, routes searches to the right engine. Every channel is a thin wrapper around an external tool. Swap any backend anytime. Usage: - from agent_eyes import AgentEyes + from agent_reach import AgentReach - eyes = AgentEyes() + eyes = AgentReach() content = await eyes.read("https://github.com/openai/gpt-4") results = await eyes.search("AI agent framework") """ @@ -16,11 +16,11 @@ Usage: import asyncio from typing import Any, Dict, List, Optional -from agent_eyes.config import Config -from agent_eyes.channels import get_channel_for_url, get_channel, get_all_channels +from agent_reach.config import Config +from agent_reach.channels import get_channel_for_url, get_channel, get_all_channels -class AgentEyes: +class AgentReach: """Give your AI Agent eyes to see the entire internet.""" def __init__(self, config: Optional[Config] = None): @@ -87,12 +87,12 @@ class AgentEyes: def doctor(self) -> Dict[str, dict]: """Check all channel availability.""" - from agent_eyes.doctor import check_all + from agent_reach.doctor import check_all return check_all(self.config) def doctor_report(self) -> str: """Get formatted health report.""" - from agent_eyes.doctor import check_all, format_report + from agent_reach.doctor import check_all, format_report return format_report(check_all(self.config)) # ── Sync wrappers ─────────────────────────────────── diff --git a/agent_eyes/doctor.py b/agent_reach/doctor.py similarity index 92% rename from agent_eyes/doctor.py rename to agent_reach/doctor.py index 3193ddc..76c04cb 100644 --- a/agent_eyes/doctor.py +++ b/agent_reach/doctor.py @@ -5,8 +5,8 @@ Each channel knows how to check itself. Doctor just collects the results. """ from typing import Dict -from agent_eyes.config import Config -from agent_eyes.channels import get_all_channels +from agent_reach.config import Config +from agent_reach.channels import get_all_channels def check_all(config: Config) -> Dict[str, dict]: @@ -27,7 +27,7 @@ def check_all(config: Config) -> Dict[str, dict]: def format_report(results: Dict[str, dict]) -> str: """Format results as a readable text report.""" lines = [] - lines.append("👁️ Agent Eyes 状态") + lines.append("👁️ Agent Reach 状态") lines.append("=" * 40) ok_count = sum(1 for r in results.values() if r["status"] == "ok") @@ -72,6 +72,6 @@ def format_report(results: Dict[str, dict]) -> str: lines.append("") lines.append(f"状态:{ok_count}/{total} 个渠道可用") if ok_count < total: - lines.append("运行 `agent-eyes setup` 解锁更多渠道") + lines.append("运行 `agent-reach setup` 解锁更多渠道") return "\n".join(lines) diff --git a/agent_eyes/guides/setup-exa.md b/agent_reach/guides/setup-exa.md similarity index 89% rename from agent_eyes/guides/setup-exa.md rename to agent_reach/guides/setup-exa.md index e8a4678..01d7b06 100644 --- a/agent_eyes/guides/setup-exa.md +++ b/agent_reach/guides/setup-exa.md @@ -10,17 +10,17 @@ Exa 是一个语义搜索引擎,免费提供 1000 次/月搜索。配置后解 1. 检查是否已配置: ```bash -agent-eyes doctor | grep "Web Search" +agent-reach doctor | grep "Web Search" ``` 2. 如果用户提供了 key,写入配置: ```bash # 方法1: 通过 setup 命令 -agent-eyes setup +agent-reach setup # 方法2: 直接写入配置文件 python3 -c " -from agent_eyes.config import Config +from agent_reach.config import Config c = Config() c.set('exa_api_key', '用户提供的KEY') print('✅ Exa API key saved') @@ -29,7 +29,7 @@ print('✅ Exa API key saved') 3. 测试是否有效: ```bash -agent-eyes search "test query" -n 1 +agent-reach search "test query" -n 1 ``` ## 需要用户手动做的步骤 diff --git a/agent_eyes/guides/setup-groq.md b/agent_reach/guides/setup-groq.md similarity index 93% rename from agent_eyes/guides/setup-groq.md rename to agent_reach/guides/setup-groq.md index 8bcc922..071da35 100644 --- a/agent_eyes/guides/setup-groq.md +++ b/agent_reach/guides/setup-groq.md @@ -7,12 +7,12 @@ 1. 检查是否已配置: ```bash -agent-eyes doctor | grep -i "groq\|whisper" +agent-reach doctor | grep -i "groq\|whisper" ``` 2. 如果用户提供了 key,写入配置: ```python -from agent_eyes.config import Config +from agent_reach.config import Config c = Config() c.set("groq_api_key", "用户提供的KEY") ``` diff --git a/agent_eyes/guides/setup-reddit.md b/agent_reach/guides/setup-reddit.md similarity index 96% rename from agent_eyes/guides/setup-reddit.md rename to agent_reach/guides/setup-reddit.md index f4ab38a..e3a4e29 100644 --- a/agent_eyes/guides/setup-reddit.md +++ b/agent_reach/guides/setup-reddit.md @@ -9,7 +9,7 @@ Reddit 封锁了大量服务器 IP,直接访问会返回 403。需要 ISP 代 1. 检查当前状态: ```bash -agent-eyes doctor | grep "Reddit" +agent-reach doctor | grep "Reddit" ``` 2. 如果用户提供了代理,测试连通性: @@ -23,7 +23,7 @@ curl -s --proxy "用户提供的代理" \ 3. 写入配置: ```python -from agent_eyes.config import Config +from agent_reach.config import Config c = Config() c.set("reddit_proxy", "http://用户名:密码@IP:端口") ``` diff --git a/agent_eyes/guides/setup-twitter.md b/agent_reach/guides/setup-twitter.md similarity index 100% rename from agent_eyes/guides/setup-twitter.md rename to agent_reach/guides/setup-twitter.md diff --git a/agent_eyes/guides/setup-wechat.md b/agent_reach/guides/setup-wechat.md similarity index 94% rename from agent_eyes/guides/setup-wechat.md rename to agent_reach/guides/setup-wechat.md index a536826..0af3bdf 100644 --- a/agent_eyes/guides/setup-wechat.md +++ b/agent_reach/guides/setup-wechat.md @@ -18,7 +18,7 @@ playwright install chromium 3. 安装完成后测试: ```bash -agent-eyes read "https://mp.weixin.qq.com/s/一个测试链接" +agent-reach read "https://mp.weixin.qq.com/s/一个测试链接" ``` ## 需要用户手动做的步骤 diff --git a/agent_eyes/guides/setup-xiaohongshu.md b/agent_reach/guides/setup-xiaohongshu.md similarity index 90% rename from agent_eyes/guides/setup-xiaohongshu.md rename to agent_reach/guides/setup-xiaohongshu.md index d8f7a0e..69518ab 100644 --- a/agent_eyes/guides/setup-xiaohongshu.md +++ b/agent_reach/guides/setup-xiaohongshu.md @@ -19,7 +19,7 @@ playwright install chromium 3. 检查是否已有登录态: ```bash # 检查 cookie 文件是否存在 -ls ~/.agent-eyes/xhs_cookies.json 2>/dev/null +ls ~/.agent-reach/xhs_cookies.json 2>/dev/null ``` ## 需要用户手动做的步骤 @@ -37,6 +37,6 @@ ls ~/.agent-eyes/xhs_cookies.json 2>/dev/null ## Agent 收到确认后的操作 -1. 保存浏览器 cookie 到 `~/.agent-eyes/xhs_cookies.json` +1. 保存浏览器 cookie 到 `~/.agent-reach/xhs_cookies.json` 2. 测试:读取一条小红书笔记 3. 反馈:"✅ 小红书已配置!现在我可以读取小红书笔记了。" diff --git a/agent_eyes/integrations/__init__.py b/agent_reach/integrations/__init__.py similarity index 100% rename from agent_eyes/integrations/__init__.py rename to agent_reach/integrations/__init__.py diff --git a/agent_eyes/integrations/mcp_server.py b/agent_reach/integrations/mcp_server.py similarity index 90% rename from agent_eyes/integrations/mcp_server.py rename to agent_reach/integrations/mcp_server.py index 399faec..13a91bc 100644 --- a/agent_eyes/integrations/mcp_server.py +++ b/agent_reach/integrations/mcp_server.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- """ -Agent Eyes MCP Server — expose all capabilities as MCP tools. +Agent Reach MCP Server — expose all capabilities as MCP tools. -Run: python -m agent_eyes.integrations.mcp_server +Run: python -m agent_reach.integrations.mcp_server 8 tools for any MCP-compatible AI Agent. """ @@ -11,8 +11,8 @@ import asyncio import json import sys -from agent_eyes.config import Config -from agent_eyes.core import AgentEyes +from agent_reach.config import Config +from agent_reach.core import AgentReach try: from mcp.server import Server @@ -25,12 +25,12 @@ except ImportError: def create_server(): if not HAS_MCP: - print("MCP not installed. Install: pip install agent-eyes[mcp]", file=sys.stderr) + print("MCP not installed. Install: pip install agent-reach[mcp]", file=sys.stderr) sys.exit(1) - server = Server("agent-eyes") + server = Server("agent-reach") config = Config() - eyes = AgentEyes(config) + eyes = AgentReach(config) @server.list_tools() async def list_tools(): @@ -57,7 +57,7 @@ def create_server(): description="Search Twitter/X posts.", inputSchema={"type": "object", "properties": {"query": {"type": "string"}, "limit": {"type": "integer", "default": 10}}, "required": ["query"]}), Tool(name="get_status", - description="Get Agent Eyes status: which channels are active.", + description="Get Agent Reach status: which channels are active.", inputSchema={"type": "object", "properties": {}}), ] diff --git a/agent_reach/integrations/skill/SKILL.md b/agent_reach/integrations/skill/SKILL.md new file mode 100644 index 0000000..f8cb517 --- /dev/null +++ b/agent_reach/integrations/skill/SKILL.md @@ -0,0 +1,65 @@ +--- +name: agent-reach +description: "Give your AI Agent eyes to see the entire internet. Search + read 10+ platforms with one install." +install: pip install git+https://github.com/Panniantong/agent-reach.git +--- + +# Agent Reach — 给 Agent 装上眼睛 👁️ + +安装后你就能搜索和阅读全网内容。 + +## 安装 + +```bash +pip install git+https://github.com/Panniantong/agent-reach.git +``` + +## 装完直接能用的(零配置) + +- `agent-reach read ` — 读取任意网页、GitHub、B站、YouTube、RSS +- `agent-reach search-github "query"` — 搜索 GitHub 仓库 +- `agent-reach doctor` — 查看所有平台状态 + +## 解锁更多功能 + +运行 `agent-reach setup` 进行交互式配置,或者读取以下指南: + +| 功能 | 指南文件 | +|------|---------| +| 全网搜索 + Reddit搜索 + Twitter搜索 | `agent_reach/guides/setup-exa.md` | +| Reddit 完整阅读 | `agent_reach/guides/setup-reddit.md` | +| Twitter 高级(时间线/线程) | `agent_reach/guides/setup-twitter.md` | +| 小红书 | `agent_reach/guides/setup-xiaohongshu.md` | +| 微信公众号 | `agent_reach/guides/setup-wechat.md` | +| 视频语音转文字 | `agent_reach/guides/setup-groq.md` | + +每个指南里有详细的步骤说明,你(Agent)可以照着做,只有需要人类操作的部分(登录、复制 key)才需要问用户。 + +## MCP Server + +如果你的 Agent 平台支持 MCP: + +```bash +pip install agent-reach[mcp] +python -m agent_reach.integrations.mcp_server +``` + +提供 8 个工具:read_url, read_batch, detect_platform, search, search_reddit, search_github, search_twitter, get_status + +## Python API + +```python +from agent_reach import AgentReach +import asyncio + +eyes = AgentReach() + +# 读取 +result = asyncio.run(eyes.read("https://github.com/openai/gpt-4")) + +# 搜索 +results = asyncio.run(eyes.search("AI agent framework")) + +# 健康检查 +print(eyes.doctor_report()) +``` diff --git a/docs/README_en.md b/docs/README_en.md index 185b116..175ad2a 100644 --- a/docs/README_en.md +++ b/docs/README_en.md @@ -1,8 +1,8 @@ -# 👁️ Agent Eyes +# 👁️ Agent Reach **Give your AI Agent eyes to see the entire internet.** -Your AI Agent is smart but blind. It can't browse Reddit, search Twitter, or read Bilibili videos. Agent Eyes fixes this — once installed, your Agent can search and read content across 10+ platforms. +Your AI Agent is smart but blind. It can't browse Reddit, search Twitter, or read Bilibili videos. Agent Reach fixes this — once installed, your Agent can search and read content across 10+ platforms. > Install once. Superpowers unlocked. Most features work with zero config, zero cost. @@ -15,7 +15,7 @@ Your AI Agent is smart but blind. It can't browse Reddit, search Twitter, or rea Copy this to your AI Agent (Claude Code, OpenClaw, Cursor, etc.): ``` -Install Agent Eyes: https://raw.githubusercontent.com/Panniantong/agent-eyes/main/docs/install.md +Install Agent Reach: https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md ``` Your Agent handles everything. You answer 1-2 questions at most. @@ -24,9 +24,9 @@ Your Agent handles everything. You answer 1-2 questions at most. Manual install ```bash -pip install https://github.com/Panniantong/agent-eyes/archive/main.zip -agent-eyes install --env=auto -agent-eyes doctor +pip install https://github.com/Panniantong/agent-reach/archive/main.zip +agent-reach install --env=auto +agent-reach doctor ``` @@ -44,8 +44,8 @@ No configuration needed: - 🐦 **Twitter** — read individual tweets ```bash -agent-eyes read "https://github.com/openai/gpt-4" -agent-eyes search-github "LLM framework" +agent-reach read "https://github.com/openai/gpt-4" +agent-reach search-github "LLM framework" ``` --- @@ -55,10 +55,10 @@ agent-eyes search-github "LLM framework" Sign up at [Exa](https://exa.ai) (free, 1000 searches/month). One key unlocks **web + Reddit + Twitter search**: ```bash -agent-eyes configure exa-key YOUR_KEY -agent-eyes search "best open source LLM 2025" -agent-eyes search-reddit "self-hosted LLM" --sub LocalLLaMA -agent-eyes search-twitter "AI agent" +agent-reach configure exa-key YOUR_KEY +agent-reach search "best open source LLM 2025" +agent-reach search-reddit "self-hosted LLM" --sub LocalLLaMA +agent-reach search-twitter "AI agent" ``` --- @@ -69,11 +69,11 @@ agent-eyes search-twitter "AI agent" ```bash # Local: auto-import all cookies -agent-eyes configure --from-browser chrome +agent-reach configure --from-browser chrome # Server: use Cookie-Editor extension, export Header String -agent-eyes configure twitter-cookies "cookie_string" -agent-eyes configure xhs-cookie "cookie_string" +agent-reach configure twitter-cookies "cookie_string" +agent-reach configure xhs-cookie "cookie_string" ``` Unlocks: Twitter deep search, XiaoHongShu notes @@ -83,7 +83,7 @@ Unlocks: Twitter deep search, XiaoHongShu notes Reddit and Bilibili block server IPs. Local computers are fine. ```bash -agent-eyes configure proxy http://user:pass@ip:port +agent-reach configure proxy http://user:pass@ip:port ``` Recommend [Webshare](https://webshare.io). One proxy covers both Reddit and Bilibili. @@ -95,24 +95,24 @@ Recommend [Webshare](https://webshare.io). One proxy covers both Reddit and Bili **CLI** · **Python API** · **MCP Server** ```bash -agent-eyes read "URL" -agent-eyes search "query" -agent-eyes doctor +agent-reach read "URL" +agent-reach search "query" +agent-reach doctor ``` ```python -from agent_eyes import AgentEyes -eyes = AgentEyes() +from agent_reach import AgentReach +eyes = AgentReach() result = asyncio.run(eyes.read("https://example.com")) ``` ```json -{"mcpServers": {"agent-eyes": {"command": "python", "args": ["-m", "agent_eyes.integrations.mcp_server"]}}} +{"mcpServers": {"agent-reach": {"command": "python", "args": ["-m", "agent_reach.integrations.mcp_server"]}}} ``` --- -## Why Agent Eyes? +## Why Agent Reach? Not a framework. Not an SDK. Just glue — beautifully simple glue. diff --git a/docs/cookie-export.md b/docs/cookie-export.md index da2fa12..02e052c 100644 --- a/docs/cookie-export.md +++ b/docs/cookie-export.md @@ -18,7 +18,7 @@ Here's how to export cookies from your local computer — **fastest method first That's it! Your Agent will run: ```bash -agent-eyes configure twitter-cookies +agent-reach configure twitter-cookies ``` ### Sites to export: diff --git a/docs/install.md b/docs/install.md index cce84ad..eb19374 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,11 +1,11 @@ -# Agent Eyes — Installation Guide +# Agent Reach — Installation Guide ## For Humans Copy this to your AI Agent: ``` -帮我安装 Agent Eyes:https://raw.githubusercontent.com/Panniantong/agent-eyes/main/docs/install.md +帮我安装 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md ``` --- @@ -15,8 +15,8 @@ Copy this to your AI Agent: ### Step 1: Install ```bash -pip install https://github.com/Panniantong/agent-eyes/archive/main.zip || pip3 install https://github.com/Panniantong/agent-eyes/archive/main.zip -agent-eyes install --env=auto +pip install https://github.com/Panniantong/agent-reach/archive/main.zip || pip3 install https://github.com/Panniantong/agent-reach/archive/main.zip +agent-reach install --env=auto ``` This single command does everything automatically: @@ -37,7 +37,7 @@ Only ask the user for items the install output says are missing. > "Want to unlock web search? Go to https://exa.ai → sign up (free) → send me the API key." ```bash -agent-eyes configure exa-key THE_KEY +agent-reach configure exa-key THE_KEY ``` **If cookies were not auto-imported (server users):** @@ -45,21 +45,21 @@ agent-eyes configure exa-key THE_KEY > Extension: https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm ```bash -agent-eyes configure twitter-cookies "PASTED_STRING" -agent-eyes configure xhs-cookie "PASTED_STRING" +agent-reach configure twitter-cookies "PASTED_STRING" +agent-reach configure xhs-cookie "PASTED_STRING" ``` **If on server and wants Reddit/Bilibili full access:** > "Reddit and Bilibili block server IPs. Get a proxy at https://webshare.io ($1/month) and send me the address." ```bash -agent-eyes configure proxy http://user:pass@ip:port +agent-reach configure proxy http://user:pass@ip:port ``` ### Step 3: Verify ```bash -agent-eyes doctor +agent-reach doctor ``` Report what's active. Users can configure more anytime by asking. @@ -70,11 +70,11 @@ Report what's active. Users can configure more anytime by asking. | Command | What it does | |---------|-------------| -| `agent-eyes install --env=auto` | Full auto-setup | -| `agent-eyes doctor` | Show status | -| `agent-eyes configure exa-key KEY` | Unlock search | -| `agent-eyes configure twitter-cookies "..."` | Unlock Twitter | -| `agent-eyes configure xhs-cookie "..."` | Unlock XiaoHongShu | -| `agent-eyes configure proxy URL` | Unlock Reddit + Bilibili (server) | -| `agent-eyes read URL` | Read any URL | -| `agent-eyes search "query"` | Search the web | +| `agent-reach install --env=auto` | Full auto-setup | +| `agent-reach doctor` | Show status | +| `agent-reach configure exa-key KEY` | Unlock search | +| `agent-reach configure twitter-cookies "..."` | Unlock Twitter | +| `agent-reach configure xhs-cookie "..."` | Unlock XiaoHongShu | +| `agent-reach configure proxy URL` | Unlock Reddit + Bilibili (server) | +| `agent-reach read URL` | Read any URL | +| `agent-reach search "query"` | Search the web | diff --git a/pyproject.toml b/pyproject.toml index 3f1966f..659e8d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "agent-eyes" +name = "agent-reach" version = "1.0.0" description = "Give your AI Agent eyes to see the entire internet. Search + Read 10+ platforms." readme = "README.md" @@ -37,19 +37,19 @@ mcp = ["mcp[cli]>=1.0"] all = ["playwright>=1.40", "mcp[cli]>=1.0", "browser-cookie3>=0.19"] [project.scripts] -agent-eyes = "agent_eyes.cli:main" +agent-reach = "agent_reach.cli:main" [project.urls] -Homepage = "https://github.com/Panniantong/agent-eyes" -Repository = "https://github.com/Panniantong/agent-eyes" -Issues = "https://github.com/Panniantong/agent-eyes/issues" +Homepage = "https://github.com/Panniantong/agent-reach" +Repository = "https://github.com/Panniantong/agent-reach" +Issues = "https://github.com/Panniantong/agent-reach/issues" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] -packages = ["agent_eyes"] +packages = ["agent_reach"] [tool.hatch.build.targets.wheel.force-include] -"agent_eyes/guides" = "agent_eyes/guides" +"agent_reach/guides" = "agent_reach/guides" diff --git a/tests/test_channels.py b/tests/test_channels.py index 8dd1dc6..c72d102 100644 --- a/tests/test_channels.py +++ b/tests/test_channels.py @@ -4,8 +4,8 @@ import pytest from unittest.mock import patch, MagicMock -from agent_eyes.channels import get_channel_for_url, get_channel, get_all_channels -from agent_eyes.channels.base import ReadResult, SearchResult +from agent_reach.channels import get_channel_for_url, get_channel, get_all_channels +from agent_reach.channels.base import ReadResult, SearchResult class TestChannelRouting: @@ -74,7 +74,7 @@ class TestSearchResult: class TestGitHubChannel: - @patch("agent_eyes.channels.github.requests.get") + @patch("agent_reach.channels.github.requests.get") @pytest.mark.asyncio async def test_search(self, mock_get): mock_resp = MagicMock() @@ -93,10 +93,10 @@ class TestGitHubChannel: class TestExaSearch: - @patch("agent_eyes.channels.exa_search.requests.post") + @patch("agent_reach.channels.exa_search.requests.post") @pytest.mark.asyncio async def test_search(self, mock_post): - from agent_eyes.config import Config + from agent_reach.config import Config config = Config(config_path="/tmp/test-exa-config.yaml") config.set("exa_api_key", "test-key") diff --git a/tests/test_cli.py b/tests/test_cli.py index c1b3d87..5b62cfe 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,29 +1,29 @@ # -*- coding: utf-8 -*- -"""Tests for Agent Eyes CLI.""" +"""Tests for Agent Reach CLI.""" import pytest from unittest.mock import patch -from agent_eyes.cli import main +from agent_reach.cli import main class TestCLI: def test_version(self, capsys): with pytest.raises(SystemExit) as exc_info: - with patch("sys.argv", ["agent-eyes", "version"]): + with patch("sys.argv", ["agent-reach", "version"]): main() assert exc_info.value.code == 0 captured = capsys.readouterr() - assert "Agent Eyes v" in captured.out + assert "Agent Reach v" in captured.out def test_no_command_shows_help(self, capsys): with pytest.raises(SystemExit) as exc_info: - with patch("sys.argv", ["agent-eyes"]): + with patch("sys.argv", ["agent-reach"]): main() assert exc_info.value.code == 0 def test_doctor_runs(self, capsys): - with patch("sys.argv", ["agent-eyes", "doctor"]): + with patch("sys.argv", ["agent-reach", "doctor"]): main() captured = capsys.readouterr() - assert "Agent Eyes" in captured.out + assert "Agent Reach" in captured.out assert "✅" in captured.out diff --git a/tests/test_config.py b/tests/test_config.py index 133628c..5b48724 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Tests for Agent Eyes config module.""" +"""Tests for Agent Reach config module.""" import os import tempfile @@ -8,7 +8,7 @@ from pathlib import Path import pytest import yaml -from agent_eyes.config import Config +from agent_reach.config import Config @pytest.fixture diff --git a/tests/test_core.py b/tests/test_core.py index 08560a0..91bf28d 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1,18 +1,18 @@ # -*- coding: utf-8 -*- -"""Tests for AgentEyes core class.""" +"""Tests for AgentReach core class.""" import pytest -from agent_eyes.config import Config -from agent_eyes.core import AgentEyes +from agent_reach.config import Config +from agent_reach.core import AgentReach @pytest.fixture def eyes(tmp_path): config = Config(config_path=tmp_path / "config.yaml") - return AgentEyes(config=config) + return AgentReach(config=config) -class TestAgentEyes: +class TestAgentReach: def test_init(self, eyes): assert eyes.config is not None @@ -33,4 +33,4 @@ class TestAgentEyes: def test_doctor_report(self, eyes): report = eyes.doctor_report() assert isinstance(report, str) - assert "Agent Eyes" in report + assert "Agent Reach" in report diff --git a/tests/test_doctor.py b/tests/test_doctor.py index 96959a6..240f286 100644 --- a/tests/test_doctor.py +++ b/tests/test_doctor.py @@ -2,8 +2,8 @@ """Tests for doctor module.""" import pytest -from agent_eyes.config import Config -from agent_eyes.doctor import check_all, format_report +from agent_reach.config import Config +from agent_reach.doctor import check_all, format_report @pytest.fixture @@ -31,6 +31,6 @@ class TestDoctor: def test_format_report(self, tmp_config): results = check_all(tmp_config) report = format_report(results) - assert "Agent Eyes" in report + assert "Agent Reach" in report assert "✅" in report assert "渠道可用" in report