Commit graph

193 commits

Author SHA1 Message Date
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
Pnant
70a0bb8af8
fix(docs): correct OpenClaw exec permission instructions (#142)
- Replace invalid `/config set exec.allow true` with correct
  `openclaw config set tools.profile "coding"`
- Fix config filename: config.json → openclaw.json
- Update explanation to reference tools.profile system

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 14:38:46 +08:00
Pnant
6737ba6dbd
fix(groq): use Config class instead of hardcoded config.json (#136)
Config class writes YAML (config.yaml), but xiaoyuzhou.py, cli.py, and
transcribe.sh were hardcoded to read config.json (JSON format). Users who
configured groq-key via 'agent-reach configure' would not have their key
detected because the wrong file was being read.

Fixes #128 (related to config loading)

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 14:21:34 +08:00
Pnant
f5f4dea075
docs: add OpenClaw for Enterprise to friendly links (#141)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 14:20:31 +08:00
Pnant
233cc6fba8
docs: add friendly links section (FluxNode) (#140)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 14:18:06 +08:00
Pnant
ae5812cf7f
docs: remove personal WeChat QR, keep group QR only (#138)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 10:42:46 +08:00
Pnant
6af00ce4da
Update README.md 2026-03-10 10:41:20 +08:00
Pnant
3321bf7d34
docs: add WeChat community group QR code (#137)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 10:39:40 +08:00
Pnant
00d80d2169
remove: drop Boss直聘 channel (non-functional) (#135)
Boss直聘 channel removed entirely — upstream mcp-bosszp
triggers account-level bans, making it unusable in practice.

Removed from: channel registry, README (CN/EN), install.md,
SKILL.md, tests, credits.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-10 10:14:59 +08:00
Pnant
55efebd395
fix(twitter): warn when xreach < 0.3.2 (longform tweet support) (#127)
xreach-cli v0.3.2 added:
- extractTweetText() preferring note_tweet.text for long tweets
- X Article URL support (/article/ path)

Previously, doctor reported 'ok' even when the user had v0.3.0/v0.3.1
installed, silently failing to read longform tweets. Now check() reads
`xreach --version` and returns a warn with upgrade instructions if the
version is below 0.3.2.

Closes #126

Co-authored-by: neo_minion1 <minion@openclaw.ai>
2026-03-10 10:08:36 +08:00
Pnant
16733df4fc
fix: bust Star History chart cache (v=20260309, 7.5K+ stars) (#131)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-09 20:29:53 +08:00
Pnant
f3daa5cf97
fix(xiaoyuzhou): correct groq-api-key→groq-key in doctor hint and fix check() reading config after configure (#129)
Fixes #128

Two bugs:
1. doctor warn message said 'agent-reach configure groq-api-key' but the
   actual CLI arg is 'groq-key' (see cli.py:75 choices list and :993 handler).
   Same typo existed in cli.py _install_xiaoyuzhou_deps() output.

2. check() had a logic flaw: the inner 'if not has_key' was nested inside
   'if not os.environ.get(...)', so when GROQ_API_KEY env var was absent but
   config.json read succeeded, the outer condition never triggered the warning.
   Refactored to a flat has_key variable — cleaner and correct.

Verified: 36/36 tests pass, manual unit tests confirm warn uses 'groq-key'
and ok is returned when groq_api_key is present in config.json.

Co-authored-by: 小白(Agent) <neo@agent-reach.dev>
2026-03-09 18:18:15 +08:00
Pnant
6ddcfe2b57
Update contact information in README.md 2026-03-09 17:01:44 +08:00
Pnant
0d91d6834a
Update README.md 2026-03-09 17:01:18 +08:00
Pnant
dc64f15839
fix: add missing shutil import in weibo and xiaoyuzhou installers (#125)
Both _install_weibo_deps() and _install_xiaoyuzhou_deps() use
shutil.which() but didn't import shutil, causing NameError during
agent-reach install.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-09 01:28:51 +08:00
Pnant
c912051173
feat: 新增小宇宙播客转文字渠道 (#124)
* feat: add Xiaoyuzhou podcast transcription channel

- New channel: 小宇宙播客 (xiaoyuzhoufm.com) → full text transcript
- Uses Groq Whisper API (free, no credit card needed)
- Auto-downloads audio, converts to low-bitrate MP3, splits by 25MB limit
- Supports any length podcast with automatic chunking
- Script installed to ~/.agent-reach/tools/xiaoyuzhou/transcribe.sh
- User just needs: agent-reach configure groq-key gsk_xxxxx
- Updated README (CN/EN), install.md, pyproject.toml

* docs: clarify Xiaoyuzhou setup — free key, limitations, step-by-step

---------

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-09 00:34:22 +08:00
Pnant
22d7ad766a
docs: add Twitter/X to contact section (#122)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-09 00:20:07 +08:00
Pnant
5895f3992d
docs: add email to contact section (#121)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-09 00:19:02 +08:00
Pnant
9129fc5f27
Update README.md 2026-03-09 00:15:20 +08:00
Pnant
3fe100cd9a
docs: add contact section with WeChat QR code (#120)
Add author contact section to both Chinese and English READMEs.
Placed after Credits, before License — clean and non-intrusive.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 22:51:00 +08:00
Pnant
c2cbccfed9
fix(tests): align format_report assertions with actual output (#119)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 22:29:19 +08:00
Pnant
0a5c06633c
docs: add OpenClaw exec permission prerequisite to README (#117)
Fixes #110 and #115. Since OpenClaw 2026-01 disabled the exec tool by
default, users on OpenClaw can't run any agent-reach commands unless
exec is explicitly enabled.

Added:
- Warning callout before '快速上手' explaining exec requirement for
  OpenClaw users with the exact config command to use
- Note in the FAQ 'Compatible with Claude Code / OpenClaw...' entry
  with the same fix instructions

Closes #110
Closes #115

Co-authored-by: neo-minion1 <bot@openclaw.ai>
2026-03-08 22:25:52 +08:00
Peter Xue
7942f632e5
fix: make doctor checks resilient to slow mcporter calls (#103) 2026-03-08 22:25:50 +08:00
Pnant
fedbf95f61
feat: add Weibo as default-install channel via Panniantong fork (#118)
- Weibo now auto-installs during 'agent-reach install' (no login needed)
- Uses Panniantong/mcp-server-weibo fork with visitor passport auth fix
- Works from overseas servers without proxy or cookies
- Updated README (CN/EN), install.md, and channel check to point to fork
- 10 tools: trending, search content/users/topics, profile, feeds, comments

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 22:25:40 +08:00
Pnant
1d3fd43fb3
docs: fix Weibo note — not IP-restricted, needs visitor cookie (#116)
The m.weibo.cn API works from overseas IPs (browsers handle the
visitor passport flow automatically). The issue is that
mcp-server-weibo doesn't handle the visitor auth flow, so it
needs a valid Cookie to work.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 21:57:34 +08:00
Pnant
c02ffc59a5
docs: add Weibo install instructions + China IP note (#114)
Adds install steps for mcp-server-weibo and documents that the
Weibo mobile API (m.weibo.cn) only works from mainland China IPs.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 21:55:27 +08:00
AICodeLion
db20c5d5d3
feat: add Weibo channel via mcp-server-weibo (#107)
Adds WeiboChannel integrating qinyuanpei/mcp-server-weibo (34+ stars,
MIT, 10 tools) via mcporter. Addresses #75.

Files changed (3 files, +57 lines):
- agent_reach/channels/weibo.py — new channel (54 lines)
- agent_reach/channels/__init__.py — register WeiboChannel
- tests/test_channel_contracts.py — add weibo URL sample

Co-authored-by: AICodeLion <AICodeLion@users.noreply.github.com>
2026-03-08 21:54:35 +08:00
Shawn
3a3d38acce
fix: YouTube JS runtime check, Douyin health check, cli bare except, config permission race (#104)
- YouTube: warn when only Node.js is installed but yt-dlp config file
  is missing (previously returned "ok" incorrectly)
- Douyin: use `mcporter list` instead of calling with a hardcoded
  invalid share URL that always fails
- cli: replace bare `except:` with `except Exception:` in
  `_detect_environment` to avoid catching KeyboardInterrupt/SystemExit
- cli: fix unclosed file handle for cloud VM detection
- config: use `os.open()` with 0o600 mode to eliminate permission
  race window when saving credentials
2026-03-08 21:24:05 +08:00
Pnant
4b7d55111f
feat: add 'agent-reach configure xhs-cookies' command (#108) (#113)
Adds a proper way for AI agents to import XiaoHongShu cookies into
the xiaohongshu-mcp Docker container. Previously agents had no clear
command to use, leading to confusion loops (issue #108).

Supports two input formats:
- Cookie-Editor JSON export (array of cookie objects)
- Header String format (key1=val1; key2=val2; ...)

The command:
1. Parses and validates the cookie input
2. Finds the running xiaohongshu-mcp container
3. Reads COOKIES_PATH from container env
4. Writes cookies via docker cp
5. Verifies login status via mcporter

Also updates install.md with the new command.

Closes #108

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 21:19:33 +08:00
Pnant
eda80b89b5
fix: sync xfetch session.json when using --from-browser (closes #109) (#112)
Previously, Extracting cookies from chrome...

   Twitter/X: auth_token + ct0

 Cookies configured! Run `agent-reach doctor` to see updated status. stored Twitter
cookies in ~/.agent-reach/config.yaml but did NOT write them to
~/.config/xfetch/session.json. This caused xreach CLI to report
'Not authenticated' even after a successful configure.

The xfetch bridge existed only in the manual
code path (cli.py:829). This commit extracts it into a shared helper
_sync_xfetch_session() in cookie_extract.py and calls it from
configure_from_browser() too, so both paths behave consistently.

Fix is non-fatal: if the xfetch dir/file cannot be written, the error
is swallowed silently (agent-reach config.yaml remains the source of truth).

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-08 14:32:24 +08:00
Pnant
75a2213510
fix: remove isatty guard in _ensure_utf8_console (#95) (#101)
The isatty() check skipped UTF-8 wrapping when agent-reach was called
as a subprocess by AI agents (non-TTY). On Windows with GBK encoding,
any remaining non-ASCII chars would crash with UnicodeEncodeError.

Now UTF-8 wrapping applies in all environments on Windows.

Closes #95

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-07 12:58:18 +08:00
Pnant
8a90e52fde
Merge pull request #102 from Panniantong/fix/remove-emojis
fix: remove emoji from CLI output for Windows GBK compatibility
2026-03-07 12:56:39 +08:00
Panniantong
9d0191d5eb fix: remove emoji from CLI output for Windows GBK compatibility
- Remove all decorative emoji (👁️🔍📦🍪💡🔧📥🧩🛡️📡💻🤖🙏🆕ℹ️) from cli.py and doctor.py
- Replace ⚠️ with [!] and  with [X] (ASCII-safe status markers)
- Replace  with -- (ASCII-safe)
- Keep  only for final success confirmations
- Fixes Windows GBK encoding crash during 'agent-reach install' (issue #95)

Closes #95
2026-03-07 05:46:38 +01:00
Pnant
f3d11fe89d
feat: add star reminder after install completes (#89)
A friendly, non-intrusive message after successful installation
asking users to star the repo.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-07 01:55:26 +08:00
Pnant
df34436942
docs: add Star History chart to README (#81)
Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-05 21:33:40 +08:00
Pnant
cd94706d3b
feat: auto-install WeChat article tools during install (#80)
* feat: auto-install WeChat article tools during agent-reach install

WeChat (微信公众号) deps are now auto-installed during 'agent-reach install':
- Python packages: camoufox[geoip], markdownify, beautifulsoup4, httpx, miku_ai
- Tool repo: wechat-article-for-ai cloned to ~/.agent-reach/tools/

No login or configuration needed — works out of the box like YouTube/RSS.
Updated README tables to reflect zero-config status.
Also covers safe mode and dry-run.

* feat: auto-install WeChat + add channel-setup reference to SKILL.md

1. WeChat auto-install during 'agent-reach install':
   - pip install camoufox[geoip], markdownify, bs4, httpx, miku_ai
   - clone wechat-article-for-ai to ~/.agent-reach/tools/
   - covers safe mode and dry-run
   - README tables: WeChat → zero-config

2. SKILL.md improvements:
   - Added 'configure' triggers to description
   - Added references/channel-setup.md with install steps for all
     login-required platforms (Twitter, XHS, Douyin, LinkedIn, Boss)
   - Principle: user only provides cookies, agent does everything else

* simplify: point to install.md URL instead of bundled reference

No need to maintain a separate channel-setup.md. Just tell agents
to fetch install.md when they need setup instructions.

---------

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-05 18:29:33 +08:00
Pnant
35073aed54
docs: make WeChat row consistent with other channels (#79)
Changed '怎么配' column from raw pip command to '告诉 Agent「帮我配微信公众号」',
matching the pattern of all other channels. Updated both Chinese and English READMEs.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-05 18:08:35 +08:00