@agentrhq/webcmd 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (929) hide show
  1. package/README.md +183 -218
  2. package/cli-manifest.json +16247 -34913
  3. package/clis/_atlassian/shared.js +1 -1
  4. package/clis/booking/search.js +4 -4
  5. package/clis/chatgpt/ask.js +2 -2
  6. package/clis/chatgpt/utils.js +41 -42
  7. package/clis/chatgpt/utils.test.js +23 -23
  8. package/clis/chatgpt-app/ax.js +5 -5
  9. package/clis/chatgpt-app/ax.test.js +8 -8
  10. package/clis/chatgpt-app/new.js +2 -2
  11. package/clis/codex/sidebar.js +1 -1
  12. package/clis/codex/sidebar.test.js +12 -12
  13. package/clis/coingecko/top.js +3 -3
  14. package/clis/dblp/dblp.test.js +1 -1
  15. package/clis/discord-app/search.js +1 -1
  16. package/clis/discord-app/utils.js +6 -6
  17. package/clis/facebook/__fixtures__/notifications-page.html +6 -6
  18. package/clis/facebook/add-friend.js +2 -2
  19. package/clis/facebook/feed.js +18 -18
  20. package/clis/facebook/friends.js +4 -4
  21. package/clis/facebook/groups.js +3 -3
  22. package/clis/facebook/join-group.js +2 -2
  23. package/clis/facebook/marketplace-inbox.js +3 -3
  24. package/clis/facebook/marketplace-listings.js +1 -1
  25. package/clis/facebook/notifications.js +14 -15
  26. package/clis/facebook/notifications.test.js +28 -29
  27. package/clis/gemini/ask.test.js +12 -12
  28. package/clis/gemini/deep-research-result.js +2 -2
  29. package/clis/gemini/deep-research-result.test.js +2 -2
  30. package/clis/gemini/deep-research.js +2 -2
  31. package/clis/gemini/deep-research.test.js +1 -1
  32. package/clis/gemini/models.js +11 -11
  33. package/clis/gemini/models.test.js +1 -1
  34. package/clis/gemini/reply-state.test.js +89 -89
  35. package/clis/gemini/utils.js +41 -41
  36. package/clis/gemini/utils.test.js +30 -30
  37. package/clis/geogebra/utils.js +1 -1
  38. package/clis/google-scholar/search.js +3 -3
  39. package/clis/grok/delete.js +1 -1
  40. package/clis/grok/export-all.js +2 -2
  41. package/clis/grok/export.js +2 -2
  42. package/clis/grok/pin.js +3 -3
  43. package/clis/grok/utils.js +12 -12
  44. package/clis/grok/utils.test.js +2 -2
  45. package/clis/indeed/indeed.test.js +3 -3
  46. package/clis/indeed/utils.js +1 -1
  47. package/clis/instagram/post.js +19 -19
  48. package/clis/instagram/post.test.js +2 -2
  49. package/clis/instagram/reel.js +6 -6
  50. package/clis/linkedin/connect.js +3 -3
  51. package/clis/linkedin/people-search.js +4 -4
  52. package/clis/linkedin/profile-experience.js +6 -6
  53. package/clis/linkedin/profile-experience.test.js +10 -10
  54. package/clis/linkedin/profile-read.js +1 -1
  55. package/clis/linkedin/safe-send.js +1 -1
  56. package/clis/linkedin/search.js +1 -1
  57. package/clis/linkedin/shared.js +2 -2
  58. package/clis/linkedin/timeline.js +5 -5
  59. package/clis/manus/manus.test.js +2 -2
  60. package/clis/medium/feed.js +3 -3
  61. package/clis/medium/search.js +3 -3
  62. package/clis/medium/user.js +3 -3
  63. package/clis/notebooklm/auth.js +2 -2
  64. package/clis/notebooklm/note-list.test.js +4 -4
  65. package/clis/notebooklm/notes-get.test.js +8 -8
  66. package/clis/notebooklm/source-fulltext.test.js +11 -11
  67. package/clis/notebooklm/utils.js +28 -28
  68. package/clis/notebooklm/utils.test.js +10 -10
  69. package/clis/pixiv/search.test.js +3 -3
  70. package/clis/qoder/quest.js +2 -2
  71. package/clis/reddit/home.js +2 -2
  72. package/clis/reddit/hot.js +1 -1
  73. package/clis/reddit/read.js +2 -2
  74. package/clis/reddit/read.test.js +1 -1
  75. package/clis/reddit/reply.js +2 -2
  76. package/clis/reddit/whoami.js +2 -2
  77. package/clis/reuters/article-detail.js +1 -1
  78. package/clis/reuters/search.js +1 -1
  79. package/clis/slock/attachment-upload.test.js +1 -1
  80. package/clis/slock/task-convert.js +1 -1
  81. package/clis/substack/feed.js +3 -3
  82. package/clis/substack/publication.js +3 -3
  83. package/clis/substack/search.js +4 -4
  84. package/clis/tiktok/comment.js +2 -2
  85. package/clis/tiktok/follow.js +4 -4
  86. package/clis/tiktok/like.js +1 -1
  87. package/clis/tiktok/save.js +1 -1
  88. package/clis/tiktok/unfollow.js +4 -4
  89. package/clis/tiktok/unlike.js +1 -1
  90. package/clis/tiktok/unsave.js +2 -2
  91. package/clis/tiktok/write-refactor.test.js +5 -5
  92. package/clis/twitter/accept.js +3 -3
  93. package/clis/twitter/followers.js +1 -1
  94. package/clis/twitter/list-remove-core.js +2 -2
  95. package/clis/twitter/list-tweets.test.js +3 -3
  96. package/clis/twitter/lists.js +6 -6
  97. package/clis/twitter/lists.test.js +2 -2
  98. package/clis/twitter/reply-dm.js +1 -1
  99. package/clis/twitter/shared.test.js +4 -5
  100. package/clis/twitter/trending.js +1 -1
  101. package/clis/twitter/utils.js +1 -1
  102. package/clis/web/read.js +1 -1
  103. package/clis/web/read.test.js +2 -2
  104. package/clis/yahoo-finance/quote.js +1 -1
  105. package/clis/youtube/history.js +4 -4
  106. package/clis/youtube/transcript-group.js +1 -1
  107. package/clis/youtube/transcript-group.test.js +5 -5
  108. package/clis/youtube/transcript.js +5 -5
  109. package/clis/youtube/video.js +4 -4
  110. package/clis/youtube/video.test.js +6 -6
  111. package/dist/src/browser/analyze.test.js +13 -13
  112. package/dist/src/browser/bridge-readiness.d.ts +1 -1
  113. package/dist/src/browser/daemon-client.d.ts +1 -0
  114. package/dist/src/browser/daemon-client.js +102 -50
  115. package/dist/src/browser/daemon-client.test.js +104 -19
  116. package/dist/src/browser/errors.js +11 -0
  117. package/dist/src/browser/protocol.d.ts +2 -0
  118. package/dist/src/browser.test.js +2 -2
  119. package/dist/src/cli-argv-preprocess.d.ts +2 -2
  120. package/dist/src/cli-argv-preprocess.js +2 -2
  121. package/dist/src/cli-argv-preprocess.test.js +35 -35
  122. package/dist/src/cli.js +2 -2
  123. package/dist/src/cli.test.js +57 -57
  124. package/dist/src/commanderAdapter.test.js +19 -19
  125. package/dist/src/convention-audit.js +1 -1
  126. package/dist/src/daemon/server.js +28 -23
  127. package/dist/src/daemon/server.test.js +52 -0
  128. package/dist/src/daemon-utils.d.ts +1 -0
  129. package/dist/src/daemon-utils.js +9 -0
  130. package/dist/src/daemon.test.js +10 -1
  131. package/dist/src/doctor.js +7 -1
  132. package/dist/src/doctor.test.js +8 -1
  133. package/dist/src/download/article-download.d.ts +3 -3
  134. package/dist/src/download/article-download.js +7 -7
  135. package/dist/src/download/article-download.test.js +6 -6
  136. package/dist/src/download/index.js +1 -1
  137. package/dist/src/download/index.test.js +1 -2
  138. package/dist/src/download/media-download.d.ts +1 -1
  139. package/dist/src/download/media-download.js +1 -1
  140. package/dist/src/electron-apps.js +0 -8
  141. package/dist/src/electron-apps.test.js +2 -11
  142. package/dist/src/errors.test.js +9 -9
  143. package/dist/src/execution.js +2 -0
  144. package/dist/src/execution.test.js +12 -0
  145. package/dist/src/external-clis.yaml +0 -37
  146. package/dist/src/external.d.ts +1 -1
  147. package/dist/src/external.test.js +2 -17
  148. package/dist/src/generate-release-notes-cli.test.js +140 -0
  149. package/dist/src/help.d.ts +3 -3
  150. package/dist/src/help.test.js +8 -8
  151. package/dist/src/main.js +1 -1
  152. package/dist/src/manifest-types.d.ts +1 -1
  153. package/dist/src/node-network.test.js +2 -2
  154. package/dist/src/output.js +1 -1
  155. package/dist/src/pipeline/steps/download.test.js +3 -3
  156. package/dist/src/registry.test.js +2 -2
  157. package/dist/src/release-notes.d.ts +38 -0
  158. package/dist/src/release-notes.js +99 -0
  159. package/dist/src/release-notes.test.js +61 -0
  160. package/dist/src/serialization.test.js +7 -7
  161. package/dist/src/snapshotFormatter.js +3 -5
  162. package/dist/src/snapshotFormatter.test.d.ts +1 -1
  163. package/dist/src/snapshotFormatter.test.js +50 -50
  164. package/dist/src/tui.js +1 -1
  165. package/package.json +4 -1
  166. package/scripts/generate-release-notes.ts +234 -0
  167. package/scripts/postinstall.js +1 -1
  168. package/scripts/silent-column-drop-baseline.json +0 -498
  169. package/scripts/typed-error-lint-baseline.json +0 -464
  170. package/skills/webcmd-adapter-author/SKILL.md +216 -213
  171. package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
  172. package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
  173. package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
  174. package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
  175. package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
  176. package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
  177. package/skills/webcmd-adapter-author/references/output-design.md +47 -125
  178. package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
  179. package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
  180. package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
  181. package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
  182. package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
  183. package/skills/webcmd-autofix/SKILL.md +136 -143
  184. package/skills/webcmd-sitemap-author/SKILL.md +58 -67
  185. package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
  186. package/skills/webcmd-usage/SKILL.md +106 -97
  187. package/clis/12306/auth.js +0 -59
  188. package/clis/12306/me.js +0 -73
  189. package/clis/12306/orders.js +0 -96
  190. package/clis/12306/passengers.js +0 -90
  191. package/clis/12306/price.js +0 -166
  192. package/clis/12306/stations.js +0 -66
  193. package/clis/12306/train.js +0 -91
  194. package/clis/12306/trains.js +0 -166
  195. package/clis/12306/utils.js +0 -272
  196. package/clis/12306/utils.test.js +0 -424
  197. package/clis/1688/assets.js +0 -205
  198. package/clis/1688/assets.test.js +0 -39
  199. package/clis/1688/auth.js +0 -46
  200. package/clis/1688/download.js +0 -77
  201. package/clis/1688/download.test.js +0 -31
  202. package/clis/1688/item.js +0 -188
  203. package/clis/1688/item.test.js +0 -67
  204. package/clis/1688/search.js +0 -310
  205. package/clis/1688/search.test.js +0 -75
  206. package/clis/1688/shared.js +0 -557
  207. package/clis/1688/shared.test.js +0 -57
  208. package/clis/1688/store.js +0 -227
  209. package/clis/1688/store.test.js +0 -62
  210. package/clis/1point3acres/auth.js +0 -52
  211. package/clis/1point3acres/digest.js +0 -35
  212. package/clis/1point3acres/forum.js +0 -51
  213. package/clis/1point3acres/forums.js +0 -44
  214. package/clis/1point3acres/hot.js +0 -35
  215. package/clis/1point3acres/latest.js +0 -35
  216. package/clis/1point3acres/notifications.js +0 -64
  217. package/clis/1point3acres/search.js +0 -71
  218. package/clis/1point3acres/thread.js +0 -117
  219. package/clis/1point3acres/user.js +0 -77
  220. package/clis/1point3acres/utils.js +0 -247
  221. package/clis/36kr/article.js +0 -66
  222. package/clis/36kr/article.test.js +0 -46
  223. package/clis/36kr/hot.js +0 -87
  224. package/clis/36kr/hot.test.js +0 -15
  225. package/clis/36kr/news.js +0 -52
  226. package/clis/36kr/news.test.js +0 -85
  227. package/clis/36kr/search.js +0 -79
  228. package/clis/51job/company.js +0 -126
  229. package/clis/51job/detail.js +0 -109
  230. package/clis/51job/hot.js +0 -56
  231. package/clis/51job/search.js +0 -80
  232. package/clis/51job/utils.js +0 -302
  233. package/clis/51job/utils.test.js +0 -69
  234. package/clis/aibase/news.js +0 -110
  235. package/clis/aibase/news.test.js +0 -59
  236. package/clis/autohome/__fixtures__/catalog.html +0 -11
  237. package/clis/autohome/__fixtures__/koubei.json +0 -116
  238. package/clis/autohome/autohome.test.js +0 -115
  239. package/clis/autohome/brand.js +0 -108
  240. package/clis/autohome/score.js +0 -103
  241. package/clis/autohome/utils.js +0 -157
  242. package/clis/baidu-scholar/search.js +0 -87
  243. package/clis/baidu-scholar/search.test.js +0 -23
  244. package/clis/bilibili/auth.js +0 -36
  245. package/clis/bilibili/comment.js +0 -107
  246. package/clis/bilibili/comment.test.js +0 -153
  247. package/clis/bilibili/comments.js +0 -136
  248. package/clis/bilibili/comments.test.js +0 -142
  249. package/clis/bilibili/download.js +0 -178
  250. package/clis/bilibili/download.test.js +0 -173
  251. package/clis/bilibili/dynamic.js +0 -34
  252. package/clis/bilibili/dynamic.test.js +0 -68
  253. package/clis/bilibili/favorite.js +0 -47
  254. package/clis/bilibili/feed.js +0 -220
  255. package/clis/bilibili/follow.js +0 -140
  256. package/clis/bilibili/follow.test.js +0 -203
  257. package/clis/bilibili/following.js +0 -44
  258. package/clis/bilibili/history.js +0 -45
  259. package/clis/bilibili/hot.js +0 -40
  260. package/clis/bilibili/hot.test.js +0 -17
  261. package/clis/bilibili/me.js +0 -13
  262. package/clis/bilibili/ranking.js +0 -25
  263. package/clis/bilibili/search.js +0 -24
  264. package/clis/bilibili/subtitle.js +0 -141
  265. package/clis/bilibili/subtitle.test.js +0 -240
  266. package/clis/bilibili/summary.js +0 -167
  267. package/clis/bilibili/summary.test.js +0 -210
  268. package/clis/bilibili/unfollow.js +0 -121
  269. package/clis/bilibili/user-videos.js +0 -39
  270. package/clis/bilibili/utils.js +0 -273
  271. package/clis/bilibili/utils.test.js +0 -97
  272. package/clis/bilibili/video.js +0 -155
  273. package/clis/bilibili/video.test.js +0 -308
  274. package/clis/boss/auth.js +0 -47
  275. package/clis/boss/batchgreet.js +0 -61
  276. package/clis/boss/chatlist.js +0 -116
  277. package/clis/boss/chatlist.test.js +0 -211
  278. package/clis/boss/chatmsg.js +0 -117
  279. package/clis/boss/chatmsg.test.js +0 -230
  280. package/clis/boss/detail.js +0 -63
  281. package/clis/boss/exchange.js +0 -46
  282. package/clis/boss/greet.js +0 -49
  283. package/clis/boss/invite.js +0 -64
  284. package/clis/boss/joblist.js +0 -31
  285. package/clis/boss/mark.js +0 -70
  286. package/clis/boss/recommend.js +0 -45
  287. package/clis/boss/resume.js +0 -150
  288. package/clis/boss/search.js +0 -197
  289. package/clis/boss/search.test.js +0 -78
  290. package/clis/boss/send.js +0 -44
  291. package/clis/boss/stats.js +0 -66
  292. package/clis/boss/utils.js +0 -468
  293. package/clis/boss/utils.test.js +0 -34
  294. package/clis/chaoxing/assignments.js +0 -76
  295. package/clis/chaoxing/auth.js +0 -54
  296. package/clis/chaoxing/exams.js +0 -75
  297. package/clis/chaoxing/utils.js +0 -223
  298. package/clis/chaoxing/utils.test.js +0 -45
  299. package/clis/cnki/search.js +0 -61
  300. package/clis/cnki/search.test.js +0 -18
  301. package/clis/ctrip/auth.js +0 -50
  302. package/clis/ctrip/ctrip.test.js +0 -719
  303. package/clis/ctrip/flight.js +0 -136
  304. package/clis/ctrip/hotel-search.js +0 -132
  305. package/clis/ctrip/hotel-suggest.js +0 -45
  306. package/clis/ctrip/search.js +0 -41
  307. package/clis/ctrip/utils.js +0 -473
  308. package/clis/deepseek/ask.js +0 -158
  309. package/clis/deepseek/ask.test.js +0 -399
  310. package/clis/deepseek/auth.js +0 -54
  311. package/clis/deepseek/detail.js +0 -46
  312. package/clis/deepseek/detail.test.js +0 -81
  313. package/clis/deepseek/history.js +0 -27
  314. package/clis/deepseek/new.js +0 -33
  315. package/clis/deepseek/read.js +0 -25
  316. package/clis/deepseek/send.js +0 -140
  317. package/clis/deepseek/send.test.js +0 -107
  318. package/clis/deepseek/status.js +0 -26
  319. package/clis/deepseek/utils.js +0 -487
  320. package/clis/deepseek/utils.test.js +0 -370
  321. package/clis/dianping/__fixtures__/search.html +0 -168
  322. package/clis/dianping/__fixtures__/shop.html +0 -6
  323. package/clis/dianping/auth.js +0 -49
  324. package/clis/dianping/cityResolver.js +0 -185
  325. package/clis/dianping/dianping.test.js +0 -578
  326. package/clis/dianping/search.js +0 -157
  327. package/clis/dianping/shop.js +0 -173
  328. package/clis/dianping/utils.js +0 -157
  329. package/clis/dongchedi/__fixtures__/search.json +0 -60
  330. package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
  331. package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
  332. package/clis/dongchedi/dongchedi.test.js +0 -191
  333. package/clis/dongchedi/koubei.js +0 -85
  334. package/clis/dongchedi/models.js +0 -91
  335. package/clis/dongchedi/score.js +0 -83
  336. package/clis/dongchedi/search.js +0 -83
  337. package/clis/dongchedi/series.js +0 -87
  338. package/clis/dongchedi/specs.js +0 -115
  339. package/clis/dongchedi/utils.js +0 -180
  340. package/clis/douban/auth.js +0 -50
  341. package/clis/douban/book-hot.js +0 -15
  342. package/clis/douban/download.js +0 -68
  343. package/clis/douban/download.test.js +0 -170
  344. package/clis/douban/marks.js +0 -116
  345. package/clis/douban/movie-hot.js +0 -15
  346. package/clis/douban/movie-hot.test.js +0 -14
  347. package/clis/douban/photos.js +0 -35
  348. package/clis/douban/reviews.js +0 -107
  349. package/clis/douban/search.js +0 -18
  350. package/clis/douban/search.test.js +0 -11
  351. package/clis/douban/subject.js +0 -46
  352. package/clis/douban/subject.test.js +0 -11
  353. package/clis/douban/top250.js +0 -68
  354. package/clis/douban/utils.js +0 -657
  355. package/clis/douban/utils.test.js +0 -488
  356. package/clis/doubao/ask.js +0 -40
  357. package/clis/doubao/auth.js +0 -66
  358. package/clis/doubao/detail.js +0 -35
  359. package/clis/doubao/detail.test.js +0 -42
  360. package/clis/doubao/history.js +0 -30
  361. package/clis/doubao/history.test.js +0 -37
  362. package/clis/doubao/meeting-summary.js +0 -41
  363. package/clis/doubao/meeting-transcript.js +0 -38
  364. package/clis/doubao/new.js +0 -22
  365. package/clis/doubao/read.js +0 -21
  366. package/clis/doubao/send.js +0 -24
  367. package/clis/doubao/status.js +0 -26
  368. package/clis/doubao/utils.js +0 -1156
  369. package/clis/doubao/utils.test.js +0 -396
  370. package/clis/doubao-app/ask.js +0 -54
  371. package/clis/doubao-app/dump.js +0 -25
  372. package/clis/doubao-app/new.js +0 -21
  373. package/clis/doubao-app/read.js +0 -19
  374. package/clis/doubao-app/screenshot.js +0 -19
  375. package/clis/doubao-app/send.js +0 -28
  376. package/clis/doubao-app/status.js +0 -17
  377. package/clis/doubao-app/utils.js +0 -110
  378. package/clis/douyin/_shared/browser-fetch.js +0 -66
  379. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  380. package/clis/douyin/_shared/creation-id.js +0 -5
  381. package/clis/douyin/_shared/creation-id.test.js +0 -22
  382. package/clis/douyin/_shared/evaluate-result.js +0 -16
  383. package/clis/douyin/_shared/imagex-upload.js +0 -53
  384. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  385. package/clis/douyin/_shared/public-api.js +0 -29
  386. package/clis/douyin/_shared/sts2.js +0 -21
  387. package/clis/douyin/_shared/sts2.test.js +0 -27
  388. package/clis/douyin/_shared/text-extra.js +0 -15
  389. package/clis/douyin/_shared/text-extra.test.js +0 -37
  390. package/clis/douyin/_shared/timing.js +0 -22
  391. package/clis/douyin/_shared/timing.test.js +0 -28
  392. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  393. package/clis/douyin/_shared/tos-upload.js +0 -331
  394. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  395. package/clis/douyin/_shared/transcode.js +0 -45
  396. package/clis/douyin/_shared/transcode.test.js +0 -91
  397. package/clis/douyin/_shared/vod-upload.js +0 -212
  398. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  399. package/clis/douyin/activities.js +0 -23
  400. package/clis/douyin/activities.test.js +0 -55
  401. package/clis/douyin/auth.js +0 -39
  402. package/clis/douyin/collections.js +0 -23
  403. package/clis/douyin/collections.test.js +0 -45
  404. package/clis/douyin/delete.js +0 -152
  405. package/clis/douyin/delete.test.js +0 -100
  406. package/clis/douyin/draft.js +0 -355
  407. package/clis/douyin/draft.test.js +0 -335
  408. package/clis/douyin/drafts.js +0 -24
  409. package/clis/douyin/drafts.test.js +0 -11
  410. package/clis/douyin/hashtag.js +0 -114
  411. package/clis/douyin/hashtag.test.js +0 -171
  412. package/clis/douyin/location.js +0 -25
  413. package/clis/douyin/location.test.js +0 -23
  414. package/clis/douyin/profile.js +0 -29
  415. package/clis/douyin/profile.test.js +0 -46
  416. package/clis/douyin/publish-upload-id.test.js +0 -206
  417. package/clis/douyin/publish.js +0 -341
  418. package/clis/douyin/publish.test.js +0 -38
  419. package/clis/douyin/search.js +0 -308
  420. package/clis/douyin/search.test.js +0 -307
  421. package/clis/douyin/stats.js +0 -28
  422. package/clis/douyin/stats.test.js +0 -22
  423. package/clis/douyin/update.js +0 -32
  424. package/clis/douyin/update.test.js +0 -11
  425. package/clis/douyin/user-videos.js +0 -82
  426. package/clis/douyin/user-videos.test.js +0 -151
  427. package/clis/douyin/videos.js +0 -52
  428. package/clis/douyin/videos.test.js +0 -54
  429. package/clis/eastmoney/_secid.js +0 -78
  430. package/clis/eastmoney/announcement.js +0 -53
  431. package/clis/eastmoney/convertible.js +0 -74
  432. package/clis/eastmoney/etf.js +0 -66
  433. package/clis/eastmoney/holders.js +0 -79
  434. package/clis/eastmoney/hot-rank.js +0 -51
  435. package/clis/eastmoney/hot-rank.test.js +0 -59
  436. package/clis/eastmoney/index-board.js +0 -97
  437. package/clis/eastmoney/kline.js +0 -88
  438. package/clis/eastmoney/kuaixun.js +0 -55
  439. package/clis/eastmoney/longhu.js +0 -68
  440. package/clis/eastmoney/money-flow.js +0 -79
  441. package/clis/eastmoney/northbound.js +0 -58
  442. package/clis/eastmoney/quote.js +0 -108
  443. package/clis/eastmoney/rank.js +0 -95
  444. package/clis/eastmoney/sectors.js +0 -77
  445. package/clis/flomo/auth.js +0 -55
  446. package/clis/flomo/memos.js +0 -228
  447. package/clis/flomo/memos.test.js +0 -144
  448. package/clis/gitee/auth.js +0 -41
  449. package/clis/gitee/index.js +0 -3
  450. package/clis/gitee/search.js +0 -137
  451. package/clis/gitee/search.test.js +0 -65
  452. package/clis/gitee/trending.js +0 -568
  453. package/clis/gitee/user.js +0 -200
  454. package/clis/gitee/user.test.js +0 -63
  455. package/clis/gov-law/commands.test.js +0 -39
  456. package/clis/gov-law/recent.js +0 -22
  457. package/clis/gov-law/search.js +0 -41
  458. package/clis/gov-law/shared.js +0 -51
  459. package/clis/gov-policy/__fixtures__/recent.html +0 -16
  460. package/clis/gov-policy/__fixtures__/search.html +0 -41
  461. package/clis/gov-policy/gov-policy.test.js +0 -224
  462. package/clis/gov-policy/recent.js +0 -90
  463. package/clis/gov-policy/search.js +0 -91
  464. package/clis/gov-policy/utils.js +0 -54
  465. package/clis/guazi/__fixtures__/detail.html +0 -7
  466. package/clis/guazi/__fixtures__/list.html +0 -5
  467. package/clis/guazi/browse.js +0 -95
  468. package/clis/guazi/car.js +0 -110
  469. package/clis/guazi/guazi.test.js +0 -126
  470. package/clis/guazi/utils.js +0 -133
  471. package/clis/huodongxing/events.js +0 -322
  472. package/clis/huodongxing/events.test.js +0 -296
  473. package/clis/hupu/__fixtures__/hot-home.html +0 -64
  474. package/clis/hupu/auth.js +0 -47
  475. package/clis/hupu/detail.js +0 -72
  476. package/clis/hupu/hot.js +0 -163
  477. package/clis/hupu/hot.test.js +0 -224
  478. package/clis/hupu/like.js +0 -76
  479. package/clis/hupu/mentions.js +0 -160
  480. package/clis/hupu/reply.js +0 -72
  481. package/clis/hupu/search.js +0 -60
  482. package/clis/hupu/unlike.js +0 -76
  483. package/clis/hupu/utils.js +0 -319
  484. package/clis/jd/add-cart.js +0 -72
  485. package/clis/jd/auth.js +0 -46
  486. package/clis/jd/cart.js +0 -80
  487. package/clis/jd/commands.test.js +0 -41
  488. package/clis/jd/detail.js +0 -63
  489. package/clis/jd/item.js +0 -730
  490. package/clis/jd/item.test.js +0 -354
  491. package/clis/jd/item.test.ts +0 -517
  492. package/clis/jd/reviews.js +0 -55
  493. package/clis/jd/search.js +0 -66
  494. package/clis/jianyu/auth.js +0 -62
  495. package/clis/jianyu/detail.js +0 -21
  496. package/clis/jianyu/search.js +0 -634
  497. package/clis/jianyu/search.test.js +0 -153
  498. package/clis/jianyu/shared/china-bid-search.js +0 -165
  499. package/clis/jianyu/shared/procurement-contract.js +0 -324
  500. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  501. package/clis/jianyu/shared/procurement-detail.js +0 -107
  502. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  503. package/clis/jike/auth.js +0 -48
  504. package/clis/jike/comment.js +0 -107
  505. package/clis/jike/create.js +0 -106
  506. package/clis/jike/feed.js +0 -68
  507. package/clis/jike/like.js +0 -61
  508. package/clis/jike/notifications.js +0 -169
  509. package/clis/jike/post.js +0 -72
  510. package/clis/jike/read.test.js +0 -86
  511. package/clis/jike/repost.js +0 -103
  512. package/clis/jike/search.js +0 -68
  513. package/clis/jike/topic.js +0 -65
  514. package/clis/jike/user.js +0 -65
  515. package/clis/jike/utils.js +0 -25
  516. package/clis/jimeng/auth.js +0 -46
  517. package/clis/jimeng/generate.js +0 -84
  518. package/clis/jimeng/history.js +0 -48
  519. package/clis/jimeng/new.js +0 -44
  520. package/clis/jimeng/workspaces.js +0 -42
  521. package/clis/juejin/hot.js +0 -37
  522. package/clis/juejin/juejin.test.js +0 -241
  523. package/clis/juejin/recommend.js +0 -61
  524. package/clis/juejin/utils.js +0 -199
  525. package/clis/ke/auth.js +0 -46
  526. package/clis/ke/chengjiao.js +0 -78
  527. package/clis/ke/ershoufang.js +0 -101
  528. package/clis/ke/utils.js +0 -104
  529. package/clis/ke/xiaoqu.js +0 -78
  530. package/clis/ke/zufang.js +0 -95
  531. package/clis/kimi/_utils.js +0 -110
  532. package/clis/kimi/audit-extras.js +0 -268
  533. package/clis/kimi/auth.js +0 -57
  534. package/clis/kimi/chat.js +0 -470
  535. package/clis/kimi/kimi.test.js +0 -187
  536. package/clis/kimi/storage.js +0 -169
  537. package/clis/kimi/ui.js +0 -314
  538. package/clis/kimi/usage.js +0 -144
  539. package/clis/linux-do/auth.js +0 -55
  540. package/clis/linux-do/categories.js +0 -50
  541. package/clis/linux-do/feed.js +0 -395
  542. package/clis/linux-do/feed.test.js +0 -153
  543. package/clis/linux-do/search.js +0 -29
  544. package/clis/linux-do/tags.js +0 -28
  545. package/clis/linux-do/topic-content.js +0 -155
  546. package/clis/linux-do/topic-content.test.js +0 -59
  547. package/clis/linux-do/topic.js +0 -53
  548. package/clis/linux-do/user-posts.js +0 -57
  549. package/clis/linux-do/user-topics.js +0 -37
  550. package/clis/maimai/auth.js +0 -47
  551. package/clis/maimai/search-talents.js +0 -192
  552. package/clis/maimai/search-talents.test.js +0 -29
  553. package/clis/mubu/doc.js +0 -41
  554. package/clis/mubu/docs.js +0 -44
  555. package/clis/mubu/notes.js +0 -245
  556. package/clis/mubu/recent.js +0 -28
  557. package/clis/mubu/search.js +0 -63
  558. package/clis/mubu/utils.js +0 -304
  559. package/clis/nowcoder/auth.js +0 -65
  560. package/clis/nowcoder/companies.js +0 -24
  561. package/clis/nowcoder/creators.js +0 -28
  562. package/clis/nowcoder/detail.js +0 -62
  563. package/clis/nowcoder/experience.js +0 -37
  564. package/clis/nowcoder/hot.js +0 -25
  565. package/clis/nowcoder/jobs.js +0 -22
  566. package/clis/nowcoder/notifications.js +0 -30
  567. package/clis/nowcoder/papers.js +0 -41
  568. package/clis/nowcoder/practice.js +0 -38
  569. package/clis/nowcoder/recommend.js +0 -31
  570. package/clis/nowcoder/referral.js +0 -40
  571. package/clis/nowcoder/salary.js +0 -41
  572. package/clis/nowcoder/search.js +0 -50
  573. package/clis/nowcoder/suggest.js +0 -34
  574. package/clis/nowcoder/topics.js +0 -28
  575. package/clis/nowcoder/trending.js +0 -26
  576. package/clis/ones/common.js +0 -144
  577. package/clis/ones/enrich-tasks.js +0 -37
  578. package/clis/ones/login.js +0 -81
  579. package/clis/ones/logout.js +0 -18
  580. package/clis/ones/me.js +0 -31
  581. package/clis/ones/my-tasks.js +0 -121
  582. package/clis/ones/resolve-labels.js +0 -64
  583. package/clis/ones/task-helpers.js +0 -212
  584. package/clis/ones/task-helpers.test.js +0 -12
  585. package/clis/ones/task.js +0 -67
  586. package/clis/ones/tasks.js +0 -80
  587. package/clis/ones/token-info.js +0 -43
  588. package/clis/ones/worklog.js +0 -268
  589. package/clis/ones/worklog.test.js +0 -20
  590. package/clis/powerchina/auth.js +0 -52
  591. package/clis/powerchina/search.js +0 -251
  592. package/clis/powerchina/search.test.js +0 -93
  593. package/clis/quark/auth.js +0 -47
  594. package/clis/quark/ls.js +0 -64
  595. package/clis/quark/mkdir.js +0 -37
  596. package/clis/quark/mv.js +0 -54
  597. package/clis/quark/rename.js +0 -27
  598. package/clis/quark/rm.js +0 -25
  599. package/clis/quark/save.js +0 -81
  600. package/clis/quark/share-tree.js +0 -46
  601. package/clis/quark/utils.js +0 -146
  602. package/clis/quark/utils.test.js +0 -58
  603. package/clis/qwen/ask.js +0 -104
  604. package/clis/qwen/ask.test.js +0 -36
  605. package/clis/qwen/auth.js +0 -56
  606. package/clis/qwen/detail.js +0 -62
  607. package/clis/qwen/history.js +0 -61
  608. package/clis/qwen/image.js +0 -179
  609. package/clis/qwen/new.js +0 -23
  610. package/clis/qwen/read.js +0 -41
  611. package/clis/qwen/send.js +0 -55
  612. package/clis/qwen/status.js +0 -37
  613. package/clis/qwen/utils.js +0 -461
  614. package/clis/qwen/utils.test.js +0 -128
  615. package/clis/rednote/auth.js +0 -52
  616. package/clis/rednote/comments.js +0 -85
  617. package/clis/rednote/download.js +0 -59
  618. package/clis/rednote/feed.js +0 -27
  619. package/clis/rednote/navigation.test.js +0 -26
  620. package/clis/rednote/note.js +0 -68
  621. package/clis/rednote/notifications.js +0 -139
  622. package/clis/rednote/rednote.test.js +0 -240
  623. package/clis/rednote/search.js +0 -107
  624. package/clis/rednote/user.js +0 -55
  625. package/clis/sinablog/article.js +0 -15
  626. package/clis/sinablog/hot.js +0 -15
  627. package/clis/sinablog/search.js +0 -52
  628. package/clis/sinablog/user.js +0 -16
  629. package/clis/sinablog/utils.js +0 -186
  630. package/clis/sinafinance/news.js +0 -62
  631. package/clis/sinafinance/rolling-news.js +0 -41
  632. package/clis/sinafinance/stock-rank.js +0 -66
  633. package/clis/sinafinance/stock.js +0 -121
  634. package/clis/sinafinance/stock.test.js +0 -59
  635. package/clis/smzdm/search.js +0 -149
  636. package/clis/smzdm/search.test.js +0 -114
  637. package/clis/taobao/add-cart.js +0 -150
  638. package/clis/taobao/auth.js +0 -58
  639. package/clis/taobao/cart.js +0 -96
  640. package/clis/taobao/commands.test.js +0 -41
  641. package/clis/taobao/detail.js +0 -71
  642. package/clis/taobao/reviews.js +0 -77
  643. package/clis/taobao/search.js +0 -97
  644. package/clis/tdx/hot-rank.js +0 -48
  645. package/clis/tdx/hot-rank.test.js +0 -59
  646. package/clis/ths/hot-rank.js +0 -50
  647. package/clis/ths/hot-rank.test.js +0 -64
  648. package/clis/tieba/commands.test.js +0 -79
  649. package/clis/tieba/hot.js +0 -48
  650. package/clis/tieba/posts.js +0 -86
  651. package/clis/tieba/read.js +0 -141
  652. package/clis/tieba/search.js +0 -109
  653. package/clis/tieba/utils.js +0 -240
  654. package/clis/tieba/utils.test.js +0 -290
  655. package/clis/toutiao/articles.js +0 -55
  656. package/clis/toutiao/auth.js +0 -70
  657. package/clis/toutiao/hot.js +0 -63
  658. package/clis/toutiao/toutiao.test.js +0 -378
  659. package/clis/toutiao/utils.js +0 -161
  660. package/clis/trae-cn/activity.js +0 -22
  661. package/clis/trae-cn/approve.js +0 -52
  662. package/clis/trae-cn/ask.js +0 -99
  663. package/clis/trae-cn/dump.js +0 -5
  664. package/clis/trae-cn/export.js +0 -40
  665. package/clis/trae-cn/model.js +0 -22
  666. package/clis/trae-cn/new.js +0 -63
  667. package/clis/trae-cn/read.js +0 -23
  668. package/clis/trae-cn/screenshot.js +0 -5
  669. package/clis/trae-cn/select-model.js +0 -25
  670. package/clis/trae-cn/send.js +0 -23
  671. package/clis/trae-cn/setup.js +0 -75
  672. package/clis/trae-cn/status.js +0 -27
  673. package/clis/trae-cn/targets.js +0 -96
  674. package/clis/trae-cn/trae-cn.test.js +0 -412
  675. package/clis/trae-cn/utils.js +0 -750
  676. package/clis/trae-cn/watch.js +0 -119
  677. package/clis/uisdc/news.js +0 -105
  678. package/clis/uisdc/news.test.js +0 -66
  679. package/clis/v2ex/auth.js +0 -44
  680. package/clis/v2ex/daily.js +0 -99
  681. package/clis/v2ex/hot.js +0 -26
  682. package/clis/v2ex/latest.js +0 -26
  683. package/clis/v2ex/me.js +0 -100
  684. package/clis/v2ex/member.js +0 -28
  685. package/clis/v2ex/node.js +0 -39
  686. package/clis/v2ex/nodes.js +0 -26
  687. package/clis/v2ex/notifications.js +0 -72
  688. package/clis/v2ex/replies.js +0 -27
  689. package/clis/v2ex/topic.js +0 -31
  690. package/clis/v2ex/user.js +0 -34
  691. package/clis/wanfang/search.js +0 -66
  692. package/clis/wanfang/search.test.js +0 -23
  693. package/clis/wechat-channels/auth.js +0 -62
  694. package/clis/wechat-channels/publish.js +0 -732
  695. package/clis/wechat-channels/publish.test.js +0 -144
  696. package/clis/weibo/auth.js +0 -53
  697. package/clis/weibo/comments.js +0 -53
  698. package/clis/weibo/delete.js +0 -172
  699. package/clis/weibo/delete.test.js +0 -94
  700. package/clis/weibo/envelope.test.js +0 -85
  701. package/clis/weibo/favorites.js +0 -170
  702. package/clis/weibo/favorites.test.js +0 -114
  703. package/clis/weibo/feed.js +0 -69
  704. package/clis/weibo/hot.js +0 -39
  705. package/clis/weibo/me.js +0 -75
  706. package/clis/weibo/post.js +0 -75
  707. package/clis/weibo/publish.js +0 -306
  708. package/clis/weibo/publish.test.js +0 -192
  709. package/clis/weibo/search.js +0 -80
  710. package/clis/weibo/user-posts.js +0 -234
  711. package/clis/weibo/user-posts.test.js +0 -92
  712. package/clis/weibo/user.js +0 -63
  713. package/clis/weibo/utils.js +0 -59
  714. package/clis/weibo/utils.test.js +0 -36
  715. package/clis/weixin/create-draft.js +0 -226
  716. package/clis/weixin/download.js +0 -371
  717. package/clis/weixin/download.test.js +0 -106
  718. package/clis/weixin/drafts.js +0 -66
  719. package/clis/weixin/drafts.test.js +0 -69
  720. package/clis/weixin/search.js +0 -157
  721. package/clis/weixin/search.test.js +0 -227
  722. package/clis/weread/ai-outline.js +0 -171
  723. package/clis/weread/ai-outline.test.js +0 -83
  724. package/clis/weread/auth.js +0 -59
  725. package/clis/weread/book-search.js +0 -438
  726. package/clis/weread/book-search.test.js +0 -242
  727. package/clis/weread/book.js +0 -233
  728. package/clis/weread/commands.test.js +0 -398
  729. package/clis/weread/highlights.js +0 -24
  730. package/clis/weread/notebooks.js +0 -22
  731. package/clis/weread/notes.js +0 -30
  732. package/clis/weread/private-api-regression.test.js +0 -369
  733. package/clis/weread/ranking.js +0 -29
  734. package/clis/weread/search-regression.test.js +0 -494
  735. package/clis/weread/search.js +0 -186
  736. package/clis/weread/shelf.js +0 -66
  737. package/clis/weread/utils.js +0 -321
  738. package/clis/weread/utils.test.js +0 -128
  739. package/clis/weread-official/book.js +0 -135
  740. package/clis/weread-official/commands.test.js +0 -385
  741. package/clis/weread-official/discover.js +0 -107
  742. package/clis/weread-official/list-apis.js +0 -95
  743. package/clis/weread-official/notes.js +0 -171
  744. package/clis/weread-official/readdata.js +0 -158
  745. package/clis/weread-official/review.js +0 -93
  746. package/clis/weread-official/search.js +0 -106
  747. package/clis/weread-official/shelf.js +0 -97
  748. package/clis/weread-official/utils.js +0 -293
  749. package/clis/weread-official/utils.test.js +0 -242
  750. package/clis/xianyu/auth.js +0 -68
  751. package/clis/xianyu/chat.js +0 -74
  752. package/clis/xianyu/chat.test.js +0 -84
  753. package/clis/xianyu/im.js +0 -322
  754. package/clis/xianyu/im.test.js +0 -253
  755. package/clis/xianyu/inbox.js +0 -96
  756. package/clis/xianyu/item.js +0 -153
  757. package/clis/xianyu/item.test.js +0 -56
  758. package/clis/xianyu/messages.js +0 -91
  759. package/clis/xianyu/publish.js +0 -485
  760. package/clis/xianyu/publish.test.js +0 -220
  761. package/clis/xianyu/reply.js +0 -82
  762. package/clis/xianyu/search.js +0 -262
  763. package/clis/xianyu/search.test.js +0 -104
  764. package/clis/xianyu/utils.js +0 -8
  765. package/clis/xiaoe/auth.js +0 -55
  766. package/clis/xiaoe/catalog.js +0 -227
  767. package/clis/xiaoe/content.js +0 -175
  768. package/clis/xiaoe/courses.js +0 -127
  769. package/clis/xiaoe/detail.js +0 -36
  770. package/clis/xiaoe/play-url.js +0 -121
  771. package/clis/xiaoe/xiaoe.test.js +0 -486
  772. package/clis/xiaohongshu/ask.js +0 -426
  773. package/clis/xiaohongshu/ask.test.js +0 -271
  774. package/clis/xiaohongshu/auth.js +0 -53
  775. package/clis/xiaohongshu/collection-helpers.js +0 -283
  776. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  777. package/clis/xiaohongshu/comments.js +0 -228
  778. package/clis/xiaohongshu/comments.test.js +0 -320
  779. package/clis/xiaohongshu/creator-note-detail.js +0 -482
  780. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  781. package/clis/xiaohongshu/creator-notes-summary.js +0 -98
  782. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  783. package/clis/xiaohongshu/creator-notes.js +0 -479
  784. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  785. package/clis/xiaohongshu/creator-profile.js +0 -55
  786. package/clis/xiaohongshu/creator-stats.js +0 -76
  787. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  788. package/clis/xiaohongshu/delete-note.js +0 -260
  789. package/clis/xiaohongshu/delete-note.test.js +0 -172
  790. package/clis/xiaohongshu/download.js +0 -249
  791. package/clis/xiaohongshu/download.test.js +0 -339
  792. package/clis/xiaohongshu/draft-clear.js +0 -91
  793. package/clis/xiaohongshu/draft-delete.js +0 -103
  794. package/clis/xiaohongshu/draft-open.js +0 -43
  795. package/clis/xiaohongshu/draft-utils.js +0 -142
  796. package/clis/xiaohongshu/drafts.js +0 -28
  797. package/clis/xiaohongshu/drafts.test.js +0 -172
  798. package/clis/xiaohongshu/feed.js +0 -163
  799. package/clis/xiaohongshu/feed.test.js +0 -126
  800. package/clis/xiaohongshu/follow.js +0 -226
  801. package/clis/xiaohongshu/follow.test.js +0 -211
  802. package/clis/xiaohongshu/liked.js +0 -29
  803. package/clis/xiaohongshu/liked.test.js +0 -82
  804. package/clis/xiaohongshu/navigation.test.js +0 -38
  805. package/clis/xiaohongshu/note-helpers.js +0 -69
  806. package/clis/xiaohongshu/note.js +0 -104
  807. package/clis/xiaohongshu/note.test.js +0 -249
  808. package/clis/xiaohongshu/notifications.js +0 -46
  809. package/clis/xiaohongshu/publish.js +0 -1423
  810. package/clis/xiaohongshu/publish.test.js +0 -1141
  811. package/clis/xiaohongshu/saved.js +0 -29
  812. package/clis/xiaohongshu/saved.test.js +0 -143
  813. package/clis/xiaohongshu/search.js +0 -330
  814. package/clis/xiaohongshu/search.test.js +0 -325
  815. package/clis/xiaohongshu/unfollow.js +0 -285
  816. package/clis/xiaohongshu/user-helpers.js +0 -78
  817. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  818. package/clis/xiaohongshu/user.js +0 -140
  819. package/clis/xiaohongshu/user.test.js +0 -141
  820. package/clis/xiaoyuzhou/auth.js +0 -303
  821. package/clis/xiaoyuzhou/auth.test.js +0 -124
  822. package/clis/xiaoyuzhou/download.js +0 -54
  823. package/clis/xiaoyuzhou/download.test.js +0 -135
  824. package/clis/xiaoyuzhou/episode.js +0 -34
  825. package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
  826. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  827. package/clis/xiaoyuzhou/podcast.js +0 -33
  828. package/clis/xiaoyuzhou/transcript.js +0 -77
  829. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  830. package/clis/xiaoyuzhou/utils.js +0 -15
  831. package/clis/xiaoyuzhou/utils.test.js +0 -39
  832. package/clis/xueqiu/auth.js +0 -63
  833. package/clis/xueqiu/comments.js +0 -355
  834. package/clis/xueqiu/comments.test.js +0 -696
  835. package/clis/xueqiu/danjuan-utils.js +0 -126
  836. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  837. package/clis/xueqiu/earnings-date.js +0 -45
  838. package/clis/xueqiu/feed.js +0 -39
  839. package/clis/xueqiu/fund-holdings.js +0 -29
  840. package/clis/xueqiu/fund-snapshot.js +0 -26
  841. package/clis/xueqiu/groups.js +0 -23
  842. package/clis/xueqiu/hot-stock.js +0 -32
  843. package/clis/xueqiu/hot.js +0 -37
  844. package/clis/xueqiu/kline.js +0 -44
  845. package/clis/xueqiu/search.js +0 -37
  846. package/clis/xueqiu/stock.js +0 -65
  847. package/clis/xueqiu/utils.js +0 -48
  848. package/clis/xueqiu/utils.test.js +0 -26
  849. package/clis/xueqiu/watchlist.js +0 -37
  850. package/clis/youdao/note.js +0 -258
  851. package/clis/youdao/note.test.js +0 -99
  852. package/clis/yuanbao/ask.js +0 -362
  853. package/clis/yuanbao/ask.test.js +0 -124
  854. package/clis/yuanbao/auth.js +0 -59
  855. package/clis/yuanbao/detail.js +0 -65
  856. package/clis/yuanbao/history.js +0 -51
  857. package/clis/yuanbao/new.js +0 -72
  858. package/clis/yuanbao/new.test.js +0 -30
  859. package/clis/yuanbao/read.js +0 -38
  860. package/clis/yuanbao/send.js +0 -57
  861. package/clis/yuanbao/shared.js +0 -341
  862. package/clis/yuanbao/shared.test.js +0 -80
  863. package/clis/yuanbao/status.js +0 -44
  864. package/clis/zhihu/answer-comments.js +0 -280
  865. package/clis/zhihu/answer-comments.test.js +0 -287
  866. package/clis/zhihu/answer-detail.js +0 -216
  867. package/clis/zhihu/answer-detail.test.js +0 -338
  868. package/clis/zhihu/answer.js +0 -54
  869. package/clis/zhihu/answer.test.js +0 -54
  870. package/clis/zhihu/auth.js +0 -59
  871. package/clis/zhihu/collection.js +0 -199
  872. package/clis/zhihu/collection.test.js +0 -337
  873. package/clis/zhihu/collections.js +0 -128
  874. package/clis/zhihu/collections.test.js +0 -182
  875. package/clis/zhihu/comment.js +0 -55
  876. package/clis/zhihu/comment.test.js +0 -50
  877. package/clis/zhihu/download.js +0 -80
  878. package/clis/zhihu/download.test.js +0 -12
  879. package/clis/zhihu/favorite.js +0 -87
  880. package/clis/zhihu/favorite.test.js +0 -59
  881. package/clis/zhihu/follow.js +0 -50
  882. package/clis/zhihu/follow.test.js +0 -42
  883. package/clis/zhihu/followers.js +0 -40
  884. package/clis/zhihu/followers.test.js +0 -42
  885. package/clis/zhihu/following.js +0 -40
  886. package/clis/zhihu/following.test.js +0 -44
  887. package/clis/zhihu/hot.js +0 -44
  888. package/clis/zhihu/like.js +0 -47
  889. package/clis/zhihu/like.test.js +0 -41
  890. package/clis/zhihu/paginate.js +0 -128
  891. package/clis/zhihu/pins.js +0 -41
  892. package/clis/zhihu/pins.test.js +0 -44
  893. package/clis/zhihu/question.js +0 -113
  894. package/clis/zhihu/question.test.js +0 -251
  895. package/clis/zhihu/recommend.js +0 -103
  896. package/clis/zhihu/recommend.test.js +0 -143
  897. package/clis/zhihu/search.js +0 -206
  898. package/clis/zhihu/search.test.js +0 -198
  899. package/clis/zhihu/target.js +0 -91
  900. package/clis/zhihu/target.test.js +0 -77
  901. package/clis/zhihu/text.js +0 -29
  902. package/clis/zhihu/text.test.js +0 -24
  903. package/clis/zhihu/user-answers.js +0 -41
  904. package/clis/zhihu/user-answers.test.js +0 -69
  905. package/clis/zhihu/user-arg.js +0 -34
  906. package/clis/zhihu/user-articles.js +0 -40
  907. package/clis/zhihu/user-articles.test.js +0 -44
  908. package/clis/zhihu/user.js +0 -59
  909. package/clis/zhihu/user.test.js +0 -73
  910. package/clis/zhihu/write-shared.js +0 -228
  911. package/clis/zhihu/write-shared.test.js +0 -176
  912. package/clis/zsxq/auth.js +0 -68
  913. package/clis/zsxq/dynamics.js +0 -48
  914. package/clis/zsxq/groups.js +0 -33
  915. package/clis/zsxq/search.js +0 -44
  916. package/clis/zsxq/search.test.js +0 -24
  917. package/clis/zsxq/topic.js +0 -50
  918. package/clis/zsxq/topic.test.js +0 -30
  919. package/clis/zsxq/topics.js +0 -26
  920. package/clis/zsxq/topics.test.js +0 -24
  921. package/clis/zsxq/utils.js +0 -233
  922. package/clis/zsxq/utils.test.js +0 -31
  923. package/dist/src/weixin-download.test.js +0 -45
  924. package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
  925. package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
  926. package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
  927. package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
  928. /package/{clis/douyin/_shared/types.js → dist/src/generate-release-notes-cli.test.d.ts} +0 -0
  929. /package/dist/src/{weixin-download.test.d.ts → release-notes.test.d.ts} +0 -0
