Commit Graph

283 Commits

Author SHA1 Message Date
Pnant 75bc98a7eb feat(install): split into core + optional channels with --channels flag (#237)
Base install now only sets up lightweight zero-config channels (Web, YouTube,
GitHub, RSS, Exa, V2EX, Bilibili basic). Optional channels (Twitter, Weibo,
WeChat, Xiaoyuzhou, XiaoHongShu, Reddit, Bilibili full, Douyin, LinkedIn)
are installed on demand via --channels flag.

- Add --channels param to install subcommand
- Extract twitter/xhs/reddit/bili into independent install functions
- Remove heavy deps (weibo/xiaoyuzhou/wechat/twitter-cli/xhs-cli) from
  default _install_system_deps() and _install_mcporter()
- Cookie import only triggers when cookie-needing channels are selected
- Doctor output: inactive optional channels summarized in one line
- install.md: two-step flow (basics → ask user which channels)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 18:19:59 +08:00
Pnant bc2d554e13 fix(xiaohongshu): switch from Docker MCP to xhs-cli (pipx install) (#236)
Docker + Cookie import → `pipx install xiaohongshu-cli` + `xhs login`.
Tier downgraded from 2 to 1. xhs-cli (1,477 stars) auto-extracts
cookies from browser, supports search/read/comment/post/hot/feed.

- xiaohongshu.py: check() detects `xhs` binary, parses `xhs status`
- cli.py: install via pipx instead of Docker
- skill/references/social.md: updated XHS commands
- tests: 3 new tests for CLI-based check()
- 77 tests passing

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 17:17:19 +08:00
Pnant 15f161e5b5 fix(reddit,bilibili): switch to rdt-cli and add bili-cli support (#235)
Reddit: Exa crawling had chronic CRAWL_LIVECRAWL_TIMEOUT issues.
rdt-cli (304 stars, public-clis) works without login — search, read
full posts, and comments all verified. Massive improvement.

Bilibili: add bili-cli (590 stars) as optional enhanced backend for
hot/rank/search/feed. yt-dlp remains for video metadata + subtitles.

Also fix UA string (was "agent-reach/1.0", now proper browser UA).

75 tests passing.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 17:04:58 +08:00
Pnant 794455cc9f refactor: remove Discord and Toutiao channels (#234)
Discord only returns server metadata (no messages without Bot Token),
not useful enough. Toutiao search was fragile (HTML scraping). Both
can be revisited when better upstream tools appear.

75 tests passing.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:54:17 +08:00
Pnant 6548a50824 fix(wechat): switch search from miku_ai to Exa, upgrade to tier 0 (#233)
miku_ai (Sogou WeChat search) has been unmaintained for 20 months.
Exa can search AND read WeChat articles via mp.weixin.qq.com domain
filtering — verified: search returns articles, crawling returns full text.
Jina Reader fails on WeChat (CAPTCHA block).

- wechat.py: check() now detects Exa (primary) + Camoufox (optional)
- tier downgraded from 2 to 0 (Exa is zero-config)
- skill/references/web.md: updated WeChat commands to use Exa
- 104 tests passing

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:57:54 +08:00
Pnant 21214fd02a fix(xueqiu): add rookiepy as primary cookie backend, keep browser_cookie3 as fallback (#232)
browser_cookie3 has been unmaintained for 15+ months and breaks with
newer browser versions. rookiepy (Rust-based, 345 stars, updated 2026-01)
is now the preferred cookie extraction backend.

- xueqiu.py: try rookiepy first, fallback to browser_cookie3
- cookie_extract.py: same priority order, compatible API wrapper
- Remove bird CLI credential sync (bird repo deleted)
- 104 tests passing

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:54:59 +08:00
Pnant c5a304dc20 fix(twitter): migrate from deleted bird CLI to twitter-cli (#231)
steipete/bird repo has been deleted (404). Migrates to twitter-cli
(public-clis/twitter-cli, 2137 stars, Python, actively maintained).

Changes:
- twitter.py: check() now detects `twitter` binary, parses `twitter status` YAML
- cli.py: install via pipx/uv instead of npm, test via `twitter status`
- cli.py: remove bird/xfetch credential sync, use TWITTER_AUTH_TOKEN/CT0 env
- skill references: bird commands → twitter-cli commands
- tests: 5 new tests covering all check() paths

104 tests passing.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:51:26 +08:00
Pnant 66883060bc feat(channels): add Discord channel (Exa search + public Invite API) (#230)
Zero-config channel (tier=0). Uses Discord Invite API to read public
server info (no auth), and Exa via mcporter for content search.
Tested: discord.gg/python returns 419K members, description, channel.
104 tests passing.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:16:15 +08:00
Pnant f4b3758478 feat(channels): add Toutiao channel with search and read (#229)
Zero-config channel (tier=0). Searches so.toutiao.com by scraping
embedded JSON from script tags. Fixes URL extraction order from PR #207
(article_url is the primary field, not display.info.url). Adds read()
via Jina Reader. 89 tests passing.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:11:09 +08:00
Jerrys d7c8ac81e9 docs: add alternative Douyin/XHS MCP option (social-post-extractor-mcp)
Co-authored-by: JNHFlow21 <JNHFlow21@users.noreply.github.com>
2026-03-31 14:57:32 +08:00
Ikko Eltociear Ashimine 1e0e6d1ae7 docs: add Japanese README (ja)
* docs: add Japanese README

* docs: update README.md
2026-03-31 14:56:50 +08:00
biyusku e90fbfe194 fix(youtube): use platform-aware yt-dlp config path and locale-safe reads (#225) 2026-03-31 14:56:16 +08:00
Pnant 3e90d51da9 Merge pull request #228 from Panniantong/fix/xhs-docker-guide
docs(xhs): fix misleading Docker login guide
2026-03-31 14:36:44 +08:00
Pnant b82ab1ae10 docs(xhs): fix misleading Docker login guide
- Clarify that localhost:18060 root may return 404 (MCP is at /mcp)
- Recommend Cookie-Editor export over QR scan login
- Note that Docker container QR login is unreliable and cookies
  don't auto-share to MCP service

Fixes #220

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:36:28 +08:00
Pnant 9a8b245e39 Merge pull request #227 from Panniantong/fix/reddit-exa-only
fix(reddit): switch to Exa-only, remove proxy dependency
2026-03-31 14:22:03 +08:00
Pnant 5d046ecb61 fix(reddit): switch to Exa-only for search and read, remove proxy dependency
Reddit blocks nearly all non-browser access at IP level (including ISP proxies).
Switch Reddit channel to use Exa exclusively:
- Search: web_search_exa with includeDomains: ["reddit.com"]
- Read: crawling_exa for full post + comments
- check() now verifies Exa availability instead of probing Reddit API
- tier changed from 1 (needs config) to 0 (zero config)
- Removed reddit_proxy from config, CLI, and setup guide
- Updated all docs (README, README_en, install.md, SKILL.md, references)
- Fixed xreach→bird references in references/social.md

Fixes #218, Fixes #222, Fixes #221

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:21:31 +08:00
Pnant b4ed28e48f Merge pull request #226 from Panniantong/merge/skill-router-system
feat(skill): refactor skill system with router + references (#192)
2026-03-31 11:22:00 +08:00
Pnant f9b7241d47 feat(skill): refactor skill system with router + references structure (#192)
Refactors SKILL.md into a router + reference documentation system:
- Main SKILL.md now contains routing table and quick commands
- Detailed docs split into references/ (search, social, career, dev, web, video)
- CLI skill install copies entire directory including references/
- Resolves conflicts with recent merges (#210, #213)
- Fixes xreach→bird in quick commands

Original PR by @Citrus086, merged with conflict resolution.

Co-Authored-By: Citrus086 <Citrus086@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:21:33 +08:00
Pnant 526616e13f Merge pull request #210 from MatrixA/fix/xueqiu-cookie-auth
Tests passed locally (75/75). Fixes xueqiu 400 errors with browser cookie auth, correct UA/Referer, and updated hot posts endpoint.
2026-03-31 11:15:17 +08:00
Pnant e51bd91e82 Merge pull request #213 from Panniantong/fix/skill-install-error-message
Tests passed locally. Clean fix for skill install error messaging.
2026-03-31 11:14:14 +08:00
Panniantong e575ddbcd1 fix(skill): show real error and helpful tip when skill install fails 2026-03-27 11:47:46 +01:00
fernando_jacob d793afaba6 fix(xueqiu): fix 400 errors by using browser cookies and correct headers
The Xueqiu stock API requires a login session token (xq_a_token) that
is generated by Xueqiu's frontend JavaScript and cannot be obtained by
simply visiting the homepage. This caused persistent HTTP 400 (error
code 400016) for all users.

Changes:
- _ensure_cookies(): add three-level priority — config file (saved by
  --from-browser) → live Chrome cookies via browser_cookie3 → homepage
  fallback. The homepage-only approach only ever got acw_tc (anti-DDoS
  token), never xq_a_token.
- _get_json(): switch User-Agent from "agent-reach/1.0" to a real Chrome
  UA, and add Referer: https://xueqiu.com/ to all API requests.
- get_hot_posts(): replace the defunct /statuses/hot/listV3.json endpoint
  (returns empty body) with the v4 public timeline endpoint; correctly
  parse item.data as a JSON string to extract author, text, and likes.
- cookie_extract.py: add Xueqiu to PLATFORM_SPECS and configure_from_browser
  so that `agent-reach configure --from-browser chrome` now also saves
  Xueqiu cookies (only when xq_a_token is present).
- check(): improve error message to direct users to --from-browser instead
  of suggesting a proxy.
- Fix urllib.parse.quote usage (was using urllib.request.quote).
- Update tier and backends description to reflect cookie requirement.
- Add 2 new tests: cookie loading from config, Referer/UA header verification.
- Update docs: README, install guide, troubleshooting, SKILL.md, CHANGELOG.
2026-03-27 11:55:14 +08:00
Pnant ca2e85520b docs: add Tencent Cloud OpenClaw to友情链接/Friends section (#209)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-26 11:15:16 +08:00
Pnant 3be2a64120 fix: auto-register skill on doctor + add XHS output formatter (#154, #134) (#199)
- Add 'agent-reach skill --install/--uninstall' command for explicit skill management
- Make 'agent-reach doctor' auto-install skill if not present (fixes #154)
- Add format_xhs_result() to strip bloated XHS JSON to essential fields (fixes #134)
- Add 'agent-reach format xhs' CLI command (pipe mcporter output to clean it)
- Update SKILL.md with XHS formatter usage tip
- Add tests for both features (11 new tests, 73/73 total pass)

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-23 19:40:57 +08:00
Pnant 470c1288d0 feat: add Xueqiu (雪球) channel (#198)
* feat: add Xueqiu (雪球) channel for stock quotes and community posts

Add a Tier 0 (zero-config) channel for Xueqiu, China's popular stock
market and investment community platform. Uses auto-generated session
cookies via http.cookiejar — no login required.

Supported methods:
- get_stock_quote(symbol) — real-time quotes (A/HK/US markets)
- search_stock(query) — search by name or code
- get_hot_posts(limit) — trending community posts
- get_hot_stocks(limit, stock_type) — popular stocks leaderboard

Inspired by https://github.com/jackwener/opencli xueqiu implementation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add Xueqiu to README platform tables, remove stale Instagram ref

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: fernando_jacob <f.jacob1996@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 18:44:13 +08:00
Pnant 881d9b96e2 fix(test): update doctor test assertions for Rich markup (#197)
PR #170 added Rich markup tags to doctor output, but the test
still asserted against plain text. Strip markup before assertion.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-23 18:42:14 +08:00
Yuki9814 15563051a1 feat: Refactor agent-reach doctor UI with Rich markup for better visualization (#170)
* feat: use rich text formatting for doctor UI

* fix: remove unrelated cli formatting changes

* fix: keep cli diff focused on doctor rich output

---------

Co-authored-by: Yuki9814 <Yuki9814@users.noreply.github.com>
2026-03-23 18:39:00 +08:00
Pnant 0c6c45a010 Fix twitter cookie parsing regression (#196)
Co-authored-by: Yin <mbair@gmail.com>
2026-03-23 18:35:47 +08:00
tobrainto 7e66abe636 feat: Support OPENCLAW_HOME environment variable! (#194)
Author:    tobrainto <tobrainto@qq.com>
2026-03-23 18:32:50 +08:00
Pnant e6406500f3 docs(wechat): use agent-reach interpreter for miku_ai search example (#188)
miku_ai is installed inside the agent-reach Python environment (pipx venv
or user venv). Using bare 'python3' fails when agent-reach was installed
via pipx, because system python3 cannot import miku_ai.

Fix: detect the correct interpreter at runtime via:
  $(python3 -c "import agent_reach, sys; print(sys.executable)")

This resolves the interpreter transparently for pipx, venv, and plain pip
installs without hardcoding paths.

Closes #187

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-23 18:32:40 +08:00
Pnant afc8d0e3ee docs(weibo): add comprehensive usage examples to SKILL.md (#195)
- Add 10 mcporter command examples for Weibo channel
- Cover: trending, search (users/content/topics), profile, feeds, comments, fans/followers
- Note: zero config, no login needed, uses mobile API with auto visitor cookies
- Completes documentation for mcp-server-weibo integration

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-23 17:16:31 +08:00
Pnant 90bb4e0266 Merge pull request #193 from Panniantong/feat/twitter-bird-migration
feat(twitter): migrate from xreach to bird CLI
2026-03-23 15:52:04 +08:00
Panniantong 7ae0cd8c0a feat(twitter): migrate from xreach to bird CLI
- Replace xreach CLI with bird (@steipete/bird) as Twitter/X backend
- bird uses AUTH_TOKEN/CT0 env vars (simpler than xreach's session.json)
- Accept both 'bird' and 'birdx' binary names
- Remove version detection logic (bird v0.8.0 is the baseline)
- Write credentials.env to ~/.config/bird/ for easy sourcing
- Keep xfetch session.json sync for backward compatibility
- Update SKILL.md commands: bird search/read/user-tweets/thread
- Update install/uninstall to use npm @steipete/bird
- All 52 tests pass
2026-03-23 08:51:22 +01:00
Pnant c1af1cad14 fix(bilibili): add /all/v2 search API check to doctor (#182)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 00:26:42 +08:00
Pnant ded444000b Merge pull request #176 from Panniantong/fix/xhs-cookies-absolute-path
fix(xhs): use absolute path fallback and restart container after cookie import
2026-03-19 15:05:16 +08:00
Panniantong 5fb0e10167 fix(xhs): use absolute path fallback and restart container after cookie import
- Change fallback cookie path from relative 'cookies.json' to absolute
  '/app/cookies.json' so docker cp works correctly when COOKIES_PATH env
  var is not set in older container images
- Also fix except branch to use the same absolute fallback
- Auto-restart container after writing cookies so the upstream MCP
  reloads them from disk without requiring manual intervention

Fixes #175
2026-03-17 11:15:46 +01:00
Pnant ef8134bba4 Merge pull request #173 from Panniantong/docs/wechat-personal-qr
docs: 微信二维码改为个人号(交流或合作加微信)
2026-03-16 19:09:40 +08:00
Panniantong be9f9ab838 docs: replace WeChat group QR with personal QR, update copy 2026-03-16 12:02:41 +01:00
Pnant 8afd19f473 Merge pull request #169 from Panniantong/fix/reddit-doctor-user-agent
fix(reddit): add User-Agent to doctor health check to avoid false 403
2026-03-15 21:50:43 +08:00
Panniantong 1f4154a897 fix(reddit): add User-Agent to doctor health check to avoid false 403
Reddit API requires a non-empty User-Agent header per its API rules.
Without it, the JSON endpoint returns 403 even when Reddit is reachable,
causing doctor to falsely report the channel as unavailable.

Changes:
- Add _reddit_reachable() helper that probes Reddit JSON API with UA
- doctor check() now distinguishes 'actually unreachable' from 'no proxy'
- Users on home IPs get 'ok' when Reddit is reachable; warn only on real failure

Fixes #168
2026-03-15 11:12:25 +01:00
Pnant 1442852471 Merge pull request #166 from voidborne-d/fix/skill-description-length
fix: shorten SKILL.md description to stay under 1024-char limit
2026-03-14 00:35:02 +08:00
Pnant 5461ca4030 Merge pull request #161 from Panniantong/fix/xiaohongshu-doctor-windows-compat
fix(xiaohongshu): robust JSON parsing + Windows timeouts for doctor check
2026-03-14 00:32:02 +08:00
voidborne-d ab843071ef fix: shorten SKILL.md description to stay under 1024-char limit (fixes #163)
The description field was 1204 characters, exceeding the 1024-character
maximum enforced by Codex and other MCP clients. This caused
'invalid description: exceeds maximum length of 1024 characters'
errors that prevented the skill from loading.

Changes:
- Removed star count (changes frequently, not essential for matching)
- Removed Chinese aliases in parentheses (redundant with trigger list)
- Consolidated 'Use when' into a single concise sentence
- Deduplicated trigger keywords (kept most distinctive ones)

New length: 661 chars (well within 1024 limit).
2026-03-13 09:11:20 +00:00
Pnant 6c5346cfa4 docs: update WeChat group QR code (expires 2026-03-20) (#164)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-13 16:25:56 +08:00
Panniantong 77c62c76fb fix(xiaohongshu): robust JSON parsing + Windows timeouts for doctor check
- Replace brittle '"status": "ok"' string match with proper JSON parsing
  in _mcporter_status_ok(). Handles Windows BOM, CRLF line endings, and
  whitespace variations that caused false negatives on Windows + mcporter 0.7.3.
- Fallback to normalised string matching for backward compatibility.
- Extend config-get timeout to 15 s and list timeout to 30 s on Windows
  (unchanged on Linux/macOS: 5 s / 10 s).

Fixes #159
2026-03-13 07:13:10 +01:00
Pnant 7c64579318 Merge pull request #157 from kadaliao/docs/add-v2ex-to-readme
docs: add V2EX channel to README and CHANGELOG
2026-03-13 12:10:45 +08:00
Pnant 383004e06a docs(skill): add 小宇宙播客 (Xiaoyuzhou) section to SKILL.md (#158)
The XiaoyuzhouChannel (groq-whisper + ffmpeg transcription) was
implemented in the codebase but missing from SKILL.md entirely,
causing agents to not know it existed.

Changes:
- Add Xiaoyuzhou to platform count (15 → 16) in description
- Add trigger keywords: 小宇宙, xiaoyuzhou, 播客, podcast, 转录, transcribe
- Add ## 小宇宙播客 / Xiaoyuzhou Podcast usage section with
  transcribe.sh invocation, prerequisites, and setup instructions

Closes #156

Co-authored-by: 小白 Bot <bot@agent-reach.dev>
2026-03-13 11:59:54 +08:00
Kada Liao f52fb67232 docs: add V2EX channel to README and CHANGELOG (v1.3.0) 2026-03-12 21:55:26 +08:00
robert.chen 59b594eccc docs: add pipx/venv guidance for Homebrew Python installs 2026-03-12 19:27:09 +08:00
robert.chen 3416c0f6d3 fix: avoid xreach false alarm and xiaoyuzhou install crash 2026-03-12 19:26:58 +08:00