@jackwener/opencli 1.0.6 → 1.1.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 (400) hide show
  1. package/.agents/skills/cross-project-adapter-migration/SKILL.md +2 -2
  2. package/.github/pull_request_template.md +7 -0
  3. package/.github/workflows/doc-check.yml +36 -0
  4. package/.github/workflows/docs.yml +7 -42
  5. package/CHANGELOG.md +23 -0
  6. package/CLI-EXPLORER.md +9 -8
  7. package/README.md +51 -10
  8. package/README.zh-CN.md +29 -11
  9. package/SKILL.md +102 -33
  10. package/dist/browser/cdp.js +6 -1
  11. package/dist/browser/page.d.ts +4 -1
  12. package/dist/browser/page.js +7 -1
  13. package/dist/build-manifest.js +23 -16
  14. package/dist/cli-manifest.json +951 -296
  15. package/dist/cli.d.ts +6 -0
  16. package/dist/cli.js +225 -148
  17. package/dist/clis/antigravity/serve.js +296 -47
  18. package/dist/clis/apple-podcasts/commands.test.d.ts +2 -0
  19. package/dist/clis/apple-podcasts/commands.test.js +76 -0
  20. package/dist/clis/apple-podcasts/search.js +2 -2
  21. package/dist/clis/apple-podcasts/top.js +9 -2
  22. package/dist/clis/arxiv/paper.js +21 -0
  23. package/dist/clis/arxiv/search.js +24 -0
  24. package/dist/clis/arxiv/utils.d.ts +18 -0
  25. package/dist/clis/arxiv/utils.js +49 -0
  26. package/dist/clis/bilibili/dynamic.js +1 -1
  27. package/dist/clis/bilibili/favorite.js +1 -1
  28. package/dist/clis/bilibili/feed.js +1 -1
  29. package/dist/clis/bilibili/following.js +1 -1
  30. package/dist/clis/bilibili/history.js +1 -1
  31. package/dist/clis/bilibili/me.js +1 -1
  32. package/dist/clis/bilibili/ranking.js +1 -1
  33. package/dist/clis/bilibili/search.js +3 -3
  34. package/dist/clis/bilibili/subtitle.js +1 -1
  35. package/dist/clis/bilibili/user-videos.js +1 -1
  36. package/dist/{bilibili.d.ts → clis/bilibili/utils.d.ts} +1 -1
  37. package/dist/clis/bloomberg/businessweek.d.ts +1 -0
  38. package/dist/clis/bloomberg/businessweek.js +17 -0
  39. package/dist/clis/bloomberg/economics.d.ts +1 -0
  40. package/dist/clis/bloomberg/economics.js +17 -0
  41. package/dist/clis/bloomberg/feeds.d.ts +1 -0
  42. package/dist/clis/bloomberg/feeds.js +15 -0
  43. package/dist/clis/bloomberg/industries.d.ts +1 -0
  44. package/dist/clis/bloomberg/industries.js +17 -0
  45. package/dist/clis/bloomberg/main.d.ts +1 -0
  46. package/dist/clis/bloomberg/main.js +17 -0
  47. package/dist/clis/bloomberg/markets.d.ts +1 -0
  48. package/dist/clis/bloomberg/markets.js +17 -0
  49. package/dist/clis/bloomberg/news.d.ts +1 -0
  50. package/dist/clis/bloomberg/news.js +105 -0
  51. package/dist/clis/bloomberg/opinions.d.ts +1 -0
  52. package/dist/clis/bloomberg/opinions.js +17 -0
  53. package/dist/clis/bloomberg/politics.d.ts +1 -0
  54. package/dist/clis/bloomberg/politics.js +17 -0
  55. package/dist/clis/bloomberg/tech.d.ts +1 -0
  56. package/dist/clis/bloomberg/tech.js +17 -0
  57. package/dist/clis/bloomberg/utils.d.ts +34 -0
  58. package/dist/clis/bloomberg/utils.js +364 -0
  59. package/dist/clis/bloomberg/utils.test.d.ts +1 -0
  60. package/dist/clis/bloomberg/utils.test.js +129 -0
  61. package/dist/clis/boss/batchgreet.d.ts +1 -0
  62. package/dist/clis/boss/batchgreet.js +147 -0
  63. package/dist/clis/boss/chatlist.js +2 -2
  64. package/dist/clis/boss/detail.js +2 -2
  65. package/dist/clis/boss/exchange.d.ts +1 -0
  66. package/dist/clis/boss/exchange.js +111 -0
  67. package/dist/clis/boss/greet.d.ts +1 -0
  68. package/dist/clis/boss/greet.js +175 -0
  69. package/dist/clis/boss/invite.d.ts +1 -0
  70. package/dist/clis/boss/invite.js +158 -0
  71. package/dist/clis/boss/joblist.d.ts +1 -0
  72. package/dist/clis/boss/joblist.js +55 -0
  73. package/dist/clis/boss/mark.d.ts +1 -0
  74. package/dist/clis/boss/mark.js +141 -0
  75. package/dist/clis/boss/recommend.d.ts +1 -0
  76. package/dist/clis/boss/recommend.js +83 -0
  77. package/dist/clis/boss/search.js +1 -1
  78. package/dist/clis/boss/send.js +1 -1
  79. package/dist/clis/boss/stats.d.ts +1 -0
  80. package/dist/clis/boss/stats.js +116 -0
  81. package/dist/clis/chaoxing/assignments.js +1 -1
  82. package/dist/clis/chaoxing/exams.js +1 -1
  83. package/dist/{chaoxing.d.ts → clis/chaoxing/utils.d.ts} +1 -1
  84. package/dist/{chaoxing.js → clis/chaoxing/utils.js} +0 -2
  85. package/dist/clis/chaoxing/utils.test.d.ts +1 -0
  86. package/dist/{chaoxing.test.js → clis/chaoxing/utils.test.js} +1 -1
  87. package/dist/clis/chatgpt/read.js +1 -1
  88. package/dist/clis/chatwise/export.js +1 -1
  89. package/dist/clis/chatwise/model.js +2 -2
  90. package/dist/clis/chatwise/screenshot.js +1 -1
  91. package/dist/clis/codex/export.js +1 -1
  92. package/dist/clis/codex/model.js +2 -2
  93. package/dist/clis/codex/screenshot.js +1 -1
  94. package/dist/clis/coupang/add-to-cart.js +3 -4
  95. package/dist/clis/coupang/search.js +2 -4
  96. package/dist/clis/coupang/utils.test.d.ts +1 -0
  97. package/dist/{coupang.test.js → clis/coupang/utils.test.js} +1 -1
  98. package/dist/clis/ctrip/search.js +1 -1
  99. package/dist/clis/cursor/export.js +1 -1
  100. package/dist/clis/cursor/model.js +2 -2
  101. package/dist/clis/cursor/screenshot.js +1 -1
  102. package/dist/clis/jike/comment.js +2 -3
  103. package/dist/clis/jike/create.js +1 -2
  104. package/dist/clis/jike/feed.js +0 -1
  105. package/dist/clis/jike/like.js +1 -2
  106. package/dist/clis/jike/notifications.js +0 -1
  107. package/dist/clis/jike/post.yaml +1 -0
  108. package/dist/clis/jike/repost.js +1 -2
  109. package/dist/clis/jike/search.js +2 -3
  110. package/dist/clis/jike/topic.yaml +1 -0
  111. package/dist/clis/jike/user.yaml +1 -0
  112. package/dist/clis/jimeng/history.yaml +0 -1
  113. package/dist/clis/linkedin/search.js +7 -7
  114. package/dist/clis/linux-do/category.yaml +1 -0
  115. package/dist/clis/linux-do/search.yaml +4 -3
  116. package/dist/clis/linux-do/topic.yaml +1 -0
  117. package/dist/clis/notion/export.js +1 -1
  118. package/dist/clis/reddit/comment.js +3 -4
  119. package/dist/clis/reddit/read.js +4 -5
  120. package/dist/clis/reddit/save.js +2 -3
  121. package/dist/clis/reddit/saved.js +0 -1
  122. package/dist/clis/reddit/search.yaml +1 -0
  123. package/dist/clis/reddit/subscribe.js +0 -1
  124. package/dist/clis/reddit/upvote.js +2 -3
  125. package/dist/clis/reddit/upvoted.js +0 -1
  126. package/dist/clis/reddit/user-comments.yaml +1 -0
  127. package/dist/clis/reddit/user-posts.yaml +1 -0
  128. package/dist/clis/reddit/user.yaml +1 -0
  129. package/dist/clis/reuters/search.js +1 -1
  130. package/dist/clis/sinafinance/news.d.ts +7 -0
  131. package/dist/clis/sinafinance/news.js +61 -0
  132. package/dist/clis/smzdm/search.js +2 -3
  133. package/dist/clis/stackoverflow/search.yaml +1 -0
  134. package/dist/clis/steam/top-sellers.yaml +29 -0
  135. package/dist/clis/twitter/accept.js +2 -2
  136. package/dist/clis/twitter/article.js +2 -2
  137. package/dist/clis/twitter/block.d.ts +1 -0
  138. package/dist/clis/twitter/block.js +88 -0
  139. package/dist/clis/twitter/delete.js +1 -1
  140. package/dist/clis/twitter/hide-reply.d.ts +1 -0
  141. package/dist/clis/twitter/hide-reply.js +66 -0
  142. package/dist/clis/twitter/like.js +1 -1
  143. package/dist/clis/twitter/post.js +1 -1
  144. package/dist/clis/twitter/reply-dm.js +1 -1
  145. package/dist/clis/twitter/reply.js +2 -2
  146. package/dist/clis/twitter/search.js +1 -1
  147. package/dist/clis/twitter/thread.js +2 -2
  148. package/dist/clis/twitter/trending.d.ts +1 -0
  149. package/dist/clis/twitter/trending.js +91 -0
  150. package/dist/clis/twitter/unblock.d.ts +1 -0
  151. package/dist/clis/twitter/unblock.js +71 -0
  152. package/dist/clis/v2ex/topic.yaml +1 -0
  153. package/dist/clis/weibo/hot.js +0 -1
  154. package/dist/clis/weread/book.js +1 -1
  155. package/dist/clis/weread/highlights.js +1 -1
  156. package/dist/clis/weread/notes.js +1 -1
  157. package/dist/clis/weread/search.js +1 -1
  158. package/dist/clis/wikipedia/search.d.ts +1 -0
  159. package/dist/clis/wikipedia/search.js +30 -0
  160. package/dist/clis/wikipedia/summary.d.ts +1 -0
  161. package/dist/clis/wikipedia/summary.js +28 -0
  162. package/dist/clis/wikipedia/utils.d.ts +8 -0
  163. package/dist/clis/wikipedia/utils.js +18 -0
  164. package/dist/clis/xiaohongshu/creator-note-detail.d.ts +79 -5
  165. package/dist/clis/xiaohongshu/creator-note-detail.js +323 -70
  166. package/dist/clis/xiaohongshu/creator-note-detail.test.d.ts +1 -0
  167. package/dist/clis/xiaohongshu/creator-note-detail.test.js +258 -0
  168. package/dist/clis/xiaohongshu/creator-notes-summary.d.ts +28 -0
  169. package/dist/clis/xiaohongshu/creator-notes-summary.js +92 -0
  170. package/dist/clis/xiaohongshu/creator-notes-summary.test.d.ts +1 -0
  171. package/dist/clis/xiaohongshu/creator-notes-summary.test.js +49 -0
  172. package/dist/clis/xiaohongshu/creator-notes.d.ts +18 -5
  173. package/dist/clis/xiaohongshu/creator-notes.js +189 -71
  174. package/dist/clis/xiaohongshu/creator-notes.test.d.ts +1 -0
  175. package/dist/clis/xiaohongshu/creator-notes.test.js +191 -0
  176. package/dist/clis/xiaohongshu/creator-profile.js +0 -1
  177. package/dist/clis/xiaohongshu/creator-stats.js +0 -1
  178. package/dist/clis/xiaohongshu/download.js +2 -3
  179. package/dist/clis/xiaohongshu/feed.yaml +0 -1
  180. package/dist/clis/xiaohongshu/notifications.yaml +0 -1
  181. package/dist/clis/xiaohongshu/search.js +2 -2
  182. package/dist/clis/xiaohongshu/user.js +1 -2
  183. package/dist/clis/yahoo-finance/quote.js +0 -1
  184. package/dist/clis/youtube/search.js +1 -1
  185. package/dist/clis/youtube/transcript.js +1 -1
  186. package/dist/clis/youtube/video.js +1 -1
  187. package/dist/clis/zhihu/download.js +1 -2
  188. package/dist/clis/zhihu/question.js +1 -1
  189. package/dist/clis/zhihu/search.yaml +4 -3
  190. package/dist/commanderAdapter.d.ts +21 -0
  191. package/dist/commanderAdapter.js +111 -0
  192. package/dist/{engine.d.ts → discovery.d.ts} +0 -6
  193. package/dist/{engine.js → discovery.js} +1 -98
  194. package/dist/download/index.d.ts +2 -6
  195. package/dist/download/index.js +19 -46
  196. package/dist/engine.test.d.ts +1 -1
  197. package/dist/engine.test.js +8 -7
  198. package/dist/execution.d.ts +22 -0
  199. package/dist/execution.js +129 -0
  200. package/dist/explore.js +121 -107
  201. package/dist/external-clis.yaml +48 -0
  202. package/dist/external.d.ts +25 -0
  203. package/dist/external.js +156 -0
  204. package/dist/main.js +1 -1
  205. package/dist/pipeline/steps/browser.js +8 -2
  206. package/dist/registry.d.ts +2 -0
  207. package/dist/registry.js +2 -0
  208. package/dist/runtime.d.ts +5 -0
  209. package/dist/runtime.js +8 -0
  210. package/dist/serialization.d.ts +34 -0
  211. package/dist/serialization.js +63 -0
  212. package/dist/types.d.ts +4 -1
  213. package/docs/.vitepress/config.mts +14 -3
  214. package/docs/adapters/browser/arxiv.md +27 -0
  215. package/docs/adapters/browser/barchart.md +32 -0
  216. package/docs/adapters/browser/bloomberg.md +70 -0
  217. package/docs/adapters/browser/chaoxing.md +39 -0
  218. package/docs/adapters/browser/grok.md +35 -0
  219. package/docs/adapters/browser/hf.md +42 -0
  220. package/docs/adapters/browser/jike.md +45 -0
  221. package/docs/adapters/browser/jimeng.md +39 -0
  222. package/docs/adapters/browser/linux-do.md +45 -0
  223. package/docs/adapters/browser/sinafinance.md +35 -0
  224. package/docs/adapters/browser/stackoverflow.md +35 -0
  225. package/docs/adapters/browser/steam.md +26 -0
  226. package/docs/adapters/browser/twitter.md +3 -0
  227. package/docs/adapters/browser/weread.md +48 -0
  228. package/docs/adapters/browser/wikipedia.md +30 -0
  229. package/docs/adapters/browser/xiaohongshu.md +5 -1
  230. package/docs/adapters/desktop/chatgpt.md +3 -3
  231. package/docs/adapters/index.md +13 -0
  232. package/docs/advanced/download.md +4 -4
  233. package/docs/developer/architecture.md +17 -4
  234. package/package.json +1 -1
  235. package/scripts/check-doc-coverage.sh +69 -0
  236. package/scripts/copy-yaml.cjs +7 -0
  237. package/src/browser/cdp.ts +9 -4
  238. package/src/browser/page.ts +7 -1
  239. package/src/build-manifest.ts +25 -19
  240. package/src/cli.ts +253 -119
  241. package/src/clis/antigravity/serve.ts +323 -50
  242. package/src/clis/apple-podcasts/commands.test.ts +95 -0
  243. package/src/clis/apple-podcasts/search.ts +2 -2
  244. package/src/clis/apple-podcasts/top.ts +12 -2
  245. package/src/clis/arxiv/paper.ts +21 -0
  246. package/src/clis/arxiv/search.ts +24 -0
  247. package/src/clis/arxiv/utils.ts +63 -0
  248. package/src/clis/bilibili/dynamic.ts +1 -1
  249. package/src/clis/bilibili/favorite.ts +1 -1
  250. package/src/clis/bilibili/feed.ts +1 -1
  251. package/src/clis/bilibili/following.ts +1 -1
  252. package/src/clis/bilibili/history.ts +1 -1
  253. package/src/clis/bilibili/me.ts +1 -1
  254. package/src/clis/bilibili/ranking.ts +1 -1
  255. package/src/clis/bilibili/search.ts +3 -3
  256. package/src/clis/bilibili/subtitle.ts +1 -1
  257. package/src/clis/bilibili/user-videos.ts +1 -1
  258. package/src/{bilibili.ts → clis/bilibili/utils.ts} +1 -1
  259. package/src/clis/bloomberg/businessweek.ts +18 -0
  260. package/src/clis/bloomberg/economics.ts +18 -0
  261. package/src/clis/bloomberg/feeds.ts +16 -0
  262. package/src/clis/bloomberg/industries.ts +18 -0
  263. package/src/clis/bloomberg/main.ts +18 -0
  264. package/src/clis/bloomberg/markets.ts +18 -0
  265. package/src/clis/bloomberg/news.ts +136 -0
  266. package/src/clis/bloomberg/opinions.ts +18 -0
  267. package/src/clis/bloomberg/politics.ts +18 -0
  268. package/src/clis/bloomberg/tech.ts +18 -0
  269. package/src/clis/bloomberg/utils.test.ts +135 -0
  270. package/src/clis/bloomberg/utils.ts +429 -0
  271. package/src/clis/boss/batchgreet.ts +167 -0
  272. package/src/clis/boss/chatlist.ts +2 -2
  273. package/src/clis/boss/detail.ts +2 -2
  274. package/src/clis/boss/exchange.ts +126 -0
  275. package/src/clis/boss/greet.ts +198 -0
  276. package/src/clis/boss/invite.ts +177 -0
  277. package/src/clis/boss/joblist.ts +63 -0
  278. package/src/clis/boss/mark.ts +155 -0
  279. package/src/clis/boss/recommend.ts +94 -0
  280. package/src/clis/boss/search.ts +1 -1
  281. package/src/clis/boss/send.ts +1 -1
  282. package/src/clis/boss/stats.ts +130 -0
  283. package/src/clis/chaoxing/assignments.ts +1 -1
  284. package/src/clis/chaoxing/exams.ts +1 -1
  285. package/src/{chaoxing.test.ts → clis/chaoxing/utils.test.ts} +1 -1
  286. package/src/{chaoxing.ts → clis/chaoxing/utils.ts} +1 -3
  287. package/src/clis/chatgpt/README.zh-CN.md +3 -3
  288. package/src/clis/chatgpt/read.ts +1 -1
  289. package/src/clis/chatwise/export.ts +1 -1
  290. package/src/clis/chatwise/model.ts +2 -2
  291. package/src/clis/chatwise/screenshot.ts +1 -1
  292. package/src/clis/codex/export.ts +1 -1
  293. package/src/clis/codex/model.ts +2 -2
  294. package/src/clis/codex/screenshot.ts +1 -1
  295. package/src/clis/coupang/add-to-cart.ts +3 -4
  296. package/src/clis/coupang/search.ts +2 -4
  297. package/src/{coupang.test.ts → clis/coupang/utils.test.ts} +1 -1
  298. package/src/clis/ctrip/search.ts +1 -1
  299. package/src/clis/cursor/export.ts +1 -1
  300. package/src/clis/cursor/model.ts +2 -2
  301. package/src/clis/cursor/screenshot.ts +1 -1
  302. package/src/clis/jike/comment.ts +2 -3
  303. package/src/clis/jike/create.ts +1 -2
  304. package/src/clis/jike/feed.ts +0 -1
  305. package/src/clis/jike/like.ts +1 -2
  306. package/src/clis/jike/notifications.ts +0 -1
  307. package/src/clis/jike/post.yaml +1 -0
  308. package/src/clis/jike/repost.ts +1 -2
  309. package/src/clis/jike/search.ts +2 -3
  310. package/src/clis/jike/topic.yaml +1 -0
  311. package/src/clis/jike/user.yaml +1 -0
  312. package/src/clis/jimeng/history.yaml +0 -1
  313. package/src/clis/linkedin/search.ts +7 -7
  314. package/src/clis/linux-do/category.yaml +1 -0
  315. package/src/clis/linux-do/search.yaml +4 -3
  316. package/src/clis/linux-do/topic.yaml +1 -0
  317. package/src/clis/notion/export.ts +1 -1
  318. package/src/clis/reddit/comment.ts +3 -4
  319. package/src/clis/reddit/read.ts +4 -5
  320. package/src/clis/reddit/save.ts +2 -3
  321. package/src/clis/reddit/saved.ts +0 -1
  322. package/src/clis/reddit/search.yaml +1 -0
  323. package/src/clis/reddit/subscribe.ts +0 -1
  324. package/src/clis/reddit/upvote.ts +2 -3
  325. package/src/clis/reddit/upvoted.ts +0 -1
  326. package/src/clis/reddit/user-comments.yaml +1 -0
  327. package/src/clis/reddit/user-posts.yaml +1 -0
  328. package/src/clis/reddit/user.yaml +1 -0
  329. package/src/clis/reuters/search.ts +1 -1
  330. package/src/clis/sinafinance/news.ts +76 -0
  331. package/src/clis/smzdm/search.ts +2 -3
  332. package/src/clis/stackoverflow/search.yaml +1 -0
  333. package/src/clis/steam/top-sellers.yaml +29 -0
  334. package/src/clis/twitter/accept.ts +2 -2
  335. package/src/clis/twitter/article.ts +2 -2
  336. package/src/clis/twitter/block.ts +92 -0
  337. package/src/clis/twitter/delete.ts +1 -1
  338. package/src/clis/twitter/hide-reply.ts +70 -0
  339. package/src/clis/twitter/like.ts +1 -1
  340. package/src/clis/twitter/post.ts +1 -1
  341. package/src/clis/twitter/reply-dm.ts +1 -1
  342. package/src/clis/twitter/reply.ts +2 -2
  343. package/src/clis/twitter/search.ts +1 -1
  344. package/src/clis/twitter/thread.ts +2 -2
  345. package/src/clis/twitter/trending.ts +113 -0
  346. package/src/clis/twitter/unblock.ts +75 -0
  347. package/src/clis/v2ex/topic.yaml +1 -0
  348. package/src/clis/weibo/hot.ts +0 -1
  349. package/src/clis/weread/book.ts +1 -1
  350. package/src/clis/weread/highlights.ts +1 -1
  351. package/src/clis/weread/notes.ts +1 -1
  352. package/src/clis/weread/search.ts +1 -1
  353. package/src/clis/wikipedia/search.ts +32 -0
  354. package/src/clis/wikipedia/summary.ts +28 -0
  355. package/src/clis/wikipedia/utils.ts +20 -0
  356. package/src/clis/xiaohongshu/creator-note-detail.test.ts +272 -0
  357. package/src/clis/xiaohongshu/creator-note-detail.ts +425 -73
  358. package/src/clis/xiaohongshu/creator-notes-summary.test.ts +54 -0
  359. package/src/clis/xiaohongshu/creator-notes-summary.ts +120 -0
  360. package/src/clis/xiaohongshu/creator-notes.test.ts +211 -0
  361. package/src/clis/xiaohongshu/creator-notes.ts +254 -75
  362. package/src/clis/xiaohongshu/creator-profile.ts +0 -1
  363. package/src/clis/xiaohongshu/creator-stats.ts +0 -1
  364. package/src/clis/xiaohongshu/download.ts +2 -3
  365. package/src/clis/xiaohongshu/feed.yaml +0 -1
  366. package/src/clis/xiaohongshu/notifications.yaml +0 -1
  367. package/src/clis/xiaohongshu/search.ts +2 -2
  368. package/src/clis/xiaohongshu/user.ts +1 -2
  369. package/src/clis/yahoo-finance/quote.ts +0 -1
  370. package/src/clis/youtube/search.ts +1 -1
  371. package/src/clis/youtube/transcript.ts +1 -1
  372. package/src/clis/youtube/video.ts +1 -1
  373. package/src/clis/zhihu/download.ts +1 -2
  374. package/src/clis/zhihu/question.ts +1 -1
  375. package/src/clis/zhihu/search.yaml +4 -3
  376. package/src/commanderAdapter.ts +113 -0
  377. package/src/daemon.ts +3 -3
  378. package/src/{engine.ts → discovery.ts} +1 -108
  379. package/src/download/index.ts +21 -54
  380. package/src/engine.test.ts +8 -7
  381. package/src/execution.ts +138 -0
  382. package/src/explore.ts +135 -109
  383. package/src/external-clis.yaml +48 -0
  384. package/src/external.ts +185 -0
  385. package/src/main.ts +1 -1
  386. package/src/pipeline/steps/browser.ts +7 -2
  387. package/src/registry.ts +5 -0
  388. package/src/runtime.ts +9 -0
  389. package/src/serialization.ts +79 -0
  390. package/src/types.ts +1 -1
  391. package/tests/e2e/browser-public.test.ts +25 -0
  392. package/tests/e2e/public-commands.test.ts +55 -1
  393. package/dist/clis/twitter/trending.yaml +0 -46
  394. package/src/clis/twitter/trending.yaml +0 -46
  395. /package/dist/{chaoxing.test.d.ts → clis/arxiv/paper.d.ts} +0 -0
  396. /package/dist/{coupang.test.d.ts → clis/arxiv/search.d.ts} +0 -0
  397. /package/dist/{bilibili.js → clis/bilibili/utils.js} +0 -0
  398. /package/dist/{coupang.d.ts → clis/coupang/utils.d.ts} +0 -0
  399. /package/dist/{coupang.js → clis/coupang/utils.js} +0 -0
  400. /package/src/{coupang.ts → clis/coupang/utils.ts} +0 -0
