@agentrhq/webcmd 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (956) hide show
  1. package/README.md +196 -219
  2. package/cli-manifest.json +16205 -34869
  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/delete.js +14 -6
  94. package/clis/twitter/delete.test.js +74 -1
  95. package/clis/twitter/followers.js +1 -1
  96. package/clis/twitter/list-remove-core.js +2 -2
  97. package/clis/twitter/list-tweets.test.js +3 -3
  98. package/clis/twitter/lists.js +6 -6
  99. package/clis/twitter/lists.test.js +2 -2
  100. package/clis/twitter/reply-dm.js +1 -1
  101. package/clis/twitter/shared.test.js +4 -5
  102. package/clis/twitter/timeline.js +3 -1
  103. package/clis/twitter/timeline.test.js +4 -0
  104. package/clis/twitter/trending.js +1 -1
  105. package/clis/twitter/utils.js +1 -1
  106. package/clis/web/read.js +1 -1
  107. package/clis/web/read.test.js +2 -2
  108. package/clis/yahoo-finance/quote.js +1 -1
  109. package/clis/youtube/history.js +4 -4
  110. package/clis/youtube/transcript-group.js +1 -1
  111. package/clis/youtube/transcript-group.test.js +5 -5
  112. package/clis/youtube/transcript.js +5 -5
  113. package/clis/youtube/video.js +4 -4
  114. package/clis/youtube/video.test.js +6 -6
  115. package/dist/src/browser/analyze.test.js +13 -13
  116. package/dist/src/browser/bridge-readiness.d.ts +1 -1
  117. package/dist/src/browser/bridge-readiness.test.js +1 -1
  118. package/dist/src/browser/bridge.d.ts +1 -0
  119. package/dist/src/browser/bridge.js +6 -4
  120. package/dist/src/browser/cdp.d.ts +1 -0
  121. package/dist/src/browser/daemon-client.d.ts +2 -0
  122. package/dist/src/browser/daemon-client.js +108 -51
  123. package/dist/src/browser/daemon-client.test.js +135 -47
  124. package/dist/src/browser/daemon-transport.js +3 -19
  125. package/dist/src/browser/errors.js +11 -0
  126. package/dist/src/browser/page.d.ts +2 -1
  127. package/dist/src/browser/page.js +5 -1
  128. package/dist/src/browser/profile.d.ts +9 -0
  129. package/dist/src/browser/profile.js +18 -7
  130. package/dist/src/browser/profile.test.js +44 -0
  131. package/dist/src/browser/protocol.d.ts +3 -0
  132. package/dist/src/browser/runtime/local-cloak/actions.js +24 -10
  133. package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +1 -0
  134. package/dist/src/browser/runtime/local-cloak/session-manager.js +3 -0
  135. package/dist/src/browser/runtime/local-cloak/session-manager.test.js +87 -0
  136. package/dist/src/browser.test.js +2 -2
  137. package/dist/src/cli-argv-preprocess.d.ts +2 -2
  138. package/dist/src/cli-argv-preprocess.js +2 -2
  139. package/dist/src/cli-argv-preprocess.test.js +35 -35
  140. package/dist/src/cli.js +24 -19
  141. package/dist/src/cli.test.js +59 -59
  142. package/dist/src/commanderAdapter.test.js +19 -19
  143. package/dist/src/commands/daemon.test.js +13 -13
  144. package/dist/src/constants.d.ts +2 -3
  145. package/dist/src/constants.js +3 -10
  146. package/dist/src/convention-audit.js +1 -1
  147. package/dist/src/daemon/server.js +28 -23
  148. package/dist/src/daemon/server.test.js +52 -0
  149. package/dist/src/daemon-utils.d.ts +1 -0
  150. package/dist/src/daemon-utils.js +9 -0
  151. package/dist/src/daemon.js +1 -5
  152. package/dist/src/daemon.test.js +10 -1
  153. package/dist/src/doctor.js +19 -1
  154. package/dist/src/doctor.test.js +38 -4
  155. package/dist/src/download/article-download.d.ts +3 -3
  156. package/dist/src/download/article-download.js +7 -7
  157. package/dist/src/download/article-download.test.js +6 -6
  158. package/dist/src/download/index.js +1 -1
  159. package/dist/src/download/index.test.js +1 -2
  160. package/dist/src/download/media-download.d.ts +1 -1
  161. package/dist/src/download/media-download.js +1 -1
  162. package/dist/src/electron-apps.js +0 -8
  163. package/dist/src/electron-apps.test.js +2 -11
  164. package/dist/src/errors.test.js +9 -9
  165. package/dist/src/execution.js +7 -3
  166. package/dist/src/execution.test.js +12 -0
  167. package/dist/src/external-clis.yaml +0 -37
  168. package/dist/src/external.d.ts +1 -1
  169. package/dist/src/external.js +19 -1
  170. package/dist/src/external.test.js +39 -18
  171. package/dist/src/generate-release-notes-cli.test.js +140 -0
  172. package/dist/src/help.d.ts +3 -3
  173. package/dist/src/help.test.js +8 -8
  174. package/dist/src/main.js +1 -6
  175. package/dist/src/manifest-types.d.ts +1 -1
  176. package/dist/src/node-network.test.js +5 -5
  177. package/dist/src/output.js +1 -1
  178. package/dist/src/pipeline/steps/download.test.js +3 -3
  179. package/dist/src/registry.test.js +2 -2
  180. package/dist/src/release-notes.d.ts +38 -0
  181. package/dist/src/release-notes.js +99 -0
  182. package/dist/src/release-notes.test.d.ts +1 -0
  183. package/dist/src/release-notes.test.js +61 -0
  184. package/dist/src/runtime-identity.test.js +0 -8
  185. package/dist/src/runtime.d.ts +2 -0
  186. package/dist/src/runtime.js +1 -0
  187. package/dist/src/serialization.test.js +7 -7
  188. package/dist/src/snapshotFormatter.js +3 -5
  189. package/dist/src/snapshotFormatter.test.d.ts +1 -1
  190. package/dist/src/snapshotFormatter.test.js +50 -50
  191. package/dist/src/tui.js +1 -1
  192. package/package.json +5 -2
  193. package/scripts/generate-release-notes.ts +234 -0
  194. package/scripts/postinstall.js +1 -1
  195. package/scripts/silent-column-drop-baseline.json +0 -498
  196. package/scripts/typed-error-lint-baseline.json +0 -464
  197. package/skills/webcmd-adapter-author/SKILL.md +216 -213
  198. package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
  199. package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
  200. package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
  201. package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
  202. package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
  203. package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
  204. package/skills/webcmd-adapter-author/references/output-design.md +47 -125
  205. package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
  206. package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
  207. package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
  208. package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
  209. package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
  210. package/skills/webcmd-autofix/SKILL.md +136 -143
  211. package/skills/webcmd-sitemap-author/SKILL.md +58 -67
  212. package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
  213. package/skills/webcmd-usage/SKILL.md +106 -97
  214. package/clis/12306/auth.js +0 -59
  215. package/clis/12306/me.js +0 -73
  216. package/clis/12306/orders.js +0 -96
  217. package/clis/12306/passengers.js +0 -90
  218. package/clis/12306/price.js +0 -166
  219. package/clis/12306/stations.js +0 -66
  220. package/clis/12306/train.js +0 -91
  221. package/clis/12306/trains.js +0 -166
  222. package/clis/12306/utils.js +0 -272
  223. package/clis/12306/utils.test.js +0 -424
  224. package/clis/1688/assets.js +0 -205
  225. package/clis/1688/assets.test.js +0 -39
  226. package/clis/1688/auth.js +0 -46
  227. package/clis/1688/download.js +0 -77
  228. package/clis/1688/download.test.js +0 -31
  229. package/clis/1688/item.js +0 -188
  230. package/clis/1688/item.test.js +0 -67
  231. package/clis/1688/search.js +0 -310
  232. package/clis/1688/search.test.js +0 -75
  233. package/clis/1688/shared.js +0 -557
  234. package/clis/1688/shared.test.js +0 -57
  235. package/clis/1688/store.js +0 -227
  236. package/clis/1688/store.test.js +0 -62
  237. package/clis/1point3acres/auth.js +0 -52
  238. package/clis/1point3acres/digest.js +0 -35
  239. package/clis/1point3acres/forum.js +0 -51
  240. package/clis/1point3acres/forums.js +0 -44
  241. package/clis/1point3acres/hot.js +0 -35
  242. package/clis/1point3acres/latest.js +0 -35
  243. package/clis/1point3acres/notifications.js +0 -64
  244. package/clis/1point3acres/search.js +0 -71
  245. package/clis/1point3acres/thread.js +0 -117
  246. package/clis/1point3acres/user.js +0 -77
  247. package/clis/1point3acres/utils.js +0 -247
  248. package/clis/36kr/article.js +0 -66
  249. package/clis/36kr/article.test.js +0 -46
  250. package/clis/36kr/hot.js +0 -87
  251. package/clis/36kr/hot.test.js +0 -15
  252. package/clis/36kr/news.js +0 -52
  253. package/clis/36kr/news.test.js +0 -85
  254. package/clis/36kr/search.js +0 -79
  255. package/clis/51job/company.js +0 -126
  256. package/clis/51job/detail.js +0 -109
  257. package/clis/51job/hot.js +0 -56
  258. package/clis/51job/search.js +0 -80
  259. package/clis/51job/utils.js +0 -302
  260. package/clis/51job/utils.test.js +0 -69
  261. package/clis/aibase/news.js +0 -110
  262. package/clis/aibase/news.test.js +0 -59
  263. package/clis/autohome/__fixtures__/catalog.html +0 -11
  264. package/clis/autohome/__fixtures__/koubei.json +0 -116
  265. package/clis/autohome/autohome.test.js +0 -115
  266. package/clis/autohome/brand.js +0 -108
  267. package/clis/autohome/score.js +0 -103
  268. package/clis/autohome/utils.js +0 -157
  269. package/clis/baidu-scholar/search.js +0 -87
  270. package/clis/baidu-scholar/search.test.js +0 -23
  271. package/clis/bilibili/auth.js +0 -36
  272. package/clis/bilibili/comment.js +0 -107
  273. package/clis/bilibili/comment.test.js +0 -153
  274. package/clis/bilibili/comments.js +0 -136
  275. package/clis/bilibili/comments.test.js +0 -142
  276. package/clis/bilibili/download.js +0 -178
  277. package/clis/bilibili/download.test.js +0 -173
  278. package/clis/bilibili/dynamic.js +0 -34
  279. package/clis/bilibili/dynamic.test.js +0 -68
  280. package/clis/bilibili/favorite.js +0 -47
  281. package/clis/bilibili/feed.js +0 -220
  282. package/clis/bilibili/follow.js +0 -140
  283. package/clis/bilibili/follow.test.js +0 -203
  284. package/clis/bilibili/following.js +0 -44
  285. package/clis/bilibili/history.js +0 -45
  286. package/clis/bilibili/hot.js +0 -40
  287. package/clis/bilibili/hot.test.js +0 -17
  288. package/clis/bilibili/me.js +0 -13
  289. package/clis/bilibili/ranking.js +0 -25
  290. package/clis/bilibili/search.js +0 -24
  291. package/clis/bilibili/subtitle.js +0 -141
  292. package/clis/bilibili/subtitle.test.js +0 -240
  293. package/clis/bilibili/summary.js +0 -167
  294. package/clis/bilibili/summary.test.js +0 -210
  295. package/clis/bilibili/unfollow.js +0 -121
  296. package/clis/bilibili/user-videos.js +0 -39
  297. package/clis/bilibili/utils.js +0 -273
  298. package/clis/bilibili/utils.test.js +0 -97
  299. package/clis/bilibili/video.js +0 -155
  300. package/clis/bilibili/video.test.js +0 -308
  301. package/clis/boss/auth.js +0 -47
  302. package/clis/boss/batchgreet.js +0 -61
  303. package/clis/boss/chatlist.js +0 -116
  304. package/clis/boss/chatlist.test.js +0 -211
  305. package/clis/boss/chatmsg.js +0 -117
  306. package/clis/boss/chatmsg.test.js +0 -230
  307. package/clis/boss/detail.js +0 -63
  308. package/clis/boss/exchange.js +0 -46
  309. package/clis/boss/greet.js +0 -49
  310. package/clis/boss/invite.js +0 -64
  311. package/clis/boss/joblist.js +0 -31
  312. package/clis/boss/mark.js +0 -70
  313. package/clis/boss/recommend.js +0 -45
  314. package/clis/boss/resume.js +0 -150
  315. package/clis/boss/search.js +0 -197
  316. package/clis/boss/search.test.js +0 -78
  317. package/clis/boss/send.js +0 -44
  318. package/clis/boss/stats.js +0 -66
  319. package/clis/boss/utils.js +0 -468
  320. package/clis/boss/utils.test.js +0 -34
  321. package/clis/chaoxing/assignments.js +0 -76
  322. package/clis/chaoxing/auth.js +0 -54
  323. package/clis/chaoxing/exams.js +0 -75
  324. package/clis/chaoxing/utils.js +0 -223
  325. package/clis/chaoxing/utils.test.js +0 -45
  326. package/clis/cnki/search.js +0 -61
  327. package/clis/cnki/search.test.js +0 -18
  328. package/clis/ctrip/auth.js +0 -50
  329. package/clis/ctrip/ctrip.test.js +0 -719
  330. package/clis/ctrip/flight.js +0 -136
  331. package/clis/ctrip/hotel-search.js +0 -132
  332. package/clis/ctrip/hotel-suggest.js +0 -45
  333. package/clis/ctrip/search.js +0 -41
  334. package/clis/ctrip/utils.js +0 -473
  335. package/clis/deepseek/ask.js +0 -158
  336. package/clis/deepseek/ask.test.js +0 -399
  337. package/clis/deepseek/auth.js +0 -54
  338. package/clis/deepseek/detail.js +0 -46
  339. package/clis/deepseek/detail.test.js +0 -81
  340. package/clis/deepseek/history.js +0 -27
  341. package/clis/deepseek/new.js +0 -33
  342. package/clis/deepseek/read.js +0 -25
  343. package/clis/deepseek/send.js +0 -140
  344. package/clis/deepseek/send.test.js +0 -107
  345. package/clis/deepseek/status.js +0 -26
  346. package/clis/deepseek/utils.js +0 -487
  347. package/clis/deepseek/utils.test.js +0 -370
  348. package/clis/dianping/__fixtures__/search.html +0 -168
  349. package/clis/dianping/__fixtures__/shop.html +0 -6
  350. package/clis/dianping/auth.js +0 -49
  351. package/clis/dianping/cityResolver.js +0 -185
  352. package/clis/dianping/dianping.test.js +0 -578
  353. package/clis/dianping/search.js +0 -157
  354. package/clis/dianping/shop.js +0 -173
  355. package/clis/dianping/utils.js +0 -157
  356. package/clis/dongchedi/__fixtures__/search.json +0 -60
  357. package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
  358. package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
  359. package/clis/dongchedi/dongchedi.test.js +0 -191
  360. package/clis/dongchedi/koubei.js +0 -85
  361. package/clis/dongchedi/models.js +0 -91
  362. package/clis/dongchedi/score.js +0 -83
  363. package/clis/dongchedi/search.js +0 -83
  364. package/clis/dongchedi/series.js +0 -87
  365. package/clis/dongchedi/specs.js +0 -115
  366. package/clis/dongchedi/utils.js +0 -180
  367. package/clis/douban/auth.js +0 -50
  368. package/clis/douban/book-hot.js +0 -15
  369. package/clis/douban/download.js +0 -68
  370. package/clis/douban/download.test.js +0 -170
  371. package/clis/douban/marks.js +0 -116
  372. package/clis/douban/movie-hot.js +0 -15
  373. package/clis/douban/movie-hot.test.js +0 -14
  374. package/clis/douban/photos.js +0 -35
  375. package/clis/douban/reviews.js +0 -107
  376. package/clis/douban/search.js +0 -18
  377. package/clis/douban/search.test.js +0 -11
  378. package/clis/douban/subject.js +0 -46
  379. package/clis/douban/subject.test.js +0 -11
  380. package/clis/douban/top250.js +0 -68
  381. package/clis/douban/utils.js +0 -657
  382. package/clis/douban/utils.test.js +0 -488
  383. package/clis/doubao/ask.js +0 -40
  384. package/clis/doubao/auth.js +0 -66
  385. package/clis/doubao/detail.js +0 -35
  386. package/clis/doubao/detail.test.js +0 -42
  387. package/clis/doubao/history.js +0 -30
  388. package/clis/doubao/history.test.js +0 -37
  389. package/clis/doubao/meeting-summary.js +0 -41
  390. package/clis/doubao/meeting-transcript.js +0 -38
  391. package/clis/doubao/new.js +0 -22
  392. package/clis/doubao/read.js +0 -21
  393. package/clis/doubao/send.js +0 -24
  394. package/clis/doubao/status.js +0 -26
  395. package/clis/doubao/utils.js +0 -1156
  396. package/clis/doubao/utils.test.js +0 -396
  397. package/clis/doubao-app/ask.js +0 -54
  398. package/clis/doubao-app/dump.js +0 -25
  399. package/clis/doubao-app/new.js +0 -21
  400. package/clis/doubao-app/read.js +0 -19
  401. package/clis/doubao-app/screenshot.js +0 -19
  402. package/clis/doubao-app/send.js +0 -28
  403. package/clis/doubao-app/status.js +0 -17
  404. package/clis/doubao-app/utils.js +0 -110
  405. package/clis/douyin/_shared/browser-fetch.js +0 -66
  406. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  407. package/clis/douyin/_shared/creation-id.js +0 -5
  408. package/clis/douyin/_shared/creation-id.test.js +0 -22
  409. package/clis/douyin/_shared/evaluate-result.js +0 -16
  410. package/clis/douyin/_shared/imagex-upload.js +0 -53
  411. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  412. package/clis/douyin/_shared/public-api.js +0 -29
  413. package/clis/douyin/_shared/sts2.js +0 -21
  414. package/clis/douyin/_shared/sts2.test.js +0 -27
  415. package/clis/douyin/_shared/text-extra.js +0 -15
  416. package/clis/douyin/_shared/text-extra.test.js +0 -37
  417. package/clis/douyin/_shared/timing.js +0 -22
  418. package/clis/douyin/_shared/timing.test.js +0 -28
  419. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  420. package/clis/douyin/_shared/tos-upload.js +0 -331
  421. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  422. package/clis/douyin/_shared/transcode.js +0 -45
  423. package/clis/douyin/_shared/transcode.test.js +0 -91
  424. package/clis/douyin/_shared/vod-upload.js +0 -212
  425. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  426. package/clis/douyin/activities.js +0 -23
  427. package/clis/douyin/activities.test.js +0 -55
  428. package/clis/douyin/auth.js +0 -39
  429. package/clis/douyin/collections.js +0 -23
  430. package/clis/douyin/collections.test.js +0 -45
  431. package/clis/douyin/delete.js +0 -152
  432. package/clis/douyin/delete.test.js +0 -100
  433. package/clis/douyin/draft.js +0 -355
  434. package/clis/douyin/draft.test.js +0 -335
  435. package/clis/douyin/drafts.js +0 -24
  436. package/clis/douyin/drafts.test.js +0 -11
  437. package/clis/douyin/hashtag.js +0 -114
  438. package/clis/douyin/hashtag.test.js +0 -171
  439. package/clis/douyin/location.js +0 -25
  440. package/clis/douyin/location.test.js +0 -23
  441. package/clis/douyin/profile.js +0 -29
  442. package/clis/douyin/profile.test.js +0 -46
  443. package/clis/douyin/publish-upload-id.test.js +0 -206
  444. package/clis/douyin/publish.js +0 -341
  445. package/clis/douyin/publish.test.js +0 -38
  446. package/clis/douyin/search.js +0 -308
  447. package/clis/douyin/search.test.js +0 -307
  448. package/clis/douyin/stats.js +0 -28
  449. package/clis/douyin/stats.test.js +0 -22
  450. package/clis/douyin/update.js +0 -32
  451. package/clis/douyin/update.test.js +0 -11
  452. package/clis/douyin/user-videos.js +0 -82
  453. package/clis/douyin/user-videos.test.js +0 -151
  454. package/clis/douyin/videos.js +0 -52
  455. package/clis/douyin/videos.test.js +0 -54
  456. package/clis/eastmoney/_secid.js +0 -78
  457. package/clis/eastmoney/announcement.js +0 -53
  458. package/clis/eastmoney/convertible.js +0 -74
  459. package/clis/eastmoney/etf.js +0 -66
  460. package/clis/eastmoney/holders.js +0 -79
  461. package/clis/eastmoney/hot-rank.js +0 -51
  462. package/clis/eastmoney/hot-rank.test.js +0 -59
  463. package/clis/eastmoney/index-board.js +0 -97
  464. package/clis/eastmoney/kline.js +0 -88
  465. package/clis/eastmoney/kuaixun.js +0 -55
  466. package/clis/eastmoney/longhu.js +0 -68
  467. package/clis/eastmoney/money-flow.js +0 -79
  468. package/clis/eastmoney/northbound.js +0 -58
  469. package/clis/eastmoney/quote.js +0 -108
  470. package/clis/eastmoney/rank.js +0 -95
  471. package/clis/eastmoney/sectors.js +0 -77
  472. package/clis/flomo/auth.js +0 -55
  473. package/clis/flomo/memos.js +0 -228
  474. package/clis/flomo/memos.test.js +0 -144
  475. package/clis/gitee/auth.js +0 -41
  476. package/clis/gitee/index.js +0 -3
  477. package/clis/gitee/search.js +0 -137
  478. package/clis/gitee/search.test.js +0 -65
  479. package/clis/gitee/trending.js +0 -568
  480. package/clis/gitee/user.js +0 -200
  481. package/clis/gitee/user.test.js +0 -63
  482. package/clis/gov-law/commands.test.js +0 -39
  483. package/clis/gov-law/recent.js +0 -22
  484. package/clis/gov-law/search.js +0 -41
  485. package/clis/gov-law/shared.js +0 -51
  486. package/clis/gov-policy/__fixtures__/recent.html +0 -16
  487. package/clis/gov-policy/__fixtures__/search.html +0 -41
  488. package/clis/gov-policy/gov-policy.test.js +0 -224
  489. package/clis/gov-policy/recent.js +0 -90
  490. package/clis/gov-policy/search.js +0 -91
  491. package/clis/gov-policy/utils.js +0 -54
  492. package/clis/guazi/__fixtures__/detail.html +0 -7
  493. package/clis/guazi/__fixtures__/list.html +0 -5
  494. package/clis/guazi/browse.js +0 -95
  495. package/clis/guazi/car.js +0 -110
  496. package/clis/guazi/guazi.test.js +0 -126
  497. package/clis/guazi/utils.js +0 -133
  498. package/clis/huodongxing/events.js +0 -322
  499. package/clis/huodongxing/events.test.js +0 -296
  500. package/clis/hupu/__fixtures__/hot-home.html +0 -64
  501. package/clis/hupu/auth.js +0 -47
  502. package/clis/hupu/detail.js +0 -72
  503. package/clis/hupu/hot.js +0 -163
  504. package/clis/hupu/hot.test.js +0 -224
  505. package/clis/hupu/like.js +0 -76
  506. package/clis/hupu/mentions.js +0 -160
  507. package/clis/hupu/reply.js +0 -72
  508. package/clis/hupu/search.js +0 -60
  509. package/clis/hupu/unlike.js +0 -76
  510. package/clis/hupu/utils.js +0 -319
  511. package/clis/jd/add-cart.js +0 -72
  512. package/clis/jd/auth.js +0 -46
  513. package/clis/jd/cart.js +0 -80
  514. package/clis/jd/commands.test.js +0 -41
  515. package/clis/jd/detail.js +0 -63
  516. package/clis/jd/item.js +0 -730
  517. package/clis/jd/item.test.js +0 -354
  518. package/clis/jd/item.test.ts +0 -517
  519. package/clis/jd/reviews.js +0 -55
  520. package/clis/jd/search.js +0 -66
  521. package/clis/jianyu/auth.js +0 -62
  522. package/clis/jianyu/detail.js +0 -21
  523. package/clis/jianyu/search.js +0 -634
  524. package/clis/jianyu/search.test.js +0 -153
  525. package/clis/jianyu/shared/china-bid-search.js +0 -165
  526. package/clis/jianyu/shared/procurement-contract.js +0 -324
  527. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  528. package/clis/jianyu/shared/procurement-detail.js +0 -107
  529. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  530. package/clis/jike/auth.js +0 -48
  531. package/clis/jike/comment.js +0 -107
  532. package/clis/jike/create.js +0 -106
  533. package/clis/jike/feed.js +0 -68
  534. package/clis/jike/like.js +0 -61
  535. package/clis/jike/notifications.js +0 -169
  536. package/clis/jike/post.js +0 -72
  537. package/clis/jike/read.test.js +0 -86
  538. package/clis/jike/repost.js +0 -103
  539. package/clis/jike/search.js +0 -68
  540. package/clis/jike/topic.js +0 -65
  541. package/clis/jike/user.js +0 -65
  542. package/clis/jike/utils.js +0 -25
  543. package/clis/jimeng/auth.js +0 -46
  544. package/clis/jimeng/generate.js +0 -84
  545. package/clis/jimeng/history.js +0 -48
  546. package/clis/jimeng/new.js +0 -44
  547. package/clis/jimeng/workspaces.js +0 -42
  548. package/clis/juejin/hot.js +0 -37
  549. package/clis/juejin/juejin.test.js +0 -241
  550. package/clis/juejin/recommend.js +0 -61
  551. package/clis/juejin/utils.js +0 -199
  552. package/clis/ke/auth.js +0 -46
  553. package/clis/ke/chengjiao.js +0 -78
  554. package/clis/ke/ershoufang.js +0 -101
  555. package/clis/ke/utils.js +0 -104
  556. package/clis/ke/xiaoqu.js +0 -78
  557. package/clis/ke/zufang.js +0 -95
  558. package/clis/kimi/_utils.js +0 -110
  559. package/clis/kimi/audit-extras.js +0 -268
  560. package/clis/kimi/auth.js +0 -57
  561. package/clis/kimi/chat.js +0 -470
  562. package/clis/kimi/kimi.test.js +0 -187
  563. package/clis/kimi/storage.js +0 -169
  564. package/clis/kimi/ui.js +0 -314
  565. package/clis/kimi/usage.js +0 -144
  566. package/clis/linux-do/auth.js +0 -55
  567. package/clis/linux-do/categories.js +0 -50
  568. package/clis/linux-do/feed.js +0 -395
  569. package/clis/linux-do/feed.test.js +0 -153
  570. package/clis/linux-do/search.js +0 -29
  571. package/clis/linux-do/tags.js +0 -28
  572. package/clis/linux-do/topic-content.js +0 -155
  573. package/clis/linux-do/topic-content.test.js +0 -59
  574. package/clis/linux-do/topic.js +0 -53
  575. package/clis/linux-do/user-posts.js +0 -57
  576. package/clis/linux-do/user-topics.js +0 -37
  577. package/clis/maimai/auth.js +0 -47
  578. package/clis/maimai/search-talents.js +0 -192
  579. package/clis/maimai/search-talents.test.js +0 -29
  580. package/clis/mubu/doc.js +0 -41
  581. package/clis/mubu/docs.js +0 -44
  582. package/clis/mubu/notes.js +0 -245
  583. package/clis/mubu/recent.js +0 -28
  584. package/clis/mubu/search.js +0 -63
  585. package/clis/mubu/utils.js +0 -304
  586. package/clis/nowcoder/auth.js +0 -65
  587. package/clis/nowcoder/companies.js +0 -24
  588. package/clis/nowcoder/creators.js +0 -28
  589. package/clis/nowcoder/detail.js +0 -62
  590. package/clis/nowcoder/experience.js +0 -37
  591. package/clis/nowcoder/hot.js +0 -25
  592. package/clis/nowcoder/jobs.js +0 -22
  593. package/clis/nowcoder/notifications.js +0 -30
  594. package/clis/nowcoder/papers.js +0 -41
  595. package/clis/nowcoder/practice.js +0 -38
  596. package/clis/nowcoder/recommend.js +0 -31
  597. package/clis/nowcoder/referral.js +0 -40
  598. package/clis/nowcoder/salary.js +0 -41
  599. package/clis/nowcoder/search.js +0 -50
  600. package/clis/nowcoder/suggest.js +0 -34
  601. package/clis/nowcoder/topics.js +0 -28
  602. package/clis/nowcoder/trending.js +0 -26
  603. package/clis/ones/common.js +0 -144
  604. package/clis/ones/enrich-tasks.js +0 -37
  605. package/clis/ones/login.js +0 -81
  606. package/clis/ones/logout.js +0 -18
  607. package/clis/ones/me.js +0 -31
  608. package/clis/ones/my-tasks.js +0 -121
  609. package/clis/ones/resolve-labels.js +0 -64
  610. package/clis/ones/task-helpers.js +0 -212
  611. package/clis/ones/task-helpers.test.js +0 -12
  612. package/clis/ones/task.js +0 -67
  613. package/clis/ones/tasks.js +0 -80
  614. package/clis/ones/token-info.js +0 -43
  615. package/clis/ones/worklog.js +0 -268
  616. package/clis/ones/worklog.test.js +0 -20
  617. package/clis/powerchina/auth.js +0 -52
  618. package/clis/powerchina/search.js +0 -251
  619. package/clis/powerchina/search.test.js +0 -93
  620. package/clis/quark/auth.js +0 -47
  621. package/clis/quark/ls.js +0 -64
  622. package/clis/quark/mkdir.js +0 -37
  623. package/clis/quark/mv.js +0 -54
  624. package/clis/quark/rename.js +0 -27
  625. package/clis/quark/rm.js +0 -25
  626. package/clis/quark/save.js +0 -81
  627. package/clis/quark/share-tree.js +0 -46
  628. package/clis/quark/utils.js +0 -146
  629. package/clis/quark/utils.test.js +0 -58
  630. package/clis/qwen/ask.js +0 -104
  631. package/clis/qwen/ask.test.js +0 -36
  632. package/clis/qwen/auth.js +0 -56
  633. package/clis/qwen/detail.js +0 -62
  634. package/clis/qwen/history.js +0 -61
  635. package/clis/qwen/image.js +0 -179
  636. package/clis/qwen/new.js +0 -23
  637. package/clis/qwen/read.js +0 -41
  638. package/clis/qwen/send.js +0 -55
  639. package/clis/qwen/status.js +0 -37
  640. package/clis/qwen/utils.js +0 -461
  641. package/clis/qwen/utils.test.js +0 -128
  642. package/clis/rednote/auth.js +0 -52
  643. package/clis/rednote/comments.js +0 -85
  644. package/clis/rednote/download.js +0 -59
  645. package/clis/rednote/feed.js +0 -27
  646. package/clis/rednote/navigation.test.js +0 -26
  647. package/clis/rednote/note.js +0 -68
  648. package/clis/rednote/notifications.js +0 -139
  649. package/clis/rednote/rednote.test.js +0 -240
  650. package/clis/rednote/search.js +0 -107
  651. package/clis/rednote/user.js +0 -55
  652. package/clis/sinablog/article.js +0 -15
  653. package/clis/sinablog/hot.js +0 -15
  654. package/clis/sinablog/search.js +0 -52
  655. package/clis/sinablog/user.js +0 -16
  656. package/clis/sinablog/utils.js +0 -186
  657. package/clis/sinafinance/news.js +0 -62
  658. package/clis/sinafinance/rolling-news.js +0 -41
  659. package/clis/sinafinance/stock-rank.js +0 -66
  660. package/clis/sinafinance/stock.js +0 -121
  661. package/clis/sinafinance/stock.test.js +0 -59
  662. package/clis/smzdm/search.js +0 -149
  663. package/clis/smzdm/search.test.js +0 -114
  664. package/clis/taobao/add-cart.js +0 -150
  665. package/clis/taobao/auth.js +0 -58
  666. package/clis/taobao/cart.js +0 -96
  667. package/clis/taobao/commands.test.js +0 -41
  668. package/clis/taobao/detail.js +0 -71
  669. package/clis/taobao/reviews.js +0 -77
  670. package/clis/taobao/search.js +0 -97
  671. package/clis/tdx/hot-rank.js +0 -48
  672. package/clis/tdx/hot-rank.test.js +0 -59
  673. package/clis/ths/hot-rank.js +0 -50
  674. package/clis/ths/hot-rank.test.js +0 -64
  675. package/clis/tieba/commands.test.js +0 -79
  676. package/clis/tieba/hot.js +0 -48
  677. package/clis/tieba/posts.js +0 -86
  678. package/clis/tieba/read.js +0 -141
  679. package/clis/tieba/search.js +0 -109
  680. package/clis/tieba/utils.js +0 -240
  681. package/clis/tieba/utils.test.js +0 -290
  682. package/clis/toutiao/articles.js +0 -55
  683. package/clis/toutiao/auth.js +0 -70
  684. package/clis/toutiao/hot.js +0 -63
  685. package/clis/toutiao/toutiao.test.js +0 -378
  686. package/clis/toutiao/utils.js +0 -161
  687. package/clis/trae-cn/activity.js +0 -22
  688. package/clis/trae-cn/approve.js +0 -52
  689. package/clis/trae-cn/ask.js +0 -99
  690. package/clis/trae-cn/dump.js +0 -5
  691. package/clis/trae-cn/export.js +0 -40
  692. package/clis/trae-cn/model.js +0 -22
  693. package/clis/trae-cn/new.js +0 -63
  694. package/clis/trae-cn/read.js +0 -23
  695. package/clis/trae-cn/screenshot.js +0 -5
  696. package/clis/trae-cn/select-model.js +0 -25
  697. package/clis/trae-cn/send.js +0 -23
  698. package/clis/trae-cn/setup.js +0 -75
  699. package/clis/trae-cn/status.js +0 -27
  700. package/clis/trae-cn/targets.js +0 -96
  701. package/clis/trae-cn/trae-cn.test.js +0 -412
  702. package/clis/trae-cn/utils.js +0 -750
  703. package/clis/trae-cn/watch.js +0 -119
  704. package/clis/uisdc/news.js +0 -105
  705. package/clis/uisdc/news.test.js +0 -66
  706. package/clis/v2ex/auth.js +0 -44
  707. package/clis/v2ex/daily.js +0 -99
  708. package/clis/v2ex/hot.js +0 -26
  709. package/clis/v2ex/latest.js +0 -26
  710. package/clis/v2ex/me.js +0 -100
  711. package/clis/v2ex/member.js +0 -28
  712. package/clis/v2ex/node.js +0 -39
  713. package/clis/v2ex/nodes.js +0 -26
  714. package/clis/v2ex/notifications.js +0 -72
  715. package/clis/v2ex/replies.js +0 -27
  716. package/clis/v2ex/topic.js +0 -31
  717. package/clis/v2ex/user.js +0 -34
  718. package/clis/wanfang/search.js +0 -66
  719. package/clis/wanfang/search.test.js +0 -23
  720. package/clis/wechat-channels/auth.js +0 -62
  721. package/clis/wechat-channels/publish.js +0 -732
  722. package/clis/wechat-channels/publish.test.js +0 -144
  723. package/clis/weibo/auth.js +0 -53
  724. package/clis/weibo/comments.js +0 -53
  725. package/clis/weibo/delete.js +0 -172
  726. package/clis/weibo/delete.test.js +0 -94
  727. package/clis/weibo/envelope.test.js +0 -85
  728. package/clis/weibo/favorites.js +0 -170
  729. package/clis/weibo/favorites.test.js +0 -114
  730. package/clis/weibo/feed.js +0 -69
  731. package/clis/weibo/hot.js +0 -39
  732. package/clis/weibo/me.js +0 -75
  733. package/clis/weibo/post.js +0 -75
  734. package/clis/weibo/publish.js +0 -306
  735. package/clis/weibo/publish.test.js +0 -192
  736. package/clis/weibo/search.js +0 -80
  737. package/clis/weibo/user-posts.js +0 -234
  738. package/clis/weibo/user-posts.test.js +0 -92
  739. package/clis/weibo/user.js +0 -63
  740. package/clis/weibo/utils.js +0 -59
  741. package/clis/weibo/utils.test.js +0 -36
  742. package/clis/weixin/create-draft.js +0 -226
  743. package/clis/weixin/download.js +0 -371
  744. package/clis/weixin/download.test.js +0 -106
  745. package/clis/weixin/drafts.js +0 -66
  746. package/clis/weixin/drafts.test.js +0 -69
  747. package/clis/weixin/search.js +0 -157
  748. package/clis/weixin/search.test.js +0 -227
  749. package/clis/weread/ai-outline.js +0 -171
  750. package/clis/weread/ai-outline.test.js +0 -83
  751. package/clis/weread/auth.js +0 -59
  752. package/clis/weread/book-search.js +0 -438
  753. package/clis/weread/book-search.test.js +0 -242
  754. package/clis/weread/book.js +0 -233
  755. package/clis/weread/commands.test.js +0 -398
  756. package/clis/weread/highlights.js +0 -24
  757. package/clis/weread/notebooks.js +0 -22
  758. package/clis/weread/notes.js +0 -30
  759. package/clis/weread/private-api-regression.test.js +0 -369
  760. package/clis/weread/ranking.js +0 -29
  761. package/clis/weread/search-regression.test.js +0 -494
  762. package/clis/weread/search.js +0 -186
  763. package/clis/weread/shelf.js +0 -66
  764. package/clis/weread/utils.js +0 -321
  765. package/clis/weread/utils.test.js +0 -128
  766. package/clis/weread-official/book.js +0 -135
  767. package/clis/weread-official/commands.test.js +0 -385
  768. package/clis/weread-official/discover.js +0 -107
  769. package/clis/weread-official/list-apis.js +0 -95
  770. package/clis/weread-official/notes.js +0 -171
  771. package/clis/weread-official/readdata.js +0 -158
  772. package/clis/weread-official/review.js +0 -93
  773. package/clis/weread-official/search.js +0 -106
  774. package/clis/weread-official/shelf.js +0 -97
  775. package/clis/weread-official/utils.js +0 -293
  776. package/clis/weread-official/utils.test.js +0 -242
  777. package/clis/xianyu/auth.js +0 -68
  778. package/clis/xianyu/chat.js +0 -74
  779. package/clis/xianyu/chat.test.js +0 -84
  780. package/clis/xianyu/im.js +0 -322
  781. package/clis/xianyu/im.test.js +0 -253
  782. package/clis/xianyu/inbox.js +0 -96
  783. package/clis/xianyu/item.js +0 -153
  784. package/clis/xianyu/item.test.js +0 -56
  785. package/clis/xianyu/messages.js +0 -91
  786. package/clis/xianyu/publish.js +0 -485
  787. package/clis/xianyu/publish.test.js +0 -220
  788. package/clis/xianyu/reply.js +0 -82
  789. package/clis/xianyu/search.js +0 -262
  790. package/clis/xianyu/search.test.js +0 -104
  791. package/clis/xianyu/utils.js +0 -8
  792. package/clis/xiaoe/auth.js +0 -55
  793. package/clis/xiaoe/catalog.js +0 -227
  794. package/clis/xiaoe/content.js +0 -175
  795. package/clis/xiaoe/courses.js +0 -127
  796. package/clis/xiaoe/detail.js +0 -36
  797. package/clis/xiaoe/play-url.js +0 -121
  798. package/clis/xiaoe/xiaoe.test.js +0 -486
  799. package/clis/xiaohongshu/ask.js +0 -426
  800. package/clis/xiaohongshu/ask.test.js +0 -271
  801. package/clis/xiaohongshu/auth.js +0 -53
  802. package/clis/xiaohongshu/collection-helpers.js +0 -283
  803. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  804. package/clis/xiaohongshu/comments.js +0 -228
  805. package/clis/xiaohongshu/comments.test.js +0 -320
  806. package/clis/xiaohongshu/creator-note-detail.js +0 -482
  807. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  808. package/clis/xiaohongshu/creator-notes-summary.js +0 -98
  809. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  810. package/clis/xiaohongshu/creator-notes.js +0 -479
  811. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  812. package/clis/xiaohongshu/creator-profile.js +0 -55
  813. package/clis/xiaohongshu/creator-stats.js +0 -76
  814. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  815. package/clis/xiaohongshu/delete-note.js +0 -260
  816. package/clis/xiaohongshu/delete-note.test.js +0 -172
  817. package/clis/xiaohongshu/download.js +0 -249
  818. package/clis/xiaohongshu/download.test.js +0 -339
  819. package/clis/xiaohongshu/draft-clear.js +0 -91
  820. package/clis/xiaohongshu/draft-delete.js +0 -103
  821. package/clis/xiaohongshu/draft-open.js +0 -43
  822. package/clis/xiaohongshu/draft-utils.js +0 -142
  823. package/clis/xiaohongshu/drafts.js +0 -28
  824. package/clis/xiaohongshu/drafts.test.js +0 -172
  825. package/clis/xiaohongshu/feed.js +0 -163
  826. package/clis/xiaohongshu/feed.test.js +0 -126
  827. package/clis/xiaohongshu/follow.js +0 -226
  828. package/clis/xiaohongshu/follow.test.js +0 -211
  829. package/clis/xiaohongshu/liked.js +0 -29
  830. package/clis/xiaohongshu/liked.test.js +0 -82
  831. package/clis/xiaohongshu/navigation.test.js +0 -38
  832. package/clis/xiaohongshu/note-helpers.js +0 -69
  833. package/clis/xiaohongshu/note.js +0 -104
  834. package/clis/xiaohongshu/note.test.js +0 -249
  835. package/clis/xiaohongshu/notifications.js +0 -46
  836. package/clis/xiaohongshu/publish.js +0 -1423
  837. package/clis/xiaohongshu/publish.test.js +0 -1141
  838. package/clis/xiaohongshu/saved.js +0 -29
  839. package/clis/xiaohongshu/saved.test.js +0 -143
  840. package/clis/xiaohongshu/search.js +0 -330
  841. package/clis/xiaohongshu/search.test.js +0 -325
  842. package/clis/xiaohongshu/unfollow.js +0 -285
  843. package/clis/xiaohongshu/user-helpers.js +0 -78
  844. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  845. package/clis/xiaohongshu/user.js +0 -140
  846. package/clis/xiaohongshu/user.test.js +0 -141
  847. package/clis/xiaoyuzhou/auth.js +0 -303
  848. package/clis/xiaoyuzhou/auth.test.js +0 -124
  849. package/clis/xiaoyuzhou/download.js +0 -54
  850. package/clis/xiaoyuzhou/download.test.js +0 -135
  851. package/clis/xiaoyuzhou/episode.js +0 -34
  852. package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
  853. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  854. package/clis/xiaoyuzhou/podcast.js +0 -33
  855. package/clis/xiaoyuzhou/transcript.js +0 -77
  856. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  857. package/clis/xiaoyuzhou/utils.js +0 -15
  858. package/clis/xiaoyuzhou/utils.test.js +0 -39
  859. package/clis/xueqiu/auth.js +0 -63
  860. package/clis/xueqiu/comments.js +0 -355
  861. package/clis/xueqiu/comments.test.js +0 -696
  862. package/clis/xueqiu/danjuan-utils.js +0 -126
  863. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  864. package/clis/xueqiu/earnings-date.js +0 -45
  865. package/clis/xueqiu/feed.js +0 -39
  866. package/clis/xueqiu/fund-holdings.js +0 -29
  867. package/clis/xueqiu/fund-snapshot.js +0 -26
  868. package/clis/xueqiu/groups.js +0 -23
  869. package/clis/xueqiu/hot-stock.js +0 -32
  870. package/clis/xueqiu/hot.js +0 -37
  871. package/clis/xueqiu/kline.js +0 -44
  872. package/clis/xueqiu/search.js +0 -37
  873. package/clis/xueqiu/stock.js +0 -65
  874. package/clis/xueqiu/utils.js +0 -48
  875. package/clis/xueqiu/utils.test.js +0 -26
  876. package/clis/xueqiu/watchlist.js +0 -37
  877. package/clis/youdao/note.js +0 -258
  878. package/clis/youdao/note.test.js +0 -99
  879. package/clis/yuanbao/ask.js +0 -362
  880. package/clis/yuanbao/ask.test.js +0 -124
  881. package/clis/yuanbao/auth.js +0 -59
  882. package/clis/yuanbao/detail.js +0 -65
  883. package/clis/yuanbao/history.js +0 -51
  884. package/clis/yuanbao/new.js +0 -72
  885. package/clis/yuanbao/new.test.js +0 -30
  886. package/clis/yuanbao/read.js +0 -38
  887. package/clis/yuanbao/send.js +0 -57
  888. package/clis/yuanbao/shared.js +0 -341
  889. package/clis/yuanbao/shared.test.js +0 -80
  890. package/clis/yuanbao/status.js +0 -44
  891. package/clis/zhihu/answer-comments.js +0 -280
  892. package/clis/zhihu/answer-comments.test.js +0 -287
  893. package/clis/zhihu/answer-detail.js +0 -216
  894. package/clis/zhihu/answer-detail.test.js +0 -338
  895. package/clis/zhihu/answer.js +0 -54
  896. package/clis/zhihu/answer.test.js +0 -54
  897. package/clis/zhihu/auth.js +0 -59
  898. package/clis/zhihu/collection.js +0 -199
  899. package/clis/zhihu/collection.test.js +0 -337
  900. package/clis/zhihu/collections.js +0 -128
  901. package/clis/zhihu/collections.test.js +0 -182
  902. package/clis/zhihu/comment.js +0 -55
  903. package/clis/zhihu/comment.test.js +0 -50
  904. package/clis/zhihu/download.js +0 -80
  905. package/clis/zhihu/download.test.js +0 -12
  906. package/clis/zhihu/favorite.js +0 -87
  907. package/clis/zhihu/favorite.test.js +0 -59
  908. package/clis/zhihu/follow.js +0 -50
  909. package/clis/zhihu/follow.test.js +0 -42
  910. package/clis/zhihu/followers.js +0 -40
  911. package/clis/zhihu/followers.test.js +0 -42
  912. package/clis/zhihu/following.js +0 -40
  913. package/clis/zhihu/following.test.js +0 -44
  914. package/clis/zhihu/hot.js +0 -44
  915. package/clis/zhihu/like.js +0 -47
  916. package/clis/zhihu/like.test.js +0 -41
  917. package/clis/zhihu/paginate.js +0 -128
  918. package/clis/zhihu/pins.js +0 -41
  919. package/clis/zhihu/pins.test.js +0 -44
  920. package/clis/zhihu/question.js +0 -113
  921. package/clis/zhihu/question.test.js +0 -251
  922. package/clis/zhihu/recommend.js +0 -103
  923. package/clis/zhihu/recommend.test.js +0 -143
  924. package/clis/zhihu/search.js +0 -206
  925. package/clis/zhihu/search.test.js +0 -198
  926. package/clis/zhihu/target.js +0 -91
  927. package/clis/zhihu/target.test.js +0 -77
  928. package/clis/zhihu/text.js +0 -29
  929. package/clis/zhihu/text.test.js +0 -24
  930. package/clis/zhihu/user-answers.js +0 -41
  931. package/clis/zhihu/user-answers.test.js +0 -69
  932. package/clis/zhihu/user-arg.js +0 -34
  933. package/clis/zhihu/user-articles.js +0 -40
  934. package/clis/zhihu/user-articles.test.js +0 -44
  935. package/clis/zhihu/user.js +0 -59
  936. package/clis/zhihu/user.test.js +0 -73
  937. package/clis/zhihu/write-shared.js +0 -228
  938. package/clis/zhihu/write-shared.test.js +0 -176
  939. package/clis/zsxq/auth.js +0 -68
  940. package/clis/zsxq/dynamics.js +0 -48
  941. package/clis/zsxq/groups.js +0 -33
  942. package/clis/zsxq/search.js +0 -44
  943. package/clis/zsxq/search.test.js +0 -24
  944. package/clis/zsxq/topic.js +0 -50
  945. package/clis/zsxq/topic.test.js +0 -30
  946. package/clis/zsxq/topics.js +0 -26
  947. package/clis/zsxq/topics.test.js +0 -24
  948. package/clis/zsxq/utils.js +0 -233
  949. package/clis/zsxq/utils.test.js +0 -31
  950. package/dist/src/weixin-download.test.js +0 -45
  951. package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
  952. package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
  953. package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
  954. package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
  955. /package/{clis/douyin/_shared/types.js → dist/src/browser/profile.test.d.ts} +0 -0
  956. /package/dist/src/{weixin-download.test.d.ts → generate-release-notes-cli.test.d.ts} +0 -0
