@jackwener/opencli 1.1.1 → 1.2.1

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 (523) hide show
  1. package/.github/workflows/build-extension.yml +3 -3
  2. package/.github/workflows/ci.yml +6 -6
  3. package/.github/workflows/doc-check.yml +3 -3
  4. package/.github/workflows/e2e-headed.yml +2 -2
  5. package/.github/workflows/pkg-pr-new.yml +2 -2
  6. package/.github/workflows/release.yml +3 -3
  7. package/.github/workflows/security.yml +2 -2
  8. package/CONTRIBUTING.md +39 -1
  9. package/README.md +13 -10
  10. package/README.zh-CN.md +43 -17
  11. package/SKILL.md +10 -5
  12. package/dist/browser/cdp.d.ts +4 -4
  13. package/dist/browser/cdp.js +39 -16
  14. package/dist/browser/daemon-client.d.ts +4 -2
  15. package/dist/browser/daemon-client.js +17 -4
  16. package/dist/browser/dom-helpers.js +38 -7
  17. package/dist/browser/dom-snapshot.d.ts +86 -0
  18. package/dist/browser/dom-snapshot.js +729 -0
  19. package/dist/browser/dom-snapshot.test.d.ts +11 -0
  20. package/dist/browser/dom-snapshot.test.js +212 -0
  21. package/dist/browser/index.d.ts +2 -0
  22. package/dist/browser/index.js +1 -0
  23. package/dist/browser/mcp.js +3 -1
  24. package/dist/browser/page.d.ts +14 -24
  25. package/dist/browser/page.js +46 -6
  26. package/dist/build-manifest.d.ts +11 -4
  27. package/dist/build-manifest.js +59 -21
  28. package/dist/build-manifest.test.js +58 -2
  29. package/dist/cli-manifest.json +3856 -1509
  30. package/dist/cli.js +66 -0
  31. package/dist/clis/barchart/greeks.js +1 -1
  32. package/dist/clis/barchart/options.js +1 -1
  33. package/dist/clis/barchart/quote.js +1 -1
  34. package/dist/clis/bilibili/download.js +1 -1
  35. package/dist/clis/bilibili/following.js +1 -1
  36. package/dist/clis/bilibili/subtitle.js +1 -1
  37. package/dist/clis/bilibili/user-videos.js +1 -1
  38. package/dist/clis/boss/batchgreet.js +10 -97
  39. package/dist/clis/boss/chatlist.js +8 -25
  40. package/dist/clis/boss/chatmsg.js +11 -42
  41. package/dist/clis/boss/common.d.ts +92 -0
  42. package/dist/clis/boss/common.js +223 -0
  43. package/dist/clis/boss/detail.js +7 -49
  44. package/dist/clis/boss/exchange.js +13 -79
  45. package/dist/clis/boss/greet.js +18 -145
  46. package/dist/clis/boss/invite.js +26 -121
  47. package/dist/clis/boss/joblist.js +6 -31
  48. package/dist/clis/boss/mark.js +12 -85
  49. package/dist/clis/boss/recommend.js +10 -49
  50. package/dist/clis/boss/resume.js +18 -118
  51. package/dist/clis/boss/search.js +12 -60
  52. package/dist/clis/boss/send.js +17 -151
  53. package/dist/clis/boss/stats.js +18 -69
  54. package/dist/clis/coupang/add-to-cart.js +1 -1
  55. package/dist/clis/devto/tag.yaml +34 -0
  56. package/dist/clis/devto/top.yaml +29 -0
  57. package/dist/clis/devto/user.yaml +33 -0
  58. package/dist/clis/douban/book-hot.d.ts +1 -0
  59. package/dist/clis/douban/book-hot.js +14 -0
  60. package/dist/clis/douban/marks.d.ts +1 -0
  61. package/dist/clis/douban/marks.js +115 -0
  62. package/dist/clis/douban/movie-hot.d.ts +1 -0
  63. package/dist/clis/douban/movie-hot.js +14 -0
  64. package/dist/clis/douban/reviews.d.ts +1 -0
  65. package/dist/clis/douban/reviews.js +106 -0
  66. package/dist/clis/douban/search.d.ts +1 -0
  67. package/dist/clis/douban/search.js +16 -0
  68. package/dist/clis/douban/shared.d.ts +4 -0
  69. package/dist/clis/douban/shared.js +155 -0
  70. package/dist/clis/douban/subject.yaml +76 -0
  71. package/dist/clis/douban/top250.yaml +70 -0
  72. package/dist/clis/douban/utils.d.ts +35 -0
  73. package/dist/clis/douban/utils.js +48 -0
  74. package/dist/clis/facebook/add-friend.yaml +43 -0
  75. package/dist/clis/facebook/events.yaml +44 -0
  76. package/dist/clis/facebook/feed.yaml +63 -0
  77. package/dist/clis/facebook/friends.yaml +42 -0
  78. package/dist/clis/facebook/groups.yaml +50 -0
  79. package/dist/clis/facebook/join-group.yaml +44 -0
  80. package/dist/clis/facebook/memories.yaml +39 -0
  81. package/dist/clis/facebook/notifications.yaml +40 -0
  82. package/dist/clis/facebook/profile.yaml +37 -0
  83. package/dist/clis/facebook/search.yaml +46 -0
  84. package/dist/clis/google/news.d.ts +5 -0
  85. package/dist/clis/google/news.js +58 -0
  86. package/dist/clis/google/search.d.ts +10 -0
  87. package/dist/clis/google/search.js +127 -0
  88. package/dist/clis/google/suggest.d.ts +5 -0
  89. package/dist/clis/google/suggest.js +34 -0
  90. package/dist/clis/google/trends.d.ts +5 -0
  91. package/dist/clis/google/trends.js +38 -0
  92. package/dist/clis/google/utils.d.ts +9 -0
  93. package/dist/clis/google/utils.js +23 -0
  94. package/dist/clis/google/utils.test.d.ts +1 -0
  95. package/dist/clis/google/utils.test.js +75 -0
  96. package/dist/clis/grok/ask.d.ts +14 -0
  97. package/dist/clis/grok/ask.js +257 -65
  98. package/dist/clis/grok/ask.test.d.ts +1 -0
  99. package/dist/clis/grok/ask.test.js +36 -0
  100. package/dist/clis/instagram/comment.yaml +52 -0
  101. package/dist/clis/instagram/explore.yaml +43 -0
  102. package/dist/clis/instagram/follow.yaml +41 -0
  103. package/dist/clis/instagram/followers.yaml +51 -0
  104. package/dist/clis/instagram/following.yaml +51 -0
  105. package/dist/clis/instagram/like.yaml +46 -0
  106. package/dist/clis/instagram/profile.yaml +42 -0
  107. package/dist/clis/instagram/save.yaml +46 -0
  108. package/dist/clis/instagram/saved.yaml +40 -0
  109. package/dist/clis/instagram/search.yaml +43 -0
  110. package/dist/clis/instagram/unfollow.yaml +38 -0
  111. package/dist/clis/instagram/unlike.yaml +46 -0
  112. package/dist/clis/instagram/unsave.yaml +46 -0
  113. package/dist/clis/instagram/user.yaml +54 -0
  114. package/dist/clis/jike/repost.js +1 -1
  115. package/dist/clis/jimeng/generate.yaml +1 -0
  116. package/dist/clis/linux-do/category.yaml +1 -0
  117. package/dist/clis/lobsters/active.yaml +29 -0
  118. package/dist/clis/lobsters/hot.yaml +29 -0
  119. package/dist/clis/lobsters/newest.yaml +29 -0
  120. package/dist/clis/lobsters/tag.yaml +34 -0
  121. package/dist/clis/medium/feed.d.ts +1 -0
  122. package/dist/clis/medium/feed.js +15 -0
  123. package/dist/clis/medium/search.d.ts +1 -0
  124. package/dist/clis/medium/search.js +15 -0
  125. package/dist/clis/medium/shared.d.ts +5 -0
  126. package/dist/clis/medium/shared.js +78 -0
  127. package/dist/clis/medium/user.d.ts +1 -0
  128. package/dist/clis/medium/user.js +15 -0
  129. package/dist/clis/reddit/comment.js +1 -1
  130. package/dist/clis/reddit/read.js +1 -1
  131. package/dist/clis/reddit/save.js +1 -1
  132. package/dist/clis/reddit/subreddit.yaml +1 -0
  133. package/dist/clis/reddit/subscribe.js +1 -1
  134. package/dist/clis/reddit/upvote.js +1 -1
  135. package/dist/clis/sinablog/article.d.ts +1 -0
  136. package/dist/clis/sinablog/article.js +14 -0
  137. package/dist/clis/sinablog/hot.d.ts +1 -0
  138. package/dist/clis/sinablog/hot.js +14 -0
  139. package/dist/clis/sinablog/search.d.ts +1 -0
  140. package/dist/clis/sinablog/search.js +51 -0
  141. package/dist/clis/sinablog/shared.d.ts +7 -0
  142. package/dist/clis/sinablog/shared.js +187 -0
  143. package/dist/clis/sinablog/user.d.ts +1 -0
  144. package/dist/clis/sinablog/user.js +15 -0
  145. package/dist/clis/substack/feed.d.ts +1 -0
  146. package/dist/clis/substack/feed.js +15 -0
  147. package/dist/clis/substack/publication.d.ts +1 -0
  148. package/dist/clis/substack/publication.js +15 -0
  149. package/dist/clis/substack/search.d.ts +1 -0
  150. package/dist/clis/substack/search.js +77 -0
  151. package/dist/clis/substack/shared.d.ts +4 -0
  152. package/dist/clis/substack/shared.js +129 -0
  153. package/dist/clis/tiktok/comment.yaml +66 -0
  154. package/dist/clis/tiktok/explore.yaml +39 -0
  155. package/dist/clis/tiktok/follow.yaml +39 -0
  156. package/dist/clis/tiktok/following.yaml +46 -0
  157. package/dist/clis/tiktok/friends.yaml +47 -0
  158. package/dist/clis/tiktok/like.yaml +38 -0
  159. package/dist/clis/tiktok/live.yaml +51 -0
  160. package/dist/clis/tiktok/notifications.yaml +52 -0
  161. package/dist/clis/tiktok/profile.yaml +45 -0
  162. package/dist/clis/tiktok/save.yaml +34 -0
  163. package/dist/clis/tiktok/search.yaml +46 -0
  164. package/dist/clis/tiktok/unfollow.yaml +44 -0
  165. package/dist/clis/tiktok/unlike.yaml +38 -0
  166. package/dist/clis/tiktok/unsave.yaml +36 -0
  167. package/dist/clis/tiktok/user.yaml +44 -0
  168. package/dist/clis/twitter/download.d.ts +1 -1
  169. package/dist/clis/twitter/download.js +3 -3
  170. package/dist/clis/twitter/followers.js +1 -1
  171. package/dist/clis/twitter/following.js +1 -1
  172. package/dist/clis/twitter/thread.js +1 -1
  173. package/dist/clis/twitter/timeline.d.ts +23 -0
  174. package/dist/clis/twitter/timeline.js +42 -14
  175. package/dist/clis/twitter/timeline.test.d.ts +1 -0
  176. package/dist/clis/twitter/timeline.test.js +102 -0
  177. package/dist/clis/wikipedia/random.d.ts +1 -0
  178. package/dist/clis/wikipedia/random.js +19 -0
  179. package/dist/clis/wikipedia/search.js +3 -3
  180. package/dist/clis/wikipedia/summary.js +4 -9
  181. package/dist/clis/wikipedia/trending.d.ts +1 -0
  182. package/dist/clis/wikipedia/trending.js +35 -0
  183. package/dist/clis/wikipedia/utils.d.ts +28 -0
  184. package/dist/clis/wikipedia/utils.js +13 -0
  185. package/dist/clis/xiaohongshu/creator-note-detail.js +1 -1
  186. package/dist/clis/xiaohongshu/creator-note-detail.test.js +2 -0
  187. package/dist/clis/xiaohongshu/creator-notes.test.js +2 -0
  188. package/dist/clis/xiaohongshu/download.js +1 -1
  189. package/dist/clis/xueqiu/earnings-date.yaml +69 -0
  190. package/dist/clis/xueqiu/search.yaml +2 -1
  191. package/dist/clis/xueqiu/stock.yaml +2 -0
  192. package/dist/clis/yahoo-finance/quote.js +1 -1
  193. package/dist/commanderAdapter.js +13 -7
  194. package/dist/daemon.js +21 -0
  195. package/dist/discovery.d.ts +8 -0
  196. package/dist/discovery.js +105 -19
  197. package/dist/doctor.js +3 -1
  198. package/dist/doctor.test.js +46 -2
  199. package/dist/engine.test.d.ts +0 -3
  200. package/dist/engine.test.js +74 -6
  201. package/dist/execution.d.ts +4 -2
  202. package/dist/execution.js +31 -7
  203. package/dist/explore.d.ts +76 -3
  204. package/dist/explore.js +11 -4
  205. package/dist/generate.d.ts +41 -2
  206. package/dist/generate.js +5 -4
  207. package/dist/main.js +2 -1
  208. package/dist/pipeline/executor.d.ts +4 -2
  209. package/dist/pipeline/executor.js +54 -15
  210. package/dist/pipeline/executor.test.js +33 -6
  211. package/dist/pipeline/registry.d.ts +1 -1
  212. package/dist/pipeline/steps/browser.d.ts +7 -7
  213. package/dist/pipeline/steps/browser.js +15 -7
  214. package/dist/pipeline/steps/fetch.d.ts +1 -1
  215. package/dist/pipeline/steps/fetch.js +11 -7
  216. package/dist/pipeline/steps/transform.d.ts +6 -5
  217. package/dist/pipeline/steps/transform.js +30 -9
  218. package/dist/pipeline/template.d.ts +6 -6
  219. package/dist/pipeline/template.js +43 -5
  220. package/dist/pipeline/template.test.js +18 -0
  221. package/dist/pipeline/transform.test.js +11 -0
  222. package/dist/plugin.d.ts +31 -0
  223. package/dist/plugin.js +216 -0
  224. package/dist/plugin.test.d.ts +4 -0
  225. package/dist/plugin.test.js +76 -0
  226. package/dist/registry-api.d.ts +11 -0
  227. package/dist/registry-api.js +9 -0
  228. package/dist/registry.d.ts +11 -0
  229. package/dist/registry.js +6 -1
  230. package/dist/synthesize.d.ts +94 -4
  231. package/dist/synthesize.js +5 -4
  232. package/dist/types.d.ts +39 -26
  233. package/dist/validate.js +8 -2
  234. package/docs/.vitepress/config.mts +6 -4
  235. package/docs/adapters/browser/barchart.md +6 -5
  236. package/docs/adapters/browser/bilibili.md +9 -0
  237. package/docs/adapters/browser/devto.md +35 -0
  238. package/docs/adapters/browser/douban.md +38 -0
  239. package/docs/adapters/browser/facebook.md +36 -0
  240. package/docs/adapters/browser/google.md +62 -0
  241. package/docs/adapters/browser/grok.md +26 -8
  242. package/docs/adapters/browser/instagram.md +46 -0
  243. package/docs/adapters/browser/lobsters.md +32 -0
  244. package/docs/adapters/browser/medium.md +32 -0
  245. package/docs/adapters/browser/reddit.md +9 -0
  246. package/docs/adapters/browser/sinablog.md +36 -0
  247. package/docs/adapters/browser/substack.md +38 -0
  248. package/docs/adapters/browser/tiktok.md +68 -0
  249. package/docs/adapters/browser/wikipedia.md +11 -2
  250. package/docs/adapters/browser/xueqiu.md +10 -0
  251. package/docs/adapters/browser/yahoo-finance.md +6 -5
  252. package/docs/adapters/desktop/antigravity.md +6 -0
  253. package/docs/adapters/desktop/chatgpt.md +2 -1
  254. package/docs/adapters/desktop/codex.md +5 -1
  255. package/docs/adapters/desktop/cursor.md +4 -0
  256. package/docs/adapters/desktop/discord.md +7 -7
  257. package/docs/adapters/index.md +1 -4
  258. package/docs/guide/getting-started.md +1 -0
  259. package/docs/guide/plugins.md +153 -0
  260. package/docs/zh/guide/plugins.md +107 -0
  261. package/extension/dist/background.js +91 -23
  262. package/extension/src/background.ts +82 -29
  263. package/extension/src/cdp.ts +42 -1
  264. package/package.json +10 -5
  265. package/scripts/clean-dist.cjs +13 -0
  266. package/src/browser/cdp.ts +71 -31
  267. package/src/browser/daemon-client.ts +21 -5
  268. package/src/browser/dom-helpers.ts +38 -7
  269. package/src/browser/dom-snapshot.test.ts +249 -0
  270. package/src/browser/dom-snapshot.ts +770 -0
  271. package/src/browser/index.ts +2 -0
  272. package/src/browser/mcp.ts +3 -1
  273. package/src/browser/page.ts +57 -21
  274. package/src/build-manifest.test.ts +70 -2
  275. package/src/build-manifest.ts +94 -26
  276. package/src/cli.ts +71 -2
  277. package/src/clis/barchart/greeks.ts +1 -1
  278. package/src/clis/barchart/options.ts +1 -1
  279. package/src/clis/barchart/quote.ts +1 -1
  280. package/src/clis/bilibili/download.ts +1 -1
  281. package/src/clis/bilibili/following.ts +1 -1
  282. package/src/clis/bilibili/subtitle.ts +1 -1
  283. package/src/clis/bilibili/user-videos.ts +1 -1
  284. package/src/clis/boss/batchgreet.ts +14 -106
  285. package/src/clis/boss/chatlist.ts +12 -26
  286. package/src/clis/boss/chatmsg.ts +16 -40
  287. package/src/clis/boss/common.ts +287 -0
  288. package/src/clis/boss/detail.ts +8 -54
  289. package/src/clis/boss/exchange.ts +15 -89
  290. package/src/clis/boss/greet.ts +23 -160
  291. package/src/clis/boss/invite.ts +36 -133
  292. package/src/clis/boss/joblist.ts +7 -36
  293. package/src/clis/boss/mark.ts +13 -94
  294. package/src/clis/boss/recommend.ts +12 -57
  295. package/src/clis/boss/resume.ts +19 -124
  296. package/src/clis/boss/search.ts +13 -66
  297. package/src/clis/boss/send.ts +21 -161
  298. package/src/clis/boss/stats.ts +19 -74
  299. package/src/clis/coupang/add-to-cart.ts +1 -1
  300. package/src/clis/devto/tag.yaml +34 -0
  301. package/src/clis/devto/top.yaml +29 -0
  302. package/src/clis/devto/user.yaml +33 -0
  303. package/src/clis/douban/book-hot.ts +15 -0
  304. package/src/clis/douban/marks.ts +135 -0
  305. package/src/clis/douban/movie-hot.ts +15 -0
  306. package/src/clis/douban/reviews.ts +127 -0
  307. package/src/clis/douban/search.ts +17 -0
  308. package/src/clis/douban/shared.ts +165 -0
  309. package/src/clis/douban/subject.yaml +76 -0
  310. package/src/clis/douban/top250.yaml +70 -0
  311. package/src/clis/douban/utils.ts +81 -0
  312. package/src/clis/facebook/add-friend.yaml +43 -0
  313. package/src/clis/facebook/events.yaml +44 -0
  314. package/src/clis/facebook/feed.yaml +63 -0
  315. package/src/clis/facebook/friends.yaml +42 -0
  316. package/src/clis/facebook/groups.yaml +50 -0
  317. package/src/clis/facebook/join-group.yaml +44 -0
  318. package/src/clis/facebook/memories.yaml +39 -0
  319. package/src/clis/facebook/notifications.yaml +40 -0
  320. package/src/clis/facebook/profile.yaml +37 -0
  321. package/src/clis/facebook/search.yaml +46 -0
  322. package/src/clis/google/news.ts +66 -0
  323. package/src/clis/google/search.ts +133 -0
  324. package/src/clis/google/suggest.ts +40 -0
  325. package/src/clis/google/trends.ts +44 -0
  326. package/src/clis/google/utils.test.ts +82 -0
  327. package/src/clis/google/utils.ts +24 -0
  328. package/src/clis/grok/ask.test.ts +53 -0
  329. package/src/clis/grok/ask.ts +300 -69
  330. package/src/clis/instagram/comment.yaml +52 -0
  331. package/src/clis/instagram/explore.yaml +43 -0
  332. package/src/clis/instagram/follow.yaml +41 -0
  333. package/src/clis/instagram/followers.yaml +51 -0
  334. package/src/clis/instagram/following.yaml +51 -0
  335. package/src/clis/instagram/like.yaml +46 -0
  336. package/src/clis/instagram/profile.yaml +42 -0
  337. package/src/clis/instagram/save.yaml +46 -0
  338. package/src/clis/instagram/saved.yaml +40 -0
  339. package/src/clis/instagram/search.yaml +43 -0
  340. package/src/clis/instagram/unfollow.yaml +38 -0
  341. package/src/clis/instagram/unlike.yaml +46 -0
  342. package/src/clis/instagram/unsave.yaml +46 -0
  343. package/src/clis/instagram/user.yaml +54 -0
  344. package/src/clis/jike/repost.ts +1 -1
  345. package/src/clis/jimeng/generate.yaml +1 -0
  346. package/src/clis/linux-do/category.yaml +1 -0
  347. package/src/clis/lobsters/active.yaml +29 -0
  348. package/src/clis/lobsters/hot.yaml +29 -0
  349. package/src/clis/lobsters/newest.yaml +29 -0
  350. package/src/clis/lobsters/tag.yaml +34 -0
  351. package/src/clis/medium/feed.ts +16 -0
  352. package/src/clis/medium/search.ts +16 -0
  353. package/src/clis/medium/shared.ts +83 -0
  354. package/src/clis/medium/user.ts +16 -0
  355. package/src/clis/reddit/comment.ts +1 -1
  356. package/src/clis/reddit/read.ts +1 -1
  357. package/src/clis/reddit/save.ts +1 -1
  358. package/src/clis/reddit/subreddit.yaml +1 -0
  359. package/src/clis/reddit/subscribe.ts +1 -1
  360. package/src/clis/reddit/upvote.ts +1 -1
  361. package/src/clis/sinablog/article.ts +15 -0
  362. package/src/clis/sinablog/hot.ts +15 -0
  363. package/src/clis/sinablog/search.ts +56 -0
  364. package/src/clis/sinablog/shared.ts +198 -0
  365. package/src/clis/sinablog/user.ts +16 -0
  366. package/src/clis/substack/feed.ts +16 -0
  367. package/src/clis/substack/publication.ts +16 -0
  368. package/src/clis/substack/search.ts +91 -0
  369. package/src/clis/substack/shared.ts +132 -0
  370. package/src/clis/tiktok/comment.yaml +66 -0
  371. package/src/clis/tiktok/explore.yaml +39 -0
  372. package/src/clis/tiktok/follow.yaml +39 -0
  373. package/src/clis/tiktok/following.yaml +46 -0
  374. package/src/clis/tiktok/friends.yaml +47 -0
  375. package/src/clis/tiktok/like.yaml +38 -0
  376. package/src/clis/tiktok/live.yaml +51 -0
  377. package/src/clis/tiktok/notifications.yaml +52 -0
  378. package/src/clis/tiktok/profile.yaml +45 -0
  379. package/src/clis/tiktok/save.yaml +34 -0
  380. package/src/clis/tiktok/search.yaml +46 -0
  381. package/src/clis/tiktok/unfollow.yaml +44 -0
  382. package/src/clis/tiktok/unlike.yaml +38 -0
  383. package/src/clis/tiktok/unsave.yaml +36 -0
  384. package/src/clis/tiktok/user.yaml +44 -0
  385. package/src/clis/twitter/download.ts +3 -3
  386. package/src/clis/twitter/followers.ts +1 -1
  387. package/src/clis/twitter/following.ts +1 -1
  388. package/src/clis/twitter/thread.ts +1 -1
  389. package/src/clis/twitter/timeline.test.ts +109 -0
  390. package/src/clis/twitter/timeline.ts +59 -19
  391. package/src/clis/wikipedia/random.ts +19 -0
  392. package/src/clis/wikipedia/search.ts +10 -4
  393. package/src/clis/wikipedia/summary.ts +4 -9
  394. package/src/clis/wikipedia/trending.ts +41 -0
  395. package/src/clis/wikipedia/utils.ts +31 -0
  396. package/src/clis/xiaohongshu/creator-note-detail.test.ts +2 -0
  397. package/src/clis/xiaohongshu/creator-note-detail.ts +1 -1
  398. package/src/clis/xiaohongshu/creator-notes.test.ts +2 -0
  399. package/src/clis/xiaohongshu/download.ts +1 -1
  400. package/src/clis/xueqiu/earnings-date.yaml +69 -0
  401. package/src/clis/xueqiu/search.yaml +2 -1
  402. package/src/clis/xueqiu/stock.yaml +2 -0
  403. package/src/clis/yahoo-finance/quote.ts +1 -1
  404. package/src/commanderAdapter.ts +17 -10
  405. package/src/daemon.ts +23 -0
  406. package/src/discovery.ts +134 -24
  407. package/src/doctor.test.ts +59 -2
  408. package/src/doctor.ts +4 -2
  409. package/src/engine.test.ts +79 -6
  410. package/src/execution.ts +42 -16
  411. package/src/explore.ts +77 -9
  412. package/src/generate.ts +58 -9
  413. package/src/main.ts +2 -1
  414. package/src/pipeline/executor.test.ts +35 -6
  415. package/src/pipeline/executor.ts +68 -19
  416. package/src/pipeline/registry.ts +3 -3
  417. package/src/pipeline/steps/browser.ts +24 -15
  418. package/src/pipeline/steps/fetch.ts +18 -13
  419. package/src/pipeline/steps/transform.ts +40 -15
  420. package/src/pipeline/template.test.ts +18 -0
  421. package/src/pipeline/template.ts +86 -13
  422. package/src/pipeline/transform.test.ts +15 -2
  423. package/src/plugin.test.ts +86 -0
  424. package/src/plugin.ts +254 -0
  425. package/src/registry-api.ts +12 -0
  426. package/src/registry.ts +19 -1
  427. package/src/synthesize.ts +102 -21
  428. package/src/types.ts +44 -12
  429. package/src/validate.ts +19 -4
  430. package/tests/e2e/browser-public.test.ts +11 -0
  431. package/tests/e2e/public-commands.test.ts +64 -0
  432. package/dist/clis/feishu/new.d.ts +0 -1
  433. package/dist/clis/feishu/new.js +0 -27
  434. package/dist/clis/feishu/read.d.ts +0 -1
  435. package/dist/clis/feishu/read.js +0 -40
  436. package/dist/clis/feishu/search.d.ts +0 -1
  437. package/dist/clis/feishu/search.js +0 -30
  438. package/dist/clis/feishu/send.d.ts +0 -1
  439. package/dist/clis/feishu/send.js +0 -39
  440. package/dist/clis/feishu/status.d.ts +0 -1
  441. package/dist/clis/feishu/status.js +0 -28
  442. package/dist/clis/neteasemusic/like.d.ts +0 -1
  443. package/dist/clis/neteasemusic/like.js +0 -25
  444. package/dist/clis/neteasemusic/lyrics.d.ts +0 -1
  445. package/dist/clis/neteasemusic/lyrics.js +0 -47
  446. package/dist/clis/neteasemusic/next.d.ts +0 -1
  447. package/dist/clis/neteasemusic/next.js +0 -26
  448. package/dist/clis/neteasemusic/play.d.ts +0 -1
  449. package/dist/clis/neteasemusic/play.js +0 -26
  450. package/dist/clis/neteasemusic/playing.d.ts +0 -1
  451. package/dist/clis/neteasemusic/playing.js +0 -59
  452. package/dist/clis/neteasemusic/playlist.d.ts +0 -1
  453. package/dist/clis/neteasemusic/playlist.js +0 -46
  454. package/dist/clis/neteasemusic/prev.d.ts +0 -1
  455. package/dist/clis/neteasemusic/prev.js +0 -25
  456. package/dist/clis/neteasemusic/search.d.ts +0 -1
  457. package/dist/clis/neteasemusic/search.js +0 -52
  458. package/dist/clis/neteasemusic/status.d.ts +0 -1
  459. package/dist/clis/neteasemusic/status.js +0 -16
  460. package/dist/clis/neteasemusic/volume.d.ts +0 -1
  461. package/dist/clis/neteasemusic/volume.js +0 -54
  462. package/dist/clis/wechat/chats.d.ts +0 -1
  463. package/dist/clis/wechat/chats.js +0 -28
  464. package/dist/clis/wechat/contacts.d.ts +0 -1
  465. package/dist/clis/wechat/contacts.js +0 -28
  466. package/dist/clis/wechat/read.d.ts +0 -1
  467. package/dist/clis/wechat/read.js +0 -58
  468. package/dist/clis/wechat/search.d.ts +0 -1
  469. package/dist/clis/wechat/search.js +0 -31
  470. package/dist/clis/wechat/send.d.ts +0 -1
  471. package/dist/clis/wechat/send.js +0 -42
  472. package/dist/clis/wechat/status.d.ts +0 -1
  473. package/dist/clis/wechat/status.js +0 -29
  474. package/dist/pipeline.d.ts +0 -7
  475. package/dist/pipeline.js +0 -7
  476. package/docs/adapters/browser/github.md +0 -26
  477. package/docs/adapters/desktop/feishu.md +0 -20
  478. package/docs/adapters/desktop/neteasemusic.md +0 -31
  479. package/docs/adapters/desktop/wechat.md +0 -28
  480. package/src/clis/antigravity/README.md +0 -5
  481. package/src/clis/antigravity/README.zh-CN.md +0 -51
  482. package/src/clis/chaoxing/README.md +0 -14
  483. package/src/clis/chaoxing/README.zh-CN.md +0 -35
  484. package/src/clis/chatgpt/README.md +0 -5
  485. package/src/clis/chatgpt/README.zh-CN.md +0 -44
  486. package/src/clis/chatwise/README.md +0 -5
  487. package/src/clis/chatwise/README.zh-CN.md +0 -38
  488. package/src/clis/codex/README.md +0 -5
  489. package/src/clis/codex/README.zh-CN.md +0 -33
  490. package/src/clis/cursor/README.md +0 -5
  491. package/src/clis/cursor/README.zh-CN.md +0 -33
  492. package/src/clis/discord-app/README.md +0 -5
  493. package/src/clis/discord-app/README.zh-CN.md +0 -28
  494. package/src/clis/feishu/README.md +0 -5
  495. package/src/clis/feishu/README.zh-CN.md +0 -20
  496. package/src/clis/feishu/new.ts +0 -32
  497. package/src/clis/feishu/read.ts +0 -48
  498. package/src/clis/feishu/search.ts +0 -35
  499. package/src/clis/feishu/send.ts +0 -46
  500. package/src/clis/feishu/status.ts +0 -34
  501. package/src/clis/neteasemusic/README.md +0 -5
  502. package/src/clis/neteasemusic/README.zh-CN.md +0 -31
  503. package/src/clis/neteasemusic/like.ts +0 -28
  504. package/src/clis/neteasemusic/lyrics.ts +0 -53
  505. package/src/clis/neteasemusic/next.ts +0 -30
  506. package/src/clis/neteasemusic/play.ts +0 -30
  507. package/src/clis/neteasemusic/playing.ts +0 -62
  508. package/src/clis/neteasemusic/playlist.ts +0 -51
  509. package/src/clis/neteasemusic/prev.ts +0 -29
  510. package/src/clis/neteasemusic/search.ts +0 -58
  511. package/src/clis/neteasemusic/status.ts +0 -18
  512. package/src/clis/neteasemusic/volume.ts +0 -61
  513. package/src/clis/notion/README.md +0 -5
  514. package/src/clis/notion/README.zh-CN.md +0 -29
  515. package/src/clis/wechat/README.md +0 -5
  516. package/src/clis/wechat/README.zh-CN.md +0 -28
  517. package/src/clis/wechat/chats.ts +0 -33
  518. package/src/clis/wechat/contacts.ts +0 -33
  519. package/src/clis/wechat/read.ts +0 -72
  520. package/src/clis/wechat/search.ts +0 -36
  521. package/src/clis/wechat/send.ts +0 -49
  522. package/src/clis/wechat/status.ts +0 -35
  523. package/src/pipeline.ts +0 -8
