@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
@@ -0,0 +1,272 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import type { IPage } from '../../types.js';
3
+ import { getRegistry } from '../../registry.js';
4
+ import { appendAudienceRows, appendTrendRows, parseCreatorNoteDetailDomData, parseCreatorNoteDetailText } from './creator-note-detail.js';
5
+ import './creator-note-detail.js';
6
+
7
+ function createPageMock(evaluateResult: any): IPage {
8
+ const evaluate = Array.isArray(evaluateResult)
9
+ ? vi.fn()
10
+ .mockResolvedValueOnce(evaluateResult[0])
11
+ .mockResolvedValue(evaluateResult[evaluateResult.length - 1])
12
+ : vi.fn().mockResolvedValue(evaluateResult);
13
+
14
+ return {
15
+ goto: vi.fn().mockResolvedValue(undefined),
16
+ evaluate,
17
+ snapshot: vi.fn().mockResolvedValue(undefined),
18
+ click: vi.fn().mockResolvedValue(undefined),
19
+ typeText: vi.fn().mockResolvedValue(undefined),
20
+ pressKey: vi.fn().mockResolvedValue(undefined),
21
+ wait: vi.fn().mockResolvedValue(undefined),
22
+ tabs: vi.fn().mockResolvedValue([]),
23
+ closeTab: vi.fn().mockResolvedValue(undefined),
24
+ newTab: vi.fn().mockResolvedValue(undefined),
25
+ selectTab: vi.fn().mockResolvedValue(undefined),
26
+ networkRequests: vi.fn().mockResolvedValue([]),
27
+ consoleMessages: vi.fn().mockResolvedValue([]),
28
+ scroll: vi.fn().mockResolvedValue(undefined),
29
+ autoScroll: vi.fn().mockResolvedValue(undefined),
30
+ installInterceptor: vi.fn().mockResolvedValue(undefined),
31
+ getInterceptedRequests: vi.fn().mockResolvedValue([]),
32
+ getCookies: vi.fn().mockResolvedValue([]),
33
+ screenshot: vi.fn().mockResolvedValue(''),
34
+ };
35
+ }
36
+
37
+ describe('xiaohongshu creator-note-detail', () => {
38
+ it('parses note detail page text into info and metric rows', () => {
39
+ const bodyText = `笔记数据详情
40
+ 一张图讲清 诡秘之主·耕种者途径
41
+ #诡秘之主
42
+ #耕种者序列
43
+ 2026-03-18 20:01
44
+ 切换笔记
45
+ 笔记诊断
46
+ 核心数据
47
+ 观看来源
48
+ 观众画像
49
+ 核心数据
50
+ 基础数据
51
+ 部分数据统计中,次日可查看
52
+ 导出数据
53
+ 曝光数
54
+ 1733
55
+ 粉丝占比 6.6%
56
+ 实时
57
+ 观看数
58
+ 544
59
+ 粉丝占比 7.2%
60
+ 封面点击率
61
+ 18.6%
62
+ 粉丝 19.1%
63
+ 平均观看时长
64
+ 51.5秒
65
+ 粉丝 55.8秒
66
+ 涨粉数
67
+ 3
68
+ 按小时
69
+ 按天
70
+ 互动数据
71
+ 数据实时更新
72
+ 导出数据
73
+ 点赞数
74
+ 19
75
+ 粉丝占比 60%
76
+ 评论数
77
+ 7
78
+ 粉丝占比 33.3%
79
+ 收藏数
80
+ 10
81
+ 粉丝占比 33.3%
82
+ 分享数
83
+ 6
84
+ 粉丝占比 0%`;
85
+
86
+ expect(parseCreatorNoteDetailText(bodyText, '69ba940500000000200384db')).toEqual([
87
+ { section: '笔记信息', metric: 'note_id', value: '69ba940500000000200384db', extra: '' },
88
+ { section: '笔记信息', metric: 'title', value: '一张图讲清 诡秘之主·耕种者途径', extra: '' },
89
+ { section: '笔记信息', metric: 'published_at', value: '2026-03-18 20:01', extra: '' },
90
+ { section: '基础数据', metric: '曝光数', value: '1733', extra: '粉丝占比 6.6%' },
91
+ { section: '基础数据', metric: '观看数', value: '544', extra: '粉丝占比 7.2%' },
92
+ { section: '基础数据', metric: '封面点击率', value: '18.6%', extra: '粉丝 19.1%' },
93
+ { section: '基础数据', metric: '平均观看时长', value: '51.5秒', extra: '粉丝 55.8秒' },
94
+ { section: '基础数据', metric: '涨粉数', value: '3', extra: '' },
95
+ { section: '互动数据', metric: '点赞数', value: '19', extra: '粉丝占比 60%' },
96
+ { section: '互动数据', metric: '评论数', value: '7', extra: '粉丝占比 33.3%' },
97
+ { section: '互动数据', metric: '收藏数', value: '10', extra: '粉丝占比 33.3%' },
98
+ { section: '互动数据', metric: '分享数', value: '6', extra: '粉丝占比 0%' },
99
+ ]);
100
+ });
101
+
102
+ it('parses structured note detail dom data into rows', () => {
103
+ expect(parseCreatorNoteDetailDomData({
104
+ title: '神雕侠侣战力金字塔',
105
+ infoText: '神雕侠侣战力金字塔\n#武侠\n2025-12-04 19:45\n切换笔记',
106
+ sections: [
107
+ {
108
+ title: '基础数据',
109
+ metrics: [
110
+ { label: '曝光数', value: '898204', extra: '粉丝占比 0.5%' },
111
+ { label: '观看数', value: '148284', extra: '粉丝占比 0.6%' },
112
+ { label: '封面点击率', value: '17.1%', extra: '粉丝 19.1%' },
113
+ { label: '平均观看时长', value: '30.1秒', extra: '粉丝 17.7秒' },
114
+ { label: '涨粉数', value: '101', extra: '' },
115
+ ],
116
+ },
117
+ {
118
+ title: '互动数据',
119
+ metrics: [
120
+ { label: '点赞数', value: '2280', extra: '粉丝占比 3.6%' },
121
+ { label: '评论数', value: '319', extra: '粉丝占比 9.4%' },
122
+ { label: '收藏数', value: '466', extra: '粉丝占比 9.4%' },
123
+ { label: '分享数', value: '33', extra: '粉丝占比 17.7%' },
124
+ ],
125
+ },
126
+ ],
127
+ }, '693155fc000000000d03b42c')).toEqual([
128
+ { section: '笔记信息', metric: 'note_id', value: '693155fc000000000d03b42c', extra: '' },
129
+ { section: '笔记信息', metric: 'title', value: '神雕侠侣战力金字塔', extra: '' },
130
+ { section: '笔记信息', metric: 'published_at', value: '2025-12-04 19:45', extra: '' },
131
+ { section: '基础数据', metric: '曝光数', value: '898204', extra: '粉丝占比 0.5%' },
132
+ { section: '基础数据', metric: '观看数', value: '148284', extra: '粉丝占比 0.6%' },
133
+ { section: '基础数据', metric: '封面点击率', value: '17.1%', extra: '粉丝 19.1%' },
134
+ { section: '基础数据', metric: '平均观看时长', value: '30.1秒', extra: '粉丝 17.7秒' },
135
+ { section: '基础数据', metric: '涨粉数', value: '101', extra: '' },
136
+ { section: '互动数据', metric: '点赞数', value: '2280', extra: '粉丝占比 3.6%' },
137
+ { section: '互动数据', metric: '评论数', value: '319', extra: '粉丝占比 9.4%' },
138
+ { section: '互动数据', metric: '收藏数', value: '466', extra: '粉丝占比 9.4%' },
139
+ { section: '互动数据', metric: '分享数', value: '33', extra: '粉丝占比 17.7%' },
140
+ ]);
141
+ });
142
+
143
+ it('appends audience source and portrait rows from API payloads', () => {
144
+ const rows = appendAudienceRows([], {
145
+ audienceSource: {
146
+ source: [
147
+ {
148
+ title: '首页推荐',
149
+ value_with_double: 89.9,
150
+ info: {
151
+ imp_count: 1469,
152
+ view_count: 276,
153
+ interaction_count: 15,
154
+ },
155
+ },
156
+ ],
157
+ },
158
+ audienceSourceDetail: {
159
+ gender: [
160
+ { title: '男性', value: 82 },
161
+ { title: '女性', value: 18 },
162
+ ],
163
+ age: [
164
+ { title: '25-34', value: 55 },
165
+ ],
166
+ city: [
167
+ { title: '上海', value: 8 },
168
+ ],
169
+ interest: [
170
+ { title: '二次元', value: 13 },
171
+ ],
172
+ },
173
+ });
174
+
175
+ expect(rows).toEqual([
176
+ { section: '观看来源', metric: '首页推荐', value: '89.9%', extra: '曝光 1469 · 观看 276 · 互动 15' },
177
+ { section: '观众画像', metric: '性别/男性', value: '82%', extra: '' },
178
+ { section: '观众画像', metric: '性别/女性', value: '18%', extra: '' },
179
+ { section: '观众画像', metric: '年龄/25-34', value: '55%', extra: '' },
180
+ { section: '观众画像', metric: '城市/上海', value: '8%', extra: '' },
181
+ { section: '观众画像', metric: '兴趣/二次元', value: '13%', extra: '' },
182
+ ]);
183
+ });
184
+
185
+ it('appends trend summary rows from hour/day series payloads', () => {
186
+ const rows = appendTrendRows([], {
187
+ audienceTrend: {
188
+ no_data: true,
189
+ no_data_tip_msg: '数据统计中,请稍后查看',
190
+ },
191
+ noteBase: {
192
+ hour: {
193
+ view_list: [
194
+ { date: new Date('2026-03-18T21:00:00+08:00').getTime(), count: 54 },
195
+ { date: new Date('2026-03-18T22:00:00+08:00').getTime(), count: 51 },
196
+ ],
197
+ like_list: [
198
+ { date: new Date('2026-03-18T21:00:00+08:00').getTime(), count: 2 },
199
+ ],
200
+ },
201
+ day: {
202
+ view_list: [
203
+ { date: new Date('2026-03-18T00:00:00+08:00').getTime(), count: 307 },
204
+ ],
205
+ },
206
+ },
207
+ });
208
+
209
+ expect(rows).toEqual([
210
+ { section: '趋势说明', metric: '观众趋势', value: '暂不可用', extra: '数据统计中,请稍后查看' },
211
+ { section: '趋势数据', metric: '按小时/观看数', value: '2 points', extra: '03-18 21:00=54 | 03-18 22:00=51' },
212
+ { section: '趋势数据', metric: '按小时/点赞数', value: '1 points', extra: '03-18 21:00=2' },
213
+ { section: '趋势数据', metric: '按天/观看数', value: '1 points', extra: '2026-03-18=307' },
214
+ ]);
215
+ });
216
+
217
+ it('navigates to the note detail page and returns parsed rows', async () => {
218
+ const cmd = getRegistry().get('xiaohongshu/creator-note-detail');
219
+ expect(cmd?.func).toBeTypeOf('function');
220
+
221
+ const page = createPageMock([
222
+ {
223
+ title: '示例笔记',
224
+ infoText: '示例笔记\n2026-03-19 12:00\n切换笔记',
225
+ sections: [
226
+ {
227
+ title: '基础数据',
228
+ metrics: [
229
+ { label: '曝光数', value: '100', extra: '粉丝占比 10%' },
230
+ { label: '观看数', value: '50', extra: '粉丝占比 20%' },
231
+ { label: '封面点击率', value: '12%', extra: '粉丝 11%' },
232
+ { label: '平均观看时长', value: '30秒', extra: '粉丝 31秒' },
233
+ { label: '涨粉数', value: '2', extra: '' },
234
+ ],
235
+ },
236
+ {
237
+ title: '互动数据',
238
+ metrics: [
239
+ { label: '点赞数', value: '8', extra: '粉丝占比 25%' },
240
+ { label: '评论数', value: '1', extra: '粉丝占比 0%' },
241
+ { label: '收藏数', value: '3', extra: '粉丝占比 50%' },
242
+ { label: '分享数', value: '0', extra: '粉丝占比 0%' },
243
+ ],
244
+ },
245
+ ],
246
+ },
247
+ null,
248
+ null,
249
+ null,
250
+ null,
251
+ ]);
252
+
253
+ const result = await cmd!.func!(page, { 'note-id': 'demo-note-id' });
254
+
255
+ expect((page.goto as any).mock.calls[0][0]).toBe('https://creator.xiaohongshu.com/statistics/note-detail?noteId=demo-note-id');
256
+ expect((page.evaluate as any).mock.calls[0][0]).toContain("document.querySelector('.note-title')");
257
+ expect(result).toEqual([
258
+ { section: '笔记信息', metric: 'note_id', value: 'demo-note-id', extra: '' },
259
+ { section: '笔记信息', metric: 'title', value: '示例笔记', extra: '' },
260
+ { section: '笔记信息', metric: 'published_at', value: '2026-03-19 12:00', extra: '' },
261
+ { section: '基础数据', metric: '曝光数', value: '100', extra: '粉丝占比 10%' },
262
+ { section: '基础数据', metric: '观看数', value: '50', extra: '粉丝占比 20%' },
263
+ { section: '基础数据', metric: '封面点击率', value: '12%', extra: '粉丝 11%' },
264
+ { section: '基础数据', metric: '平均观看时长', value: '30秒', extra: '粉丝 31秒' },
265
+ { section: '基础数据', metric: '涨粉数', value: '2', extra: '' },
266
+ { section: '互动数据', metric: '点赞数', value: '8', extra: '粉丝占比 25%' },
267
+ { section: '互动数据', metric: '评论数', value: '1', extra: '粉丝占比 0%' },
268
+ { section: '互动数据', metric: '收藏数', value: '3', extra: '粉丝占比 50%' },
269
+ { section: '互动数据', metric: '分享数', value: '0', extra: '粉丝占比 0%' },
270
+ ]);
271
+ });
272
+ });