@@ -23,7 +23,7 @@ const GEMINI_RESPONSE_NOISE_PATTERNS = [
23
23
  /Google Privacy Policy/gi,
24
24
  /Opens in a new window/gi,
25
25
  ];
26
- const GEMINI_TRANSCRIPT_CHROME_MARKERS = ['gemini', '我的内容', '对话', 'google terms', 'google privacy policy'];
26
+ const GEMINI_TRANSCRIPT_CHROME_MARKERS = ['gemini', 'My content', 'conversation', 'google terms', 'google privacy policy'];
27
27
  const GEMINI_COMPOSER_SELECTORS = [
28
28
  '.ql-editor[contenteditable="true"]',
29
29
  '.ql-editor[role="textbox"]',
@@ -265,7 +265,7 @@ function extractGeminiTranscriptLineCandidate(transcriptLine, promptText) {
265
265
  // Some transcript snapshots flatten "prompt + answer" into a single line.
266
266
  // Recover the answer only when the line starts with the current prompt.
267
267
  if (candidate.startsWith(prompt)) {
268
- const tail = candidate.slice(prompt.length).replace(/^[\s::,,-]+/, '').trim();
268
+ const tail = candidate.slice(prompt.length).replace(/^[\s::,,-]+/, '').trim();
269
269
  return tail ? sanitizeGeminiResponseText(tail, '') : '';
270
270
  }
271
271
  return sanitized;
@@ -281,8 +281,8 @@ function getStateScript() {
281
281
  const href = node.getAttribute('href') || '';
282
282
  return text === 'sign in'
283
283
  || aria === 'sign in'
284
- || text === '登录'
285
- || aria === '登录'
284
+ || text === 'Log in'
285
+ || aria === 'Log in'
286
286
  || href.includes('accounts.google.com/ServiceLogin');
287
287
  });
288
288
 
@@ -309,8 +309,8 @@ function readGeminiSnapshotScript() {
309
309
  const aria = (node.getAttribute('aria-label') || '').trim().toLowerCase();
310
310
  return text === 'stop response'
311
311
  || aria === 'stop response'
312
- || text === '停止回答'
313
- || aria === '停止回答';
312
+ || text === 'Stop response'
313
+ || aria === 'Stop response';
314
314
  });