@@ -134,7 +134,7 @@ export function buildListChannelsScript() {
134
134
 
135
135
  function cleanChannelLabel(label) {
136
136
  var cleaned = String(label || '').trim();
137
- var commaIdx = cleaned.search(/[,,]/);
137
+ var commaIdx = cleaned.search(/[,,]/);
138
138
  if (commaIdx !== -1) cleaned = cleaned.slice(commaIdx + 1).trimStart();
139
139
  return cleaned;
140
140
  }
@@ -151,12 +151,12 @@ export function buildListChannelsScript() {
151
151
 
152
152
  function channelName(label, el) {
153
153
  var cleaned = cleanChannelLabel(label);
154
- var m = cleaned.match(/^(.+?)\\s*[(](.+?)[)]\\s*$/);
154
+ var m = cleaned.match(/^(.+?)\\s*[((](.+?)[))]\\s*$/);
155
155
  if (m) return m[1].trim();
156
156
  var ariaName = el.getAttribute('aria-label') || '';
157
- if (ariaName && ariaName !== label) return cleanChannelLabel(ariaName).replace(/\\s*[(].*?[)]\\s*$/, '').trim();
157
+ if (ariaName && ariaName !== label) return cleanChannelLabel(ariaName).replace(/\\s*[((].*?[))]\\s*$/, '').trim();
158
158
  var text = (el.textContent || '').replace(/\\s+/g, ' ').trim();
159
- return text.replace(/\\s*[(].*?[)]\\s*$/, '').trim();
159
+ return text.replace(/\\s*[((].*?[))]\\s*$/, '').trim();
160
160
  }
161
161
 
162
162
  var links = Array.from(document.querySelectorAll('a[href*="/channels/"]'));
@@ -171,7 +171,7 @@ export function buildListChannelsScript() {
171
171
 
172
172
  var label = el.getAttribute('aria-label') || el.getAttribute('title') || '';
173
173
  var cleaned = cleanChannelLabel(label);
174
- if (/[(]\\s*category\\s*[)]/i.test(cleaned)) return;
174
+ if (/[((]\\s*category\\s*[))]/i.test(cleaned)) return;
175
175
 
176
176
  var name = channelName(cleaned, el);
177
177
  if (!name) return;
@@ -355,7 +355,7 @@ export function buildRouteStateScript() {
355
355
  route: parseRoute(window.location.href),
356
356
  has_messages: !!document.querySelector('[id^="chat-messages-"], [class*="messageListItem"]'),
357
357
  has_threads: !!document.querySelector('a[href*="/channels/"][href*="/"]'),
358
- has_header: !!document.querySelector('[class*="title"], [aria-label*="Channel"], [aria-label*="频道"]')
358
+ has_header: !!document.querySelector('[class*="title"], [aria-label*="Channel"], [aria-label*="Channel"]')
359
359
  };
360
360
  })()
361
361
  `;
@@ -1,13 +1,13 @@
1
1
  <!doctype html>
2
2
  <html lang="zh">
3
- <head><meta charset="utf-8"><title>通知 | Facebook</title></head>
3
+ <head><meta charset="utf-8"><title>notifications | Facebook</title></head>
4
4
  <body>
5
5
  <div role="main">
6
- <div class="x1rdy4ex" role="listitem"><div><div><div><div><div><div><span dir="auto"><div><div><h2><span><span>新通知</span></span></h2></div><div><div><div>&nbsp;</div><div><div></div></div></div></div></div></span></div></div></div></div></div></div></div>
7
- <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/photo/?fbid=104250644186433&amp;set=a.104250310853133&amp;notif_id=1777926497886652&amp;notif_t=onthisday&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>未读</div>回顾你在 2019年6月的那段过往.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2天前"><span>2天</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="标记为已读,回顾你在 2019年6月的那段过往." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1o_" aria-expanded="false" aria-haspopup="dialog" aria-label="管理Jake Win通知设置" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
8
- <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/jake.win.39/posts/pfbid0JYwqY2r7MnMtowrMXbB2xuho8CMjPbS9fJgQYppcrk6JgNcNhDVUMQQX3SMeUwnDl?story_gqlid=UzpfSTEwMDAzODA0NDkzMjEzNToxMDQyNDkzNjQxODY1NjE6MTA0MjQ5MzY0MTg2NTYx&amp;notif_id=1777926497887116&amp;notif_t=onthisday&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>未读</div>看看你在 2019年6月发布的帖子,瞬间回到过去的美好时光.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2天前"><span>2天</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="标记为已读,看看你在 2019年6月发布的帖子,瞬间回到过去的美好时光." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1s_" aria-expanded="false" aria-haspopup="dialog" aria-label="管理Jake Win通知设置" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
9
- <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/afad/?approval_id=1202094468666719&amp;notif_id=1773680546395691&amp;notif_t=approve_from_another_device&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>未读</div>有人尝试登录,但我们已阻止。</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="7周前"><span>7周</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="标记为已读,有人尝试登录,但我们已阻止。" role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_20_" aria-expanded="false" aria-haspopup="dialog" aria-label="管理Jake Win通知设置" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
10
- <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/groups/discover/?source=recommendation_notif&amp;hoisted_group_id=720850587716560&amp;notif_id=1777892286665396&amp;notif_t=group_recommendation&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>未读</div>你可能会喜欢 <b>ETYCAL VIBEZ fan's page</b> 。</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2天前"><span>2天</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="标记为已读,你可能会喜欢 ETYCAL VIBEZ fan's page " role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_24_" aria-expanded="false" aria-haspopup="dialog" aria-label="管理Jake Win通知设置" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
6
+ <div class="x1rdy4ex" role="listitem"><div><div><div><div><div><div><span dir="auto"><div><div><h2><span><span>New notifications</span></span></h2></div><div><div><div>&nbsp;</div><div><div></div></div></div></div></div></span></div></div></div></div></div></div></div>
7
+ <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/photo/?fbid=104250644186433&amp;set=a.104250310853133&amp;notif_id=1777926497886652&amp;notif_t=onthisday&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Review your 2019year6memory from that month.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Review your 2019year6memory from that month." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1o_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
8
+ <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/jake.win.39/posts/pfbid0JYwqY2r7MnMtowrMXbB2xuho8CMjPbS9fJgQYppcrk6JgNcNhDVUMQQX3SMeUwnDl?story_gqlid=UzpfSTEwMDAzODA0NDkzMjEzNToxMDQyNDkzNjQxODY1NjE6MTA0MjQ5MzY0MTg2NTYx&amp;notif_id=1777926497887116&amp;notif_t=onthisday&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Look back at your 2019year6post from June,memory from the past.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Look back at your 2019year6post from June,memory from the past." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1s_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
9
+ <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/afad/?approval_id=1202094468666719&amp;notif_id=1773680546395691&amp;notif_t=approve_from_another_device&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Someone tried to log in,but we blocked it.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="7weeks ago"><span>7weeks</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Someone tried to log in,but we blocked it." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_20_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
10
+ <div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/groups/discover/?source=recommendation_notif&amp;hoisted_group_id=720850587716560&amp;notif_id=1777892286665396&amp;notif_t=group_recommendation&amp;ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>You might like <b>ETYCAL VIBEZ fan's page</b> .</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,You might like ETYCAL VIBEZ fan's page ." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_24_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
11
11
  </div>
12
12
  </body>
13
13
  </html>
@@ -22,14 +22,14 @@ cli({
22
22
  const buttons = Array.from(document.querySelectorAll('[role="button"]'));
23
23
  const addBtn = buttons.find(b => {
24
24
  const text = b.textContent.trim();
25
- return text === '加好友' || text === 'Add Friend' || text === 'Add friend';
25
+ return text === 'Add friend' || text === 'Add Friend' || text === 'Add friend';
26
26
  });
27
27
 
28
28
  if (!addBtn) {
29
29
  // Check if already friends
30
30
  const isFriend = buttons.some(b => {
31
31
  const t = b.textContent.trim();
32
- return t === '好友' || t === 'Friends' || t.includes('已发送') || t.includes('Pending');
32
+ return t === 'Friends' || t === 'Friends' || t.includes('Pending') || t.includes('Pending');
33
33
  });
34
34
  if (isFriend) return [{ status: 'Already friends or request pending', username }];
35
35
  return [{ status: 'Add Friend button not found', username }];
@@ -39,36 +39,36 @@ function buildFeedExtractScript(limit) {
39
39
  const path = window.location && window.location.pathname ? window.location.pathname : '';
40
40
  const body = textOf(document.body);
41
41
  return /^\\/(login|checkpoint)(\\/|$|\\.php)/.test(path)
42
- || /^(Log in to Facebook|Facebook登录|登录 Facebook)/i.test(body)
42
+ || /^(Log in to Facebook|FacebookLog in|Log in Facebook)/i.test(body)
43
43
  || /You must log in to continue/i.test(body);
44
44
  }
45
45
 
46
46
  function isExplicitEmptyFeed() {
47
47
  const body = textOf(document.body);
48
- return /No posts available|Nothing to show|暂无动态|没有更多动态|还没有帖子/i.test(body);
48
+ return /No posts available|Nothing to show|No posts available|No more posts|No posts yet/i.test(body);
49
49
  }
50
50
 
51
51
  function isSuggestionOrChrome(text) {
52
- return /^(People you may know|People You May Know|可能认识的人?|你可能认识的人?)/i.test(text)
53
- || /^(Suggested for you|Suggested Groups|推荐小组|推荐内容)/i.test(text);
52
+ return /^(People you may know|People You May Know|People you may know?|People you may know?)/i.test(text)
53
+ || /^(Suggested for you|Suggested Groups|Suggested groups|Suggested content)/i.test(text);
54
54
  }
55
55
 
56
56
  function isSponsored(text) {
57
- return /(^|\\s)(Sponsored|赞助|广告)(\\s|$)/i.test(text);
57
+ return /(^|\\s)(Sponsored|Sponsored|Advertisement)(\\s|$)/i.test(text);
58
58
  }
59
59
 
60
60
  function isActionText(text) {
61
- return /^(Like|Comment|Share|Send|Follow|赞|评论|分享|发送|关注)$/i.test(text);
61
+ return /^(Like|Comment|Share|Send|Follow|Like|Comment|Share|Send|Follow)$/i.test(text);
62
62
  }
63
63
 
64
64
  function isMetricText(text) {
65
- return /^(All:|所有心情:)/i.test(text)
65
+ return /^(All:|All reactions:)/i.test(text)
66
66
  || /\\b(likes?|reactions?|comments?|shares?)\\b/i.test(text)
67
- || /(条评论|次分享)$/.test(text);
67
+ || /(comments|shares)$/.test(text);
68
68
  }
69
69
 
70
70
  function isTimestampText(text) {
71
- return /^(\\d+\\s*(s|m|h|d|w|mo|yr|min|sec|second|minute|hour|day|week|month|year)s?|Just now|Yesterday|刚刚|昨天|\\d+小时|\\d+天)(\\s*[·•.])?$/i.test(text);
71
+ return /^(\\d+\\s*(s|m|h|d|w|mo|yr|min|sec|second|minute|hour|day|week|month|year)s?|Just now|Yesterday|just now|yesterday|\\d+hours|\\d+days)(\\s*[\u00b7•.])?$/i.test(text);
72
72
  }
73
73
 
74
74
  function postUrlFrom(root) {
@@ -86,9 +86,9 @@ function buildFeedExtractScript(limit) {
86
86
  const kinds = new Set();
87
87
  for (const el of root.querySelectorAll('[aria-label]')) {
88
88
  const label = labelOf(el);
89
- if (/^(Like|赞)$/i.test(label)) kinds.add('like');
90
- if (/^(Comment|评论)$/i.test(label)) kinds.add('comment');
91
- if (/^(Share|分享)$/i.test(label)) kinds.add('share');
89
+ if (/^(Like|Like)$/i.test(label)) kinds.add('like');
90
+ if (/^(Comment|Comment)$/i.test(label)) kinds.add('comment');
91
+ if (/^(Share|Share)$/i.test(label)) kinds.add('share');
92
92
  }
93
93
  return kinds;
94
94
  }
@@ -129,7 +129,7 @@ function buildFeedExtractScript(limit) {
129
129
  if (text.length <= 10) return false;
130
130
  if (isSuggestionOrChrome(text) || isSponsored(text)) return false;
131
131
  if (isActionText(text) || isMetricText(text) || isTimestampText(text)) return false;
132
- if (/^(See more|查看更多|更多)$/i.test(text)) return false;
132
+ if (/^(See more|See more|More)$/i.test(text)) return false;
133
133
  return true;
134
134
  });
135
135
  }
@@ -147,12 +147,12 @@ function buildFeedExtractScript(limit) {
147
147
  if (!author && !content) return null;
148
148
  if (!content && !postUrl && kinds.size < 2) return null;
149
149
 
150
- const likesMatch = fullText.match(/所有心情:\\s*(\\d[\\d,.\\s万亿KMk]*)/)
150
+ const likesMatch = fullText.match(/All reactions:\\s*(\\d[\\d,.\\slocalized textKMk]*)/)
151
151
  || fullText.match(/All:\\s*(\\d[\\d,.KMk]*)/)
152
152
  || fullText.match(/(\\d[\\d,.KMk]*)\\s*(?:likes?|reactions?)/i);
153
- const commentsMatch = fullText.match(/([\\d,.]+\\s*[万亿]?)\\s*条评论/)
153
+ const commentsMatch = fullText.match(/([\\d,.]+\\s*[localized text]?)\\s*comments/)
154
154
  || fullText.match(/(\\d[\\d,.KMk]*)\\s*comments?/i);
155
- const sharesMatch = fullText.match(/([\\d,.]+\\s*[万亿]?)\\s*次分享/)
155
+ const sharesMatch = fullText.match(/([\\d,.]+\\s*[localized text]?)\\s*shares/)
156
156
  || fullText.match(/(\\d[\\d,.KMk]*)\\s*shares?/i);
157
157
 
158
158
  return {
@@ -173,7 +173,7 @@ function buildFeedExtractScript(limit) {
173
173
  function fallbackContainers() {
174
174
  const main = document.querySelector('[role="main"]');
175
175
  if (!main) return [];
176
- const buttons = Array.from(main.querySelectorAll('[aria-label="Like"], [aria-label=""], [aria-label="Comment"], [aria-label="评论"], [aria-label="Share"], [aria-label="分享"]'));
176
+ const buttons = Array.from(main.querySelectorAll('[aria-label="Like"], [aria-label="Like"], [aria-label="Comment"], [aria-label="Comment"], [aria-label="Share"], [aria-label="Share"]'));
177
177
  const seen = new WeakSet();
178
178
  const containers = [];
179
179
  for (const button of buttons) {
@@ -224,7 +224,7 @@ function buildFeedExtractScript(limit) {
224
224
  diagnostics: {
225
225
  articleCount: document.querySelectorAll('[role="article"]').length,
226
226
  primaryCount: primary.length,
227
- fallbackActionCount: document.querySelectorAll('[role="main"] [aria-label="Like"], [role="main"] [aria-label=""], [role="main"] [aria-label="Comment"], [role="main"] [aria-label="评论"]').length,
227
+ fallbackActionCount: document.querySelectorAll('[role="main"] [aria-label="Like"], [role="main"] [aria-label="Like"], [role="main"] [aria-label="Comment"], [role="main"] [aria-label="Comment"]').length,
228
228
  mainTextLength: textOf(document.querySelector('[role="main"]')).length,
229
229
  },
230
230
  };
@@ -19,12 +19,12 @@ cli({
19
19
  .map((el, i) => {
20
20
  const text = el.textContent.trim().replace(/\\s+/g, ' ');
21
21
  // Extract mutual info if present (before name extraction to avoid pollution)
22
- const mutualMatch = text.match(/([\\d,]+)\\s*位.*(?:关注|共同|mutual)/);
22
+ const mutualMatch = text.match(/([\\d,]+)\\s*people.*(?:Follow|mutual|mutual)/);
23
23
  // Extract name: remove mutual info, action buttons, etc.
24
24
  let name = text
25
- .replace(/[\\d,]+\\s*位.*(?:关注了|共同好友|mutual friends?)/, '')
26
- .replace(/加好友.*/, '').replace(/Add [Ff]riend.*/, '')
27
- .replace(/移除$/, '').replace(/Remove$/, '')
25
+ .replace(/[\\d,]+\\s*people.*(?:followed|mutual friends|mutual friends?)/, '')
26
+ .replace(/Add friend.*/, '').replace(/Add [Ff]riend.*/, '')
27
+ .replace(/Remove$/, '').replace(/Remove$/, '')
28
28
  .trim();
29
29
  return {
30
30
  index: i + 1,
@@ -32,11 +32,11 @@ cli({
32
32
  if (seen.has(href)) continue;
33
33
  seen.add(href);
34
34
  const raw = a.textContent.trim().replace(/\\s+/g, ' ');
35
- // Split name from "上次发帖" info
36
- const parts = raw.split(/上次发帖|Last post/);
35
+ // Split name from "Last post" info
36
+ const parts = raw.split(/Last post|Last post/);
37
37
  groups.push({
38
38
  name: (parts[0] || '').trim().substring(0, 60),
39
- last_post: parts[1] ? parts[1].replace(/^[::]/, '').trim() : '-',
39
+ last_post: parts[1] ? parts[1].replace(/^[::]/, '').trim() : '-',
40
40
  url: href,
41
41
  });
42
42
  }
@@ -24,13 +24,13 @@ cli({
24
24
  const buttons = Array.from(document.querySelectorAll('[role="button"]'));
25
25
  const joinBtn = buttons.find(b => {
26
26
  const text = b.textContent.trim();
27
- return text === '加入小组' || text === 'Join group' || text === 'Join Group';
27
+ return text === 'Join group' || text === 'Join group' || text === 'Join Group';
28
28
  });
29
29
 
30
30
  if (!joinBtn) {
31
31
  const isMember = buttons.some(b => {
32
32
  const t = b.textContent.trim();
33
- return t === '已加入' || t === 'Joined' || t === '成员' || t === 'Member';
33
+ return t === 'Joined' || t === 'Joined' || t === 'Member' || t === 'Member';
34
34
  });
35
35
  if (isMember) return [{ status: 'Already a member', group: groupName }];
36
36
  return [{ status: 'Join button not found', group: groupName }];
@@ -28,7 +28,7 @@ cli({
28
28
 
29
29
  const result = await page.evaluate(String.raw`(() => {
30
30
  const clean = (s) => String(s || '').replace(/[\u00a0\u202f]/g, ' ').replace(/\s+/g, ' ').trim();
31
- const timeRe = /^(?:\d{1,2}:\d{2}\s?(?:AM|PM|am|pm|上午|下午)?|Mon|Tue|Wed|Thu|Fri|Sat|Sun|Today|Yesterday|\d+[mhdw]|\d+\s*(?:min|h|d|w))$/;
31
+ const timeRe = /^(?:\d{1,2}:\d{2}\s?(?:AM|PM|am|pm|AM|PM)?|Mon|Tue|Wed|Thu|Fri|Sat|Sun|Today|Yesterday|\d+[mhdw]|\d+\s*(?:min|h|d|w))$/;
32
32
  const text = document.body?.innerText || '';
33
33
  if (/log in|sign in/i.test(text) && !/Marketplace/i.test(text)) {
34
34
  return { authRequired: true, rows: [] };
@@ -41,8 +41,8 @@ cli({
41
41
  for (let i = 0; i < lines.length - 2; i += 1) {
42
42
  const buyer = lines[i];
43
43
  const meta = lines[i + 1];
44
- if (skipBuyer.test(buyer) || !/^·\s+/.test(meta)) continue;
45
- const listing = meta.replace(/^·\s*/, '');
44
+ if (skipBuyer.test(buyer) || !/^\u00b7\s+/.test(meta)) continue;
45
+ const listing = meta.replace(/^\u00b7\s*/, '');
46
46
  if (!listing || /^Within\b/i.test(listing)) continue;
47
47
  const snippet = lines[i + 2] || '';
48
48
  const time = timeRe.test(lines[i + 3] || '') ? lines[i + 3] : '';
@@ -44,7 +44,7 @@ cli({
44
44
  seen.add(title);
45
45
  const windowLines = lines.slice(i, i + 12);
46
46
  const status = windowLines.find((line) => /^(Active|Sold|Pending|Draft)$/i.test(line)) || '';
47
- const listed = windowLines.find((line) => /Listed on\b/i.test(line))?.replace(/^·\s*/, '') || '';
47
+ const listed = windowLines.find((line) => /Listed on\b/i.test(line))?.replace(/^\u00b7\s*/, '') || '';
48
48
  const clickLine = windowLines.find((line) => /clicks? on listing/i.test(line)) || '';
49
49
  const clickMatch = clickLine.match(/([\d,.]+)\s+clicks? on listing/i);
50
50
  const actions = windowLines.filter((line) => /^(Mark as sold|Mark as available|Relist this item|Share|Boost listing)$/i.test(line));
@@ -8,7 +8,7 @@
8
8
  // 2. silent-bad-shape — the old time field used a dash sentinel for
9
9
  // unknown values; typed unknown should be `null` so an agent caller
10
10
  // does not have to learn in-band sentinel strings.
11
- // 3. silent-column-drop — the IIFE saw the `<div>未读</div>` /
11
+ // 3. silent-column-drop — the IIFE saw the `<div>Unread</div>` /
12
12
  // `<div>Unread</div>` badge child and the anchor's `<a href>` URL
13
13
  // but kept neither, so callers got a bare text blob with no way
14
14
  // to follow up on a notification.
@@ -22,8 +22,7 @@
22
22
  // silent clamp; `ArgumentError` on bad input.
23
23
  // - Pure extractor `extractNotificationRowsFromDoc` is a Node-side
24
24
  // export — JSDOM-against-frozen-fixture tests call it directly while
25
- // the live IIFE embeds it via `${fn.toString()}` (mirrors hupu
26
- // #1387 / xiaoe #1388 / dianping #1313 pattern). Helpers
25
+ // the live IIFE embeds it via `${fn.toString()}`. Helpers
27
26
  // `stripMarkAsReadPrefix`, `stripAnchorChrome`, `parseNotifQuery`
28
27
  // are also pure exports for the same reason.
29
28
  // - Seven columns instead of three:
@@ -50,24 +49,24 @@ export const NOTIFICATIONS_LIMIT_MAX = 100;
50
49
 
51
50
  // Locale-specific "Mark as read" button prefixes Facebook attaches to
52
51
  // the per-row mark-as-read action. We use this to recover the bare
53
- // notification body text without the leading "未读" / "Unread" badge or
52
+ // notification body text without the leading "Unread" / "Unread" badge or
54
53
  // the trailing time-ago suffix that the anchor's textContent contains.
55
54
  //
56
55
  // Each entry must be a complete, deterministic prefix — no regex — so a
57
56
  // rare false-positive substring match elsewhere on the page does not
58
57
  // silently truncate body text.
59
58
  export const MARK_AS_READ_PREFIXES = [
60
- '标记为已读,',
59
+ 'Mark as read,',
61
60
  'Mark as read, ',
62
61
  'Mark as Read, ',
63
62
  'Marquer comme lu, ',
64
63
  'Marcar como leído, ',
65
- '既読にする, ',
64
+ 'Readにする, ',
66
65
  ];
67
66
 
68
67
  // Localised "unread" badge labels that appear inside a `<div>` inside
69
68
  // the notification listitem. Used to set the typed `unread` boolean.
70
- export const UNREAD_BADGE_LABELS = ['未读', 'Unread', 'No leído', '未読'];
69
+ export const UNREAD_BADGE_LABELS = ['Unread', 'Unread', 'No leído', 'Unread'];
71
70
 
72
71
  export function normalizeNotificationsLimit(raw) {
73
72
  if (raw === undefined || raw === null || raw === '') {
@@ -102,14 +101,14 @@ export function stripMarkAsReadPrefix(label, prefixes) {
102
101
  return null;
103
102
  }
104
103
 
105
- // Pure: strip the leading "未读" / "Unread" badge prefix and the trailing
106
- // time-ago suffix (e.g. "2天" / "5 hrs") from the rendered text of a
104
+ // Pure: strip the leading "Unread" / "Unread" badge prefix and the trailing
105
+ // time-ago suffix (e.g. "2days" / "5 hrs") from the rendered text of a
107
106
  // notification anchor. Used as a fallback when the mark-as-read
108
107
  // aria-label is not present (already-read rows).
109
108
  //
110
109
  // `badges` is the localized unread-badge labels list; `timeStr` is the
111
110
  // trailing time string previously extracted from `<abbr>` (or `null`).
112
- // Trailing `.` / `。` that Facebook inserts between body and time are
111
+ // Trailing `.` / `.` that Facebook inserts between body and time are
113
112
  // also stripped — but only at the very end, never mid-text.
114
113
  export function stripAnchorChrome(rawText, timeStr, badges) {
115
114
  if (!rawText) return '';
@@ -127,7 +126,7 @@ export function stripAnchorChrome(rawText, timeStr, badges) {
127
126
  text = text.slice(0, text.length - t.length).trim();
128
127
  }
129
128
  }
130
- text = text.replace(/[.。]+$/, '').trim();
129
+ text = text.replace(/[..]+$/, '').trim();
131
130
  return text;
132
131
  }
133
132
 
@@ -156,7 +155,7 @@ export function isFacebookAuthRedirectPath(pathname) {
156
155
 
157
156
  // Pure extractor: walks `[role="listitem"]` containers in `doc` and
158
157
  // returns at most `limit` notification rows. Header listitems (those
159
- // without an `<a href>` child — e.g. the "新通知" / "Earlier" section
158
+ // without an `<a href>` child — e.g. the "New notifications" / "Earlier" section
160
159
  // heading FB inserts at the top of the feed) are skipped.
161
160
  //
162
161
  // `helpers` carries the four pure helpers as positional refs so the
@@ -177,7 +176,7 @@ export function extractNotificationRowsFromDoc(doc, limit, helpers) {
177
176
  const abbr = item.querySelector('abbr');
178
177
  const time = abbr ? ((abbr.textContent || '').trim() || null) : null;
179
178
 
180
- // Unread badge: prefer the explicit `<div>未读</div>` /
179
+ // Unread badge: prefer the explicit `<div>Unread</div>` /
181
180
  // `<div>Unread</div>` child; fall back to anchor text prefix.
182
181
  let unread = false;
183
182
  const allDivs = item.querySelectorAll('div');
@@ -208,7 +207,7 @@ export function extractNotificationRowsFromDoc(doc, limit, helpers) {
208
207
  const label = labelHosts[k].getAttribute('aria-label');
209
208
  const stripped = helpers.stripMark(label, helpers.markPrefixes);
210
209
  if (stripped !== null) {
211
- const cleaned = stripped.replace(/[.。]+$/, '').trim();
210
+ const cleaned = stripped.replace(/[..]+$/, '').trim();
212
211
  text = cleaned || null;
213
212
  break;
214
213
  }
@@ -311,7 +310,7 @@ export const notificationsCommand = cli({
311
310
  site: 'facebook',
312
311
  name: 'notifications',
313
312
  access: 'read',
314
- description: 'Get recent Facebook notifications ( unread / time / url / notif_id / notif_type )',
313
+ description: 'Get recent Facebook notifications (includes unread / time / url / notif_id / notif_type columns)',
315
314
  domain: 'www.facebook.com',
316
315
  strategy: Strategy.COOKIE,
317
316
  browser: true,
@@ -5,17 +5,16 @@
5
5
  // snapshot of `www.facebook.com/notifications` captured live from a
6
6
  // logged-in session. Class names are stripped; SVG / `<i>` icon nodes
7
7
  // are removed. The structure preserves what the extractor needs:
8
- // - 5 `[role="listitem"]` rows: 1 header ("新通知" — no anchor) +
8
+ // - 5 `[role="listitem"]` rows: 1 header ("New notifications" — no anchor) +
9
9
  // 4 real notifications across 3 distinct `notif_t` types
10
10
  // (`onthisday`, `approve_from_another_device`,
11
11
  // `group_recommendation`).
12
12
  // - Each data row has `<a href>` with `notif_id` + `notif_t` query
13
- // params, `<div>未读</div>` unread badge, `<abbr aria-label="N天前">
14
- // <span>N天</span></abbr>` for time, and a `<div role="button"
15
- // aria-label="标记为已读,<body>">` for the bare body text.
13
+ // params, `<div>Unread</div>` unread badge, `<abbr aria-label="Ndays ago">
14
+ // <span>Ndays</span></abbr>` for time, and a `<div role="button"
15
+ // aria-label="Mark as read,<body>">` for the bare body text.
16
16
  //
17
- // Per dianping #1313 / hupu #1387 / xiaoe #1388 pattern: the live IIFE
18
- // embeds the same `extractNotificationRowsFromDoc` function via
17
+ // The live IIFE embeds the same `extractNotificationRowsFromDoc` function via
19
18
  // `${fn.toString()}` so the extractor seen by these JSDOM tests is the
20
19
  // exact same code that runs in the browser.
21
20
 
@@ -135,8 +134,8 @@ describe('normalizeNotificationsLimit', () => {
135
134
 
136
135
  describe('stripMarkAsReadPrefix', () => {
137
136
  it('strips known locale prefixes', () => {
138
- expect(stripMarkAsReadPrefix('标记为已读,回顾你在 2019年6月的那段过往.', MARK_AS_READ_PREFIXES))
139
- .toBe('回顾你在 2019年6月的那段过往.');
137
+ expect(stripMarkAsReadPrefix('Mark as read,Review your 2019year6memory from that month.', MARK_AS_READ_PREFIXES))
138
+ .toBe('Review your 2019year6memory from that month.');
140
139
  expect(stripMarkAsReadPrefix('Mark as read, John liked your photo', MARK_AS_READ_PREFIXES))
141
140
  .toBe('John liked your photo');
142
141
  expect(stripMarkAsReadPrefix('Mark as Read, John liked your photo', MARK_AS_READ_PREFIXES))
@@ -144,7 +143,7 @@ describe('stripMarkAsReadPrefix', () => {
144
143
  });
145
144
 
146
145
  it('returns null when prefix is missing — never silent default', () => {
147
- expect(stripMarkAsReadPrefix('管理Jake Win通知设置', MARK_AS_READ_PREFIXES)).toBeNull();
146
+ expect(stripMarkAsReadPrefix('ManageJake Winnotification settings', MARK_AS_READ_PREFIXES)).toBeNull();
148
147
  expect(stripMarkAsReadPrefix('arbitrary aria-label without prefix', MARK_AS_READ_PREFIXES))
149
148
  .toBeNull();
150
149
  });
@@ -158,18 +157,18 @@ describe('stripMarkAsReadPrefix', () => {
158
157
  });
159
158
 
160
159
  describe('stripAnchorChrome', () => {
161
- it('strips leading 未读 / Unread badge', () => {
162
- expect(stripAnchorChrome('未读John liked your photo', null, UNREAD_BADGE_LABELS))
160
+ it('strips leading Unread / Unread badge', () => {
161
+ expect(stripAnchorChrome('UnreadJohn liked your photo', null, UNREAD_BADGE_LABELS))
163
162
  .toBe('John liked your photo');
164
163
  expect(stripAnchorChrome('UnreadJohn liked your photo', null, UNREAD_BADGE_LABELS))
165
164
  .toBe('John liked your photo');
166
165
  });
167
166
 
168
167
  it('strips trailing time-ago suffix when timeStr is provided', () => {
169
- expect(stripAnchorChrome('未读回顾你在 2019年6月的那段过往.2', '2', UNREAD_BADGE_LABELS))
170
- .toBe('回顾你在 2019年6月的那段过往');
171
- expect(stripAnchorChrome('未读有人尝试登录,但我们已阻止。7', '7', UNREAD_BADGE_LABELS))
172
- .toBe('有人尝试登录,但我们已阻止');
168
+ expect(stripAnchorChrome('UnreadReview your June 2019 memory.2 days', '2 days', UNREAD_BADGE_LABELS))
169
+ .toBe('Review your June 2019 memory');
170
+ expect(stripAnchorChrome('UnreadSomeone tried to log in, but we blocked it.7 weeks', '7 weeks', UNREAD_BADGE_LABELS))
171
+ .toBe('Someone tried to log in, but we blocked it');
173
172
  });
174
173
 
175
174
  it('keeps text intact when there is no badge / no time', () => {
@@ -237,8 +236,8 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
237
236
  expect(rows[0]).toEqual({
238
237
  index: 1,
239
238
  unread: true,
240
- text: '回顾你在 2019年6月的那段过往',
241
- time: '2天',
239
+ text: 'Review your 2019year6memory from that month',
240
+ time: '2days',
242
241
  url: 'https://www.facebook.com/photo/?fbid=104250644186433&set=a.104250310853133&notif_id=1777926497886652&notif_t=onthisday&ref=notif',
243
242
  notif_id: '1777926497886652',
244
243
  notif_type: 'onthisday',
@@ -246,16 +245,16 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
246
245
  expect(rows[2]).toMatchObject({
247
246
  index: 3,
248
247
  unread: true,
249
- text: '有人尝试登录,但我们已阻止',
250
- time: '7周',
248
+ text: 'Someone tried to log in,but we blocked it',
249
+ time: '7weeks',
251
250
  notif_type: 'approve_from_another_device',
252
251
  notif_id: '1773680546395691',
253
252
  });
254
253
  expect(rows[3]).toMatchObject({
255
254
  index: 4,
256
255
  unread: true,
257
- text: '你可能会喜欢 ETYCAL VIBEZ fan\'s page',
258
- time: '2天',
256
+ text: 'You might like ETYCAL VIBEZ fan\'s page',
257
+ time: '2days',
259
258
  notif_type: 'group_recommendation',
260
259
  });
261
260
  });
@@ -275,7 +274,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
275
274
  expect(rows.length).toBe(4); // header skipped
276
275
  // None of the returned rows match the header text.
277
276
  for (const row of rows) {
278
- expect(row.text).not.toBe('新通知');
277
+ expect(row.text).not.toBe('New notifications');
279
278
  }
280
279
  });
281
280
 
@@ -286,8 +285,8 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
286
285
  // have happily returned anything <= 150. The point of this test
287
286
  // is to assert nothing is silently sliced — full body text round-
288
287
  // trips through the extractor.
289
- expect(rows[0].text).toBe('回顾你在 2019年6月的那段过往');
290
- expect(rows[1].text).toBe('看看你在 2019年6月发布的帖子,瞬间回到过去的美好时光');
288
+ expect(rows[0].text).toBe('Review your 2019year6memory from that month');
289
+ expect(rows[1].text).toBe('Look back at your 2019year6post from June,memory from the past');
291
290
  // No row has a value that ends with our legacy truncation point.
292
291
  for (const row of rows) {
293
292
  expect(row.text).not.toMatch(/\u2026$/); // U+2026 ellipsis as a defensive check
@@ -299,7 +298,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
299
298
  const html = `<!doctype html><html><body><div role="main">
300
299
  <div role="listitem">
301
300
  <a href="https://www.facebook.com/page?notif_id=999&notif_t=test_event">
302
- <span><div>未读</div>Body text without time</span>
301
+ <span><div>Unread</div>Body text without time</span>
303
302
  </a>
304
303
  </div>
305
304
  </body></html>`;
@@ -347,7 +346,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
347
346
  const html = `<!doctype html><html><body><div role="main">
348
347
  <div role="listitem">
349
348
  <a href="https://www.facebook.com/x?notif_id=1&notif_t=blank">
350
- <span><div>未读</div></span>
349
+ <span><div>Unread</div></span>
351
350
  <abbr aria-label="3 hr"><span>3 hr</span></abbr>
352
351
  </a>
353
352
  </div>
@@ -382,8 +381,8 @@ describe('buildNotificationsScript — IIFE invariants', () => {
382
381
 
383
382
  it('inlines locale prefix and badge tables so the IIFE has them at runtime', () => {
384
383
  const script = buildNotificationsScript(15);
385
- expect(script).toContain('"标记为已读,"');
386
- expect(script).toContain('"未读"');
384
+ expect(script).toContain('"Mark as read,"');
385
+ expect(script).toContain('"Unread"');
387
386
  expect(script).toContain('"Unread"');
388
387
  });
389
388
 
@@ -430,7 +429,7 @@ describe('facebook/notifications — func typed boundaries', () => {
430
429
  index: 1,
431
430
  unread: true,
432
431
  text: 'hello',
433
- time: '2天',
432
+ time: '2days',
434
433
  url: 'https://www.facebook.com/notifications/?notif_id=1&notif_t=test',
435
434
  notif_id: '1',
436
435
  notif_type: 'test',