package/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: opencli
3
- description: "OpenCLI — Make any website or Electron App your CLI. Zero risk, AI-powered, reuse Chrome login. 80+ commands across 19 sites."
4
- version: 0.7.4
3
+ description: "OpenCLI — Make any website or Electron App your CLI. Zero risk, AI-powered, reuse Chrome login. 150+ commands across 30+ sites."
4
+ version: 1.1.0
5
5
  author: jackwener
6
6
  tags: [cli, browser, web, chrome-extension, cdp, bilibili, zhihu, twitter, github, v2ex, hackernews, reddit, xiaohongshu, xueqiu, youtube, boss, coupang, AI, agent]
7
7
  ---
@@ -48,7 +48,7 @@ Public API commands (`hackernews`, `github search`, `v2ex`) need no browser.
48
48
  ```bash
49
49
  # Bilibili (browser)
50
50
  opencli bilibili hot --limit 10 # B站热门视频
51
- opencli bilibili search --keyword "rust" # 搜索视频
51
+ opencli bilibili search "rust" # 搜索视频 (query positional)
52
52
  opencli bilibili me # 我的信息
53
53
  opencli bilibili favorite # 我的收藏
54
54
  opencli bilibili history --limit 20 # 观看历史
@@ -61,15 +61,19 @@ opencli bilibili following --limit 20 # 我的关注列表 (支持 --uid 查
61
61
 
62
62
  # 知乎 (browser)
63
63
  opencli zhihu hot --limit 10 # 知乎热榜
64
- opencli zhihu search --keyword "AI" # 搜索
65
- opencli zhihu question --id 34816524 # 问题详情和回答
64
+ opencli zhihu search "AI" # 搜索 (query positional)
65
+ opencli zhihu question 34816524 # 问题详情和回答 (id positional)
66
66
 
67
67
  # 小红书 (browser)
68
- opencli xiaohongshu search --keyword "美食" # 搜索笔记
68
+ opencli xiaohongshu search "美食" # 搜索笔记 (query positional)
69
69
  opencli xiaohongshu notifications # 通知(mentions/likes/connections)
70
70
  opencli xiaohongshu feed --limit 10 # 推荐 Feed
71
- opencli xiaohongshu me # 我的信息
72
- opencli xiaohongshu user --uid xxx # 用户主页
71
+ opencli xiaohongshu user xxx # 用户主页 (id positional)
72
+ opencli xiaohongshu creator-notes --limit 10 # 创作者笔记列表
73
+ opencli xiaohongshu creator-note-detail --note-id xxx # 笔记详情
74
+ opencli xiaohongshu creator-notes-summary # 笔记数据概览
75
+ opencli xiaohongshu creator-profile # 创作者资料
76
+ opencli xiaohongshu creator-stats # 创作者数据统计
73
77
 
74
78
  # 雪球 Xueqiu (browser)
75
79
  opencli xueqiu hot-stock --limit 10 # 雪球热门股票榜
@@ -77,15 +81,15 @@ opencli xueqiu stock --symbol SH600519 # 查看股票实时行情
77
81
  opencli xueqiu watchlist # 获取自选股/持仓列表
78
82
  opencli xueqiu feed # 我的关注 timeline
79
83
  opencli xueqiu hot --limit 10 # 雪球热榜
80
- opencli xueqiu search --keyword "特斯拉" # 搜索
84
+ opencli xueqiu search "特斯拉" # 搜索 (query positional)
81
85
 
82
86
  # GitHub (public)
83
- opencli github search --keyword "cli" # 搜索仓库
87
+ opencli github search "cli" # 搜索仓库 (query positional)
84
88
 
85
89
  # Twitter/X (browser)
86
90
  opencli twitter trending --limit 10 # 热门话题
87
91
  opencli twitter bookmarks --limit 20 # 获取收藏的书签推文
88
- opencli twitter search --keyword "AI" # 搜索推文
92
+ opencli twitter search "AI" # 搜索推文 (query positional)
89
93
  opencli twitter profile elonmusk # 用户资料
90
94
  opencli twitter timeline --limit 20 # 时间线
91
95
  opencli twitter thread 1234567890 # 推文 thread(原文 + 回复)
@@ -100,15 +104,15 @@ opencli reddit hot --limit 10 # 热门帖子
100
104
  opencli reddit hot --subreddit programming # 指定子版块
101
105
  opencli reddit frontpage --limit 10 # 首页 /r/all
102
106
  opencli reddit popular --limit 10 # /r/popular 热门
103
- opencli reddit search --query "AI" --sort top --time week # 搜索(支持排序+时间过滤)
104
- opencli reddit subreddit --name rust --sort top --time month # 子版块浏览(支持时间过滤)
105
- opencli reddit read --post_id 1abc123 # 阅读帖子 + 评论
106
- opencli reddit user --username spez # 用户资料(karma、注册时间)
107
- opencli reddit user-posts --username spez # 用户发帖历史
108
- opencli reddit user-comments --username spez # 用户评论历史
109
- opencli reddit upvote --post_id xxx --direction up # 投票(up/down/none)
110
- opencli reddit save --post_id xxx # 收藏帖子
111
- opencli reddit comment --post_id xxx --text "Great!" # 发表评论
107
+ opencli reddit search "AI" --sort top --time week # 搜索(支持排序+时间过滤)
108
+ opencli reddit subreddit rust --sort top --time month # 子版块浏览(支持时间过滤)
109
+ opencli reddit read --post-id 1abc123 # 阅读帖子 + 评论
110
+ opencli reddit user spez # 用户资料(karma、注册时间)
111
+ opencli reddit user-posts spez # 用户发帖历史
112
+ opencli reddit user-comments spez # 用户评论历史
113
+ opencli reddit upvote --post-id xxx --direction up # 投票(up/down/none)
114
+ opencli reddit save --post-id xxx # 收藏帖子
115
+ opencli reddit comment --post-id xxx "Great!" # 发表评论 (text positional)
112
116
  opencli reddit subscribe --subreddit python # 订阅子版块
113
117
  opencli reddit saved --limit 10 # 我的收藏
114
118
  opencli reddit upvoted --limit 10 # 我的赞
@@ -116,7 +120,7 @@ opencli reddit upvoted --limit 10 # 我的赞
116
120
  # V2EX (public + browser)
117
121
  opencli v2ex hot --limit 10 # 热门话题
118
122
  opencli v2ex latest --limit 10 # 最新话题
119
- opencli v2ex topic --id 1024 # 主题详情
123
+ opencli v2ex topic 1024 # 主题详情 (id positional)
120
124
  opencli v2ex daily # 每日签到 (browser)
121
125
  opencli v2ex me # 我的信息 (browser)
122
126
  opencli v2ex notifications --limit 10 # 通知 (browser)
@@ -131,26 +135,41 @@ opencli bbc news --limit 10 # BBC News RSS headlines
131
135
  opencli weibo hot --limit 10 # 微博热搜
132
136
 
133
137
  # BOSS直聘 (browser)
134
- opencli boss search --query "AI agent" # 搜索职位
135
- opencli boss detail --securityId xxx # 职位详情
138
+ opencli boss search "AI agent" # 搜索职位 (query positional)
139
+ opencli boss detail --security-id xxx # 职位详情
140
+ opencli boss recommend --limit 10 # 推荐职位
141
+ opencli boss joblist --limit 10 # 职位列表
142
+ opencli boss greet --security-id xxx # 打招呼
143
+ opencli boss batchgreet --job-id xxx # 批量打招呼
144
+ opencli boss send --uid xxx "消息内容" # 发消息 (text positional)
145
+ opencli boss chatlist --limit 10 # 聊天列表
146
+ opencli boss chatmsg --security-id xxx # 聊天记录
147
+ opencli boss invite --security-id xxx # 邀请沟通
148
+ opencli boss mark --security-id xxx # 标记管理
149
+ opencli boss exchange --security-id xxx # 交换联系方式
150
+ opencli boss resume # 简历管理
151
+ opencli boss stats # 数据统计
136
152
 
137
153
  # YouTube (browser)
138
- opencli youtube search --query "rust" # 搜索视频
139
- opencli youtube video --url "https://www.youtube.com/watch?v=xxx" # 视频元数据(标题、播放量、描述等)
140
- opencli youtube transcript --url "https://www.youtube.com/watch?v=xxx" # 获取视频字幕/转录
141
- opencli youtube transcript --url "xxx" --lang zh-Hans --mode raw # 指定语言 + 原始时间戳模式
154
+ opencli youtube search "rust" # 搜索视频 (query positional)
155
+ opencli youtube video "https://www.youtube.com/watch?v=xxx" # 视频元数据
156
+ opencli youtube transcript "https://www.youtube.com/watch?v=xxx" # 获取视频字幕/转录
157
+ opencli youtube transcript "xxx" --lang zh-Hans --mode raw # 指定语言 + 原始时间戳模式
142
158
 
143
159
  # Yahoo Finance (browser)
144
160
  opencli yahoo-finance quote --symbol AAPL # 股票行情
145
161
 
162
+ # Sina Finance
163
+ opencli sinafinance news --limit 10 --type 1 # 7x24实时快讯 (0=全部 1=A股 2=宏观 3=公司 4=数据 5=市场 6=国际 7=观点 8=央行 9=其它)
164
+
146
165
  # Reuters (browser)
147
- opencli reuters search --query "AI" # 路透社搜索
166
+ opencli reuters search "AI" # 路透社搜索 (query positional)
148
167
 
149
168
  # 什么值得买 (browser)
150
- opencli smzdm search --keyword "耳机" # 搜索好价
169
+ opencli smzdm search "耳机" # 搜索好价 (query positional)
151
170
 
152
171
  # 携程 (browser)
153
- opencli ctrip search --query "三亚" # 搜索目的地
172
+ opencli ctrip search "三亚" # 搜索目的地 (query positional)
154
173
 
155
174
  # Antigravity (Electron/CDP)
156
175
  opencli antigravity status # 检查 CDP 连接
@@ -160,14 +179,64 @@ opencli antigravity new # 清空聊天、开启新对话
160
179
  opencli antigravity extract-code # 自动抽取 AI 回复中的代码块
161
180
  opencli antigravity model claude # 切换底层模型
162
181
  opencli antigravity watch # 流式监听增量消息
182
+
183
+ # Barchart (browser)
184
+ opencli barchart quote --symbol AAPL # 股票行情
185
+ opencli barchart options --symbol AAPL # 期权链
186
+ opencli barchart greeks --symbol AAPL # 期权 Greeks
187
+ opencli barchart flow --limit 20 # 异常期权活动
188
+
189
+ # Jike 即刻 (browser)
190
+ opencli jike feed --limit 10 # 动态流
191
+ opencli jike search "AI" # 搜索 (query positional)
192
+ opencli jike create "内容" # 发布动态 (text positional)
193
+ opencli jike like xxx # 点赞 (id positional)
194
+ opencli jike comment xxx "评论" # 评论 (id + text positional)
195
+ opencli jike repost xxx # 转发 (id positional)
196
+ opencli jike notifications # 通知
197
+
198
+ # Linux.do (public)
199
+ opencli linux-do hot --limit 10 # 热门话题
200
+ opencli linux-do latest --limit 10 # 最新话题
201
+ opencli linux-do search "rust" # 搜索 (query positional)
202
+ opencli linux-do topic 1024 # 主题详情 (id positional)
203
+
204
+ # StackOverflow (public)
205
+ opencli stackoverflow hot --limit 10 # 热门问题
206
+ opencli stackoverflow search "typescript" # 搜索 (query positional)
207
+ opencli stackoverflow bounties --limit 10 # 悬赏问题
208
+
209
+ # WeRead 微信读书 (browser)
210
+ opencli weread shelf --limit 10 # 书架
211
+ opencli weread search "AI" # 搜索图书 (query positional)
212
+ opencli weread book xxx # 图书详情 (book-id positional)
213
+ opencli weread highlights xxx # 划线笔记 (book-id positional)
214
+ opencli weread notes xxx # 想法笔记 (book-id positional)
215
+ opencli weread ranking --limit 10 # 排行榜
216
+
217
+ # Jimeng 即梦 AI (browser)
218
+ opencli jimeng generate --prompt "描述" # AI 生图
219
+ opencli jimeng history --limit 10 # 生成历史
220
+
221
+ # Grok (Desktop)
222
+ opencli grok ask "问题" # 提问 Grok (text positional)
223
+
224
+ # HuggingFace (public)
225
+ opencli hf top --limit 10 # 热门模型
226
+
227
+ # 超星学习通 (browser)
228
+ opencli chaoxing assignments # 作业列表
229
+ opencli chaoxing exams # 考试列表
163
230
  ```