package/dist/types.d.ts CHANGED
@@ -4,6 +4,39 @@
4
4
  * All pipeline steps and CLI adapters should use this interface
5
5
  * instead of `any` for browser interactions.
6
6
  */
7
+ export interface BrowserCookie {
8
+ name: string;
9
+ value: string;
10
+ domain: string;
11
+ path?: string;
12
+ secure?: boolean;
13
+ httpOnly?: boolean;
14
+ expirationDate?: number;
15
+ }
16
+ export interface SnapshotOptions {
17
+ interactive?: boolean;
18
+ compact?: boolean;
19
+ maxDepth?: number;
20
+ raw?: boolean;
21
+ viewportExpand?: number;
22
+ maxTextLength?: number;
23
+ }
24
+ export interface WaitOptions {
25
+ text?: string;
26
+ time?: number;
27
+ timeout?: number;
28
+ }
29
+ export interface ScreenshotOptions {
30
+ format?: 'png' | 'jpeg';
31
+ quality?: number;
32
+ fullPage?: boolean;
33
+ path?: string;
34
+ }
35
+ export interface BrowserSessionInfo {
36
+ workspace?: string;
37
+ connected?: boolean;
38
+ [key: string]: unknown;
39
+ }
7
40
  export interface IPage {
8
41
  goto(url: string, options?: {
9
42
  waitUntil?: 'load' | 'none';
@@ -13,29 +46,14 @@ export interface IPage {
13
46
  getCookies(opts?: {
14
47
  domain?: string;
15
48
  url?: string;
16
- }): Promise<Array<{
17
- name: string;
18
- value: string;
19
- domain: string;
20
- path?: string;
21
- secure?: boolean;
22
- httpOnly?: boolean;
23
- expirationDate?: number;
24
- }>>;
25
- snapshot(opts?: {
26
- interactive?: boolean;
27
- compact?: boolean;
28
- maxDepth?: number;
29
- raw?: boolean;
30
- }): Promise<any>;
49
+ }): Promise<BrowserCookie[]>;
50
+ snapshot(opts?: SnapshotOptions): Promise<any>;
31
51
  click(ref: string): Promise<void>;
32
52
  typeText(ref: string, text: string): Promise<void>;
33
53
  pressKey(key: string): Promise<void>;
34
- wait(options: number | {
35
- text?: string;
36
- time?: number;
37
- timeout?: number;
38
- }): Promise<void>;
54
+ scrollTo(ref: string): Promise<any>;
55
+ getFormState(): Promise<any>;
56
+ wait(options: number | WaitOptions): Promise<void>;
39
57
  tabs(): Promise<any>;
40
58
  closeTab(index?: number): Promise<void>;
41
59
  newTab(): Promise<void>;
@@ -49,10 +67,5 @@ export interface IPage {
49
67
  }): Promise<void>;
50
68
  installInterceptor(pattern: string): Promise<void>;
51
69
  getInterceptedRequests(): Promise<any[]>;
52
- screenshot(options?: {
53
- format?: 'png' | 'jpeg';
54
- quality?: number;
55
- fullPage?: boolean;
56
- path?: string;
57
- }): Promise<string>;
70
+ screenshot(options?: ScreenshotOptions): Promise<string>;
58
71
  }
