- xiaohongshu.py: 删除网页爬取代码,100% 走 mcporter + xiaohongshu-mcp - exa_search.py: 删除直接 API 调用,100% 走 mcporter + exa MCP(免 Key) - cli.py install: 新增 _install_mcporter(),自动装 mcporter + 配置 exa/xhs - cli.py configure: 移除 exa-key 和 xhs-cookie(不再需要) - doctor.py: 更新 tier 1 描述 净减 166 行代码,架构更简单: 之前: 每个渠道两套后端代码(mcporter + fallback) 现在: 每个渠道一套后端(mcporter only)
77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""Environment health checker — powered by channels.
|
||
|
||
Each channel knows how to check itself. Doctor just collects the results.
|
||
"""
|
||
|
||
from typing import Dict
|
||
from agent_reach.config import Config
|
||
from agent_reach.channels import get_all_channels
|
||
|
||
|
||
def check_all(config: Config) -> Dict[str, dict]:
|
||
"""Check all channels and return status dict."""
|
||
results = {}
|
||
for ch in get_all_channels():
|
||
status, message = ch.check(config)
|
||
results[ch.name] = {
|
||
"status": status,
|
||
"name": ch.description,
|
||
"message": message,
|
||
"tier": ch.tier,
|
||
"backends": ch.backends,
|
||
}
|
||
return results
|
||
|
||
|
||
def format_report(results: Dict[str, dict]) -> str:
|
||
"""Format results as a readable text report."""
|
||
lines = []
|
||
lines.append("👁️ Agent Reach 状态")
|
||
lines.append("=" * 40)
|
||
|
||
ok_count = sum(1 for r in results.values() if r["status"] == "ok")
|
||
total = len(results)
|
||
|
||
# Tier 0 — zero config
|
||
lines.append("")
|
||
lines.append("✅ 装好即用:")
|
||
for key, r in results.items():
|
||
if r["tier"] == 0:
|
||
if r["status"] == "ok":
|
||
lines.append(f" ✅ {r['name']} — {r['message']}")
|
||
elif r["status"] == "warn":
|
||
lines.append(f" ⚠️ {r['name']} — {r['message']}")
|
||
elif r["status"] in ("off", "error"):
|
||
lines.append(f" ❌ {r['name']} — {r['message']}")
|
||
|
||
# Tier 1 — needs free key
|
||
tier1 = {k: r for k, r in results.items() if r["tier"] == 1}
|
||
if tier1:
|
||
lines.append("")
|
||
lines.append("🔍 搜索(mcporter 即可解锁):")
|
||
for key, r in tier1.items():
|
||
if r["status"] == "ok":
|
||
lines.append(f" ✅ {r['name']} — {r['message']}")
|
||
else:
|
||
lines.append(f" ⬜ {r['name']} — {r['message']}")
|
||
|
||
# Tier 2 — optional setup
|
||
tier2 = {k: r for k, r in results.items() if r["tier"] == 2}
|
||
if tier2:
|
||
lines.append("")
|
||
lines.append("🔧 配置后可用:")
|
||
for key, r in tier2.items():
|
||
if r["status"] == "ok":
|
||
lines.append(f" ✅ {r['name']} — {r['message']}")
|
||
elif r["status"] == "warn":
|
||
lines.append(f" ⚠️ {r['name']} — {r['message']}")
|
||
else:
|
||
lines.append(f" ⬜ {r['name']} — {r['message']}")
|
||
|
||
lines.append("")
|
||
lines.append(f"状态:{ok_count}/{total} 个渠道可用")
|
||
if ok_count < total:
|
||
lines.append("运行 `agent-reach setup` 解锁更多渠道")
|
||
|
||
return "\n".join(lines)
|