315
315
  const turns = ${getTurnsScript().trim()};
316
316
  const transcriptLines = ${getTranscriptLinesScript().trim()};
@@ -593,8 +593,8 @@ function submitComposerScript() {
593
593
  });
594
594
  }
595
595
 
596
- const excludedPattern = /main menu|主菜单|microphone|麦克风|upload|上传|mode|模式|tools|工具|settings|临时对话|new chat|新对话/i;
597
- const submitPattern = /send|发送|傳送|submit|提交/i;
596
+ const excludedPattern = /main menu|localized text|microphone|localized text|upload|localized text|mode|mode|tools|tools|settings|Temporary chat|new chat|New chat/i;
597
+ const submitPattern = /send|Send|Send|submit|Submit/i;
598
598
  let bestButton = null;
599
599
  let bestScore = -1;
600
600
 
@@ -665,10 +665,10 @@ function clickNewChatScript() {
665
665
  return isVisible(node) && (
666
666
  text === 'new chat'
667
667
  || aria === 'new chat'
668
- || text === '发起新对话'
669
- || aria === '发起新对话'
670
- || text === '新对话'
671
- || aria === '新对话'
668
+ || text === 'Start new chat'
669
+ || aria === 'Start new chat'
670
+ || text === 'New chat'
671
+ || aria === 'New chat'
672
672
  );
673
673
  });