package/dist/validate.js CHANGED
@@ -9,6 +9,12 @@ const KNOWN_STEP_NAMES = new Set([
9
9
  'select', 'map', 'filter', 'sort', 'limit',
10
10
  'intercept', 'tap',
11
11
  ]);
12
+ function isRecord(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ function getErrorMessage(error) {
16
+ return error instanceof Error ? error.message : String(error);
17
+ }
12
18
  export function validateClisWithTarget(dirs, target) {
13
19
  const results = [];
14
20
  let errors = 0;
@@ -45,7 +51,7 @@ function validateYamlFile(filePath) {
45
51
  try {
46
52
  const raw = fs.readFileSync(filePath, 'utf-8');
47
53
  const def = yaml.load(raw);
48
- if (!def || typeof def !== 'object') {
54
+ if (!isRecord(def)) {
49
55
  errors.push('Not a valid YAML object');
50
56
  return { path: filePath, errors, warnings };
51
57
  }
@@ -75,7 +81,7 @@ function validateYamlFile(filePath) {
75
81
  }
76
82
  }
77
83
  catch (e) {
78
- errors.push(`YAML parse error: ${e.message}`);
84
+ errors.push(`YAML parse error: ${getErrorMessage(e)}`);
79
85
  }
80
86
  return { path: filePath, errors, warnings };
81
87
  }
@@ -31,6 +31,7 @@ export default defineConfig({
31
31
  { text: 'Installation', link: '/guide/installation' },
32
32
  { text: 'Browser Bridge', link: '/guide/browser-bridge' },
33
33
  { text: 'Troubleshooting', link: '/guide/troubleshooting' },
34
+ { text: 'Plugins', link: '/guide/plugins' },
34
35
  ],
35
36
  },
36
37
  ],
@@ -67,6 +68,9 @@ export default defineConfig({
67
68
  { text: 'Chaoxing', link: '/adapters/browser/chaoxing' },
68
69
  { text: 'Grok', link: '/adapters/browser/grok' },
69
70
  { text: 'WeRead', link: '/adapters/browser/weread' },
71
+ { text: 'Douban', link: '/adapters/browser/douban' },
72
+ { text: 'Sina Blog', link: '/adapters/browser/sinablog' },
73
+ { text: 'Substack', link: '/adapters/browser/substack' },
70
74
  ],
71
75
  },
72
76
  {
@@ -74,7 +78,7 @@ export default defineConfig({
74
78
  collapsed: false,
75
79
  items: [
76
80
  { text: 'HackerNews', link: '/adapters/browser/hackernews' },
77
- { text: 'GitHub', link: '/adapters/browser/github' },
81
+ { text: 'Dev.to', link: '/adapters/browser/devto' },
78
82
  { text: 'BBC', link: '/adapters/browser/bbc' },
79
83
  { text: 'Apple Podcasts', link: '/adapters/browser/apple-podcasts' },
80
84
  { text: 'Xiaoyuzhou', link: '/adapters/browser/xiaoyuzhou' },
@@ -98,9 +102,6 @@ export default defineConfig({
98
102
  { text: 'ChatWise', link: '/adapters/desktop/chatwise' },
99
103
  { text: 'Notion', link: '/adapters/desktop/notion' },
100
104
  { text: 'Discord', link: '/adapters/desktop/discord' },
101
- { text: 'Feishu', link: '/adapters/desktop/feishu' },
102
- { text: 'WeChat', link: '/adapters/desktop/wechat' },
103
- { text: 'NeteaseMusic', link: '/adapters/desktop/neteasemusic' },
104
105
  ],
105
106
  },
106
107
  ],
@@ -150,6 +151,7 @@ export default defineConfig({
150
151
  { text: '快速开始', link: '/zh/guide/getting-started' },
151
152
  { text: '安装', link: '/zh/guide/installation' },
152
153
  { text: 'Browser Bridge', link: '/zh/guide/browser-bridge' },
154
+ { text: '插件', link: '/zh/guide/plugins' },
153
155
  ],
154
156
  },
155
157
  ],
@@ -1,6 +1,6 @@
1
1
  # Barchart
2
2
 
3
- **Mode**: 🌐 Public · **Domain**: `barchart.com`
3
+ **Mode**: 🔐 Browser · **Domain**: `barchart.com`
4
4
 
5
5
  ## Commands
6
6
 
@@ -15,13 +15,13 @@
15
15
 
16
16
  ```bash
17
17
  # Get stock quote
18
- opencli barchart quote --symbol AAPL
18
+ opencli barchart quote AAPL
19
19
 
20
20
  # View options chain
21
- opencli barchart options --symbol TSLA
21
+ opencli barchart options TSLA
22
22
 
23
23
  # Options greeks overview
24
- opencli barchart greeks --symbol NVDA
24
+ opencli barchart greeks NVDA
25
25
 
26
26
  # Unusual options flow
27
27
  opencli barchart flow --limit 20 -f json
@@ -29,4 +29,5 @@ opencli barchart flow --limit 20 -f json
29
29
 
30
30
  ## Prerequisites
31
31
 
32
- - No browser required uses public API
32
+ - Chrome running and able to open `barchart.com`
33
+ - [Browser Bridge extension](/guide/browser-bridge) installed
@@ -25,6 +25,15 @@
25
25
  # Quick start
26
26
  opencli bilibili hot --limit 5
27
27
 
28
+ # Search videos
29
+ opencli bilibili search 黑神话 --limit 10
30
+
31
+ # Read one creator's videos
32
+ opencli bilibili user-videos 2 --limit 10
33
+
34
+ # Fetch subtitles
35
+ opencli bilibili subtitle BV1xx411c7mD --lang zh-CN
36
+
28
37
  # JSON output
29
38
  opencli bilibili hot -f json
30
39
 
@@ -0,0 +1,35 @@
1
+ # Dev.to
2
+
3
+ **Mode**: 🌐 Public · **Domain**: `dev.to`
4
+
5
+ Fetch the latest and greatest developer articles from the DEV community without needing an API key.
6
+
7
+ ## Commands
8
+
9
+ | Command | Description |
10
+ |---------|-------------|
11
+ | `opencli devto top` | Top DEV.to articles of the day |
12
+ | `opencli devto tag` | Latest articles for a specific tag |
13
+ | `opencli devto user` | Recent articles from a specific user |
14
+
15
+ ## Usage Examples
16
+
17
+ ```bash
18
+ # Top articles today
19
+ opencli devto top --limit 5
20
+
21
+ # Articles by tag (positional argument)
22
+ opencli devto tag javascript
23
+ opencli devto tag python --limit 20
24
+
25
+ # Articles by a specific author
26
+ opencli devto user ben
27
+ opencli devto user thepracticaldev --limit 5
28
+
29
+ # JSON output
30
+ opencli devto top -f json
31
+ ```
32
+
33
+ ## Prerequisites
34
+
35
+ - No browser required — uses the public DEV.to API
@@ -0,0 +1,38 @@
1
+ # 豆瓣 (Douban)
2
+
3
+ **Mode**: 🔐 Browser (Cookie) · **Domain**: `douban.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli douban movie-hot` | 豆瓣电影热门榜单 |
10
+ | `opencli douban book-hot` | 豆瓣图书热门榜单 |
11
+ | `opencli douban search` | 搜索豆瓣电影、图书或音乐 |
12
+
13
+ ## Usage Examples
14
+
15
+ ```bash
16
+ # 电影热门
17
+ opencli douban movie-hot --limit 10
18
+
19
+ # 图书热门
20
+ opencli douban book-hot --limit 10
21
+
22
+ # 搜索电影
23
+ opencli douban search "流浪地球"
24
+
25
+ # 搜索图书
26
+ opencli douban search --type book "三体"
27
+
28
+ # 搜索音乐
29
+ opencli douban search --type music "周杰伦"
30
+
31
+ # JSON output
32
+ opencli douban movie-hot -f json
33
+ ```
34
+
35
+ ## Prerequisites
36
+
37
+ - Chrome logged into `douban.com`
38
+ - Browser Bridge extension installed
@@ -0,0 +1,36 @@
1
+ # Facebook
2
+
3
+ **Mode**: 🔐 Browser · **Domain**: `facebook.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli facebook profile` | Get user/page profile info |
10
+ | `opencli facebook notifications` | Get recent notifications |
11
+ | `opencli facebook feed` | Get news feed posts |
12
+ | `opencli facebook search` | Search people, pages, posts |
13
+
14
+ ## Usage Examples
15
+
16
+ ```bash
17
+ # View a profile
18
+ opencli facebook profile zuck
19
+
20
+ # Get notifications
21
+ opencli facebook notifications --limit 10
22
+
23
+ # News feed
24
+ opencli facebook feed --limit 5
25
+
26
+ # Search
27
+ opencli facebook search "OpenAI" --limit 5
28
+
29
+ # JSON output
30
+ opencli facebook profile zuck -f json
31
+ ```
32
+
33
+ ## Prerequisites
34
+
35
+ - Chrome running and **logged into** facebook.com
36
+ - [Browser Bridge extension](/guide/browser-bridge) installed
@@ -0,0 +1,62 @@
1
+ # Google
2
+
3
+ **Mode**: 🌐 / 🔐 Mixed · **Domains**: `google.com`, `suggestqueries.google.com`, `news.google.com`, `trends.google.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli google search <keyword>` | Search Google and extract results from the page |
10
+ | `opencli google suggest <keyword>` | Get Google search suggestions |
11
+ | `opencli google news [keyword]` | Get Google News headlines (top stories or search) |
12
+ | `opencli google trends` | Get Google Trends daily trending searches |
13
+
14
+ ## What works today
15
+
16
+ - Public API commands work without a browser:
17
+ - `suggest` — JSON API, no auth needed
18
+ - `news` — RSS feed, supports top stories and keyword search
19
+ - `trends` — RSS feed, supports different regions
20
+ - `google search` uses browser mode to extract results from google.com.
21
+
22
+ ## Current limitations
23
+
24
+ - `google search` may trigger CAPTCHA in Standalone browser mode. Extension mode (with an established Chrome session) is more reliable.
25
+ - Google frequently changes its DOM structure. If `search` stops returning results, selectors may need updating.
26
+ - Snippet extraction may return empty for some results depending on Google's layout.
27
+
28
+ ## Usage Examples
29
+
30
+ ```bash
31
+ # Search Google
32
+ opencli google search "typescript tutorial" --limit 10
33
+
34
+ # Get search suggestions
35
+ opencli google suggest python
36
+
37
+ # Get top news headlines
38
+ opencli google news --limit 5
39
+
40
+ # Search news for a topic
41
+ opencli google news "artificial intelligence" --limit 10 --lang en --region US
42
+
43
+ # Get trending searches in Japan
44
+ opencli google trends --region JP --limit 10
45
+
46
+ # Output as JSON
47
+ opencli google search "machine learning" -f json
48
+ ```
49
+
50
+ ## Prerequisites
51
+
52
+ - `suggest`, `news`, `trends` do not require Chrome.
53
+ - `search` requires:
54
+ - Chrome running (or Standalone mode will auto-launch)
55
+ - For best results, use the [Browser Bridge extension](/guide/browser-bridge) with an established Google session
56
+
57
+ ## Notes
58
+
59
+ - `suggest` defaults to `--lang zh-CN`; other commands default to `--lang en`.
60
+ - `news` supports `--lang` and `--region` parameters for localized results.
61
+ - `trends` traffic values are raw strings (e.g. "500K+", "1,000,000+"), not numeric.
62
+ - `search` output includes three result types: `result` (standard), `snippet` (featured answer box), and `paa` (People Also Ask).
@@ -1,24 +1,28 @@
1
1
  # Grok
2
2
 
3
- **Mode**: 🔐 Browser · **Domain**: `grok.com`
3
+ **Mode**: Default Grok adapter + optional explicit consumer web path · **Domain**: `grok.com`
4
4
 
5
5
  ## Commands
6
6
 
7
7
  | Command | Description |
8
8
  |---------|-------------|
9
- | `opencli grok ask` | Send a message to Grok and get response |
9
+ | `opencli grok ask` | Keep the default Grok ask behavior |
10
+ | `opencli grok ask --web` | Use the explicit grok.com consumer web UI flow |
10
11
 
11
12
  ## Usage Examples
12
13
 
13
14
  ```bash
14
- # Ask Grok a question
15
+ # Default / compatibility path
15
16
  opencli grok ask --prompt "Explain quantum computing in simple terms"
16
17
 
17
- # Start a new chat session
18
- opencli grok ask --prompt "Hello" --new
18
+ # Explicit consumer web path
19
+ opencli grok ask --prompt "Explain quantum computing in simple terms" --web
20
+
21
+ # Best-effort fresh chat on the consumer web path
22
+ opencli grok ask --prompt "Hello" --web --new
19
23
 
20
24
  # Set custom timeout (default: 120s)
21
- opencli grok ask --prompt "Write a long essay" --timeout 180
25
+ opencli grok ask --prompt "Write a long essay" --web --timeout 180
22
26
  ```
23
27
 
24
28
  ### Options
@@ -27,9 +31,23 @@ opencli grok ask --prompt "Write a long essay" --timeout 180
27
31
  |--------|-------------|
28
32
  | `--prompt` | The message to send (required) |
29
33
  | `--timeout` | Wait timeout in seconds (default: 120) |
30
- | `--new` | Start a new chat session (default: false) |
34
+ | `--new` | Start a new chat before sending (default: false) |
35
+ | `--web` | Opt into the explicit grok.com consumer web flow (default: false) |
36
+
37
+ ## Behavior
38
+
39
+ - `opencli grok ask` keeps the upstream/default behavior intact.
40
+ - `opencli grok ask --web` switches to the newer hardened consumer-web implementation.
41
+ - The `--web` path adds stricter composer detection, clearer blocked/session-gated hints, and waits for a stabilized assistant bubble before returning.
31
42
 
32
43
  ## Prerequisites
33
44
 
34
- - Chrome running and **logged into** grok.com
45
+ - The Grok adapter still depends on browser-backed access to `grok.com`
46
+ - For `--web`, Chrome should already be running with an authenticated Grok consumer session
35
47
  - [Browser Bridge extension](/guide/browser-bridge) installed
48
+
49
+ ## Caveats
50
+
51
+ - `--web` drives the Grok consumer web UI in the browser, not an API.
52
+ - It depends on an already-authenticated session and can fail if Grok shows login, challenge, rate-limit, or other session-gating UI.
53
+ - It may break when the Grok composer DOM, submit button behavior, or message bubble structure changes.
@@ -0,0 +1,46 @@
1
+ # Instagram
2
+
3
+ **Mode**: 🔐 Browser · **Domain**: `instagram.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli instagram profile` | Get user profile info |
10
+ | `opencli instagram search` | Search users |
11
+ | `opencli instagram user` | Get recent posts from a user |
12
+ | `opencli instagram explore` | Discover trending posts |
13
+ | `opencli instagram followers` | List user's followers |
14
+ | `opencli instagram following` | List user's following |
15
+ | `opencli instagram saved` | Get your saved posts |
16
+
17
+ ## Usage Examples
18
+
19
+ ```bash
20
+ # View a user's profile
21
+ opencli instagram profile nasa
22
+
23
+ # Search users
24
+ opencli instagram search nasa --limit 5
25
+
26
+ # View a user's recent posts
27
+ opencli instagram user nasa --limit 10
28
+
29
+ # Discover trending posts
30
+ opencli instagram explore --limit 20
31
+
32
+ # List followers/following
33
+ opencli instagram followers nasa --limit 20
34
+ opencli instagram following nasa --limit 20
35
+
36
+ # Get your saved posts
37
+ opencli instagram saved --limit 10
38
+
39
+ # JSON output
40
+ opencli instagram profile nasa -f json
41
+ ```
42
+
43
+ ## Prerequisites
44
+
45
+ - Chrome running and **logged into** instagram.com
46
+ - [Browser Bridge extension](/guide/browser-bridge) installed
@@ -0,0 +1,32 @@
1
+ # Lobsters
2
+
3
+ **Mode**: 🌐 Public · **Domain**: `lobste.rs`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli lobsters hot` | Hottest stories |
10
+ | `opencli lobsters newest` | Latest stories |
11
+ | `opencli lobsters active` | Most active discussions |
12
+ | `opencli lobsters tag` | Stories by tag |
13
+
14
+ ## Usage Examples
15
+
16
+ ```bash
17
+ # Quick start
18
+ opencli lobsters hot --limit 10
19
+
20
+ # Filter by tag
21
+ opencli lobsters tag --tag rust --limit 5
22
+
23
+ # JSON output
24
+ opencli lobsters hot -f json
25
+
26
+ # Verbose mode
27
+ opencli lobsters hot -v
28
+ ```
29
+
30
+ ## Prerequisites
31
+
32
+ None — all commands use the public JSON API, no browser or login required.
@@ -0,0 +1,32 @@
1
+ # Medium
2
+
3
+ **Mode**: 🌗 Mixed · **Domain**: `medium.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli medium feed` | Get hot Medium posts, optionally scoped to a topic |
10
+ | `opencli medium search` | Search Medium posts by keyword |
11
+ | `opencli medium user` | Get recent articles by a user |
12
+
13
+ ## Usage Examples
14
+
15
+ ```bash
16
+ # Get the general Medium feed
17
+ opencli medium feed --limit 10
18
+
19
+ # Search posts by keyword
20
+ opencli medium search ai
21
+
22
+ # Get articles by a user
23
+ opencli medium user @username
24
+
25
+ # Topic feed as JSON
26
+ opencli medium feed --topic programming -f json
27
+ ```
28
+
29
+ ## Prerequisites
30
+
31
+ - `opencli medium search` can run without a browser
32
+ - `opencli medium feed` and `opencli medium user` require Browser Bridge access to `medium.com`
@@ -28,6 +28,15 @@
28
28
  # Quick start
29
29
  opencli reddit hot --limit 5
30
30
 
31
+ # Read one subreddit
32
+ opencli reddit subreddit python --limit 10
33
+
34
+ # Read a post thread
35
+ opencli reddit read 1abc123 --depth 2
36
+
37
+ # Comment on a post
38
+ opencli reddit comment 1abc123 "Great post"
39
+
31
40
  # JSON output
32
41
  opencli reddit hot -f json
33
42
 
@@ -0,0 +1,36 @@
1
+ # 新浪博客 (Sina Blog)
2
+
3
+ **Mode**: 🌐 Public (search) / 🔐 Browser (hot, article, user) · **Domain**: `blog.sina.com.cn`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli sinablog hot` | 获取新浪博客热门文章/推荐 |
10
+ | `opencli sinablog search` | 搜索新浪博客文章(通过新浪搜索,无需浏览器) |
11
+ | `opencli sinablog article` | 获取新浪博客单篇文章详情 |
12
+ | `opencli sinablog user` | 获取新浪博客用户的文章列表 |
13
+
14
+ ## Usage Examples
15
+
16
+ ```bash
17
+ # 热门文章
18
+ opencli sinablog hot --limit 10
19
+
20
+ # 搜索文章(公开 API,无需浏览器)
21
+ opencli sinablog search "人工智能"
22
+
23
+ # 文章详情
24
+ opencli sinablog article "https://blog.sina.com.cn/s/blog_xxx.html"
25
+
26
+ # 用户文章列表
27
+ opencli sinablog user 1234567890 --limit 10
28
+
29
+ # JSON output
30
+ opencli sinablog hot -f json
31
+ ```
32
+
33
+ ## Prerequisites
34
+
35
+ - `search` command: No login required (public API)
36
+ - `hot`, `article`, `user` commands: Chrome with `blog.sina.com.cn` accessible, Browser Bridge extension installed
@@ -0,0 +1,38 @@
1
+ # Substack
2
+
3
+ **Mode**: 🌐 Public (search) / 🔐 Browser (feed, publication) · **Domain**: `substack.com`
4
+
5
+ ## Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `opencli substack feed` | Substack 热门文章 Feed |
10
+ | `opencli substack search` | 搜索 Substack 文章和 Newsletter(无需浏览器) |
11
+ | `opencli substack publication` | 获取特定 Substack Newsletter 的最新文章 |
12
+
13
+ ## Usage Examples
14
+
15
+ ```bash
16
+ # 热门 Feed
17
+ opencli substack feed --limit 10
18
+
19
+ # 按分类浏览
20
+ opencli substack feed --category tech --limit 10
21
+
22
+ # 搜索文章(公开 API,无需浏览器)
23
+ opencli substack search "AI"
24
+
25
+ # 搜索 Newsletter
26
+ opencli substack search "technology" --type publications
27
+
28
+ # 查看特定 Newsletter 的最新文章
29
+ opencli substack publication "https://example.substack.com" --limit 10
30
+
31
+ # JSON output
32
+ opencli substack search "AI" -f json
33
+ ```
34
+
35
+ ## Prerequisites
36
+
37
+ - `search` command: No login required (public API)
38
+ - `feed`, `publication` commands: Chrome with `substack.com` accessible, Browser Bridge extension installed