Commit Graph

229 Commits

Author SHA1 Message Date
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
Kada Liao 31f00b8d78 feat(channels): add V2EX support via public API (zero-config, tier=0)
* feat(channels): add V2EX support via public API

V2EX provides a public JSON API that requires no authentication.
This PR adds:
- agent_reach/channels/v2ex.py: V2EXChannel (tier=0, zero-config)
  - can_handle() matches v2ex.com URLs
  - check() verifies API reachability via urllib (no extra deps)
- Register V2EXChannel in channels/__init__.py
- SKILL.md: add V2EX section with curl examples for hot topics,
  node browsing, topic detail, replies, and user info
- tests/test_channels.py: URL matching + mocked ok/warn check tests

V2EX API endpoints used:
  GET /api/v2/topics/hot          — hot topics
  GET /api/topics/show.json       — node topics / topic detail
  GET /api/replies/show.json      — topic replies
  GET /api/members/show.json      — user info

* feat(channels): expand V2EX channel with data-fetching methods

Add get_hot_topics, get_node_topics, get_topic, get_user, and search
methods to V2EXChannel using stdlib urllib only (no new dependencies).
Update unit tests and SKILL.md with Python call examples.

* feat(v2ex): add data fetching methods to V2EXChannel
2026-03-12 14:29:07 +08:00
Pnant ba565bd096 fix: switch wechat-article-for-ai to Panniantong fork (BS4 4.12 fix) (#150)
Upstream bzd6661/wechat-article-for-ai has a bug where Tag.new_tag
is None in BS4 4.12+. Our fork fixes this.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-11 17:34:20 +08:00
Pnant 7018d77d58 docs: update WeChat group QR code (#149)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-11 16:05:17 +08:00
Pnant ce9b365491 docs: update SKILL.md metadata (homepage, 14 channels, 7500+ stars) (#143)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 14:41:06 +08:00