polish: cookie header string parsing + Cookie-Editor guide + server user path
Key improvements: - twitter-cookies now accepts BOTH formats: 1. Full cookie header string from Cookie-Editor export 2. Two separate values (auth_token ct0) Automatically detects which format was pasted. - New docs/cookie-export.md guide for server users Recommends Cookie-Editor Chrome extension (one-click export) Fallback: manual F12 → Network → Cookie header - Install guide now has two clear paths: Path A (local): --from-browser chrome (one command, all cookies) Path B (server): Cookie-Editor extension export (30 sec per site) - Better error messages with accepted format examples
This commit is contained in:
+27
-8
@@ -309,11 +309,28 @@ def _cmd_configure(args):
|
|||||||
print(f"❌ Failed: {e}")
|
print(f"❌ Failed: {e}")
|
||||||
|
|
||||||
elif args.key == "twitter-cookies":
|
elif args.key == "twitter-cookies":
|
||||||
# Expect: auth_token ct0
|
# Accept two formats:
|
||||||
parts = value.split()
|
# 1. auth_token ct0 (two separate values)
|
||||||
if len(parts) == 2:
|
# 2. Full cookie header string: "auth_token=xxx; ct0=yyy; ..."
|
||||||
config.set("twitter_auth_token", parts[0])
|
auth_token = None
|
||||||
config.set("twitter_ct0", parts[1])
|
ct0 = None
|
||||||
|
|
||||||
|
if "auth_token=" in value and "ct0=" in value:
|
||||||
|
# Full cookie string — parse it
|
||||||
|
for part in value.replace(";", " ").split():
|
||||||
|
if part.startswith("auth_token="):
|
||||||
|
auth_token = part.split("=", 1)[1]
|
||||||
|
elif part.startswith("ct0="):
|
||||||
|
ct0 = part.split("=", 1)[1]
|
||||||
|
elif len(value.split()) == 2 and "=" not in value:
|
||||||
|
# Two separate values: AUTH_TOKEN CT0
|
||||||
|
parts = value.split()
|
||||||
|
auth_token = parts[0]
|
||||||
|
ct0 = parts[1]
|
||||||
|
|
||||||
|
if auth_token and ct0:
|
||||||
|
config.set("twitter_auth_token", auth_token)
|
||||||
|
config.set("twitter_ct0", ct0)
|
||||||
print(f"✅ Twitter cookies configured!")
|
print(f"✅ Twitter cookies configured!")
|
||||||
|
|
||||||
print("Testing Twitter access...", end=" ")
|
print("Testing Twitter access...", end=" ")
|
||||||
@@ -321,7 +338,7 @@ def _cmd_configure(args):
|
|||||||
import subprocess
|
import subprocess
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["birdx", "search", "test", "-n", "1",
|
["birdx", "search", "test", "-n", "1",
|
||||||
"--auth-token", parts[0], "--ct0", parts[1]],
|
"--auth-token", auth_token, "--ct0", ct0],
|
||||||
capture_output=True, text=True, timeout=15,
|
capture_output=True, text=True, timeout=15,
|
||||||
)
|
)
|
||||||
if result.returncode == 0 and result.stdout.strip():
|
if result.returncode == 0 and result.stdout.strip():
|
||||||
@@ -333,8 +350,10 @@ def _cmd_configure(args):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Failed: {e}")
|
print(f"❌ Failed: {e}")
|
||||||
else:
|
else:
|
||||||
print("❌ Usage: agent-eyes configure twitter-cookies AUTH_TOKEN CT0")
|
print("❌ Could not find auth_token and ct0 in your input.")
|
||||||
print(" (two values separated by space)")
|
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; ..."')
|
||||||
|
|
||||||
elif args.key == "xhs-cookie":
|
elif args.key == "xhs-cookie":
|
||||||
config.set("xhs_cookie", value)
|
config.set("xhs_cookie", value)
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Cookie Export Guide — For Server Users
|
||||||
|
|
||||||
|
Your Agent is on a server and can't access your browser directly.
|
||||||
|
Here's how to export cookies from your local computer — **fastest method first**.
|
||||||
|
|
||||||
|
## Method 1: Cookie-Editor Extension (Recommended — 30 seconds per site)
|
||||||
|
|
||||||
|
1. Install **Cookie-Editor** for Chrome: https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm
|
||||||
|
(Also available for Firefox, Edge)
|
||||||
|
|
||||||
|
2. Go to the website (e.g. https://x.com) and make sure you're logged in
|
||||||
|
|
||||||
|
3. Click the Cookie-Editor icon in your toolbar
|
||||||
|
|
||||||
|
4. Click **Export** → **Header String**
|
||||||
|
|
||||||
|
5. Paste the result to your Agent
|
||||||
|
|
||||||
|
That's it! Your Agent will run:
|
||||||
|
```bash
|
||||||
|
agent-eyes configure twitter-cookies <your_pasted_string>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sites to export:
|
||||||
|
|
||||||
|
| Site | URL to visit | What to tell Agent |
|
||||||
|
|------|-------------|-------------------|
|
||||||
|
| Twitter/X | https://x.com | "Here are my Twitter cookies: [paste]" |
|
||||||
|
| XiaoHongShu | https://www.xiaohongshu.com | "Here are my XHS cookies: [paste]" |
|
||||||
|
| Bilibili | https://www.bilibili.com | "Here are my Bilibili cookies: [paste]" |
|
||||||
|
|
||||||
|
## Method 2: Manual (No extension needed)
|
||||||
|
|
||||||
|
1. Open the site in Chrome, make sure you're logged in
|
||||||
|
2. Press **F12** (or right-click → Inspect)
|
||||||
|
3. Click the **Network** tab
|
||||||
|
4. Refresh the page (F5)
|
||||||
|
5. Click any request in the list
|
||||||
|
6. In the right panel, scroll to **Request Headers**
|
||||||
|
7. Find the line starting with `Cookie:`
|
||||||
|
8. Copy the entire value after `Cookie: `
|
||||||
|
9. Paste to your Agent
|
||||||
+56
-34
@@ -12,56 +12,80 @@ Install Agent Eyes: https://raw.githubusercontent.com/Panniantong/agent-eyes/mai
|
|||||||
|
|
||||||
## For AI Agents
|
## For AI Agents
|
||||||
|
|
||||||
Install Agent Eyes and set it up with minimal user effort.
|
Install Agent Eyes with minimal user effort. Goal: fewest questions, fewest steps.
|
||||||
|
|
||||||
### Step 1: Install and check
|
### Step 1: Install and detect
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install git+https://github.com/Panniantong/agent-eyes.git || pip3 install git+https://github.com/Panniantong/agent-eyes.git
|
pip install git+https://github.com/Panniantong/agent-eyes.git || pip3 install git+https://github.com/Panniantong/agent-eyes.git
|
||||||
agent-eyes install --env=auto
|
agent-eyes install --env=auto
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 2: One-click cookie import (LOCAL COMPUTERS ONLY)
|
Read the output. It tells you the detected environment (local/server) and what's already working.
|
||||||
|
|
||||||
If the environment was detected as **local**, offer to grab all cookies at once:
|
### Step 2: Set up cookies (the approach depends on environment)
|
||||||
|
|
||||||
> "I can automatically import your cookies from Chrome to unlock Twitter, XiaoHongShu, and Bilibili — all at once, one command. Want me to do that?
|
#### Path A: Local computer (auto-detected)
|
||||||
> (Make sure Chrome is closed first)"
|
|
||||||
|
|
||||||
If yes:
|
Offer one-click import:
|
||||||
|
|
||||||
|
> "I can grab your browser cookies automatically to unlock Twitter, XiaoHongShu, and Bilibili — all at once. Just close Chrome first, then say 'go'."
|
||||||
|
|
||||||
|
If user agrees:
|
||||||
```bash
|
```bash
|
||||||
pip install browser-cookie3
|
pip install browser-cookie3 2>/dev/null; agent-eyes configure --from-browser chrome
|
||||||
agent-eyes configure --from-browser chrome
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This extracts cookies for ALL supported platforms in one shot. No F12, no manual copying.
|
If user uses another browser: replace `chrome` with `firefox`, `edge`, `brave`, or `opera`.
|
||||||
|
|
||||||
If user uses a different browser:
|
If it fails or user declines, fall through to Path B.
|
||||||
|
|
||||||
|
#### Path B: Server, or auto-import didn't work
|
||||||
|
|
||||||
|
Tell the user the easiest manual method:
|
||||||
|
|
||||||
|
> "I need cookies from your browser to unlock some platforms. Here's the fastest way (30 seconds per site):
|
||||||
|
>
|
||||||
|
> 1. Install the **Cookie-Editor** Chrome extension: https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm
|
||||||
|
> 2. Go to the site (e.g. x.com) — make sure you're logged in
|
||||||
|
> 3. Click the Cookie-Editor icon → **Export** → **Header String**
|
||||||
|
> 4. Paste the result to me
|
||||||
|
>
|
||||||
|
> Which platforms do you use? I'll tell you which ones to export."
|
||||||
|
|
||||||
|
For each platform the user wants:
|
||||||
|
|
||||||
|
**Twitter/X** — export from https://x.com :
|
||||||
```bash
|
```bash
|
||||||
agent-eyes configure --from-browser firefox # or edge, brave, opera
|
agent-eyes configure twitter-cookies "PASTED_COOKIE_STRING"
|
||||||
|
```
|
||||||
|
(Accepts both: full cookie string OR just `auth_token ct0` as two values)
|
||||||
|
|
||||||
|
**XiaoHongShu** — export from https://www.xiaohongshu.com :
|
||||||
|
```bash
|
||||||
|
agent-eyes configure xhs-cookie "PASTED_COOKIE_STRING"
|
||||||
```
|
```
|
||||||
|
|
||||||
If the environment is **server** or the user declines, skip to Step 3.
|
**Bilibili** — export from https://www.bilibili.com :
|
||||||
|
(On local computers Bilibili already works without cookies. On servers it needs a proxy — see Step 4.)
|
||||||
|
|
||||||
### Step 3: Offer search upgrade
|
### Step 3: Set up search
|
||||||
|
|
||||||
> "Want to unlock web search? One free API key lets me search the entire web, Reddit, and Twitter.
|
> "Want to unlock web search? One free API key lets me search the web, Reddit, and Twitter.
|
||||||
> → Go to https://exa.ai → sign up (free) → send me the API key.
|
> Go to https://exa.ai → sign up (free, 1000 searches/month) → send me the key.
|
||||||
> Or say 'skip'."
|
> Or say 'skip' — everything else still works."
|
||||||
|
|
||||||
If user provides key:
|
|
||||||
```bash
|
```bash
|
||||||
agent-eyes configure exa-key THE_KEY
|
agent-eyes configure exa-key THE_KEY
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 4: Server-only — offer proxy
|
### Step 4: Server-only — proxy for Reddit/Bilibili
|
||||||
|
|
||||||
Only if auto-detected as server:
|
Only mention if environment was detected as server:
|
||||||
|
|
||||||
> "Reddit and Bilibili block server IPs. Reddit search still works free via Exa, but for full access you'd need a cheap proxy ($1/month).
|
> "On servers, Reddit and Bilibili block direct access. Reddit *search* still works via Exa (free), but for reading full Reddit posts or using Bilibili, you'd need a residential proxy (~$1/month).
|
||||||
> → Get one at https://webshare.io if interested. Or skip — search still works!"
|
> Get one at https://webshare.io if you want. Or skip — not required."
|
||||||
|
|
||||||
If user provides proxy:
|
|
||||||
```bash
|
```bash
|
||||||
agent-eyes configure proxy http://user:pass@ip:port
|
agent-eyes configure proxy http://user:pass@ip:port
|
||||||
```
|
```
|
||||||
@@ -72,24 +96,22 @@ agent-eyes configure proxy http://user:pass@ip:port
|
|||||||
agent-eyes doctor
|
agent-eyes doctor
|
||||||
```
|
```
|
||||||
|
|
||||||
> "✅ All set! [list what's active]. Try asking me to search or read something!"
|
> "✅ All set! [list active channels]. Try: 'search Reddit for ...' or 'read this URL'"
|
||||||
|
|
||||||
**Users can always configure more later** by saying things like "set up Twitter for Agent Eyes" or "add my XiaoHongShu cookies".
|
Users can configure more channels anytime — just say "set up Twitter" or "add proxy".
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Manual configure (one channel at a time)
|
## Quick Reference
|
||||||
|
|
||||||
These commands are for manual setup or adding individual channels later:
|
|
||||||
|
|
||||||
| Command | What it does |
|
| Command | What it does |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `agent-eyes configure --from-browser chrome` | Import ALL cookies at once |
|
| `agent-eyes configure --from-browser chrome` | Auto-import ALL cookies at once (local only) |
|
||||||
| `agent-eyes configure exa-key KEY` | Unlock search (web + Reddit + Twitter) |
|
| `agent-eyes configure exa-key KEY` | Unlock search (web + Reddit + Twitter) |
|
||||||
| `agent-eyes configure twitter-cookies TOKEN CT0` | Twitter deep search (manual) |
|
| `agent-eyes configure twitter-cookies "COOKIE_STRING"` | Unlock Twitter (cookie string or auth_token + ct0) |
|
||||||
| `agent-eyes configure xhs-cookie COOKIE` | XiaoHongShu (manual) |
|
| `agent-eyes configure xhs-cookie "COOKIE_STRING"` | Unlock XiaoHongShu |
|
||||||
| `agent-eyes configure youtube-cookies chrome` | Age-restricted YouTube |
|
| `agent-eyes configure youtube-cookies chrome` | Unlock age-restricted YouTube |
|
||||||
| `agent-eyes configure proxy URL` | Reddit + Bilibili on servers |
|
| `agent-eyes configure proxy URL` | Unlock Reddit reader + Bilibili (server) |
|
||||||
| `agent-eyes doctor` | Show all channels and status |
|
| `agent-eyes doctor` | Show all channels and their status |
|
||||||
| `agent-eyes read URL` | Read any URL |
|
| `agent-eyes read URL` | Read any URL |
|
||||||
| `agent-eyes search "query"` | Search the web |
|
| `agent-eyes search "query"` | Search the web |
|
||||||
|
|||||||
Reference in New Issue
Block a user