164
231
 
165
232
  ### Management Commands
166
233
 
167
234
  ```bash
168
- opencli list # List all commands
235
+ opencli list # List all commands (including External CLIs)
169
236
  opencli list --json # JSON output
170
237
  opencli list -f yaml # YAML output
238
+ opencli install <name> # Auto-install an external CLI (e.g., gh, obsidian)
239
+ opencli register <name> # Register a local custom CLI for unified discovery
171
240
  opencli validate # Validate all CLI definitions
172
241
  opencli validate bilibili # Validate specific site
173
242
  opencli setup # Interactive Browser Bridge setup and connectivity check
@@ -295,7 +364,7 @@ cli({
295
364
  site: 'mysite',
296
365
  name: 'search',
297
366
  strategy: Strategy.INTERCEPT, // Or COOKIE
298
- args: [{ name: 'keyword', required: true }],
367
+ args: [{ name: 'query', required: true, positional: true }],
299
368
  columns: ['rank', 'title', 'url'],
300
369
  func: async (page, kwargs) => {
301
370
  await page.goto('https://www.mysite.com/search');
@@ -346,7 +415,7 @@ cli({
346
415
 
347
416
  ```yaml
348
417
  # Arguments with defaults
349
- ${{ args.keyword }}
418
+ ${{ args.query }}
350
419
  ${{ args.limit | default(20) }}
