fix: install 自动安装 gh CLI + Node.js,加大 mcporter 超时
问题:新服务器上 gh CLI 和 Node.js 未安装,mcporter npm install 60s 超时 修复: - 新增 _install_system_deps():自动安装 gh CLI (apt) + Node.js (nodesource) - mcporter 超时从 60s → 120s - install.md 更新:去掉过时的 exa-key/xhs-cookie 配置步骤 - install 流程:系统依赖 → mcporter → Exa 配置 → 环境检测 → 测试
This commit is contained in:
+70
-2
@@ -165,6 +165,10 @@ def _cmd_install(args):
|
|||||||
config.set("bilibili_proxy", args.proxy)
|
config.set("bilibili_proxy", args.proxy)
|
||||||
print(f"✅ Proxy configured for Reddit + Bilibili")
|
print(f"✅ Proxy configured for Reddit + Bilibili")
|
||||||
|
|
||||||
|
# ── Install system dependencies ──
|
||||||
|
print()
|
||||||
|
_install_system_deps()
|
||||||
|
|
||||||
# ── mcporter (for Exa search + XiaoHongShu) ──
|
# ── mcporter (for Exa search + XiaoHongShu) ──
|
||||||
print()
|
print()
|
||||||
_install_mcporter()
|
_install_mcporter()
|
||||||
@@ -215,7 +219,71 @@ def _cmd_install(args):
|
|||||||
print(f"✅ Installation complete! {ok}/{total} channels active.")
|
print(f"✅ Installation complete! {ok}/{total} channels active.")
|
||||||
|
|
||||||
|
|
||||||
def _install_mcporter():
|
def _install_system_deps():
|
||||||
|
"""Install system-level dependencies: gh CLI, Node.js (for mcporter)."""
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import platform
|
||||||
|
|
||||||
|
print("🔧 Checking system dependencies...")
|
||||||
|
|
||||||
|
# ── gh CLI ──
|
||||||
|
if shutil.which("gh"):
|
||||||
|
print(" ✅ gh CLI already installed")
|
||||||
|
else:
|
||||||
|
print(" 📥 Installing gh CLI...")
|
||||||
|
os_type = platform.system().lower()
|
||||||
|
if os_type == "linux":
|
||||||
|
try:
|
||||||
|
# Official GitHub method for Linux
|
||||||
|
cmds = [
|
||||||
|
"curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg 2>/dev/null",
|
||||||
|
'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null',
|
||||||
|
"apt-get update -qq 2>/dev/null",
|
||||||
|
"apt-get install -y -qq gh 2>/dev/null",
|
||||||
|
]
|
||||||
|
for cmd in cmds:
|
||||||
|
subprocess.run(cmd, shell=True, capture_output=True, timeout=60)
|
||||||
|
if shutil.which("gh"):
|
||||||
|
print(" ✅ gh CLI installed")
|
||||||
|
else:
|
||||||
|
print(" ⚠️ gh CLI install failed. Install manually: https://cli.github.com")
|
||||||
|
except Exception:
|
||||||
|
print(" ⚠️ gh CLI install failed. Install manually: https://cli.github.com")
|
||||||
|
elif os_type == "darwin":
|
||||||
|
if shutil.which("brew"):
|
||||||
|
try:
|
||||||
|
subprocess.run(["brew", "install", "gh"], capture_output=True, timeout=120)
|
||||||
|
if shutil.which("gh"):
|
||||||
|
print(" ✅ gh CLI installed")
|
||||||
|
else:
|
||||||
|
print(" ⚠️ gh CLI install failed. Try: brew install gh")
|
||||||
|
except Exception:
|
||||||
|
print(" ⚠️ gh CLI install failed. Try: brew install gh")
|
||||||
|
else:
|
||||||
|
print(" ⚠️ gh CLI not found. Install: https://cli.github.com")
|
||||||
|
else:
|
||||||
|
print(" ⚠️ gh CLI not found. Install: https://cli.github.com")
|
||||||
|
|
||||||
|
# ── Node.js (needed for mcporter) ──
|
||||||
|
if shutil.which("node") and shutil.which("npm"):
|
||||||
|
print(" ✅ Node.js already installed")
|
||||||
|
else:
|
||||||
|
print(" 📥 Installing Node.js...")
|
||||||
|
try:
|
||||||
|
# Use NodeSource for quick install
|
||||||
|
subprocess.run(
|
||||||
|
"curl -fsSL https://deb.nodesource.com/setup_22.x | bash - 2>/dev/null && apt-get install -y -qq nodejs 2>/dev/null",
|
||||||
|
shell=True, capture_output=True, timeout=120,
|
||||||
|
)
|
||||||
|
if shutil.which("node"):
|
||||||
|
print(" ✅ Node.js installed")
|
||||||
|
else:
|
||||||
|
print(" ⚠️ Node.js install failed. Install manually: https://nodejs.org")
|
||||||
|
except Exception:
|
||||||
|
print(" ⚠️ Node.js install failed. Install manually: https://nodejs.org")
|
||||||
|
|
||||||
|
|
||||||
"""Install mcporter and configure Exa + XiaoHongShu MCP servers."""
|
"""Install mcporter and configure Exa + XiaoHongShu MCP servers."""
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -233,7 +301,7 @@ def _install_mcporter():
|
|||||||
try:
|
try:
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
["npm", "install", "-g", "mcporter"],
|
["npm", "install", "-g", "mcporter"],
|
||||||
capture_output=True, text=True, timeout=60,
|
capture_output=True, text=True, timeout=120,
|
||||||
)
|
)
|
||||||
if shutil.which("mcporter"):
|
if shutil.which("mcporter"):
|
||||||
print(" ✅ mcporter installed")
|
print(" ✅ mcporter installed")
|
||||||
|
|||||||
+6
-15
@@ -20,9 +20,10 @@ agent-reach install --env=auto
|
|||||||
```
|
```
|
||||||
|
|
||||||
This single command does everything automatically:
|
This single command does everything automatically:
|
||||||
|
- Installs system dependencies (gh CLI, Node.js, mcporter) if missing
|
||||||
|
- Configures Exa search (free, no API key needed)
|
||||||
- Detects local computer vs server
|
- Detects local computer vs server
|
||||||
- Auto-imports browser cookies on local (Twitter, XiaoHongShu, Bilibili)
|
- Auto-imports browser cookies on local (Twitter)
|
||||||
- Auto-detects Exa API key if already in environment
|
|
||||||
- Tests all channels
|
- Tests all channels
|
||||||
- Shows what's working and what needs setup
|
- Shows what's working and what needs setup
|
||||||
|
|
||||||
@@ -33,20 +34,12 @@ This single command does everything automatically:
|
|||||||
Based on the install output, you may need to configure one or two things.
|
Based on the install output, you may need to configure one or two things.
|
||||||
Only ask the user for items the install output says are missing.
|
Only ask the user for items the install output says are missing.
|
||||||
|
|
||||||
**If search is not configured:**
|
|
||||||
> "Want to unlock web search? Go to https://exa.ai → sign up (free) → send me the API key."
|
|
||||||
|
|
||||||
```bash
|
|
||||||
agent-reach configure exa-key THE_KEY
|
|
||||||
```
|
|
||||||
|
|
||||||
**If cookies were not auto-imported (server users):**
|
**If cookies were not auto-imported (server users):**
|
||||||
> "To unlock Twitter and XiaoHongShu, install the Cookie-Editor Chrome extension, go to the site, click Export → Header String, and paste it to me."
|
> "To unlock Twitter search and posting, install the Cookie-Editor Chrome extension, go to twitter.com, click Export → Header String, and paste it to me."
|
||||||
> Extension: https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm
|
> Extension: https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
agent-reach configure twitter-cookies "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:**
|
**If on server and wants Reddit/Bilibili full access:**
|
||||||
@@ -70,11 +63,9 @@ Report what's active. Users can configure more anytime by asking.
|
|||||||
|
|
||||||
| Command | What it does |
|
| Command | What it does |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `agent-reach install --env=auto` | Full auto-setup |
|
| `agent-reach install --env=auto` | Full auto-setup (installs deps + configures) |
|
||||||
| `agent-reach doctor` | Show status |
|
| `agent-reach doctor` | Show status |
|
||||||
| `agent-reach configure exa-key KEY` | Unlock search |
|
| `agent-reach configure twitter-cookies "..."` | Unlock Twitter search + posting |
|
||||||
| `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 configure proxy URL` | Unlock Reddit + Bilibili (server) |
|
||||||
| `agent-reach read URL` | Read any URL |
|
| `agent-reach read URL` | Read any URL |
|
||||||
| `agent-reach search "query"` | Search the web |
|
| `agent-reach search "query"` | Search the web |
|
||||||
|
|||||||
Reference in New Issue
Block a user