674
674
 
@@ -684,7 +684,7 @@ function clickNewChatScript() {
684
684
  function openGeminiToolsMenuScript() {
685
685
  return `
686
686
  (() => {
687
- const labels = ['tools', 'tool', 'mode', '研究', 'deep research', 'deep-research', '工具'];
687
+ const labels = ['tools', 'tool', 'mode', 'research', 'deep research', 'deep-research', 'tools'];
688
688
  const normalize = (value) => (value || '').replace(/\\s+/g, ' ').trim().toLowerCase();
689
689
  const matchesLabel = (value) => {
690
690
  const text = normalize(value);
@@ -973,7 +973,7 @@ function getGeminiConversationListScript() {
973
973
  `;
974
974
  }
975
975
 
976
- // Gemini collapses the sidebar's "最近" / "Recents" section by default, so the
976
+ // Gemini collapses the sidebar's "Recent" / "Recents" section by default, so the
977
977
  // /app/<id> conversation anchors are not present in the DOM (or are hidden)
978
978
  // until that section is expanded. The script below opens the sidebar if it is
979
979
  // collapsed and expands the Recents toggle, returning true if it likely
@@ -999,16 +999,16 @@ function expandGeminiRecentScript() {
999
999
  // 1. Open the sidebar if it is collapsed (button only renders when closed).
1000
1000
  const openSidebar = buttons.find((b) => {
1001
1001
  const label = normalize(b.getAttribute('aria-label') || '');
1002
- return /打开边栏|open sidebar|open navigation|展开边栏/i.test(label);
1002
+ return /Open sidebar|open sidebar|open navigation|Expand sidebar/i.test(label);
1003
1003
  });
1004
1004
  if (openSidebar) { openSidebar.click(); changed = true; }
1005
1005
 
1006
- // 2. Expand the "最近" / "Recents" toggle if it is currently collapsed.
1006
+ // 2. Expand the "Recent" / "Recents" toggle if it is currently collapsed.
1007
1007
  const recentToggle = buttons.find((b) => {
1008
1008
  const label = normalize(b.getAttribute('aria-label') || '');
1009
1009
  const expanded = (b.getAttribute('aria-expanded') || '').toLowerCase();
1010
- return /最近|recent/i.test(label) && (
1011
- /展开|收起|expand|collapse|toggle|show|hide/i.test(label)
1010
+ return /Recent|recent/i.test(label) && (
1011
+ /Expand|Collapse|expand|collapse|toggle|show|hide/i.test(label)
1012
1012
  || expanded === 'false'
1013
1013
  || expanded === 'true'
1014
1014
  );
@@ -1016,7 +1016,7 @@ function expandGeminiRecentScript() {
1016
1016
  if (recentToggle) {
1017
1017
  const label = normalize(recentToggle.getAttribute('aria-label') || '');
1018
1018
  const expanded = (recentToggle.getAttribute('aria-expanded') || '').toLowerCase();
1019
- const explicitExpandLabel = /展开|显示|expand|show/i.test(label) && !/收起|collapse|hide/i.test(label);
1019
+ const explicitExpandLabel = /Expand|Show|expand|show/i.test(label) && !/Collapse|collapse|hide/i.test(label);
1020
1020
  if (expanded === 'false' || (expanded !== 'true' && explicitExpandLabel)) {
1021
1021
  recentToggle.click();
1022
1022
  changed = true;
@@ -1138,7 +1138,7 @@ export async function startNewGeminiChat(page) {
1138
1138
  export async function getGeminiConversationList(page) {
1139
1139
  await ensureGeminiPage(page);
1140
1140
  let rows = [];
1141
- // Gemini collapses the sidebar "最近"/Recents section by default, hiding
1141
+ // Gemini collapses the sidebar "Recent"/Recents section by default, hiding
1142
1142
  // the conversation anchors. Retry extraction after expanding it.
1143
1143
  for (let attempt = 0; attempt < 3; attempt += 1) {
1144
1144
  const raw = requireGeminiArrayResult(await page.evaluate(getGeminiConversationListScript()), 'Gemini conversation list');
@@ -1440,11 +1440,11 @@ function exportGeminiDeepResearchReportScript(maxWaitMs) {
1440
1440
  (async () => {
1441
1441
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
1442
1442
  const labels = {
1443
- actionMenu: ['open menu for conversation actions', 'conversation actions', '会话操作'],
1444
- share: ['share & export', 'share and export', 'share/export', '分享与导出', '分享和导出', '分享并导出', '共享和导出'],
1445
- shareConversation: ['share conversation', '分享会话', '分享对话'],
1446
- export: ['export', '导出'],
1447
- exportDocs: ['export to docs', 'export to google docs', 'export to doc', '导出到 docs', '导出到文档', '导出到 google docs'],
1443
+ actionMenu: ['open menu for conversation actions', 'conversation actions', 'localized text'],
1444
+ share: ['share & export', 'share and export', 'share/export', 'Share and export', 'Share and export', 'Share and export', 'Share and export'],
1445
+ shareConversation: ['share conversation', 'Share conversation', 'Share conversation'],
1446
+ export: ['export', 'Export'],
1447
+ exportDocs: ['export to docs', 'export to google docs', 'export to doc', 'Export to docs', 'Export to Docs', 'Export to google docs'],
1448
1448
  };
1449
1449
 
1450
1450
  const recorderKey = '__webcmdGeminiExportUrls';
@@ -1547,15 +1547,15 @@ function exportGeminiDeepResearchReportScript(maxWaitMs) {
1547
1547
  };
1548
1548
  const isKindMatch = (kind, combined, targetLabels) => {
1549
1549
  if (includesAny(combined, targetLabels)) return true;
1550
- if (kind === 'share') return hasTokens(combined, ['share', 'export']) || hasTokens(combined, ['分享', '导出']);
1551
- if (kind === 'export') return hasTokens(combined, ['export']) || hasTokens(combined, ['导出']);
1550
+ if (kind === 'share') return hasTokens(combined, ['share', 'export']) || hasTokens(combined, ['Share', 'Export']);
1551
+ if (kind === 'export') return hasTokens(combined, ['export']) || hasTokens(combined, ['Export']);
1552
1552
  if (kind === 'export-docs') {
1553
1553
  return hasTokens(combined, ['export', 'docs'])
1554
- || hasTokens(combined, ['导出', '文档'])
1555
- || hasTokens(combined, ['导出', 'docs']);
1554
+ || hasTokens(combined, ['Export', 'Docs'])
1555
+ || hasTokens(combined, ['Export', 'docs']);
1556
1556
  }
1557
1557
  if (kind === 'action-menu') {
1558
- return hasTokens(combined, ['conversation', 'action']) || hasTokens(combined, ['会话', '操作']);
1558
+ return hasTokens(combined, ['conversation', 'action']) || hasTokens(combined, ['localized text', 'localized text']);
1559
1559
  }
1560
1560
  return false;
1561
1561
  };
@@ -1868,11 +1868,11 @@ function openModelPickerForThinkingScript() {
1868
1868
  const VERSION_LABEL_RE = /\\d+\\.\\d+/;
1869
1869
 
1870
1870
  const MODE_SELECTOR_PATTERNS = [
1871
- /模式选择器/i,
1871
+ /Mode selector/i,
1872
1872
  /mode[\\s-]*selector/i,
1873
1873
  /model[\\s-]*selector/i,
1874
1874
  /model[\\s-]*picker/i,
1875
- /选择模型/i,
1875
+ /Select model/i,
1876
1876
  /select[\\s-]+model/i,
1877
1877
  /choose[\\s-]+model/i,
1878
1878
  /switch[\\s-]+model/i,
@@ -1921,7 +1921,7 @@ function openModelPickerForThinkingScript() {
1921
1921
 
1922
1922
  // Method 4: Fallback — look for any element with model-related attributes.
1923
1923
  const attrEls = Array.from(
1924
- document.querySelectorAll('[data-model-selector], [aria-label*="model" i], [aria-label*="模式" i]')
1924
+ document.querySelectorAll('[data-model-selector], [aria-label*="model" i], [aria-label*="mode" i]')
1925
1925
  ).filter(isVisible);
1926
1926
  if (attrEls.length > 0) return attrEls[0];
1927
1927
 
@@ -1942,7 +1942,7 @@ function openModelPickerForThinkingScript() {
1942
1942
  }
1943
1943
 
1944
1944
  /**
1945
- * Browser evaluate script that clicks the "思考等级" / "Thinking level"
1945
+ * Browser evaluate script that clicks the "Thinking level" / "Thinking level"
1946
1946
  * toggle inside an already-open model-picker menu to expand thinking options.
1947
1947
  * Returns true if the toggle was found and clicked.
1948
1948
  */
@@ -1995,7 +1995,7 @@ function clickThinkingToggleInMenuScript() {
1995
1995
 
1996
1996
  const thinkingToggle = menuItems.find((item) => {
1997
1997
  const text = (item.textContent || '').replace(/\\s+/g, ' ').trim();
1998
- return /思考等级|thinking level|thinking mode/i.test(text);
1998
+ return /Thinking level|thinking level|thinking mode/i.test(text);
1999
1999
  });
2000
2000
 
2001
2001
  if (thinkingToggle) {
@@ -2020,8 +2020,8 @@ function selectThinkingInMenuScript(thinkingValue) {
2020
2020
  const normalizedValue = String(thinkingValue || '').trim().toLowerCase();
2021
2021
  if (!normalizedValue) return '(() => "")';
2022
2022
  const labelMap = JSON.stringify({
2023
- standard: ['standard', '标准', '標準'],
2024
- extended: ['extended', '扩展', '擴展', '拡張'],
2023
+ standard: ['standard', 'standard', 'standard'],
2024
+ extended: ['extended', 'extended', 'extended', 'extended'],
2025
2025
  });
2026
2026
  return `
2027
2027
  (() => {
@@ -2125,7 +2125,7 @@ function selectThinkingInMenuScript(thinkingValue) {
2125
2125
  * Multi-step approach matching modelsCommand.func:
2126
2126
  * 1. Open the model-picker menu.
2127
2127
  * 2. Wait for React to render the menu.
2128
- * 3. Click the "思考等级"/"Thinking level" toggle to expand thinking options.
2128
+ * 3. Click the "Thinking level"/"Thinking level" toggle to expand thinking options.
2129
2129
  * 4. Wait for the expanded items to render.
2130
2130
  * 5. Select the requested thinking level.
2131
2131
  * 6. Close the menu.
@@ -2198,11 +2198,11 @@ function getCurrentGeminiModelScript() {
2198
2198
  const VERSION_LABEL_RE = /\\d+\\.\\d+/;
2199
2199
 
2200
2200
  const MODE_SELECTOR_PATTERNS = [
2201
- /模式选择器/i,
2201
+ /Mode selector/i,
2202
2202
  /mode[\\s-]*selector/i,
2203
2203
  /model[\\s-]*selector/i,
2204
2204
  /model[\\s-]*picker/i,
2205
- /选择模型/i,
2205
+ /Select model/i,
2206
2206
  /select[\\s-]+model/i,
2207
2207
  /choose[\\s-]+model/i,
2208
2208
  /switch[\\s-]+model/i,
@@ -2251,7 +2251,7 @@ function getCurrentGeminiModelScript() {
2251
2251
 
2252
2252
  // Method 4: Fallback — look for any element with model-related attributes.
2253
2253
  const attrEls = Array.from(
2254
- document.querySelectorAll('[data-model-selector], [aria-label*="model" i], [aria-label*="模式" i]')
2254
+ document.querySelectorAll('[data-model-selector], [aria-label*="model" i], [aria-label*="mode" i]')
2255
2255
  ).filter(isVisible);
2256
2256
  if (attrEls.length > 0) return attrEls[0];
2257
2257
 
@@ -57,10 +57,10 @@ describe('collectGeminiTranscriptAdditions', () => {
57
57
  expect(collectGeminiTranscriptAdditions(before, current, prompt)).toBe('Soft spring rain arrives');
58
58
  });
59
59
  it('keeps a reply line that quotes the prompt inside the answer body', () => {
60
- const prompt = '请只回复:OK';
60
+ const prompt = 'Please reply only:OK';
61
61
  const before = ['baseline'];
62
- const current = ['baseline', '关于“请只回复:OK”,这里是解释。'];
63
- expect(collectGeminiTranscriptAdditions(before, current, prompt)).toBe('关于“请只回复:OK”,这里是解释。');
62
+ const current = ['baseline', 'About"Please reply only:OK",here is an explanation.'];
63
+ expect(collectGeminiTranscriptAdditions(before, current, prompt)).toBe('About"Please reply only:OK",here is an explanation.');
64
64
  });
65
65
  });
66
66
  describe('gemini send strategy', () => {
@@ -78,8 +78,8 @@ describe('gemini send strategy', () => {
78
78
  .mockResolvedValueOnce({ ok: true })
79
79
  .mockResolvedValueOnce({ hasText: true })
80
80
  .mockResolvedValueOnce('button');
81
- const result = await sendGeminiMessage(page, '你好');
82
- expect(nativeType).toHaveBeenCalledWith('你好');
81
+ const result = await sendGeminiMessage(page, 'hello');
82
+ expect(nativeType).toHaveBeenCalledWith('hello');
83
83
  expect(nativeKeyPress).not.toHaveBeenCalled();
84
84
  expect(result).toBe('button');
85
85
  });
@@ -94,8 +94,8 @@ describe('gemini send strategy', () => {
94
94
  .mockResolvedValueOnce({ hasText: false })
95
95
  .mockResolvedValueOnce({ hasText: true })
96
96
  .mockResolvedValueOnce('enter');
97
- const result = await sendGeminiMessage(page, '你好');
98
- expect(nativeType).toHaveBeenCalledWith('你好');
97
+ const result = await sendGeminiMessage(page, 'hello');
98
+ expect(nativeType).toHaveBeenCalledWith('hello');
99
99
  expect(nativeKeyPress).toHaveBeenCalledWith('Enter');
100
100
  expect(evaluate).toHaveBeenCalledTimes(5);
101
101
  expect(result).toBe('enter');
@@ -110,8 +110,8 @@ describe('gemini send strategy', () => {
110
110
  .mockResolvedValueOnce({ ok: true })
111
111
  .mockResolvedValueOnce({ hasText: true })
112
112
  .mockResolvedValueOnce('button');
113
- const result = await sendGeminiMessage(page, '你好');
114
- expect(nativeType).toHaveBeenCalledWith('你好');
113
+ const result = await sendGeminiMessage(page, 'hello');
114
+ expect(nativeType).toHaveBeenCalledWith('hello');
115
115
  expect(result).toBe('button');
116
116
  });
117
117
  it('retries composer preparation until a slow-loading composer appears', async () => {
@@ -125,7 +125,7 @@ describe('gemini send strategy', () => {
125
125
  .mockResolvedValueOnce({ ok: true })
126
126
  .mockResolvedValueOnce({ hasText: true })
127
127
  .mockResolvedValueOnce('button');
128
- const result = await sendGeminiMessage(page, '你好');
128
+ const result = await sendGeminiMessage(page, 'hello');
129
129
  expect(result).toBe('button');
130
130
  expect(wait.mock.calls.filter(([value]) => value === 1)).toHaveLength(3);
131
131
  });
@@ -141,42 +141,42 @@ describe('gemini send strategy', () => {
141
141
  .mockResolvedValueOnce({ ok: true })
142
142
  .mockResolvedValueOnce({ hasText: true })
143
143
  .mockResolvedValueOnce('button');
144
- const result = await sendGeminiMessage(page, '你好');
144
+ const result = await sendGeminiMessage(page, 'hello');
145
145
  expect(result).toBe('button');
146
146
  expect(wait.mock.calls.filter(([value]) => value === 1)).toHaveLength(4);
147
147
  });
148
148
  it('avoids innerHTML in the fallback insertion path for trusted types pages', () => {
149
- expect(__test__.insertComposerTextFallbackScript('你好')).not.toContain('innerHTML');
150
- expect(__test__.insertComposerTextFallbackScript('你好')).toContain('replaceChildren');
149
+ expect(__test__.insertComposerTextFallbackScript('hello')).not.toContain('innerHTML');
150
+ expect(__test__.insertComposerTextFallbackScript('hello')).toContain('replaceChildren');
151
151
  });
152
152
  it('keeps a button submit path in the generated submit script', () => {
153
153
  expect(__test__.submitComposerScript()).toContain('.click()');
154
154
  });
155
155
  it('matches the Traditional Chinese send label in the generated submit script', () => {
156
- expect(__test__.submitComposerScript()).toContain('傳送');
156
+ expect(__test__.submitComposerScript()).toContain('Send');
157
157
  });
158
158
  it('supports localized new chat labels in the generated new-chat script', () => {
159
- expect(__test__.clickNewChatScript()).toContain('发起新对话');
159
+ expect(__test__.clickNewChatScript()).toContain('Start new chat');
160
160
  });
161
161
  });
162
162
  describe('gemini turn normalization', () => {
163
163
  it('collapses only adjacent duplicate turns so identical replies across rounds remain visible', () => {
164
164
  const turns = [
165
- { Role: 'User', Text: '你说\n\n请只回复:OK' },
166
- { Role: 'User', Text: '请只回复:OK' },
165
+ { Role: 'User', Text: 'You said\n\nPlease reply only:OK' },
166
+ { Role: 'User', Text: 'Please reply only:OK' },
167
167
  { Role: 'Assistant', Text: 'OK' },
168
168
  { Role: 'Assistant', Text: 'OK' },
169
- { Role: 'User', Text: '你说\n\n请只回复:OK' },
170
- { Role: 'User', Text: '请只回复:OK' },
169
+ { Role: 'User', Text: 'You said\n\nPlease reply only:OK' },
170
+ { Role: 'User', Text: 'Please reply only:OK' },
171
171
  { Role: 'Assistant', Text: 'OK' },
172
172
  { Role: 'Assistant', Text: 'OK' },
173
173
  ];
174
174
  expect(__test__.collapseAdjacentGeminiTurns(turns)).toEqual([
175
- { Role: 'User', Text: '你说\n\n请只回复:OK' },
176
- { Role: 'User', Text: '请只回复:OK' },
175
+ { Role: 'User', Text: 'You said\n\nPlease reply only:OK' },
176
+ { Role: 'User', Text: 'Please reply only:OK' },
177
177
  { Role: 'Assistant', Text: 'OK' },
178
- { Role: 'User', Text: '你说\n\n请只回复:OK' },
179
- { Role: 'User', Text: '请只回复:OK' },
178
+ { Role: 'User', Text: 'You said\n\nPlease reply only:OK' },
179
+ { Role: 'User', Text: 'Please reply only:OK' },
180
180
  { Role: 'Assistant', Text: 'OK' },
181
181
  ]);
182
182
  });
@@ -204,7 +204,7 @@ describe('gemini evaluate result boundaries', () => {
204
204
  changed: false,
205
205
  clicks: 0,
206
206
  });
207
- expect(runExpandRecentScript('<button aria-label="收起最近">最近</button>')).toEqual({
207
+ expect(runExpandRecentScript('<button aria-label="Collapse recent">Recent</button>')).toEqual({
208
208
  changed: false,
209
209
  clicks: 0,
210
210
  });
@@ -426,9 +426,9 @@ describe('openModelPickerForThinkingScript — picker detection', () => {
426
426
  expect(result).toEqual({ ok: true });
427
427
  });
428
428
 
429
- it('Method 1: detects picker by aria-label "模式选择器"', () => {
429
+ it('Method 1: detects picker by aria-label "Mode selector"', () => {
430
430
  const { window } = createPickerDom(`
431
- <button aria-label="模式选择器">选择</button>
431
+ <button aria-label="Mode selector">localized text</button>
432
432
  `);
433
433
  const result = evalScript(window, __test__.openModelPickerForThinkingScript);
434
434
  expect(result).toEqual({ ok: true });
@@ -442,9 +442,9 @@ describe('openModelPickerForThinkingScript — picker detection', () => {
442
442
  expect(result).toEqual({ ok: true });
443
443
  });
444
444
 
445
- it('Method 1: detects picker by aria-label "选择模型"', () => {
445
+ it('Method 1: detects picker by aria-label "Select model"', () => {
446
446
  const { window } = createPickerDom(`
447
- <button aria-label="选择模型">选择</button>
447
+ <button aria-label="Select model">localized text</button>
448
448
  `);
449
449
  const result = evalScript(window, __test__.openModelPickerForThinkingScript);
450
450
  expect(result).toEqual({ ok: true });
@@ -550,9 +550,9 @@ describe('selectGeminiModelScript — picker detection parity', () => {
550
550
  });
551
551
 
552
552
  describe('getCurrentGeminiModelScript — picker detection parity', () => {
553
- it('Method 1: detects picker by aria-label "模式选择器"', () => {
553
+ it('Method 1: detects picker by aria-label "Mode selector"', () => {
554
554
  const { window } = createPickerDom(`
555
- <button aria-label="模式选择器">2.5 Flash</button>
555
+ <button aria-label="Mode selector">2.5 Flash</button>
556
556
  `);
557
557
  const result = window.eval(__test__.getCurrentGeminiModelScript());
558
558
  expect(result).toBe('2.5-flash');
@@ -140,7 +140,7 @@ export async function ggbEval(page, cmd) {
140
140
  const afterCount = collectNames().length;
141
141
  const dialogText = [...document.querySelectorAll('[role="dialog"], .gwt-DialogBox')]
142
142
  .map(node => node.textContent?.trim() || '')
143
- .find(text => /error|unknown command|错误|未知的指令/i.test(text)) || '';
143
+ .find(text => /error|unknown command|error|unknown command/i.test(text)) || '';
144
144
  return {
145
145
  ok: label !== '' || afterCount > beforeCount,
146
146
  label,
@@ -6,13 +6,13 @@ cli({
6
6
  site: 'google-scholar',
7
7
  name: 'search',
8
8
  access: 'read',
9
- description: 'Google Scholar 学术搜索',
9
+ description: 'Google Scholar scholar search',
10
10
  domain: 'scholar.google.com',
11
11
  strategy: Strategy.PUBLIC,
12
12
  browser: true,
13
13
  args: [
14
- { name: 'query', positional: true, required: true, help: '搜索关键词' },
15
- { name: 'limit', type: 'int', default: 10, help: '返回结果数量 (max 20)' },
14
+ { name: 'query', positional: true, required: true, help: 'Search keyword' },
15
+ { name: 'limit', type: 'int', default: 10, help: 'Number of results to return (max 20)' },
16
16
  ],
17
17
  columns: ['rank', 'title', 'authors', 'source', 'year', 'cited', 'url'],
18
18
  func: async (page, kwargs) => {
@@ -38,7 +38,7 @@ cli({
38
38
  return [{ status: 'dry-run (pass --yes to actually delete)', id }];
39
39
  }
40
40
 
41
- const result = await clickConversationMenuItem(page, id, ['删除', 'delete']);
41
+ const result = await clickConversationMenuItem(page, id, ['localized text', 'delete']);
42
42
  if (!result || !result.ok) {
43
43
  const detail = result?.detail ? ` ${result.detail}` : '';
44
44
  throw new CommandExecutionError(`${result?.reason || 'Failed to click delete menu item.'}${detail}`, SESSION_HINT);
@@ -66,7 +66,7 @@ async function collectHistory(page, { offset, limit, maxScrolls }) {
66
66
  };
67
67
  const hasHistoryEntry = Boolean(document.querySelector('a[href^="/c/"]'));
68
68
  const hasHistoryLauncher = Array.from(document.querySelectorAll('button, [role="button"]'))
69
- .some((node) => isVisible(node) && /^(查看全部|show all|view all)$/i.test((node.textContent || '').trim()));
69
+ .some((node) => isVisible(node) && /^(localized text|show all|view all)$/i.test((node.textContent || '').trim()));
70
70
  const signInCta = Array.from(document.querySelectorAll('button, a'))
71
71
  .some((node) => isVisible(node) && /^(sign in|log in)$/i.test((node.textContent || '').trim()));
72
72
  if (signInCta && !hasHistoryEntry && !hasHistoryLauncher) {
@@ -76,7 +76,7 @@ async function collectHistory(page, { offset, limit, maxScrolls }) {
76
76
  const clickAllHistory = () => {
77
77
  const buttons = Array.from(document.querySelectorAll('button, [role="button"]'))
78
78
  .filter((node) => node instanceof HTMLElement && isVisible(node));
79
- const target = buttons.find((node) => /^(查看全部|show all|view all)$/i.test((node.textContent || '').trim()));
79
+ const target = buttons.find((node) => /^(localized text|show all|view all)$/i.test((node.textContent || '').trim()));
80
80
  if (!target) return false;
81
81
  target.click();
82
82
  return true;
@@ -62,7 +62,7 @@ export const grokExportCommand = cli({
62
62
  };
63
63
  const hasHistoryEntry = Boolean(document.querySelector('a[href^="/c/"]'));
64
64
  const hasHistoryLauncher = Array.from(document.querySelectorAll('button, [role="button"]'))
65
- .some((node) => isVisible(node) && /^(查看全部|show all|view all)$/i.test((node.textContent || '').trim()));
65
+ .some((node) => isVisible(node) && /^(localized text|show all|view all)$/i.test((node.textContent || '').trim()));
66
66
  const signInCta = Array.from(document.querySelectorAll('button, a'))
67
67
  .some((node) => isVisible(node) && /^(sign in|log in)$/i.test((node.textContent || '').trim()));
68
68
  if (signInCta && !hasHistoryEntry && !hasHistoryLauncher) {
@@ -72,7 +72,7 @@ export const grokExportCommand = cli({
72
72
  const clickAllHistory = () => {
73
73
  const buttons = Array.from(document.querySelectorAll('button, [role="button"]'))
74
74
  .filter((node) => node instanceof HTMLElement && isVisible(node));
75
- const target = buttons.find((node) => /^(查看全部|show all|view all)$/i.test((node.textContent || '').trim()));
75
+ const target = buttons.find((node) => /^(localized text|show all|view all)$/i.test((node.textContent || '').trim()));
76
76
  if (!target) return false;
77
77
  target.click();
78
78
  return true;
package/clis/grok/pin.js CHANGED
@@ -61,8 +61,8 @@ function defineToggle(name, accessLabels) {
61
61
  });
62
62
  }
63
63
 
64
- // Grok's context menu shows EITHER "置顶" OR "取消置顶" depending on the
64
+ // Grok's context menu shows EITHER "localized text" OR "localized text" depending on the
65
65
  // current pin state, never both. We register two commands that bind to
66
66
  // the matching label so callers can use whichever they want.
67
- defineToggle('pin', ['置顶', 'pin']);
68
- defineToggle('unpin', ['取消置顶', 'unpin']);
67
+ defineToggle('pin', ['localized text', 'pin']);
68
+ defineToggle('unpin', ['localized text', 'unpin']);
@@ -108,12 +108,12 @@ export async function getCurrentSessionId(page) {
108
108
 
109
109
  // Model picker trigger has stable id="model-select-trigger". Use that as the
110
110
  // primary selector — aria-label localizes (e.g. "Model select" in English,
111
- // "模型选择" in Chinese, etc.) and is unreliable across browser locales.
111
+ // "Model selection" in Chinese, etc.) and is unreliable across browser locales.
112
112
  const MODEL_TRIGGER_SELECTORS = [
113
113
  '#model-select-trigger',
114
114
  'button[aria-label="Model select"]',
115
- 'button[aria-label="模型选择"]',
116
- 'button[aria-label="モデル選択"]',
115
+ 'button[aria-label="Model selection"]',
116
+ 'button[aria-label="モデルlocalized text"]',
117
117
  ];
118
118
 
119
119
  export async function getModelLabel(page) {
@@ -245,10 +245,10 @@ export async function startNewChat(page) {
245
245
  // matches one of the localized labels. Returns whether the click happened.
246
246
  //
247
247
  // Menu items observed on grok.com (2026-05-31):
248
- // "打开新标签页" / "Open in new tab"
249
- // "重命名" / "Rename"
250
- // "置顶" or "取消置顶" / "Pin" or "Unpin"
251
- // "删除" / "Delete"
248
+ // "Open in new tab"
249
+ // "Rename"
250
+ // "Pin" or "Unpin"
251
+ // "Delete"
252
252
  //
253
253
  // Grok's delete action takes effect IMMEDIATELY — no confirmation dialog —
254
254
  // so callers must enforce their own --yes / dry-run gating.
@@ -319,10 +319,10 @@ export function getPinStateFromMenuLabels(labels) {
319
319
  const normalized = (Array.isArray(labels) ? labels : [])
320
320
  .map((label) => String(label || '').trim().toLowerCase())
321
321
  .filter(Boolean);
322
- if (normalized.some((label) => label === '取消置顶' || label === 'unpin')) {
322
+ if (normalized.some((label) => label === 'unpin')) {
323
323
  return 'pinned';
324
324
  }
325
- if (normalized.some((label) => label === '置顶' || label === 'pin')) {
325
+ if (normalized.some((label) => label === 'pin')) {
326
326
  return 'unpinned';
327
327
  }
328
328
  return '';
@@ -535,12 +535,12 @@ export async function sendMessage(page, prompt) {
535
535
  // Prefer data-testid (locale-independent); fall back to aria-label per
536
536
  // language. As of 2026-05-31 Grok renders button[data-testid="chat-submit"]
537
537
  // once the composer has content. The aria-label varies: "Submit" (en),
538
- // "提交" (zh-CN), and presumably other locales.
538
+ // "Submit" (zh-CN), and presumably other locales.
539
539
  const submitSelectors = [
540
540
  'button[data-testid="chat-submit"]',
541
541
  'button[aria-label="Submit"]',
542
- 'button[aria-label="提交"]',
543
- 'button[aria-label="送信"]',
542
+ 'button[aria-label="Submit"]',
543
+ 'button[aria-label="Send"]',
544
544
  ];
545
545
  let submit = null;
546
546
  for (let attempt = 0; attempt < 12; attempt += 1) {
@@ -105,12 +105,12 @@ describe('grok normalizeBooleanFlag', () => {
105
105
  describe('grok getPinStateFromMenuLabels', () => {
106
106
  it('detects pinned state from unpin labels without substring collisions', () => {
107
107
  expect(__test__.getPinStateFromMenuLabels(['Open in new tab', 'Unpin', 'Delete'])).toBe('pinned');
108
- expect(__test__.getPinStateFromMenuLabels(['打开新标签页', '取消置顶', '删除'])).toBe('pinned');
108
+ expect(__test__.getPinStateFromMenuLabels(['Rename', 'Unpin', 'Delete'])).toBe('pinned');
109
109
  });
110
110
 
111
111
  it('detects unpinned state from pin labels', () => {
112
112
  expect(__test__.getPinStateFromMenuLabels(['Open in new tab', 'Pin', 'Delete'])).toBe('unpinned');
113
- expect(__test__.getPinStateFromMenuLabels(['打开新标签页', '置顶', '删除'])).toBe('unpinned');
113
+ expect(__test__.getPinStateFromMenuLabels(['Rename', 'Pin', 'Delete'])).toBe('unpinned');
114
114
  });
115
115
 
116
116
  it('returns empty string when neither state label is visible', () => {
@@ -155,7 +155,7 @@ describe('indeed adapter — URL builders', () => {
155
155
  describe('indeed adapter — DOM normalizers', () => {
156
156
  it('dedupeTags drops the salary duplicate and trims', () => {
157
157
  const tags = ['$50 - $100 an hour', 'Contract', 'Hourly pay', 'Flexible schedule', 'Contract'];
158
- expect(dedupeTags(tags, '$50 - $100 an hour')).toBe('Contract · Hourly pay · Flexible schedule');
158
+ expect(dedupeTags(tags, '$50 - $100 an hour')).toBe('Contract \u00b7 Hourly pay \u00b7 Flexible schedule');
159
159
  });
160
160
 
161
161
  it('dedupeTags handles empty / no-salary input', () => {
@@ -184,7 +184,7 @@ describe('indeed adapter — DOM normalizers', () => {
184
184
  company: 'Somos, Inc.',
185
185
  location: 'Remote',
186
186
  salary: '$150,000 - $179,000 a year',
187
- tags: 'Full-time · 401(k)',
187
+ tags: 'Full-time \u00b7 401(k)',
188
188
  url: `${INDEED_ORIGIN}/viewjob?jk=a0021a1886f32d09`,
189
189
  });
190
190
  });
@@ -270,7 +270,7 @@ describe('indeed adapter — search runtime', () => {
270
270
  company: 'Acme',
271
271
  location: 'Remote',
272
272
  salary: '$180,000 a year',
273
- tags: 'Full-time · 401(k)',
273
+ tags: 'Full-time \u00b7 401(k)',
274
274
  url: `${INDEED_ORIGIN}/viewjob?jk=dccc07ac5a6a3683`,
275
275
  }]);
276
276
  });
@@ -118,7 +118,7 @@ export function dedupeTags(tags, salary) {
118
118
  if (out.includes(trimmed)) continue;
119
119
  out.push(trimmed);
120
120
  }
121
- return out.join(' · ');
121
+ return out.join(' \u00b7 ');
122
122
  }
123
123
 
124
124
  /**