Commit Graph

92 Commits

Author SHA1 Message Date
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
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
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
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
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
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 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
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 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 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 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 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 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
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
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
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 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 94b428b0b9 refactor: rewrite SKILL.md as pure usage guide (324→160 lines) (#78)
SKILL.md was mixing installation/configuration with usage commands.
Now it's a pure usage guide per skill-creator conventions:

- Description includes ALL platform trigger words (search, read,
  browse for each of 13 channels) so agents load it when users
  ask to search/read any platform
- Body is concise command reference only — no install/config
  instructions (those belong in install.md)
- Removed duplicate workspace rules explanation
- Removed cookie setup, proxy config, and channel setup sections
- 324 → 160 lines (51% reduction in context tokens)

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-05 17:19:23 +08:00
Pnant e5e20a1154 fix(windows): use shutil.which() for npm subprocess calls (#73)
Two subprocess.run(["npm", ...]) calls in undici installation were
using bare command name, which fails on Windows where npm is
installed as npm.cmd. Now resolves full path via shutil.which()
first, consistent with all other subprocess calls.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-05 10:32:02 +08:00
Pnant b4d189b536 fix: enforce workspace isolation to prevent agent pollution (#57) (#72)
Problem: After installing Agent Reach, agents may clone repos, create
files, or write output into the workspace directory, gradually polluting
the user's project. Over time this degrades the agent experience.

Fix:
- SKILL.md: add Workspace Rules section — never create files in workspace
- install.md: add Directory Rules table, explicit boundary about workspace
- install.md: all git clone commands now target ~/.agent-reach/tools/
- update.md: add workspace warning
- cli.py: install creates ~/.agent-reach/tools/ directory

All agent-facing docs now enforce: /tmp for temp, ~/.agent-reach/ for
persistent data, workspace stays untouched.

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 18:40:31 +08:00
Pnant ca29c4fee5 release: v1.3.0 (#70)
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled
New:
- WeChat Official Account channel (search + read)
  - Search via miku_ai (Sogou WeChat search)
  - Read via Camoufox (stealth Firefox, bypasses anti-bot)
- 13 channels total

Fixed:
- Windows encoding: text=True → encoding='utf-8' in all subprocess calls (#64)
- Windows .cmd resolution: use shutil.which() paths (#64)

Docs:
- Clarified agent-reach has no read/search commands (#58, #59)
- Fixed xiaohongshu API function names in SKILL.md (#65)
- Added CONTRIBUTING.md (#62)
- Updated README (zh + en) with WeChat channel

Version bumps: pyproject.toml, __init__.py, test_cli.py

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 18:18:18 +08:00
Pnant 476935be92 feat: add WeChat search via miku_ai (sogou) (#68)
- wechat channel now supports both search and read
- Search: miku_ai (sogou weixin search) → article list with URLs
- Read: camoufox (stealth Firefox) → full Markdown content
- Doctor shows granular status (search only / read only / both)
- SKILL.md updated with search + read workflow examples

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 18:02:05 +08:00
Pnant 4f4ad99d49 feat: add WeChat Official Account channel (#54) (#67)
New channel: wechat (微信公众号文章)
- Backend: wechat-article-for-ai (Camoufox stealth browser)
- Can read mp.weixin.qq.com article URLs → clean Markdown
- Bypasses WeChat anti-bot detection via stealth Firefox
- Doctor checks for camoufox package availability
- SKILL.md updated with usage examples

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 17:53:39 +08:00
Pnant a91a74d880 fix: Windows encoding + .cmd subprocess resolution (#64) (#66)
- Replace text=True with encoding='utf-8', errors='replace' in all
  subprocess.run calls (channels + cli.py) to fix GBK decode errors
  on Chinese Windows systems
- Use shutil.which() resolved paths in channel subprocess calls to
  handle Windows .cmd wrappers (npm global installs)

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 17:30:11 +08:00
Yves 7434c3cb9f docs: fix xiaohongshu API in SKILL.md — replace non-existent functions with correct ones (#65) 2026-03-04 17:18:13 +08:00
Pnant 1a61a2cc81 docs: clarify agent-reach has no read/search commands (#59)
- Remove dead '# ── read ──' placeholder comment in cli.py
- Reword SKILL.md to make it explicit that agent-reach is an
  installer/config tool, not a content fetcher
- Addresses confusion from issue #58

Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
2026-03-04 14:33:38 +08:00
Panniantong 4f52942260 improve: add chmod 0o600 for session.json (from PR #51 suggestion) 2026-02-28 13:28:14 +01:00
Panniantong 3c1a04a587 fix: sync Twitter cookies to xreach session.json on configure
When running 'agent-reach configure twitter-cookies', credentials are now
automatically written to ~/.config/xfetch/session.json so that 'xreach auth
check' works without manual intervention.

Preserves existing session.json fields if the file already exists.
Falls back gracefully if the sync fails (still saves to agent-reach config).

Fixes #50
2026-02-28 11:11:55 +01:00
Panniantong 0d1a33236e fix: YouTube requires JS runtime — auto-configure Node.js in install
yt-dlp now requires an external JS runtime (deno or Node.js) for YouTube.
Since agent-reach already installs Node.js, we configure yt-dlp to use it:

1. cli.py: install writes '--js-runtimes node' to ~/.config/yt-dlp/config
2. youtube.py: doctor checks JS runtime availability and config
3. SKILL.md: updated YouTube section with accurate troubleshooting

Bilibili note: 412 errors are IP-based (needs proxy), not cookie-related.

Fixes #47
2026-02-27 11:45:39 +01:00
Panniantong e620a1db8f docs: add cookie/proxy warnings for YouTube and Bilibili in SKILL.md
YouTube may trigger 'Sign in to confirm you're not a bot' on server IPs.
Bilibili may return 412 on non-residential IPs.

Added --cookies-from-browser fallback examples for both channels.

Fixes #47
2026-02-27 11:25:29 +01:00
Pnant 15a2961dfa Merge pull request #46 from Panniantong/migrate-bird-to-xreach
feat: 迁移 Twitter 后端 bird → xreach CLI
2026-02-27 15:21:25 +08:00
Panniantong 62aacf38b5 feat: migrate Twitter backend from bird CLI to xreach CLI
bird CLI (@steipete/bird) is deprecated and no longer maintained.
xreach CLI (xreach-cli on npm) is our maintained fork with:
- Fixed SearchTimeline (POST + updated query ID)
- Built-in proxy rotation support
- Additional features (DMs, notifications, lists)

Changes across 11 files:
- channels/twitter.py: detect xreach instead of bird/birdx
- cli.py: install/doctor/uninstall all reference xreach-cli
- SKILL.md: updated command examples (bird read → xreach tweet)
- guides/setup-twitter.md: rewritten for xreach
- docs/troubleshooting.md: updated proxy guidance
- README.md + README_en.md: all references updated
- config.py: twitter_bird → twitter_xreach
- core.py, mcp_server.py: comment updates

npm package: https://www.npmjs.com/package/xreach-cli
Source: https://github.com/Panniantong/xfetch
2026-02-27 08:17:51 +01:00
Panniantong d4e437bf2c fix: add ARM64/Apple Silicon support for xiaohongshu-mcp Docker setup
- Detect ARM64 architecture and auto-add --platform linux/amd64 to
  docker run hints in doctor/check output
- Add ARM64 FAQ section to setup guide with two options:
  Rosetta emulation (--platform linux/amd64) or build from source
- Closes #44
2026-02-27 08:06:06 +01:00
Pnant dbcc668f47 Merge pull request #40 from peter941221/fix/security-hardening-split-v2
fix: split security hardening and setup mcporter config checks
2026-02-27 13:30:52 +08:00