@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.
Files changed (514) hide show
  1. package/.github/actions/setup-chrome/action.yml +5 -4
  2. package/.github/workflows/build-extension.yml +2 -6
  3. package/.github/workflows/ci.yml +37 -3
  4. package/.github/workflows/e2e-headed.yml +16 -3
  5. package/CHANGELOG.md +23 -0
  6. package/PRIVACY.md +57 -0
  7. package/README.md +36 -7
  8. package/README.zh-CN.md +13 -6
  9. package/SKILL.md +103 -2
  10. package/dist/browser/cdp.d.ts +2 -1
  11. package/dist/browser/discover.d.ts +4 -1
  12. package/dist/browser/discover.js +6 -2
  13. package/dist/browser/errors.d.ts +2 -2
  14. package/dist/browser/errors.js +4 -12
  15. package/dist/browser/mcp.d.ts +2 -1
  16. package/dist/build-manifest.d.ts +2 -0
  17. package/dist/build-manifest.js +39 -14
  18. package/dist/build-manifest.test.js +21 -0
  19. package/dist/capabilityRouting.d.ts +2 -0
  20. package/dist/capabilityRouting.js +2 -1
  21. package/dist/cli-manifest.json +1838 -151
  22. package/dist/cli.js +34 -3
  23. package/dist/clis/36kr/article.d.ts +1 -0
  24. package/dist/clis/36kr/article.js +62 -0
  25. package/dist/clis/36kr/hot.d.ts +3 -0
  26. package/dist/clis/36kr/hot.js +80 -0
  27. package/dist/clis/36kr/hot.test.d.ts +1 -0
  28. package/dist/clis/36kr/hot.test.js +15 -0
  29. package/dist/clis/36kr/news.d.ts +1 -0
  30. package/dist/clis/36kr/news.js +51 -0
  31. package/dist/clis/36kr/news.test.d.ts +1 -0
  32. package/dist/clis/36kr/news.test.js +85 -0
  33. package/dist/clis/36kr/search.d.ts +1 -0
  34. package/dist/clis/36kr/search.js +72 -0
  35. package/dist/clis/apple-podcasts/search.js +2 -1
  36. package/dist/clis/arxiv/search.js +2 -2
  37. package/dist/clis/bbc/news.js +0 -1
  38. package/dist/clis/bilibili/comments.d.ts +5 -0
  39. package/dist/clis/bilibili/comments.js +40 -0
  40. package/dist/clis/bilibili/comments.test.d.ts +1 -0
  41. package/dist/clis/bilibili/comments.test.js +82 -0
  42. package/dist/clis/chatgpt/ask.js +29 -14
  43. package/dist/clis/chatgpt/ax.d.ts +6 -0
  44. package/dist/clis/chatgpt/ax.js +172 -1
  45. package/dist/clis/chatgpt/model.d.ts +1 -0
  46. package/dist/clis/chatgpt/model.js +24 -0
  47. package/dist/clis/chatgpt/send.js +12 -3
  48. package/dist/clis/ctrip/search.js +0 -1
  49. package/dist/clis/douban/download.d.ts +1 -0
  50. package/dist/clis/douban/download.js +67 -0
  51. package/dist/clis/douban/download.test.d.ts +1 -0
  52. package/dist/clis/douban/download.test.js +170 -0
  53. package/dist/clis/douban/photos.d.ts +1 -0
  54. package/dist/clis/douban/photos.js +34 -0
  55. package/dist/clis/douban/utils.d.ts +25 -0
  56. package/dist/clis/douban/utils.js +190 -1
  57. package/dist/clis/douban/utils.test.d.ts +1 -0
  58. package/dist/clis/douban/utils.test.js +64 -0
  59. package/dist/clis/douyin/_shared/browser-fetch.d.ts +10 -0
  60. package/dist/clis/douyin/_shared/browser-fetch.js +30 -0
  61. package/dist/clis/douyin/_shared/browser-fetch.test.d.ts +1 -0
  62. package/dist/clis/douyin/_shared/browser-fetch.test.js +31 -0
  63. package/dist/clis/douyin/_shared/creation-id.d.ts +1 -0
  64. package/dist/clis/douyin/_shared/creation-id.js +5 -0
  65. package/dist/clis/douyin/_shared/creation-id.test.d.ts +1 -0
  66. package/dist/clis/douyin/_shared/creation-id.test.js +22 -0
  67. package/dist/clis/douyin/_shared/imagex-upload.d.ts +20 -0
  68. package/dist/clis/douyin/_shared/imagex-upload.js +53 -0
  69. package/dist/clis/douyin/_shared/imagex-upload.test.d.ts +1 -0
  70. package/dist/clis/douyin/_shared/imagex-upload.test.js +87 -0
  71. package/dist/clis/douyin/_shared/sts2.d.ts +8 -0
  72. package/dist/clis/douyin/_shared/sts2.js +15 -0
  73. package/dist/clis/douyin/_shared/text-extra.d.ts +18 -0
  74. package/dist/clis/douyin/_shared/text-extra.js +15 -0
  75. package/dist/clis/douyin/_shared/text-extra.test.d.ts +1 -0
  76. package/dist/clis/douyin/_shared/text-extra.test.js +37 -0
  77. package/dist/clis/douyin/_shared/timing.d.ts +2 -0
  78. package/dist/clis/douyin/_shared/timing.js +22 -0
  79. package/dist/clis/douyin/_shared/timing.test.d.ts +1 -0
  80. package/dist/clis/douyin/_shared/timing.test.js +28 -0
  81. package/dist/clis/douyin/_shared/tos-upload-short-read.test.d.ts +11 -0
  82. package/dist/clis/douyin/_shared/tos-upload-short-read.test.js +83 -0
  83. package/dist/clis/douyin/_shared/tos-upload.d.ts +53 -0
  84. package/dist/clis/douyin/_shared/tos-upload.js +295 -0
  85. package/dist/clis/douyin/_shared/tos-upload.test.d.ts +1 -0
  86. package/dist/clis/douyin/_shared/tos-upload.test.js +229 -0
  87. package/dist/clis/douyin/_shared/transcode.d.ts +27 -0
  88. package/dist/clis/douyin/_shared/transcode.js +45 -0
  89. package/dist/clis/douyin/_shared/transcode.test.d.ts +1 -0
  90. package/dist/clis/douyin/_shared/transcode.test.js +93 -0
  91. package/dist/clis/douyin/_shared/types.d.ts +26 -0
  92. package/dist/clis/douyin/_shared/types.js +1 -0
  93. package/dist/clis/douyin/activities.d.ts +1 -0
  94. package/dist/clis/douyin/activities.js +20 -0
  95. package/dist/clis/douyin/activities.test.d.ts +1 -0
  96. package/dist/clis/douyin/activities.test.js +22 -0
  97. package/dist/clis/douyin/collections.d.ts +1 -0
  98. package/dist/clis/douyin/collections.js +22 -0
  99. package/dist/clis/douyin/collections.test.d.ts +1 -0
  100. package/dist/clis/douyin/collections.test.js +23 -0
  101. package/dist/clis/douyin/delete.d.ts +1 -0
  102. package/dist/clis/douyin/delete.js +18 -0
  103. package/dist/clis/douyin/delete.test.d.ts +1 -0
  104. package/dist/clis/douyin/delete.test.js +11 -0
  105. package/dist/clis/douyin/draft.d.ts +14 -0
  106. package/dist/clis/douyin/draft.js +237 -0
  107. package/dist/clis/douyin/draft.test.d.ts +1 -0
  108. package/dist/clis/douyin/draft.test.js +11 -0
  109. package/dist/clis/douyin/drafts.d.ts +1 -0
  110. package/dist/clis/douyin/drafts.js +23 -0
  111. package/dist/clis/douyin/drafts.test.d.ts +1 -0
  112. package/dist/clis/douyin/drafts.test.js +11 -0
  113. package/dist/clis/douyin/hashtag.d.ts +1 -0
  114. package/dist/clis/douyin/hashtag.js +45 -0
  115. package/dist/clis/douyin/hashtag.test.d.ts +1 -0
  116. package/dist/clis/douyin/hashtag.test.js +25 -0
  117. package/dist/clis/douyin/location.d.ts +1 -0
  118. package/dist/clis/douyin/location.js +24 -0
  119. package/dist/clis/douyin/location.test.d.ts +1 -0
  120. package/dist/clis/douyin/location.test.js +23 -0
  121. package/dist/clis/douyin/profile.d.ts +1 -0
  122. package/dist/clis/douyin/profile.js +28 -0
  123. package/dist/clis/douyin/profile.test.d.ts +1 -0
  124. package/dist/clis/douyin/profile.test.js +11 -0
  125. package/dist/clis/douyin/publish.d.ts +14 -0
  126. package/dist/clis/douyin/publish.js +288 -0
  127. package/dist/clis/douyin/publish.test.d.ts +1 -0
  128. package/dist/clis/douyin/publish.test.js +38 -0
  129. package/dist/clis/douyin/stats.d.ts +1 -0
  130. package/dist/clis/douyin/stats.js +27 -0
  131. package/dist/clis/douyin/stats.test.d.ts +1 -0
  132. package/dist/clis/douyin/stats.test.js +22 -0
  133. package/dist/clis/douyin/update.d.ts +1 -0
  134. package/dist/clis/douyin/update.js +31 -0
  135. package/dist/clis/douyin/update.test.d.ts +1 -0
  136. package/dist/clis/douyin/update.test.js +11 -0
  137. package/dist/clis/douyin/videos.d.ts +1 -0
  138. package/dist/clis/douyin/videos.js +34 -0
  139. package/dist/clis/douyin/videos.test.d.ts +1 -0
  140. package/dist/clis/douyin/videos.test.js +11 -0
  141. package/dist/clis/hackernews/search.yaml +1 -1
  142. package/dist/clis/imdb/person.d.ts +1 -0
  143. package/dist/clis/imdb/person.js +203 -0
  144. package/dist/clis/imdb/reviews.d.ts +1 -0
  145. package/dist/clis/imdb/reviews.js +88 -0
  146. package/dist/clis/imdb/search.d.ts +1 -0
  147. package/dist/clis/imdb/search.js +161 -0
  148. package/dist/clis/imdb/title.d.ts +1 -0
  149. package/dist/clis/imdb/title.js +93 -0
  150. package/dist/clis/imdb/top.d.ts +1 -0
  151. package/dist/clis/imdb/top.js +53 -0
  152. package/dist/clis/imdb/trending.d.ts +1 -0
  153. package/dist/clis/imdb/trending.js +52 -0
  154. package/dist/clis/imdb/utils.d.ts +46 -0
  155. package/dist/clis/imdb/utils.js +285 -0
  156. package/dist/clis/imdb/utils.test.d.ts +1 -0
  157. package/dist/clis/imdb/utils.test.js +88 -0
  158. package/dist/clis/instagram/search.yaml +2 -1
  159. package/dist/clis/jd/item.d.ts +4 -0
  160. package/dist/clis/jd/item.js +16 -15
  161. package/dist/clis/jd/item.test.js +16 -1
  162. package/dist/clis/linux-do/categories.yaml +38 -9
  163. package/dist/clis/linux-do/category.d.ts +1 -0
  164. package/dist/clis/linux-do/category.js +36 -0
  165. package/dist/clis/linux-do/feed.d.ts +45 -0
  166. package/dist/clis/linux-do/feed.js +397 -0
  167. package/dist/clis/linux-do/feed.test.d.ts +1 -0
  168. package/dist/clis/linux-do/feed.test.js +118 -0
  169. package/dist/clis/linux-do/hot.d.ts +1 -0
  170. package/dist/clis/linux-do/hot.js +25 -0
  171. package/dist/clis/linux-do/latest.d.ts +1 -0
  172. package/dist/clis/linux-do/latest.js +18 -0
  173. package/dist/clis/linux-do/search.yaml +3 -1
  174. package/dist/clis/linux-do/tags.yaml +41 -0
  175. package/dist/clis/linux-do/topic.yaml +41 -3
  176. package/dist/clis/linux-do/user-posts.yaml +67 -0
  177. package/dist/clis/linux-do/user-topics.yaml +54 -0
  178. package/dist/clis/medium/search.js +1 -1
  179. package/dist/clis/paperreview/commands.test.d.ts +3 -0
  180. package/dist/clis/paperreview/commands.test.js +243 -0
  181. package/dist/clis/paperreview/feedback.d.ts +1 -0
  182. package/dist/clis/paperreview/feedback.js +52 -0
  183. package/dist/clis/paperreview/review.d.ts +1 -0
  184. package/dist/clis/paperreview/review.js +37 -0
  185. package/dist/clis/paperreview/submit.d.ts +1 -0
  186. package/dist/clis/paperreview/submit.js +85 -0
  187. package/dist/clis/paperreview/utils.d.ts +46 -0
  188. package/dist/clis/paperreview/utils.js +197 -0
  189. package/dist/clis/paperreview/utils.test.d.ts +1 -0
  190. package/dist/clis/paperreview/utils.test.js +49 -0
  191. package/dist/clis/producthunt/browse.d.ts +1 -0
  192. package/dist/clis/producthunt/browse.js +99 -0
  193. package/dist/clis/producthunt/hot.d.ts +1 -0
  194. package/dist/clis/producthunt/hot.js +110 -0
  195. package/dist/clis/producthunt/posts.d.ts +1 -0
  196. package/dist/clis/producthunt/posts.js +28 -0
  197. package/dist/clis/producthunt/today.d.ts +1 -0
  198. package/dist/clis/producthunt/today.js +35 -0
  199. package/dist/clis/producthunt/utils.d.ts +29 -0
  200. package/dist/clis/producthunt/utils.js +99 -0
  201. package/dist/clis/producthunt/utils.test.d.ts +1 -0
  202. package/dist/clis/producthunt/utils.test.js +64 -0
  203. package/dist/clis/reuters/search.js +0 -1
  204. package/dist/clis/twitter/article.js +4 -28
  205. package/dist/clis/twitter/likes.d.ts +24 -0
  206. package/dist/clis/twitter/likes.js +217 -0
  207. package/dist/clis/twitter/likes.test.d.ts +1 -0
  208. package/dist/clis/twitter/likes.test.js +85 -0
  209. package/dist/clis/twitter/profile.js +4 -28
  210. package/dist/clis/twitter/search.js +7 -4
  211. package/dist/clis/twitter/search.test.js +56 -2
  212. package/dist/clis/twitter/shared.d.ts +6 -0
  213. package/dist/clis/twitter/shared.js +35 -0
  214. package/dist/clis/twitter/timeline.js +2 -13
  215. package/dist/clis/weibo/comments.d.ts +1 -0
  216. package/dist/clis/weibo/comments.js +53 -0
  217. package/dist/clis/weibo/feed.d.ts +1 -0
  218. package/dist/clis/weibo/feed.js +56 -0
  219. package/dist/clis/weibo/hot.js +0 -1
  220. package/dist/clis/weibo/me.d.ts +1 -0
  221. package/dist/clis/weibo/me.js +76 -0
  222. package/dist/clis/weibo/post.d.ts +1 -0
  223. package/dist/clis/weibo/post.js +75 -0
  224. package/dist/clis/weibo/user.d.ts +1 -0
  225. package/dist/clis/weibo/user.js +63 -0
  226. package/dist/clis/weibo/utils.d.ts +6 -0
  227. package/dist/clis/weibo/utils.js +30 -0
  228. package/dist/clis/weixin/download.d.ts +17 -0
  229. package/dist/clis/weixin/download.js +88 -20
  230. package/dist/clis/weread/book.js +2 -2
  231. package/dist/clis/weread/commands.test.d.ts +3 -0
  232. package/dist/clis/weread/commands.test.js +43 -0
  233. package/dist/clis/weread/highlights.js +2 -2
  234. package/dist/clis/weread/notebooks.js +2 -2
  235. package/dist/clis/weread/notes.js +3 -3
  236. package/dist/clis/weread/search.js +3 -2
  237. package/dist/clis/weread/shelf.js +2 -2
  238. package/dist/clis/weread/utils.d.ts +4 -4
  239. package/dist/clis/weread/utils.js +32 -14
  240. package/dist/clis/weread/utils.test.js +1 -28
  241. package/dist/clis/xiaohongshu/comments.d.ts +5 -0
  242. package/dist/clis/xiaohongshu/comments.js +74 -0
  243. package/dist/clis/xiaohongshu/comments.test.d.ts +1 -0
  244. package/dist/clis/xiaohongshu/comments.test.js +79 -0
  245. package/dist/clis/xiaohongshu/publish.js +114 -18
  246. package/dist/clis/xiaohongshu/publish.test.d.ts +1 -0
  247. package/dist/clis/xiaohongshu/publish.test.js +119 -0
  248. package/dist/clis/xueqiu/search.yaml +2 -1
  249. package/dist/clis/yahoo-finance/quote.js +0 -1
  250. package/dist/clis/youtube/channel.d.ts +1 -0
  251. package/dist/clis/youtube/channel.js +150 -0
  252. package/dist/clis/youtube/comments.d.ts +1 -0
  253. package/dist/clis/youtube/comments.js +95 -0
  254. package/dist/clis/youtube/search.js +0 -1
  255. package/dist/clis/zhihu/search.yaml +2 -1
  256. package/dist/commanderAdapter.d.ts +1 -0
  257. package/dist/commanderAdapter.js +176 -29
  258. package/dist/commanderAdapter.test.d.ts +1 -0
  259. package/dist/commanderAdapter.test.js +62 -0
  260. package/dist/daemon.js +17 -1
  261. package/dist/discovery.js +8 -14
  262. package/dist/doctor.d.ts +1 -0
  263. package/dist/doctor.js +9 -2
  264. package/dist/download/index.js +63 -51
  265. package/dist/download/index.test.js +17 -4
  266. package/dist/errors.d.ts +3 -1
  267. package/dist/errors.js +15 -32
  268. package/dist/execution.d.ts +1 -3
  269. package/dist/execution.js +21 -1
  270. package/dist/external-clis.yaml +0 -17
  271. package/dist/hooks.js +2 -0
  272. package/dist/main.js +5 -0
  273. package/dist/output.js +5 -1
  274. package/dist/pipeline/executor.js +3 -4
  275. package/dist/plugin-manifest.d.ts +70 -0
  276. package/dist/plugin-manifest.js +160 -0
  277. package/dist/plugin-manifest.test.d.ts +4 -0
  278. package/dist/plugin-manifest.test.js +179 -0
  279. package/dist/plugin.d.ts +38 -5
  280. package/dist/plugin.js +267 -33
  281. package/dist/plugin.test.js +220 -3
  282. package/dist/registry.d.ts +4 -0
  283. package/dist/registry.js +2 -0
  284. package/dist/runtime-detect.d.ts +21 -0
  285. package/dist/runtime-detect.js +32 -0
  286. package/dist/runtime-detect.test.d.ts +1 -0
  287. package/dist/runtime-detect.test.js +27 -0
  288. package/dist/runtime.js +1 -1
  289. package/dist/serialization.d.ts +2 -0
  290. package/dist/serialization.js +6 -0
  291. package/dist/types.d.ts +1 -0
  292. package/dist/update-check.d.ts +22 -0
  293. package/dist/update-check.js +112 -0
  294. package/dist/weixin-download.test.d.ts +1 -0
  295. package/dist/weixin-download.test.js +30 -0
  296. package/dist/weread-private-api-regression.test.d.ts +1 -0
  297. package/dist/weread-private-api-regression.test.js +122 -0
  298. package/dist/weread-search-regression.test.d.ts +1 -0
  299. package/dist/weread-search-regression.test.js +39 -0
  300. package/dist/yaml-schema.d.ts +3 -0
  301. package/dist/yaml-schema.js +18 -1
  302. package/docs/.vitepress/config.mts +17 -0
  303. package/docs/adapters/browser/36kr.md +47 -0
  304. package/docs/adapters/browser/douban.md +14 -0
  305. package/docs/adapters/browser/douyin.md +75 -0
  306. package/docs/adapters/browser/imdb.md +47 -0
  307. package/docs/adapters/browser/jd.md +2 -2
  308. package/docs/adapters/browser/linux-do.md +181 -20
  309. package/docs/adapters/browser/paperreview.md +43 -0
  310. package/docs/adapters/browser/producthunt.md +49 -0
  311. package/docs/adapters/browser/twitter.md +6 -0
  312. package/docs/adapters/desktop/chatgpt.md +5 -0
  313. package/docs/adapters/index.md +12 -3
  314. package/docs/advanced/download.md +4 -0
  315. package/docs/advanced/rate-limiter-plugin.md +99 -0
  316. package/docs/guide/electron-app-cli.md +200 -0
  317. package/docs/guide/getting-started.md +1 -0
  318. package/docs/guide/plugins.md +87 -0
  319. package/docs/zh/guide/electron-app-cli.md +188 -0
  320. package/docs/zh/guide/getting-started.md +1 -0
  321. package/docs/zh/guide/plugins.md +65 -0
  322. package/extension/dist/background.js +508 -518
  323. package/extension/manifest.json +6 -2
  324. package/extension/package.json +2 -1
  325. package/extension/popup.html +84 -0
  326. package/extension/popup.js +25 -0
  327. package/extension/scripts/package-release.mjs +179 -0
  328. package/extension/src/background.ts +22 -1
  329. package/package.json +4 -1
  330. package/scripts/postinstall.js +10 -0
  331. package/src/browser/cdp.ts +2 -1
  332. package/src/browser/discover.ts +8 -3
  333. package/src/browser/errors.ts +13 -14
  334. package/src/browser/mcp.ts +2 -1
  335. package/src/build-manifest.test.ts +23 -0
  336. package/src/build-manifest.ts +40 -15
  337. package/src/capabilityRouting.ts +2 -1
  338. package/src/cli.ts +35 -3
  339. package/src/clis/36kr/article.ts +69 -0
  340. package/src/clis/36kr/hot.test.ts +19 -0
  341. package/src/clis/36kr/hot.ts +100 -0
  342. package/src/clis/36kr/news.test.ts +90 -0
  343. package/src/clis/36kr/news.ts +54 -0
  344. package/src/clis/36kr/search.ts +78 -0
  345. package/src/clis/apple-podcasts/search.ts +2 -1
  346. package/src/clis/arxiv/search.ts +2 -2
  347. package/src/clis/bbc/news.ts +0 -1
  348. package/src/clis/bilibili/comments.test.ts +102 -0
  349. package/src/clis/bilibili/comments.ts +44 -0
  350. package/src/clis/chatgpt/ask.ts +28 -14
  351. package/src/clis/chatgpt/ax.ts +180 -1
  352. package/src/clis/chatgpt/model.ts +27 -0
  353. package/src/clis/chatgpt/send.ts +16 -6
  354. package/src/clis/ctrip/search.ts +0 -1
  355. package/src/clis/douban/download.test.ts +196 -0
  356. package/src/clis/douban/download.ts +78 -0
  357. package/src/clis/douban/photos.ts +36 -0
  358. package/src/clis/douban/utils.test.ts +97 -0
  359. package/src/clis/douban/utils.ts +232 -1
  360. package/src/clis/douyin/_shared/browser-fetch.test.ts +38 -0
  361. package/src/clis/douyin/_shared/browser-fetch.ts +45 -0
  362. package/src/clis/douyin/_shared/creation-id.test.ts +26 -0
  363. package/src/clis/douyin/_shared/creation-id.ts +8 -0
  364. package/src/clis/douyin/_shared/imagex-upload.test.ts +113 -0
  365. package/src/clis/douyin/_shared/imagex-upload.ts +76 -0
  366. package/src/clis/douyin/_shared/sts2.ts +20 -0
  367. package/src/clis/douyin/_shared/text-extra.test.ts +42 -0
  368. package/src/clis/douyin/_shared/text-extra.ts +33 -0
  369. package/src/clis/douyin/_shared/timing.test.ts +38 -0
  370. package/src/clis/douyin/_shared/timing.ts +22 -0
  371. package/src/clis/douyin/_shared/tos-upload-short-read.test.ts +102 -0
  372. package/src/clis/douyin/_shared/tos-upload.test.ts +281 -0
  373. package/src/clis/douyin/_shared/tos-upload.ts +444 -0
  374. package/src/clis/douyin/_shared/transcode.test.ts +117 -0
  375. package/src/clis/douyin/_shared/transcode.ts +78 -0
  376. package/src/clis/douyin/_shared/types.ts +29 -0
  377. package/src/clis/douyin/activities.test.ts +25 -0
  378. package/src/clis/douyin/activities.ts +23 -0
  379. package/src/clis/douyin/collections.test.ts +26 -0
  380. package/src/clis/douyin/collections.ts +25 -0
  381. package/src/clis/douyin/delete.test.ts +12 -0
  382. package/src/clis/douyin/delete.ts +20 -0
  383. package/src/clis/douyin/draft.test.ts +12 -0
  384. package/src/clis/douyin/draft.ts +282 -0
  385. package/src/clis/douyin/drafts.test.ts +12 -0
  386. package/src/clis/douyin/drafts.ts +27 -0
  387. package/src/clis/douyin/hashtag.test.ts +28 -0
  388. package/src/clis/douyin/hashtag.ts +56 -0
  389. package/src/clis/douyin/location.test.ts +26 -0
  390. package/src/clis/douyin/location.ts +27 -0
  391. package/src/clis/douyin/profile.test.ts +12 -0
  392. package/src/clis/douyin/profile.ts +37 -0
  393. package/src/clis/douyin/publish.test.ts +45 -0
  394. package/src/clis/douyin/publish.ts +340 -0
  395. package/src/clis/douyin/stats.test.ts +25 -0
  396. package/src/clis/douyin/stats.ts +30 -0
  397. package/src/clis/douyin/update.test.ts +12 -0
  398. package/src/clis/douyin/update.ts +43 -0
  399. package/src/clis/douyin/videos.test.ts +12 -0
  400. package/src/clis/douyin/videos.ts +49 -0
  401. package/src/clis/hackernews/search.yaml +1 -1
  402. package/src/clis/imdb/person.ts +232 -0
  403. package/src/clis/imdb/reviews.ts +111 -0
  404. package/src/clis/imdb/search.ts +179 -0
  405. package/src/clis/imdb/title.ts +121 -0
  406. package/src/clis/imdb/top.ts +67 -0
  407. package/src/clis/imdb/trending.ts +66 -0
  408. package/src/clis/imdb/utils.test.ts +117 -0
  409. package/src/clis/imdb/utils.ts +305 -0
  410. package/src/clis/instagram/search.yaml +2 -1
  411. package/src/clis/jd/item.test.ts +18 -1
  412. package/src/clis/jd/item.ts +18 -15
  413. package/src/clis/linux-do/categories.yaml +38 -9
  414. package/src/clis/linux-do/category.ts +37 -0
  415. package/src/clis/linux-do/feed.test.ts +132 -0
  416. package/src/clis/linux-do/feed.ts +501 -0
  417. package/src/clis/linux-do/hot.ts +26 -0
  418. package/src/clis/linux-do/latest.ts +19 -0
  419. package/src/clis/linux-do/search.yaml +3 -1
  420. package/src/clis/linux-do/tags.yaml +41 -0
  421. package/src/clis/linux-do/topic.yaml +41 -3
  422. package/src/clis/linux-do/user-posts.yaml +67 -0
  423. package/src/clis/linux-do/user-topics.yaml +54 -0
  424. package/src/clis/medium/search.ts +1 -1
  425. package/src/clis/paperreview/commands.test.ts +283 -0
  426. package/src/clis/paperreview/feedback.ts +64 -0
  427. package/src/clis/paperreview/review.ts +47 -0
  428. package/src/clis/paperreview/submit.ts +119 -0
  429. package/src/clis/paperreview/utils.test.ts +68 -0
  430. package/src/clis/paperreview/utils.ts +276 -0
  431. package/src/clis/producthunt/browse.ts +109 -0
  432. package/src/clis/producthunt/hot.ts +127 -0
  433. package/src/clis/producthunt/posts.ts +29 -0
  434. package/src/clis/producthunt/today.ts +37 -0
  435. package/src/clis/producthunt/utils.test.ts +72 -0
  436. package/src/clis/producthunt/utils.ts +122 -0
  437. package/src/clis/reuters/search.ts +0 -1
  438. package/src/clis/twitter/article.ts +5 -28
  439. package/src/clis/twitter/likes.test.ts +91 -0
  440. package/src/clis/twitter/likes.ts +256 -0
  441. package/src/clis/twitter/profile.ts +5 -28
  442. package/src/clis/twitter/search.test.ts +71 -2
  443. package/src/clis/twitter/search.ts +8 -4
  444. package/src/clis/twitter/shared.ts +45 -0
  445. package/src/clis/twitter/timeline.ts +2 -13
  446. package/src/clis/weibo/comments.ts +54 -0
  447. package/src/clis/weibo/feed.ts +57 -0
  448. package/src/clis/weibo/hot.ts +0 -1
  449. package/src/clis/weibo/me.ts +77 -0
  450. package/src/clis/weibo/post.ts +77 -0
  451. package/src/clis/weibo/user.ts +64 -0
  452. package/src/clis/weibo/utils.ts +32 -0
  453. package/src/clis/weixin/download.ts +114 -20
  454. package/src/clis/weread/book.ts +2 -2
  455. package/src/clis/weread/commands.test.ts +57 -0
  456. package/src/clis/weread/highlights.ts +2 -2
  457. package/src/clis/weread/notebooks.ts +2 -2
  458. package/src/clis/weread/notes.ts +3 -3
  459. package/src/clis/weread/search.ts +3 -2
  460. package/src/clis/weread/shelf.ts +2 -2
  461. package/src/clis/weread/utils.test.ts +1 -32
  462. package/src/clis/weread/utils.ts +41 -16
  463. package/src/clis/xiaohongshu/comments.test.ts +96 -0
  464. package/src/clis/xiaohongshu/comments.ts +81 -0
  465. package/src/clis/xiaohongshu/publish.test.ts +137 -0
  466. package/src/clis/xiaohongshu/publish.ts +129 -18
  467. package/src/clis/xueqiu/search.yaml +2 -1
  468. package/src/clis/yahoo-finance/quote.ts +0 -1
  469. package/src/clis/youtube/channel.ts +155 -0
  470. package/src/clis/youtube/comments.ts +97 -0
  471. package/src/clis/youtube/search.ts +0 -1
  472. package/src/clis/zhihu/search.yaml +2 -1
  473. package/src/commanderAdapter.test.ts +78 -0
  474. package/src/commanderAdapter.ts +188 -24
  475. package/src/daemon.ts +19 -1
  476. package/src/discovery.ts +8 -15
  477. package/src/doctor.ts +13 -2
  478. package/src/download/index.test.ts +14 -4
  479. package/src/download/index.ts +67 -55
  480. package/src/errors.ts +25 -66
  481. package/src/execution.ts +28 -3
  482. package/src/external-clis.yaml +0 -17
  483. package/src/hooks.ts +1 -0
  484. package/src/main.ts +6 -0
  485. package/src/output.ts +3 -1
  486. package/src/pipeline/executor.ts +4 -6
  487. package/src/plugin-manifest.test.ts +223 -0
  488. package/src/plugin-manifest.ts +206 -0
  489. package/src/plugin.test.ts +246 -2
  490. package/src/plugin.ts +338 -36
  491. package/src/registry.ts +6 -1
  492. package/src/runtime-detect.test.ts +30 -0
  493. package/src/runtime-detect.ts +36 -0
  494. package/src/runtime.ts +1 -1
  495. package/src/serialization.ts +4 -0
  496. package/src/types.ts +1 -0
  497. package/src/update-check.ts +114 -0
  498. package/src/weixin-download.test.ts +64 -0
  499. package/src/weread-private-api-regression.test.ts +150 -0
  500. package/src/weread-search-regression.test.ts +44 -0
  501. package/src/yaml-schema.ts +20 -0
  502. package/tests/e2e/browser-auth.test.ts +13 -9
  503. package/tests/e2e/browser-public-extended.test.ts +162 -0
  504. package/tests/e2e/browser-public.test.ts +55 -136
  505. package/tests/e2e/helpers.ts +2 -1
  506. package/tests/e2e/public-commands.test.ts +37 -3
  507. package/tests/smoke/api-health.test.ts +1 -1
  508. package/vitest.config.ts +34 -17
  509. package/dist/clis/linux-do/category.yaml +0 -51
  510. package/dist/clis/linux-do/hot.yaml +0 -50
  511. package/dist/clis/linux-do/latest.yaml +0 -40
  512. package/src/clis/linux-do/category.yaml +0 -51
  513. package/src/clis/linux-do/hot.yaml +0 -50
  514. 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, images, specs) |
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 detail images
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 hot` | 热门话题 |
10
- | `opencli linux-do latest` | 最新话题 |
11
- | `opencli linux-do categories` | 板块列表 |
12
- | `opencli linux-do category` | 板块话题 |
13
- | `opencli linux-do search` | 搜索话题 |
14
- | `opencli linux-do topic` | 话题详情 |
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
- ## Usage Examples
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
- # Hot topics this week
20
- opencli linux-do hot --limit 20
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
- # Hot topics by period
23
- opencli linux-do hot --period daily
24
- opencli linux-do hot --period monthly
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
- # Latest topics
27
- opencli linux-do latest --limit 10
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
- # List all categories
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
- # Search topics
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
- # View topic details
36
- opencli linux-do topic 12345
146
+ Output columns: `rank`, `title`, `views`, `likes`, `replies`, `url`
37
147
 
38
- # JSON output
39
- opencli linux-do hot -f json
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
 
@@ -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)** | `hot` `latest` `categories` `category` `search` `topic` | 🔐 Browser |
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.