All notable changes to jike-skill will be documented in this file.
- Codex plugin packaging via
.codex-plugin/plugin.json,.agents/plugins/marketplace.json, andskills/jike/SKILL.md, so the public repository can be added as a Codex plugin marketplace. The Codex marketplace entry is markedINSTALLED_BY_DEFAULTfor direct use after the marketplace is added. - Square SVG app icon for Codex plugin directory and composer surfaces.
- README now documents the Codex marketplace install flow separately from the Claude Code plugin flow.
SKILL.mdandskills/jike/SKILL.mdnow tell agents how to install and verify this repository as a Codex plugin..claude-plugin/marketplace.jsonnow uses a./-prefixed source path for compatibility with Codex marketplace path rules..agents/plugins/marketplace.jsonnow uses a Git-backed root source for Codex, avoiding the empty local-path resolution produced by./.
- Browser-friendly QR login: when
qrcode[pil]is installed, a self-contained HTML page (PNG embedded as base64) is written and itsfile://URI is printed — useful when terminal width truncates the ASCII QR. ASCII output remains available as a fallback. QRRenderdataclass:render_qr()now returns a structured result describing which channel(s) succeeded (html_path,ascii_printed).- New unit tests covering QR HTML mode bits, HTML cleanup on success and timeout, caption HTML-escaping, and channel independence (HTML failure does not block ASCII and vice versa).
- QR HTML uses an unpredictable tempfile path via
tempfile.NamedTemporaryFile, eliminating the symlink/TOCTOU window that a fixed/tmp/jike_qr_login.htmlwould expose on multi-user hosts. - Tempfile is created with
0o600mode on POSIX so other local users cannot read the live login QR during the scan window. try / finallycleanup: the QR HTML file is unlinked when the auth flow returns (success, timeout, or exception).- HTML-escape user-controlled caption before interpolation, so a malformed UUID cannot break out of the HTML page.
- Robust error handling in
render_qr:OSError,UnicodeEncodeError, and other I/O failures are caught per-channel and downgraded to a structured fallback instead of crashing the entire auth flow. - Cross-platform tempdir: HTML page now respects
tempfile.gettempdir()instead of hard-coding/tmp, so the auth flow no longer breaks on Windows. - Single QR matrix: HTML and ASCII reuse a single
QRCodeinstance instead of building two with mismatchedbox_sizesettings.
- Plugin metadata (
.claude-plugin/plugin.json,.claude-plugin/marketplace.json) bumped from0.1.0to0.4.0, closing the long-standing drift behindpyproject.toml. - Package
__version__and__all__updated to exposerender_qrandQRRender. .gitignorenow excludes macOS._*resource forks that appear when the working tree lives on an exFAT/SMB volume.
- Environment variable tokens:
JIKE_ACCESS_TOKENandJIKE_REFRESH_TOKEN— CLI flags become optional when env vars are set - Request timeouts: all HTTP calls enforce
REQUEST_TIMEOUT_SEC = 15to prevent indefinite hangs - Long-poll timeout: QR scan polling uses dedicated
POLL_REQUEST_TIMEOUT_SEC = 60to accommodate server hold behavior - User posts command:
user-postssubcommand with--username,--limit,--load-more-key
- API endpoint: restored
/1.0/userPost/listMoreacross all modules (previouspersonalUpdate/singleworkaround no longer needed) - Token refresh fallback: standalone scripts now fall back to previous token on missing headers (was empty string)
- CLI error handling: all entry points catch
requests.RequestExceptioninstead of onlyHTTPError, covering timeouts and connection errors - Test isolation:
test_missing_*_token_raisesnow clears env vars viamonkeypatch.delenvto prevent false passes in CI
- Updated README with env-var-first workflow and revised examples
- Updated SKILL.md with timeout and environment variable documentation
- Added export artifact patterns to
.gitignore
- API migration:
/1.0/userPost/listMoreendpoint removed by Jike (returns 404)- Migrated to
/1.0/personalUpdate/singlefor user post listing loadMoreKeyformat changed from string to{"lastId": "<id>"}- Removed unused
limitparameter (new endpoint returns ~25 posts per page)
- Migrated to
- Updated
scripts/export.py,scripts/client.py, andreferences/api.md
- Full export tested: 924 posts, pagination working correctly
- Export:
scripts/export.py— export a user's entire post history to Markdown- Automatic pagination through all posts
- Image support (inline URLs or local download via
--download-images) - Repost/share content preserved with original author attribution
- Topic tags and link attachments included
- Chronological sort (oldest first)
- Optional raw JSON dump (
--json-dump) for backup
- User posts:
user-postscommand in both standalone and package clients - API: documented
POST /1.0/userPost/listMoreendpoint inreferences/api.md
- Updated README with export section and revised project tree
- Updated SKILL.md with export workflow documentation
- Initial release
- QR code authentication (no passwords)
- Following feed reader
- Post creation and deletion
- Comment creation and deletion
- Content search
- User profile lookup
- Notification checking
- Dual-mode distribution:
pip installpackage + Claude Code skill - Automatic token refresh on 401
- Complete API reference in
references/api.md