351
420
 
352
421
  # Current item (in map/filter)
@@ -137,12 +137,17 @@ class CDPPage {
137
137
  this.bridge = bridge;
138
138
  }
139
139
  /** Navigate with proper load event waiting (P1 fix #3) */
140
- async goto(url) {
140
+ async goto(url, options) {
141
141
  await this.bridge.send('Page.enable');
142
142
  const loadPromise = this.bridge.waitForEvent('Page.loadEventFired', 30_000)
143
143
  .catch(() => { }); // Don't fail if event times out
144
144
  await this.bridge.send('Page.navigate', { url });
145
145
  await loadPromise;
146
+ // Post-load settle: SPA frameworks need extra time to render after load event
147
+ if (options?.waitUntil !== 'none') {
148
+ const settleMs = options?.settleMs ?? 1000;
149
+ await new Promise(resolve => setTimeout(resolve, settleMs));
150
+ }
146
151
  }
147
152
  async evaluate(js) {
148
153
  const expression = wrapForEval(js);
@@ -21,7 +21,10 @@ export declare class Page implements IPage {
21
21
  /** Helper: spread tabId into command params if we have one */
22
22
  private _tabOpt;
23
23
  private _workspaceOpt;
24
- goto(url: string): Promise<void>;
24
+ goto(url: string, options?: {
25
+ waitUntil?: 'load' | 'none';
26
+ settleMs?: number;
27
+ }): Promise<void>;
25
28
  /** Close the automation window in the extension */
26
29
  closeWindow(): Promise<void>;
27
30
  evaluate(js: string): Promise<any>;
@@ -30,7 +30,7 @@ export class Page {
30
30
  _workspaceOpt() {
31
31
  return { workspace: this.workspace };
32
32
  }
33
- async goto(url) {
33
+ async goto(url, options) {
34
34
  const result = await sendCommand('navigate', {
35
35
  url,
36
36
  ...this._workspaceOpt(),
@@ -40,6 +40,12 @@ export class Page {
40
40
  if (result?.tabId) {
41
41
  this._tabId = result.tabId;
42
42
  }
43
+ // Post-load settle: the extension already waits for tab.status === 'complete',
44
+ // but SPA frameworks (React/Vue) need extra time to render after DOM load.
45
+ if (options?.waitUntil !== 'none') {
46
+ const settleMs = options?.settleMs ?? 1000;
47
+ await new Promise(resolve => setTimeout(resolve, settleMs));
48
+ }
43
49
  }
44
50
  /** Close the automation window in the extension */
45
51
  async closeWindow() {
@@ -158,18 +158,21 @@ function scanTs(filePath, site) {
158
158
  // We statically parse the source to extract metadata for the manifest stub.
159
159
  const baseName = path.basename(filePath, path.extname(filePath));
160
160
  const relativePath = `${site}/${baseName}.js`;
161
- const entry = {
162
- site,
163
- name: baseName,
164
- description: '',
165
- strategy: 'cookie',
166
- browser: true,
167
- args: [],
168
- type: 'ts',
169
- modulePath: relativePath,
170
- };
171
161
  try {
172
162
  const src = fs.readFileSync(filePath, 'utf-8');
163
+ // Helper/test modules should not appear as CLI commands in the manifest.
164
+ if (!/\bcli\s*\(/.test(src))
165
+ return null;
166
+ const entry = {
167
+ site,
168
+ name: baseName,
169
+ description: '',
170
+ strategy: 'cookie',
171
+ browser: true,
172
+ args: [],
173
+ type: 'ts',
174
+ modulePath: relativePath,
175
+ };
173
176
  // Extract description
174
177
  const descMatch = src.match(/description\s*:\s*['"`]([^'"`]*)['"`]/);
175
178
  if (descMatch)
@@ -198,11 +201,13 @@ function scanTs(filePath, site) {
198
201
  if (argsBlock) {
199
202
  entry.args = parseTsArgsBlock(argsBlock);
200
203
  }
204
+ return entry;
201
205
  }
202
- catch {
203
- // If parsing fails, fall back to empty metadata module will self-register at runtime
206
+ catch (err) {
207
+ // If parsing fails, log a warning (matching scanYaml behaviour) and skip the entry.
208
+ process.stderr.write(`Warning: failed to scan ${filePath}: ${err.message}\n`);
209
+ return null;
204
210
  }
205
- return entry;
206
211
  }
207
212
  export function buildManifest() {
208
213
  const manifest = [];
@@ -218,9 +223,11 @@ export function buildManifest() {
218
223
  if (entry)
219
224
  manifest.push(entry);
220
225
  }
221
- else if ((file.endsWith('.ts') && !file.endsWith('.d.ts') && file !== 'index.ts') ||
222
- (file.endsWith('.js') && !file.endsWith('.d.js') && file !== 'index.js')) {
223
- manifest.push(scanTs(filePath, site));
226
+ else if ((file.endsWith('.ts') && !file.endsWith('.d.ts') && !file.endsWith('.test.ts') && file !== 'index.ts') ||
227
+ (file.endsWith('.js') && !file.endsWith('.d.js') && !file.endsWith('.test.js') && file !== 'index.js')) {
228
+ const entry = scanTs(filePath, site);
229
+ if (entry)
230
+ manifest.push(entry);
224
231
  }
225
232
  }
226
233
  }