@jackwener/opencli 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/actions/setup-chrome/action.yml +5 -4
- package/.github/workflows/build-extension.yml +2 -6
- package/.github/workflows/ci.yml +37 -3
- package/.github/workflows/e2e-headed.yml +16 -3
- package/CHANGELOG.md +23 -0
- package/PRIVACY.md +57 -0
- package/README.md +36 -7
- package/README.zh-CN.md +13 -6
- package/SKILL.md +103 -2
- package/dist/browser/cdp.d.ts +2 -1
- package/dist/browser/discover.d.ts +4 -1
- package/dist/browser/discover.js +6 -2
- package/dist/browser/errors.d.ts +2 -2
- package/dist/browser/errors.js +4 -12
- package/dist/browser/mcp.d.ts +2 -1
- package/dist/build-manifest.d.ts +2 -0
- package/dist/build-manifest.js +39 -14
- package/dist/build-manifest.test.js +21 -0
- package/dist/capabilityRouting.d.ts +2 -0
- package/dist/capabilityRouting.js +2 -1
- package/dist/cli-manifest.json +1838 -151
- package/dist/cli.js +34 -3
- package/dist/clis/36kr/article.d.ts +1 -0
- package/dist/clis/36kr/article.js +62 -0
- package/dist/clis/36kr/hot.d.ts +3 -0
- package/dist/clis/36kr/hot.js +80 -0
- package/dist/clis/36kr/hot.test.d.ts +1 -0
- package/dist/clis/36kr/hot.test.js +15 -0
- package/dist/clis/36kr/news.d.ts +1 -0
- package/dist/clis/36kr/news.js +51 -0
- package/dist/clis/36kr/news.test.d.ts +1 -0
- package/dist/clis/36kr/news.test.js +85 -0
- package/dist/clis/36kr/search.d.ts +1 -0
- package/dist/clis/36kr/search.js +72 -0
- package/dist/clis/apple-podcasts/search.js +2 -1
- package/dist/clis/arxiv/search.js +2 -2
- package/dist/clis/bbc/news.js +0 -1
- package/dist/clis/bilibili/comments.d.ts +5 -0
- package/dist/clis/bilibili/comments.js +40 -0
- package/dist/clis/bilibili/comments.test.d.ts +1 -0
- package/dist/clis/bilibili/comments.test.js +82 -0
- package/dist/clis/chatgpt/ask.js +29 -14
- package/dist/clis/chatgpt/ax.d.ts +6 -0
- package/dist/clis/chatgpt/ax.js +172 -1
- package/dist/clis/chatgpt/model.d.ts +1 -0
- package/dist/clis/chatgpt/model.js +24 -0
- package/dist/clis/chatgpt/send.js +12 -3
- package/dist/clis/ctrip/search.js +0 -1
- package/dist/clis/douban/download.d.ts +1 -0
- package/dist/clis/douban/download.js +67 -0
- package/dist/clis/douban/download.test.d.ts +1 -0
- package/dist/clis/douban/download.test.js +170 -0
- package/dist/clis/douban/photos.d.ts +1 -0
- package/dist/clis/douban/photos.js +34 -0
- package/dist/clis/douban/utils.d.ts +25 -0
- package/dist/clis/douban/utils.js +190 -1
- package/dist/clis/douban/utils.test.d.ts +1 -0
- package/dist/clis/douban/utils.test.js +64 -0
- package/dist/clis/douyin/_shared/browser-fetch.d.ts +10 -0
- package/dist/clis/douyin/_shared/browser-fetch.js +30 -0
- package/dist/clis/douyin/_shared/browser-fetch.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/browser-fetch.test.js +31 -0
- package/dist/clis/douyin/_shared/creation-id.d.ts +1 -0
- package/dist/clis/douyin/_shared/creation-id.js +5 -0
- package/dist/clis/douyin/_shared/creation-id.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/creation-id.test.js +22 -0
- package/dist/clis/douyin/_shared/imagex-upload.d.ts +20 -0
- package/dist/clis/douyin/_shared/imagex-upload.js +53 -0
- package/dist/clis/douyin/_shared/imagex-upload.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/imagex-upload.test.js +87 -0
- package/dist/clis/douyin/_shared/sts2.d.ts +8 -0
- package/dist/clis/douyin/_shared/sts2.js +15 -0
- package/dist/clis/douyin/_shared/text-extra.d.ts +18 -0
- package/dist/clis/douyin/_shared/text-extra.js +15 -0
- package/dist/clis/douyin/_shared/text-extra.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/text-extra.test.js +37 -0
- package/dist/clis/douyin/_shared/timing.d.ts +2 -0
- package/dist/clis/douyin/_shared/timing.js +22 -0
- package/dist/clis/douyin/_shared/timing.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/timing.test.js +28 -0
- package/dist/clis/douyin/_shared/tos-upload-short-read.test.d.ts +11 -0
- package/dist/clis/douyin/_shared/tos-upload-short-read.test.js +83 -0
- package/dist/clis/douyin/_shared/tos-upload.d.ts +53 -0
- package/dist/clis/douyin/_shared/tos-upload.js +295 -0
- package/dist/clis/douyin/_shared/tos-upload.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/tos-upload.test.js +229 -0
- package/dist/clis/douyin/_shared/transcode.d.ts +27 -0
- package/dist/clis/douyin/_shared/transcode.js +45 -0
- package/dist/clis/douyin/_shared/transcode.test.d.ts +1 -0
- package/dist/clis/douyin/_shared/transcode.test.js +93 -0
- package/dist/clis/douyin/_shared/types.d.ts +26 -0
- package/dist/clis/douyin/_shared/types.js +1 -0
- package/dist/clis/douyin/activities.d.ts +1 -0
- package/dist/clis/douyin/activities.js +20 -0
- package/dist/clis/douyin/activities.test.d.ts +1 -0
- package/dist/clis/douyin/activities.test.js +22 -0
- package/dist/clis/douyin/collections.d.ts +1 -0
- package/dist/clis/douyin/collections.js +22 -0
- package/dist/clis/douyin/collections.test.d.ts +1 -0
- package/dist/clis/douyin/collections.test.js +23 -0
- package/dist/clis/douyin/delete.d.ts +1 -0
- package/dist/clis/douyin/delete.js +18 -0
- package/dist/clis/douyin/delete.test.d.ts +1 -0
- package/dist/clis/douyin/delete.test.js +11 -0
- package/dist/clis/douyin/draft.d.ts +14 -0
- package/dist/clis/douyin/draft.js +237 -0
- package/dist/clis/douyin/draft.test.d.ts +1 -0
- package/dist/clis/douyin/draft.test.js +11 -0
- package/dist/clis/douyin/drafts.d.ts +1 -0
- package/dist/clis/douyin/drafts.js +23 -0
- package/dist/clis/douyin/drafts.test.d.ts +1 -0
- package/dist/clis/douyin/drafts.test.js +11 -0
- package/dist/clis/douyin/hashtag.d.ts +1 -0
- package/dist/clis/douyin/hashtag.js +45 -0
- package/dist/clis/douyin/hashtag.test.d.ts +1 -0
- package/dist/clis/douyin/hashtag.test.js +25 -0
- package/dist/clis/douyin/location.d.ts +1 -0
- package/dist/clis/douyin/location.js +24 -0
- package/dist/clis/douyin/location.test.d.ts +1 -0
- package/dist/clis/douyin/location.test.js +23 -0
- package/dist/clis/douyin/profile.d.ts +1 -0
- package/dist/clis/douyin/profile.js +28 -0
- package/dist/clis/douyin/profile.test.d.ts +1 -0
- package/dist/clis/douyin/profile.test.js +11 -0
- package/dist/clis/douyin/publish.d.ts +14 -0
- package/dist/clis/douyin/publish.js +288 -0
- package/dist/clis/douyin/publish.test.d.ts +1 -0
- package/dist/clis/douyin/publish.test.js +38 -0
- package/dist/clis/douyin/stats.d.ts +1 -0
- package/dist/clis/douyin/stats.js +27 -0
- package/dist/clis/douyin/stats.test.d.ts +1 -0
- package/dist/clis/douyin/stats.test.js +22 -0
- package/dist/clis/douyin/update.d.ts +1 -0
- package/dist/clis/douyin/update.js +31 -0
- package/dist/clis/douyin/update.test.d.ts +1 -0
- package/dist/clis/douyin/update.test.js +11 -0
- package/dist/clis/douyin/videos.d.ts +1 -0
- package/dist/clis/douyin/videos.js +34 -0
- package/dist/clis/douyin/videos.test.d.ts +1 -0
- package/dist/clis/douyin/videos.test.js +11 -0
- package/dist/clis/hackernews/search.yaml +1 -1
- package/dist/clis/imdb/person.d.ts +1 -0
- package/dist/clis/imdb/person.js +203 -0
- package/dist/clis/imdb/reviews.d.ts +1 -0
- package/dist/clis/imdb/reviews.js +88 -0
- package/dist/clis/imdb/search.d.ts +1 -0
- package/dist/clis/imdb/search.js +161 -0
- package/dist/clis/imdb/title.d.ts +1 -0
- package/dist/clis/imdb/title.js +93 -0
- package/dist/clis/imdb/top.d.ts +1 -0
- package/dist/clis/imdb/top.js +53 -0
- package/dist/clis/imdb/trending.d.ts +1 -0
- package/dist/clis/imdb/trending.js +52 -0
- package/dist/clis/imdb/utils.d.ts +46 -0
- package/dist/clis/imdb/utils.js +285 -0
- package/dist/clis/imdb/utils.test.d.ts +1 -0
- package/dist/clis/imdb/utils.test.js +88 -0
- package/dist/clis/instagram/search.yaml +2 -1
- package/dist/clis/jd/item.d.ts +4 -0
- package/dist/clis/jd/item.js +16 -15
- package/dist/clis/jd/item.test.js +16 -1
- package/dist/clis/linux-do/categories.yaml +38 -9
- package/dist/clis/linux-do/category.d.ts +1 -0
- package/dist/clis/linux-do/category.js +36 -0
- package/dist/clis/linux-do/feed.d.ts +45 -0
- package/dist/clis/linux-do/feed.js +397 -0
- package/dist/clis/linux-do/feed.test.d.ts +1 -0
- package/dist/clis/linux-do/feed.test.js +118 -0
- package/dist/clis/linux-do/hot.d.ts +1 -0
- package/dist/clis/linux-do/hot.js +25 -0
- package/dist/clis/linux-do/latest.d.ts +1 -0
- package/dist/clis/linux-do/latest.js +18 -0
- package/dist/clis/linux-do/search.yaml +3 -1
- package/dist/clis/linux-do/tags.yaml +41 -0
- package/dist/clis/linux-do/topic.yaml +41 -3
- package/dist/clis/linux-do/user-posts.yaml +67 -0
- package/dist/clis/linux-do/user-topics.yaml +54 -0
- package/dist/clis/medium/search.js +1 -1
- package/dist/clis/paperreview/commands.test.d.ts +3 -0
- package/dist/clis/paperreview/commands.test.js +243 -0
- package/dist/clis/paperreview/feedback.d.ts +1 -0
- package/dist/clis/paperreview/feedback.js +52 -0
- package/dist/clis/paperreview/review.d.ts +1 -0
- package/dist/clis/paperreview/review.js +37 -0
- package/dist/clis/paperreview/submit.d.ts +1 -0
- package/dist/clis/paperreview/submit.js +85 -0
- package/dist/clis/paperreview/utils.d.ts +46 -0
- package/dist/clis/paperreview/utils.js +197 -0
- package/dist/clis/paperreview/utils.test.d.ts +1 -0
- package/dist/clis/paperreview/utils.test.js +49 -0
- package/dist/clis/producthunt/browse.d.ts +1 -0
- package/dist/clis/producthunt/browse.js +99 -0
- package/dist/clis/producthunt/hot.d.ts +1 -0
- package/dist/clis/producthunt/hot.js +110 -0
- package/dist/clis/producthunt/posts.d.ts +1 -0
- package/dist/clis/producthunt/posts.js +28 -0
- package/dist/clis/producthunt/today.d.ts +1 -0
- package/dist/clis/producthunt/today.js +35 -0
- package/dist/clis/producthunt/utils.d.ts +29 -0
- package/dist/clis/producthunt/utils.js +99 -0
- package/dist/clis/producthunt/utils.test.d.ts +1 -0
- package/dist/clis/producthunt/utils.test.js +64 -0
- package/dist/clis/reuters/search.js +0 -1
- package/dist/clis/twitter/article.js +4 -28
- package/dist/clis/twitter/likes.d.ts +24 -0
- package/dist/clis/twitter/likes.js +217 -0
- package/dist/clis/twitter/likes.test.d.ts +1 -0
- package/dist/clis/twitter/likes.test.js +85 -0
- package/dist/clis/twitter/profile.js +4 -28
- package/dist/clis/twitter/search.js +7 -4
- package/dist/clis/twitter/search.test.js +56 -2
- package/dist/clis/twitter/shared.d.ts +6 -0
- package/dist/clis/twitter/shared.js +35 -0
- package/dist/clis/twitter/timeline.js +2 -13
- package/dist/clis/weibo/comments.d.ts +1 -0
- package/dist/clis/weibo/comments.js +53 -0
- package/dist/clis/weibo/feed.d.ts +1 -0
- package/dist/clis/weibo/feed.js +56 -0
- package/dist/clis/weibo/hot.js +0 -1
- package/dist/clis/weibo/me.d.ts +1 -0
- package/dist/clis/weibo/me.js +76 -0
- package/dist/clis/weibo/post.d.ts +1 -0
- package/dist/clis/weibo/post.js +75 -0
- package/dist/clis/weibo/user.d.ts +1 -0
- package/dist/clis/weibo/user.js +63 -0
- package/dist/clis/weibo/utils.d.ts +6 -0
- package/dist/clis/weibo/utils.js +30 -0
- package/dist/clis/weixin/download.d.ts +17 -0
- package/dist/clis/weixin/download.js +88 -20
- package/dist/clis/weread/book.js +2 -2
- package/dist/clis/weread/commands.test.d.ts +3 -0
- package/dist/clis/weread/commands.test.js +43 -0
- package/dist/clis/weread/highlights.js +2 -2
- package/dist/clis/weread/notebooks.js +2 -2
- package/dist/clis/weread/notes.js +3 -3
- package/dist/clis/weread/search.js +3 -2
- package/dist/clis/weread/shelf.js +2 -2
- package/dist/clis/weread/utils.d.ts +4 -4
- package/dist/clis/weread/utils.js +32 -14
- package/dist/clis/weread/utils.test.js +1 -28
- package/dist/clis/xiaohongshu/comments.d.ts +5 -0
- package/dist/clis/xiaohongshu/comments.js +74 -0
- package/dist/clis/xiaohongshu/comments.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/comments.test.js +79 -0
- package/dist/clis/xiaohongshu/publish.js +114 -18
- package/dist/clis/xiaohongshu/publish.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/publish.test.js +119 -0
- package/dist/clis/xueqiu/search.yaml +2 -1
- package/dist/clis/yahoo-finance/quote.js +0 -1
- package/dist/clis/youtube/channel.d.ts +1 -0
- package/dist/clis/youtube/channel.js +150 -0
- package/dist/clis/youtube/comments.d.ts +1 -0
- package/dist/clis/youtube/comments.js +95 -0
- package/dist/clis/youtube/search.js +0 -1
- package/dist/clis/zhihu/search.yaml +2 -1
- package/dist/commanderAdapter.d.ts +1 -0
- package/dist/commanderAdapter.js +176 -29
- package/dist/commanderAdapter.test.d.ts +1 -0
- package/dist/commanderAdapter.test.js +62 -0
- package/dist/daemon.js +17 -1
- package/dist/discovery.js +8 -14
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +9 -2
- package/dist/download/index.js +63 -51
- package/dist/download/index.test.js +17 -4
- package/dist/errors.d.ts +3 -1
- package/dist/errors.js +15 -32
- package/dist/execution.d.ts +1 -3
- package/dist/execution.js +21 -1
- package/dist/external-clis.yaml +0 -17
- package/dist/hooks.js +2 -0
- package/dist/main.js +5 -0
- package/dist/output.js +5 -1
- package/dist/pipeline/executor.js +3 -4
- package/dist/plugin-manifest.d.ts +70 -0
- package/dist/plugin-manifest.js +160 -0
- package/dist/plugin-manifest.test.d.ts +4 -0
- package/dist/plugin-manifest.test.js +179 -0
- package/dist/plugin.d.ts +38 -5
- package/dist/plugin.js +267 -33
- package/dist/plugin.test.js +220 -3
- package/dist/registry.d.ts +4 -0
- package/dist/registry.js +2 -0
- package/dist/runtime-detect.d.ts +21 -0
- package/dist/runtime-detect.js +32 -0
- package/dist/runtime-detect.test.d.ts +1 -0
- package/dist/runtime-detect.test.js +27 -0
- package/dist/runtime.js +1 -1
- package/dist/serialization.d.ts +2 -0
- package/dist/serialization.js +6 -0
- package/dist/types.d.ts +1 -0
- package/dist/update-check.d.ts +22 -0
- package/dist/update-check.js +112 -0
- package/dist/weixin-download.test.d.ts +1 -0
- package/dist/weixin-download.test.js +30 -0
- package/dist/weread-private-api-regression.test.d.ts +1 -0
- package/dist/weread-private-api-regression.test.js +122 -0
- package/dist/weread-search-regression.test.d.ts +1 -0
- package/dist/weread-search-regression.test.js +39 -0
- package/dist/yaml-schema.d.ts +3 -0
- package/dist/yaml-schema.js +18 -1
- package/docs/.vitepress/config.mts +17 -0
- package/docs/adapters/browser/36kr.md +47 -0
- package/docs/adapters/browser/douban.md +14 -0
- package/docs/adapters/browser/douyin.md +75 -0
- package/docs/adapters/browser/imdb.md +47 -0
- package/docs/adapters/browser/jd.md +2 -2
- package/docs/adapters/browser/linux-do.md +181 -20
- package/docs/adapters/browser/paperreview.md +43 -0
- package/docs/adapters/browser/producthunt.md +49 -0
- package/docs/adapters/browser/twitter.md +6 -0
- package/docs/adapters/desktop/chatgpt.md +5 -0
- package/docs/adapters/index.md +12 -3
- package/docs/advanced/download.md +4 -0
- package/docs/advanced/rate-limiter-plugin.md +99 -0
- package/docs/guide/electron-app-cli.md +200 -0
- package/docs/guide/getting-started.md +1 -0
- package/docs/guide/plugins.md +87 -0
- package/docs/zh/guide/electron-app-cli.md +188 -0
- package/docs/zh/guide/getting-started.md +1 -0
- package/docs/zh/guide/plugins.md +65 -0
- package/extension/dist/background.js +508 -518
- package/extension/manifest.json +6 -2
- package/extension/package.json +2 -1
- package/extension/popup.html +84 -0
- package/extension/popup.js +25 -0
- package/extension/scripts/package-release.mjs +179 -0
- package/extension/src/background.ts +22 -1
- package/package.json +4 -1
- package/scripts/postinstall.js +10 -0
- package/src/browser/cdp.ts +2 -1
- package/src/browser/discover.ts +8 -3
- package/src/browser/errors.ts +13 -14
- package/src/browser/mcp.ts +2 -1
- package/src/build-manifest.test.ts +23 -0
- package/src/build-manifest.ts +40 -15
- package/src/capabilityRouting.ts +2 -1
- package/src/cli.ts +35 -3
- package/src/clis/36kr/article.ts +69 -0
- package/src/clis/36kr/hot.test.ts +19 -0
- package/src/clis/36kr/hot.ts +100 -0
- package/src/clis/36kr/news.test.ts +90 -0
- package/src/clis/36kr/news.ts +54 -0
- package/src/clis/36kr/search.ts +78 -0
- package/src/clis/apple-podcasts/search.ts +2 -1
- package/src/clis/arxiv/search.ts +2 -2
- package/src/clis/bbc/news.ts +0 -1
- package/src/clis/bilibili/comments.test.ts +102 -0
- package/src/clis/bilibili/comments.ts +44 -0
- package/src/clis/chatgpt/ask.ts +28 -14
- package/src/clis/chatgpt/ax.ts +180 -1
- package/src/clis/chatgpt/model.ts +27 -0
- package/src/clis/chatgpt/send.ts +16 -6
- package/src/clis/ctrip/search.ts +0 -1
- package/src/clis/douban/download.test.ts +196 -0
- package/src/clis/douban/download.ts +78 -0
- package/src/clis/douban/photos.ts +36 -0
- package/src/clis/douban/utils.test.ts +97 -0
- package/src/clis/douban/utils.ts +232 -1
- package/src/clis/douyin/_shared/browser-fetch.test.ts +38 -0
- package/src/clis/douyin/_shared/browser-fetch.ts +45 -0
- package/src/clis/douyin/_shared/creation-id.test.ts +26 -0
- package/src/clis/douyin/_shared/creation-id.ts +8 -0
- package/src/clis/douyin/_shared/imagex-upload.test.ts +113 -0
- package/src/clis/douyin/_shared/imagex-upload.ts +76 -0
- package/src/clis/douyin/_shared/sts2.ts +20 -0
- package/src/clis/douyin/_shared/text-extra.test.ts +42 -0
- package/src/clis/douyin/_shared/text-extra.ts +33 -0
- package/src/clis/douyin/_shared/timing.test.ts +38 -0
- package/src/clis/douyin/_shared/timing.ts +22 -0
- package/src/clis/douyin/_shared/tos-upload-short-read.test.ts +102 -0
- package/src/clis/douyin/_shared/tos-upload.test.ts +281 -0
- package/src/clis/douyin/_shared/tos-upload.ts +444 -0
- package/src/clis/douyin/_shared/transcode.test.ts +117 -0
- package/src/clis/douyin/_shared/transcode.ts +78 -0
- package/src/clis/douyin/_shared/types.ts +29 -0
- package/src/clis/douyin/activities.test.ts +25 -0
- package/src/clis/douyin/activities.ts +23 -0
- package/src/clis/douyin/collections.test.ts +26 -0
- package/src/clis/douyin/collections.ts +25 -0
- package/src/clis/douyin/delete.test.ts +12 -0
- package/src/clis/douyin/delete.ts +20 -0
- package/src/clis/douyin/draft.test.ts +12 -0
- package/src/clis/douyin/draft.ts +282 -0
- package/src/clis/douyin/drafts.test.ts +12 -0
- package/src/clis/douyin/drafts.ts +27 -0
- package/src/clis/douyin/hashtag.test.ts +28 -0
- package/src/clis/douyin/hashtag.ts +56 -0
- package/src/clis/douyin/location.test.ts +26 -0
- package/src/clis/douyin/location.ts +27 -0
- package/src/clis/douyin/profile.test.ts +12 -0
- package/src/clis/douyin/profile.ts +37 -0
- package/src/clis/douyin/publish.test.ts +45 -0
- package/src/clis/douyin/publish.ts +340 -0
- package/src/clis/douyin/stats.test.ts +25 -0
- package/src/clis/douyin/stats.ts +30 -0
- package/src/clis/douyin/update.test.ts +12 -0
- package/src/clis/douyin/update.ts +43 -0
- package/src/clis/douyin/videos.test.ts +12 -0
- package/src/clis/douyin/videos.ts +49 -0
- package/src/clis/hackernews/search.yaml +1 -1
- package/src/clis/imdb/person.ts +232 -0
- package/src/clis/imdb/reviews.ts +111 -0
- package/src/clis/imdb/search.ts +179 -0
- package/src/clis/imdb/title.ts +121 -0
- package/src/clis/imdb/top.ts +67 -0
- package/src/clis/imdb/trending.ts +66 -0
- package/src/clis/imdb/utils.test.ts +117 -0
- package/src/clis/imdb/utils.ts +305 -0
- package/src/clis/instagram/search.yaml +2 -1
- package/src/clis/jd/item.test.ts +18 -1
- package/src/clis/jd/item.ts +18 -15
- package/src/clis/linux-do/categories.yaml +38 -9
- package/src/clis/linux-do/category.ts +37 -0
- package/src/clis/linux-do/feed.test.ts +132 -0
- package/src/clis/linux-do/feed.ts +501 -0
- package/src/clis/linux-do/hot.ts +26 -0
- package/src/clis/linux-do/latest.ts +19 -0
- package/src/clis/linux-do/search.yaml +3 -1
- package/src/clis/linux-do/tags.yaml +41 -0
- package/src/clis/linux-do/topic.yaml +41 -3
- package/src/clis/linux-do/user-posts.yaml +67 -0
- package/src/clis/linux-do/user-topics.yaml +54 -0
- package/src/clis/medium/search.ts +1 -1
- package/src/clis/paperreview/commands.test.ts +283 -0
- package/src/clis/paperreview/feedback.ts +64 -0
- package/src/clis/paperreview/review.ts +47 -0
- package/src/clis/paperreview/submit.ts +119 -0
- package/src/clis/paperreview/utils.test.ts +68 -0
- package/src/clis/paperreview/utils.ts +276 -0
- package/src/clis/producthunt/browse.ts +109 -0
- package/src/clis/producthunt/hot.ts +127 -0
- package/src/clis/producthunt/posts.ts +29 -0
- package/src/clis/producthunt/today.ts +37 -0
- package/src/clis/producthunt/utils.test.ts +72 -0
- package/src/clis/producthunt/utils.ts +122 -0
- package/src/clis/reuters/search.ts +0 -1
- package/src/clis/twitter/article.ts +5 -28
- package/src/clis/twitter/likes.test.ts +91 -0
- package/src/clis/twitter/likes.ts +256 -0
- package/src/clis/twitter/profile.ts +5 -28
- package/src/clis/twitter/search.test.ts +71 -2
- package/src/clis/twitter/search.ts +8 -4
- package/src/clis/twitter/shared.ts +45 -0
- package/src/clis/twitter/timeline.ts +2 -13
- package/src/clis/weibo/comments.ts +54 -0
- package/src/clis/weibo/feed.ts +57 -0
- package/src/clis/weibo/hot.ts +0 -1
- package/src/clis/weibo/me.ts +77 -0
- package/src/clis/weibo/post.ts +77 -0
- package/src/clis/weibo/user.ts +64 -0
- package/src/clis/weibo/utils.ts +32 -0
- package/src/clis/weixin/download.ts +114 -20
- package/src/clis/weread/book.ts +2 -2
- package/src/clis/weread/commands.test.ts +57 -0
- package/src/clis/weread/highlights.ts +2 -2
- package/src/clis/weread/notebooks.ts +2 -2
- package/src/clis/weread/notes.ts +3 -3
- package/src/clis/weread/search.ts +3 -2
- package/src/clis/weread/shelf.ts +2 -2
- package/src/clis/weread/utils.test.ts +1 -32
- package/src/clis/weread/utils.ts +41 -16
- package/src/clis/xiaohongshu/comments.test.ts +96 -0
- package/src/clis/xiaohongshu/comments.ts +81 -0
- package/src/clis/xiaohongshu/publish.test.ts +137 -0
- package/src/clis/xiaohongshu/publish.ts +129 -18
- package/src/clis/xueqiu/search.yaml +2 -1
- package/src/clis/yahoo-finance/quote.ts +0 -1
- package/src/clis/youtube/channel.ts +155 -0
- package/src/clis/youtube/comments.ts +97 -0
- package/src/clis/youtube/search.ts +0 -1
- package/src/clis/zhihu/search.yaml +2 -1
- package/src/commanderAdapter.test.ts +78 -0
- package/src/commanderAdapter.ts +188 -24
- package/src/daemon.ts +19 -1
- package/src/discovery.ts +8 -15
- package/src/doctor.ts +13 -2
- package/src/download/index.test.ts +14 -4
- package/src/download/index.ts +67 -55
- package/src/errors.ts +25 -66
- package/src/execution.ts +28 -3
- package/src/external-clis.yaml +0 -17
- package/src/hooks.ts +1 -0
- package/src/main.ts +6 -0
- package/src/output.ts +3 -1
- package/src/pipeline/executor.ts +4 -6
- package/src/plugin-manifest.test.ts +223 -0
- package/src/plugin-manifest.ts +206 -0
- package/src/plugin.test.ts +246 -2
- package/src/plugin.ts +338 -36
- package/src/registry.ts +6 -1
- package/src/runtime-detect.test.ts +30 -0
- package/src/runtime-detect.ts +36 -0
- package/src/runtime.ts +1 -1
- package/src/serialization.ts +4 -0
- package/src/types.ts +1 -0
- package/src/update-check.ts +114 -0
- package/src/weixin-download.test.ts +64 -0
- package/src/weread-private-api-regression.test.ts +150 -0
- package/src/weread-search-regression.test.ts +44 -0
- package/src/yaml-schema.ts +20 -0
- package/tests/e2e/browser-auth.test.ts +13 -9
- package/tests/e2e/browser-public-extended.test.ts +162 -0
- package/tests/e2e/browser-public.test.ts +55 -136
- package/tests/e2e/helpers.ts +2 -1
- package/tests/e2e/public-commands.test.ts +37 -3
- package/tests/smoke/api-health.test.ts +1 -1
- package/vitest.config.ts +34 -17
- package/dist/clis/linux-do/category.yaml +0 -51
- package/dist/clis/linux-do/hot.yaml +0 -50
- package/dist/clis/linux-do/latest.yaml +0 -40
- package/src/clis/linux-do/category.yaml +0 -51
- package/src/clis/linux-do/hot.yaml +0 -50
- package/src/clis/linux-do/latest.yaml +0 -40
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Douyin (抖音创作者中心)
|
|
2
|
+
|
|
3
|
+
**Mode**: 🔐 Browser · **Domain**: `creator.douyin.com`
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `opencli douyin profile` | 获取账号信息 |
|
|
10
|
+
| `opencli douyin videos` | 获取作品列表 |
|
|
11
|
+
| `opencli douyin drafts` | 获取草稿列表 |
|
|
12
|
+
| `opencli douyin draft` | 上传视频并保存为草稿 |
|
|
13
|
+
| `opencli douyin publish` | 定时发布视频到抖音 |
|
|
14
|
+
| `opencli douyin update` | 更新视频信息 |
|
|
15
|
+
| `opencli douyin delete` | 删除作品 |
|
|
16
|
+
| `opencli douyin stats` | 查询作品数据分析 |
|
|
17
|
+
| `opencli douyin collections` | 获取合集列表 |
|
|
18
|
+
| `opencli douyin activities` | 获取官方活动列表 |
|
|
19
|
+
| `opencli douyin location` | 搜索发布可用的地理位置 |
|
|
20
|
+
| `opencli douyin hashtag search` | 按关键词搜索话题 |
|
|
21
|
+
| `opencli douyin hashtag suggest` | 基于封面 URI 推荐话题 |
|
|
22
|
+
| `opencli douyin hashtag hot` | 获取热点词 |
|
|
23
|
+
|
|
24
|
+
## Usage Examples
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 账号与作品
|
|
28
|
+
opencli douyin profile
|
|
29
|
+
opencli douyin videos --limit 10
|
|
30
|
+
opencli douyin videos --status scheduled
|
|
31
|
+
opencli douyin drafts
|
|
32
|
+
|
|
33
|
+
# 发布前辅助信息
|
|
34
|
+
opencli douyin collections
|
|
35
|
+
opencli douyin activities
|
|
36
|
+
opencli douyin location "东京塔"
|
|
37
|
+
opencli douyin hashtag search "春游"
|
|
38
|
+
opencli douyin hashtag hot --limit 10
|
|
39
|
+
|
|
40
|
+
# 保存草稿
|
|
41
|
+
opencli douyin draft ./video.mp4 \
|
|
42
|
+
--title "春游 vlog" \
|
|
43
|
+
--caption "#春游 先存草稿"
|
|
44
|
+
|
|
45
|
+
# 定时发布
|
|
46
|
+
opencli douyin publish ./video.mp4 \
|
|
47
|
+
--title "春游 vlog" \
|
|
48
|
+
--caption "#春游 今天去看樱花" \
|
|
49
|
+
--schedule "2026-04-08T12:00:00+09:00"
|
|
50
|
+
|
|
51
|
+
# 也支持 Unix 秒字符串
|
|
52
|
+
opencli douyin publish ./video.mp4 \
|
|
53
|
+
--title "春游 vlog" \
|
|
54
|
+
--schedule 1775617200
|
|
55
|
+
|
|
56
|
+
# 更新与删除
|
|
57
|
+
opencli douyin update 1234567890 --caption "更新后的文案"
|
|
58
|
+
opencli douyin update 1234567890 --reschedule "2026-04-09T20:00:00+09:00"
|
|
59
|
+
opencli douyin delete 1234567890
|
|
60
|
+
|
|
61
|
+
# JSON 输出
|
|
62
|
+
opencli douyin profile -f json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Prerequisites
|
|
66
|
+
|
|
67
|
+
- Chrome running and **logged into** `creator.douyin.com`
|
|
68
|
+
- The logged-in account must have access to Douyin Creator Center publishing features
|
|
69
|
+
- [Browser Bridge extension](/guide/browser-bridge) installed
|
|
70
|
+
|
|
71
|
+
## Notes
|
|
72
|
+
|
|
73
|
+
- `publish` requires `--schedule` to be at least 2 hours later and no more than 14 days later
|
|
74
|
+
- `draft` and `publish` upload the video through Douyin/ByteDance browser-authenticated APIs, so cookies in the active browser session must be valid
|
|
75
|
+
- `hashtag suggest` expects a valid `cover`/`cover_uri` value produced during the publish pipeline; for normal manual use, `hashtag search` and `hashtag hot` are usually more convenient
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# IMDb
|
|
2
|
+
|
|
3
|
+
**Mode**: 🌐 Public (Browser) · **Domain**: `www.imdb.com`
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `opencli imdb search` | Search movies, TV shows, and people |
|
|
10
|
+
| `opencli imdb title` | Get movie or TV show details |
|
|
11
|
+
| `opencli imdb top` | IMDb Top 250 Movies |
|
|
12
|
+
| `opencli imdb trending` | IMDb Most Popular Movies |
|
|
13
|
+
| `opencli imdb person` | Get actor or director info |
|
|
14
|
+
| `opencli imdb reviews` | Get user reviews for a title |
|
|
15
|
+
|
|
16
|
+
## Usage Examples
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Search for a movie
|
|
20
|
+
opencli imdb search "inception" --limit 10
|
|
21
|
+
|
|
22
|
+
# Get movie details
|
|
23
|
+
opencli imdb title tt1375666
|
|
24
|
+
|
|
25
|
+
# Get TV series details (also accepts full URL)
|
|
26
|
+
opencli imdb title "https://www.imdb.com/title/tt0903747/"
|
|
27
|
+
|
|
28
|
+
# Top 250 movies
|
|
29
|
+
opencli imdb top --limit 20
|
|
30
|
+
|
|
31
|
+
# Currently trending movies
|
|
32
|
+
opencli imdb trending --limit 10
|
|
33
|
+
|
|
34
|
+
# Actor/director info with filmography
|
|
35
|
+
opencli imdb person nm0634240 --limit 5
|
|
36
|
+
|
|
37
|
+
# User reviews
|
|
38
|
+
opencli imdb reviews tt1375666 --limit 5
|
|
39
|
+
|
|
40
|
+
# JSON output
|
|
41
|
+
opencli imdb top --limit 5 -f json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Prerequisites
|
|
45
|
+
|
|
46
|
+
- Chrome with Browser Bridge extension installed
|
|
47
|
+
- No login required (all data is public)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
| Command | Description |
|
|
8
8
|
|---------|-------------|
|
|
9
|
-
| `opencli jd item <sku>` | Fetch product details (price,
|
|
9
|
+
| `opencli jd item <sku>` | Fetch product details (price, shop, specs, AVIF images) |
|
|
10
10
|
|
|
11
11
|
## Usage Examples
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# Get product details by SKU
|
|
15
15
|
opencli jd item 100291143898
|
|
16
16
|
|
|
17
|
-
# Limit
|
|
17
|
+
# Limit returned AVIF images
|
|
18
18
|
opencli jd item 100291143898 --images 5
|
|
19
19
|
|
|
20
20
|
# JSON output
|
|
@@ -6,37 +6,198 @@
|
|
|
6
6
|
|
|
7
7
|
| Command | Description |
|
|
8
8
|
|---------|-------------|
|
|
9
|
-
| `opencli linux-do
|
|
10
|
-
| `opencli linux-do
|
|
11
|
-
| `opencli linux-do
|
|
12
|
-
| `opencli linux-do
|
|
13
|
-
| `opencli linux-do
|
|
14
|
-
| `opencli linux-do
|
|
9
|
+
| `opencli linux-do feed` | Browse topics (site-wide, by tag, or by category) |
|
|
10
|
+
| `opencli linux-do categories` | List all categories |
|
|
11
|
+
| `opencli linux-do tags` | List popular tags |
|
|
12
|
+
| `opencli linux-do search <query>` | Search topics |
|
|
13
|
+
| `opencli linux-do topic <id>` | View topic posts |
|
|
14
|
+
| `opencli linux-do user-topics <username>` | Topics created by a user |
|
|
15
|
+
| `opencli linux-do user-posts <username>` | Replies posted by a user |
|
|
15
16
|
|
|
16
|
-
##
|
|
17
|
+
## feed
|
|
18
|
+
|
|
19
|
+
Browse topic listings. Defaults to latest topics when called with no arguments.
|
|
20
|
+
|
|
21
|
+
- Supports filtering by `--tag`, `--category`, or both
|
|
22
|
+
- `--tag` accepts tag name, slug, or ID
|
|
23
|
+
- `--category` accepts category name, slug, ID, or `Parent / Child` path for sub-categories
|
|
24
|
+
- Use `--view` to switch between latest / hot / top
|
|
25
|
+
|
|
26
|
+
### Basic
|
|
17
27
|
|
|
18
28
|
```bash
|
|
19
|
-
#
|
|
20
|
-
opencli linux-do
|
|
29
|
+
# Latest topics (default)
|
|
30
|
+
opencli linux-do feed
|
|
31
|
+
|
|
32
|
+
# Hot topics
|
|
33
|
+
opencli linux-do feed --view hot
|
|
34
|
+
|
|
35
|
+
# Top topics — default period is weekly
|
|
36
|
+
opencli linux-do feed --view top
|
|
37
|
+
opencli linux-do feed --view top --period daily
|
|
38
|
+
opencli linux-do feed --view top --period monthly
|
|
21
39
|
|
|
22
|
-
#
|
|
23
|
-
opencli linux-do
|
|
24
|
-
|
|
40
|
+
# Sort by views descending
|
|
41
|
+
opencli linux-do feed --order views
|
|
42
|
+
|
|
43
|
+
# Sort by created time ascending
|
|
44
|
+
opencli linux-do feed --order created --ascending
|
|
45
|
+
|
|
46
|
+
# Limit results
|
|
47
|
+
opencli linux-do feed --limit 10
|
|
48
|
+
|
|
49
|
+
# JSON output
|
|
50
|
+
opencli linux-do feed -f json
|
|
51
|
+
```
|
|
25
52
|
|
|
26
|
-
|
|
27
|
-
|
|
53
|
+
### Filter by tag
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# By tag name, slug, or ID — all equivalent
|
|
57
|
+
opencli linux-do feed --tag "ChatGPT"
|
|
58
|
+
opencli linux-do feed --tag chatgpt
|
|
59
|
+
opencli linux-do feed --tag 3
|
|
60
|
+
|
|
61
|
+
# Tag + hot view
|
|
62
|
+
opencli linux-do feed --tag "ChatGPT" --view hot
|
|
63
|
+
|
|
64
|
+
# Tag + top view with period
|
|
65
|
+
opencli linux-do feed --tag "OpenAI" --view top --period monthly
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Filter by category
|
|
69
|
+
|
|
70
|
+
Supports both top-level and sub-categories. Sub-categories auto-resolve their parent path.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Top-level category — name, slug, or ID
|
|
74
|
+
opencli linux-do feed --category "开发调优"
|
|
75
|
+
opencli linux-do feed --category develop
|
|
76
|
+
opencli linux-do feed --category 4
|
|
28
77
|
|
|
29
|
-
#
|
|
78
|
+
# Sub-category
|
|
79
|
+
opencli linux-do feed --category "开发调优 / Lv1"
|
|
80
|
+
opencli linux-do feed --category "网盘资源"
|
|
81
|
+
|
|
82
|
+
# Category + hot / top view
|
|
83
|
+
opencli linux-do feed --category "开发调优" --view hot
|
|
84
|
+
opencli linux-do feed --category "开发调优" --view top --period weekly
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Category + tag
|
|
88
|
+
|
|
89
|
+
Combine `--category` and `--tag` to narrow results within a category.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
opencli linux-do feed --category "开发调优" --tag "ChatGPT"
|
|
93
|
+
opencli linux-do feed --category "网盘资源" --tag "OpenAI"
|
|
94
|
+
opencli linux-do feed --category 94 --tag 4 --view top --period monthly
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Parameters
|
|
98
|
+
|
|
99
|
+
| Parameter | Description | Default |
|
|
100
|
+
|-----------|-------------|---------|
|
|
101
|
+
| `--view V` | `latest`, `hot`, `top` | `latest` |
|
|
102
|
+
| `--tag VALUE` | Tag name, slug, or ID | — |
|
|
103
|
+
| `--category VALUE` | Category name, slug, or ID | — |
|
|
104
|
+
| `--limit N` | Number of results | `20` |
|
|
105
|
+
| `--order O` | `default`, `created`, `activity`, `views`, `posts`, `category`, `likes`, `op_likes`, `posters` | `default` |
|
|
106
|
+
| `--ascending` | Sort ascending instead of descending | off |
|
|
107
|
+
| `--period P` | `all`, `daily`, `weekly`, `monthly`, `quarterly`, `yearly` (only with `--view top`) | `weekly` |
|
|
108
|
+
|
|
109
|
+
Output columns: `title`, `replies`, `created`, `likes`, `views`, `url`
|
|
110
|
+
|
|
111
|
+
## categories
|
|
112
|
+
|
|
113
|
+
List forum categories with optional sub-category expansion.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
30
116
|
opencli linux-do categories
|
|
117
|
+
opencli linux-do categories --subcategories
|
|
118
|
+
opencli linux-do categories --limit 50
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
When `--subcategories` is enabled, sub-categories are rendered as `Parent / Child` so the `name` value can be copied directly into `opencli linux-do feed --category ...`.
|
|
122
|
+
|
|
123
|
+
Output columns: `name`, `slug`, `id`, `topics`, `description`
|
|
124
|
+
|
|
125
|
+
## tags
|
|
31
126
|
|
|
32
|
-
|
|
127
|
+
List tags sorted by usage count.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
opencli linux-do tags
|
|
131
|
+
opencli linux-do tags --limit 50
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Output columns: `rank`, `name`, `count`, `url`
|
|
135
|
+
|
|
136
|
+
## search
|
|
137
|
+
|
|
138
|
+
Search topics by keyword.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
33
141
|
opencli linux-do search "NixOS"
|
|
142
|
+
opencli linux-do search "Docker" --limit 10
|
|
143
|
+
opencli linux-do search "Claude" -f json
|
|
144
|
+
```
|
|
34
145
|
|
|
35
|
-
|
|
36
|
-
opencli linux-do topic 12345
|
|
146
|
+
Output columns: `rank`, `title`, `views`, `likes`, `replies`, `url`
|
|
37
147
|
|
|
38
|
-
|
|
39
|
-
|
|
148
|
+
## topic
|
|
149
|
+
|
|
150
|
+
View posts within a topic (first page).
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
opencli linux-do topic 1234
|
|
154
|
+
opencli linux-do topic 1234 --limit 50
|
|
155
|
+
opencli linux-do topic 1234 --main_only -f json | jq -r '.[0].content'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Notes:
|
|
159
|
+
- `--main_only` returns only the main post row and keeps the body untruncated
|
|
160
|
+
|
|
161
|
+
Output columns: `author`, `content`, `likes`, `created_at`
|
|
162
|
+
|
|
163
|
+
## user-topics
|
|
164
|
+
|
|
165
|
+
List topics created by a user.
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
opencli linux-do user-topics neo
|
|
169
|
+
opencli linux-do user-topics neo --limit 10
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Output columns: `rank`, `title`, `replies`, `created_at`, `likes`, `views`, `url`
|
|
173
|
+
|
|
174
|
+
## user-posts
|
|
175
|
+
|
|
176
|
+
List replies posted by a user.
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
opencli linux-do user-posts neo
|
|
180
|
+
opencli linux-do user-posts neo --limit 10
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Output columns: `index`, `topic_user`, `topic`, `reply`, `time`, `url`
|
|
184
|
+
|
|
185
|
+
## Compatibility
|
|
186
|
+
|
|
187
|
+
The legacy commands below are still available as compatibility wrappers while `feed` becomes the canonical entrypoint:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
opencli linux-do latest
|
|
191
|
+
opencli linux-do hot --period weekly
|
|
192
|
+
opencli linux-do category develop 4
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Preferred modern forms:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
opencli linux-do feed --view latest
|
|
199
|
+
opencli linux-do feed --view top --period weekly
|
|
200
|
+
opencli linux-do feed --category 4
|
|
40
201
|
```
|
|
41
202
|
|
|
42
203
|
## Prerequisites
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# paperreview.ai
|
|
2
|
+
|
|
3
|
+
**Mode**: 🌐 Public · **Domain**: `paperreview.ai`
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `opencli paperreview submit` | Submit a PDF to paperreview.ai for review |
|
|
10
|
+
| `opencli paperreview review` | Fetch a review by token |
|
|
11
|
+
| `opencli paperreview feedback` | Send feedback on a completed review |
|
|
12
|
+
|
|
13
|
+
## Usage Examples
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Validate a local PDF without uploading it
|
|
17
|
+
opencli paperreview submit ./paper.pdf --email you@example.com --venue RAL --dry-run true
|
|
18
|
+
|
|
19
|
+
# Request an upload slot but stop before the actual upload
|
|
20
|
+
opencli paperreview submit ./paper.pdf --email you@example.com --venue RAL --prepare-only true
|
|
21
|
+
|
|
22
|
+
# Submit a paper for review
|
|
23
|
+
opencli paperreview submit ./paper.pdf --email you@example.com --venue RAL -f json
|
|
24
|
+
|
|
25
|
+
# Check the review status or fetch the final review
|
|
26
|
+
opencli paperreview review tok_123 -f json
|
|
27
|
+
|
|
28
|
+
# Submit feedback on the review quality
|
|
29
|
+
opencli paperreview feedback tok_123 --helpfulness 4 --critical-error no --actionable-suggestions yes
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Prerequisites
|
|
33
|
+
|
|
34
|
+
- No browser required — uses public paperreview.ai endpoints
|
|
35
|
+
- The input file must be a local `.pdf`
|
|
36
|
+
- paperreview.ai currently rejects files larger than `10MB`
|
|
37
|
+
- `submit` requires `--email`; `--venue` is optional
|
|
38
|
+
|
|
39
|
+
## Notes
|
|
40
|
+
|
|
41
|
+
- `submit` returns both the review token and the review URL when submission succeeds
|
|
42
|
+
- `review` returns `processing` until the paperreview.ai result is ready
|
|
43
|
+
- `feedback` expects `yes` / `no` values for `--critical-error` and `--actionable-suggestions`
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Product Hunt
|
|
2
|
+
|
|
3
|
+
**Mode**: 🌐 Public / 🔐 Browser · **Domain**: `www.producthunt.com`
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `opencli producthunt posts` | Latest Product Hunt launches (optional category filter) |
|
|
10
|
+
| `opencli producthunt today` | Today's Product Hunt launches (most recent day in feed) |
|
|
11
|
+
| `opencli producthunt hot` | Today's top Product Hunt launches with vote counts |
|
|
12
|
+
| `opencli producthunt browse <category>` | Best products in a Product Hunt category |
|
|
13
|
+
|
|
14
|
+
## Usage Examples
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Today's top launches with vote counts
|
|
18
|
+
opencli producthunt hot --limit 10
|
|
19
|
+
|
|
20
|
+
# Latest posts (RSS feed)
|
|
21
|
+
opencli producthunt posts --limit 20
|
|
22
|
+
|
|
23
|
+
# Filter by category
|
|
24
|
+
opencli producthunt posts --category developer-tools --limit 10
|
|
25
|
+
|
|
26
|
+
# Today's launches only
|
|
27
|
+
opencli producthunt today --limit 10
|
|
28
|
+
|
|
29
|
+
# Browse best products in a category
|
|
30
|
+
opencli producthunt browse vibe-coding --limit 10
|
|
31
|
+
opencli producthunt browse ai-agents --limit 10
|
|
32
|
+
opencli producthunt browse developer-tools --limit 10
|
|
33
|
+
|
|
34
|
+
# JSON output
|
|
35
|
+
opencli producthunt hot -f json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Category Slugs
|
|
39
|
+
|
|
40
|
+
Common categories for `browse` and `posts --category`:
|
|
41
|
+
|
|
42
|
+
`ai-agents`, `ai-coding-agents`, `ai-code-editors`, `ai-chatbots`, `ai-workflow-automation`,
|
|
43
|
+
`vibe-coding`, `developer-tools`, `productivity`, `design-creative`, `marketing-sales`,
|
|
44
|
+
`no-code-platforms`, `llms`, `finance`, `social-community`, `engineering-development`
|
|
45
|
+
|
|
46
|
+
## Prerequisites
|
|
47
|
+
|
|
48
|
+
- `posts` and `today` — no browser required (public RSS feed)
|
|
49
|
+
- `hot` and `browse` — Chrome running with [Browser Bridge extension](/guide/browser-bridge) installed
|
|
@@ -37,6 +37,12 @@
|
|
|
37
37
|
# Quick start
|
|
38
38
|
opencli twitter trending --limit 5
|
|
39
39
|
|
|
40
|
+
# Search top tweets (default)
|
|
41
|
+
opencli twitter search "react 19"
|
|
42
|
+
|
|
43
|
+
# Search latest/live tweets
|
|
44
|
+
opencli twitter search "react 19" --filter live
|
|
45
|
+
|
|
40
46
|
# JSON output
|
|
41
47
|
opencli twitter trending -f json
|
|
42
48
|
|
|
@@ -14,8 +14,13 @@ The current built-in commands use native AppleScript automation — no extra lau
|
|
|
14
14
|
- `opencli chatgpt status`: Check if the ChatGPT app is currently running.
|
|
15
15
|
- `opencli chatgpt new`: Activate ChatGPT and press `Cmd+N` to start a new conversation.
|
|
16
16
|
- `opencli chatgpt send "message"`: Copy your message to clipboard, activate ChatGPT, paste, and submit.
|
|
17
|
+
- `opencli chatgpt send "message" --model thinking`: Switch model/mode first, then send the message.
|
|
17
18
|
- `opencli chatgpt read`: Read the last visible message from the focused ChatGPT window via the Accessibility tree.
|
|
18
19
|
- `opencli chatgpt ask "message"`: Send a prompt and wait for the visible reply in one shot.
|
|
20
|
+
- `opencli chatgpt ask "message" --model instant`: Run a one-shot prompt using a specific model/mode.
|
|
21
|
+
- `opencli chatgpt model thinking`: Switch the active ChatGPT model/mode without sending a message.
|
|
22
|
+
|
|
23
|
+
Supported model choices: `auto`, `instant`, `thinking`, `5.2-instant`, `5.2-thinking`.
|
|
19
24
|
|
|
20
25
|
## Approach 2: CDP (Advanced, Electron Debug Mode)
|
|
21
26
|
|
package/docs/adapters/index.md
CHANGED
|
@@ -11,7 +11,7 @@ Run `opencli list` for the live registry.
|
|
|
11
11
|
| **[bilibili](/adapters/browser/bilibili)** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 🔐 Browser |
|
|
12
12
|
| **[zhihu](/adapters/browser/zhihu)** | `hot` `search` `question` `download` | 🔐 Browser |
|
|
13
13
|
| **[xiaohongshu](/adapters/browser/xiaohongshu)** | `search` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 🔐 Browser |
|
|
14
|
-
| **[xueqiu](/adapters/browser/xueqiu)** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` `earnings-date` | 🔐 Browser |
|
|
14
|
+
| **[xueqiu](/adapters/browser/xueqiu)** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` `earnings-date` `fund-holdings` `fund-snapshot` | 🔐 Browser |
|
|
15
15
|
| **[youtube](/adapters/browser/youtube)** | `search` `video` `transcript` | 🔐 Browser |
|
|
16
16
|
| **[v2ex](/adapters/browser/v2ex)** | `hot` `latest` `topic` `node` `user` `member` `replies` `nodes` `daily` `me` `notifications` | 🌐 / 🔐 |
|
|
17
17
|
| **[bloomberg](/adapters/browser/bloomberg)** | `main` `markets` `economics` `industries` `tech` `politics` `businessweek` `opinions` `feeds` `news` | 🌐 / 🔐 |
|
|
@@ -25,19 +25,26 @@ Run `opencli list` for the live registry.
|
|
|
25
25
|
| **[jike](/adapters/browser/jike)** | `feed` `search` `post` `topic` `user` `create` `comment` `like` `repost` `notifications` | 🔐 Browser |
|
|
26
26
|
| **[jimeng](/adapters/browser/jimeng)** | `generate` `history` | 🔐 Browser |
|
|
27
27
|
| **[yollomi](/adapters/browser/yollomi)** | `generate` `video` `edit` `upload` `models` `remove-bg` `upscale` `face-swap` `restore` `try-on` `background` `object-remover` | 🔐 Browser |
|
|
28
|
-
| **[linux-do](/adapters/browser/linux-do)** | `
|
|
28
|
+
| **[linux-do](/adapters/browser/linux-do)** | `feed` `categories` `tags` `search` `topic` `user-topics` `user-posts` | 🔐 Browser |
|
|
29
29
|
| **[chaoxing](/adapters/browser/chaoxing)** | `assignments` `exams` | 🔐 Browser |
|
|
30
30
|
| **[grok](/adapters/browser/grok)** | `ask` | 🔐 Browser |
|
|
31
31
|
| **[doubao](/adapters/browser/doubao)** | `status` `new` `send` `read` `ask` | 🔐 Browser |
|
|
32
32
|
| **[weread](/adapters/browser/weread)** | `shelf` `search` `book` `ranking` `notebooks` `highlights` `notes` | 🔐 Browser |
|
|
33
|
-
| **[douban](/adapters/browser/douban)** | `search` `top250` `subject` `marks` `reviews` `movie-hot` `book-hot` | 🔐 Browser |
|
|
33
|
+
| **[douban](/adapters/browser/douban)** | `search` `top250` `subject` `photos` `download` `marks` `reviews` `movie-hot` `book-hot` | 🔐 Browser |
|
|
34
34
|
| **[facebook](/adapters/browser/facebook)** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | 🔐 Browser |
|
|
35
|
+
| **[imdb](/adapters/browser/imdb)** | `search` `title` `top` `trending` `person` `reviews` | 🌐 / 🔐 |
|
|
35
36
|
| **[instagram](/adapters/browser/instagram)** | `explore` `profile` `search` `user` `followers` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `saved` | 🔐 Browser |
|
|
36
37
|
| **[medium](/adapters/browser/medium)** | `feed` `search` `user` | 🔐 Browser |
|
|
37
38
|
| **[sinablog](/adapters/browser/sinablog)** | `hot` `search` `article` `user` | 🔐 Browser |
|
|
38
39
|
| **[substack](/adapters/browser/substack)** | `feed` `search` `publication` | 🔐 Browser |
|
|
39
40
|
| **[pixiv](/adapters/browser/pixiv)** | `ranking` `search` `user` `illusts` `detail` `download` | 🔐 Browser |
|
|
40
41
|
| **[tiktok](/adapters/browser/tiktok)** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | 🔐 Browser |
|
|
42
|
+
| **[google](/adapters/browser/google)** | `news` `search` `suggest` `trends` | 🌐 / 🔐 |
|
|
43
|
+
| **[jd](/adapters/browser/jd)** | `item` | 🔐 Browser |
|
|
44
|
+
| **[web](/adapters/browser/web)** | `read` | 🔐 Browser |
|
|
45
|
+
| **[weixin](/adapters/browser/weixin)** | `download` | 🔐 Browser |
|
|
46
|
+
| **[36kr](/adapters/browser/36kr)** | `news` `hot` `search` `article` | 🌐 / 🔐 |
|
|
47
|
+
| **[producthunt](/adapters/browser/producthunt)** | `posts` `today` `hot` `browse` | 🌐 / 🔐 |
|
|
41
48
|
|
|
42
49
|
## Public API Adapters
|
|
43
50
|
|
|
@@ -51,12 +58,14 @@ Run `opencli list` for the live registry.
|
|
|
51
58
|
| **[xiaoyuzhou](/adapters/browser/xiaoyuzhou)** | `podcast` `podcast-episodes` `episode` | 🌐 Public |
|
|
52
59
|
| **[yahoo-finance](/adapters/browser/yahoo-finance)** | `quote` | 🌐 Public |
|
|
53
60
|
| **[arxiv](/adapters/browser/arxiv)** | `search` `paper` | 🌐 Public |
|
|
61
|
+
| **[paperreview](/adapters/browser/paperreview)** | `submit` `review` `feedback` | 🌐 Public |
|
|
54
62
|
| **[barchart](/adapters/browser/barchart)** | `quote` `options` `greeks` `flow` | 🌐 Public |
|
|
55
63
|
| **[hf](/adapters/browser/hf)** | `top` | 🌐 Public |
|
|
56
64
|
| **[sinafinance](/adapters/browser/sinafinance)** | `news` | 🌐 Public |
|
|
57
65
|
| **[stackoverflow](/adapters/browser/stackoverflow)** | `hot` `search` `bounties` `unanswered` | 🌐 Public |
|
|
58
66
|
| **[wikipedia](/adapters/browser/wikipedia)** | `search` `summary` `random` `trending` | 🌐 Public |
|
|
59
67
|
| **[lobsters](/adapters/browser/lobsters)** | `hot` `newest` `active` `tag` | 🌐 Public |
|
|
68
|
+
| **[steam](/adapters/browser/steam)** | `top-sellers` | 🌐 Public |
|
|
60
69
|
|
|
61
70
|
## Desktop Adapters
|
|
62
71
|
|
|
@@ -9,6 +9,7 @@ OpenCLI supports downloading images, videos, and articles from supported platfor
|
|
|
9
9
|
| **xiaohongshu** | Images, Videos | Downloads all media from a note |
|
|
10
10
|
| **bilibili** | Videos | Requires `yt-dlp` installed |
|
|
11
11
|
| **twitter** | Images, Videos | Downloads from user media tab or single tweet |
|
|
12
|
+
| **douban** | Images | Downloads poster / still image lists from movie subjects |
|
|
12
13
|
| **zhihu** | Articles (Markdown) | Exports articles with optional image download |
|
|
13
14
|
| **weixin** | Articles (Markdown) | Exports WeChat Official Account articles |
|
|
14
15
|
|
|
@@ -39,6 +40,9 @@ opencli twitter download elonmusk --limit 20 --output ./twitter
|
|
|
39
40
|
# Download single tweet media
|
|
40
41
|
opencli twitter download --tweet-url "https://x.com/user/status/123" --output ./twitter
|
|
41
42
|
|
|
43
|
+
# Download Douban posters / stills
|
|
44
|
+
opencli douban download 30382501 --output ./douban
|
|
45
|
+
|
|
42
46
|
# Export Zhihu article to Markdown
|
|
43
47
|
opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --output ./zhihu
|
|
44
48
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Rate Limiter Plugin
|
|
2
|
+
|
|
3
|
+
An optional plugin that adds a random sleep between browser-based commands to reduce the risk of platform rate-limiting or bot detection.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
opencli plugin install github:jackwener/opencli-plugin-rate-limiter
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or copy the example below into `~/.opencli/plugins/rate-limiter/` to use it locally without installing from GitHub.
|
|
12
|
+
|
|
13
|
+
## What it does
|
|
14
|
+
|
|
15
|
+
After every command targeting a browser platform (xiaohongshu, weibo, bilibili, douyin, tiktok, …), the plugin sleeps for a random duration — 5–30 seconds by default — before returning control to the caller.
|
|
16
|
+
|
|
17
|
+
## Configuration
|
|
18
|
+
|
|
19
|
+
| Variable | Default | Description |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| `OPENCLI_RATE_MIN` | `5` | Minimum sleep in seconds |
|
|
22
|
+
| `OPENCLI_RATE_MAX` | `30` | Maximum sleep in seconds |
|
|
23
|
+
| `OPENCLI_NO_RATE` | — | Set to `1` to disable entirely (local dev) |
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Shorter delays for light scraping
|
|
27
|
+
OPENCLI_RATE_MIN=3 OPENCLI_RATE_MAX=10 opencli xiaohongshu search "AI眼镜"
|
|
28
|
+
|
|
29
|
+
# Skip delays when iterating locally
|
|
30
|
+
OPENCLI_NO_RATE=1 opencli bilibili comments BV1WtAGzYEBm
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Local installation (without GitHub)
|
|
34
|
+
|
|
35
|
+
1. Create the plugin directory:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
mkdir -p ~/.opencli/plugins/rate-limiter
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
2. Create `~/.opencli/plugins/rate-limiter/package.json`:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{ "type": "module" }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
3. Create `~/.opencli/plugins/rate-limiter/index.js`:
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
import { onAfterExecute } from '@jackwener/opencli/hooks'
|
|
51
|
+
|
|
52
|
+
const BROWSER_DOMAINS = [
|
|
53
|
+
'xiaohongshu', 'weibo', 'bilibili', 'douyin', 'tiktok',
|
|
54
|
+
'instagram', 'twitter', 'youtube', 'zhihu', 'douban',
|
|
55
|
+
'jike', 'weixin', 'xiaoyuzhou',
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
onAfterExecute(async (ctx) => {
|
|
59
|
+
if (process.env.OPENCLI_NO_RATE === '1') return
|
|
60
|
+
|
|
61
|
+
const site = ctx.command?.split('/')?.[0] ?? ''
|
|
62
|
+
if (!BROWSER_DOMAINS.includes(site)) return
|
|
63
|
+
|
|
64
|
+
const min = Number(process.env.OPENCLI_RATE_MIN ?? 5)
|
|
65
|
+
const max = Number(process.env.OPENCLI_RATE_MAX ?? 30)
|
|
66
|
+
const ms = Math.floor(Math.random() * (max - min + 1) + min) * 1000
|
|
67
|
+
|
|
68
|
+
process.stderr.write(`[rate-limiter] ${site}: sleeping ${(ms / 1000).toFixed(0)}s\n`)
|
|
69
|
+
await new Promise(r => setTimeout(r, ms))
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
4. Verify it loaded:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
OPENCLI_NO_RATE=1 opencli xiaohongshu search "test" 2>&1 | grep rate-limiter
|
|
77
|
+
# → (no output — plugin loaded but rate limit skipped)
|
|
78
|
+
|
|
79
|
+
opencli xiaohongshu search "test" 2>&1 | grep rate-limiter
|
|
80
|
+
# → [rate-limiter] xiaohongshu: sleeping 12s
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Writing your own plugin
|
|
84
|
+
|
|
85
|
+
Plugins are plain JS/TS files in `~/.opencli/plugins/<name>/`. A plugin file must export a hook registration call that matches the pattern `onStartup(`, `onBeforeExecute(`, or `onAfterExecute(` — opencli's discovery engine uses this pattern to identify hook files vs. command files.
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
// ~/.opencli/plugins/my-plugin/index.js
|
|
89
|
+
import { onAfterExecute } from '@jackwener/opencli/hooks'
|
|
90
|
+
|
|
91
|
+
onAfterExecute(async (ctx) => {
|
|
92
|
+
// ctx.command — e.g. "bilibili/comments"
|
|
93
|
+
// ctx.args — coerced command arguments
|
|
94
|
+
// ctx.error — set if the command threw
|
|
95
|
+
console.error(`[my-plugin] finished: ${ctx.command}`)
|
|
96
|
+
})
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
See [hooks.ts](../../src/hooks.ts) for the full `HookContext` type.
|