publishport-opencli 1.8.5-pp.2 → 1.8.5-pp.21

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 (2136) hide show
  1. package/LICENSE +24 -0
  2. package/cli-manifest.json +3116 -305
  3. package/clis/12306/auth.js +2 -36
  4. package/clis/12306/me.js +3 -67
  5. package/clis/12306/orders.js +3 -86
  6. package/clis/12306/passengers.js +4 -80
  7. package/clis/12306/price.js +1 -166
  8. package/clis/12306/stations.js +1 -66
  9. package/clis/12306/train.js +1 -91
  10. package/clis/12306/trains.js +1 -166
  11. package/clis/12306/utils.js +1 -272
  12. package/clis/1688/assets.js +2 -80
  13. package/clis/1688/auth.js +1 -46
  14. package/clis/1688/download.js +1 -77
  15. package/clis/1688/item.js +4 -171
  16. package/clis/1688/search.js +4 -185
  17. package/clis/1688/shared.js +6 -552
  18. package/clis/1688/store.js +5 -206
  19. package/clis/1point3acres/auth.js +2 -36
  20. package/clis/1point3acres/digest.js +1 -35
  21. package/clis/1point3acres/forum.js +1 -51
  22. package/clis/1point3acres/forums.js +1 -44
  23. package/clis/1point3acres/hot.js +1 -35
  24. package/clis/1point3acres/latest.js +1 -35
  25. package/clis/1point3acres/notifications.js +1 -64
  26. package/clis/1point3acres/search.js +1 -71
  27. package/clis/1point3acres/thread.js +2 -117
  28. package/clis/1point3acres/user.js +1 -77
  29. package/clis/1point3acres/utils.js +5 -246
  30. package/clis/36kr/article.js +3 -49
  31. package/clis/36kr/hot.js +2 -73
  32. package/clis/36kr/news.js +1 -52
  33. package/clis/36kr/search.js +2 -45
  34. package/clis/51job/company.js +2 -92
  35. package/clis/51job/detail.js +2 -76
  36. package/clis/51job/hot.js +1 -56
  37. package/clis/51job/search.js +1 -80
  38. package/clis/51job/utils.js +7 -288
  39. package/clis/_atlassian/shared.js +21 -577
  40. package/clis/_shared/article/auth.js +15 -123
  41. package/clis/_shared/article/douban-md2draft.js +4 -110
  42. package/clis/_shared/article/format.js +1 -71
  43. package/clis/_shared/article/images.js +7 -125
  44. package/clis/_shared/article/login.js +1 -90
  45. package/clis/_shared/article/page-runtime.js +148 -35
  46. package/clis/_shared/article/publish.js +29 -182
  47. package/clis/_shared/common.js +1 -32
  48. package/clis/_shared/content-guard.js +1 -0
  49. package/clis/_shared/desktop-commands.js +1 -112
  50. package/clis/_shared/search-adapter.js +1 -70
  51. package/clis/_shared/site-auth.js +1 -118
  52. package/clis/_shared/token-auth.js +2 -0
  53. package/clis/_shared/video-publish.js +62 -0
  54. package/clis/aibase/news.js +2 -81
  55. package/clis/amazon/auth.js +2 -36
  56. package/clis/amazon/bestsellers.js +1 -8
  57. package/clis/amazon/discussion.js +3 -106
  58. package/clis/amazon/movers-shakers.js +1 -8
  59. package/clis/amazon/new-releases.js +1 -8
  60. package/clis/amazon/offer.js +3 -115
  61. package/clis/amazon/product.js +5 -73
  62. package/clis/amazon/rankings.js +2 -161
  63. package/clis/amazon/search.js +2 -74
  64. package/clis/amazon/shared.js +6 -360
  65. package/clis/antigravity/_actions.js +14 -131
  66. package/clis/antigravity/audit-extras.js +10 -273
  67. package/clis/antigravity/delete.js +1 -60
  68. package/clis/antigravity/dump.js +1 -29
  69. package/clis/antigravity/extract-code.js +2 -17
  70. package/clis/antigravity/history.js +1 -26
  71. package/clis/antigravity/mark-read.js +1 -52
  72. package/clis/antigravity/model.js +6 -77
  73. package/clis/antigravity/new.js +2 -19
  74. package/clis/antigravity/read.js +2 -27
  75. package/clis/antigravity/rename.js +1 -33
  76. package/clis/antigravity/send.js +3 -28
  77. package/clis/antigravity/serve.js +18 -479
  78. package/clis/antigravity/status.js +1 -19
  79. package/clis/antigravity/storage.js +6 -360
  80. package/clis/antigravity/watch.js +2 -39
  81. package/clis/apple-podcasts/episodes.js +1 -29
  82. package/clis/apple-podcasts/search.js +1 -31
  83. package/clis/apple-podcasts/top.js +1 -45
  84. package/clis/apple-podcasts/utils.js +1 -30
  85. package/clis/archive/item.js +1 -92
  86. package/clis/archive/search.js +1 -115
  87. package/clis/archive/snapshots.js +1 -129
  88. package/clis/archive/wayback.js +1 -83
  89. package/clis/arxiv/author.js +1 -44
  90. package/clis/arxiv/paper.js +1 -22
  91. package/clis/arxiv/recent.js +1 -33
  92. package/clis/arxiv/search.js +1 -36
  93. package/clis/arxiv/utils.js +1 -112
  94. package/clis/autohome/brand.js +1 -108
  95. package/clis/autohome/score.js +1 -103
  96. package/clis/autohome/utils.js +1 -157
  97. package/clis/baidu-scholar/search.js +3 -27
  98. package/clis/baijiahao/article.js +1 -392
  99. package/clis/baijiahao/lists.js +1 -70
  100. package/clis/baijiahao/login.js +1 -15
  101. package/clis/baijiahao/publish.js +57 -0
  102. package/clis/baijiahao/stats.js +1 -0
  103. package/clis/baijiahao/whoami.js +1 -33
  104. package/clis/band/auth.js +2 -35
  105. package/clis/band/bands.js +2 -38
  106. package/clis/band/mentions.js +2 -124
  107. package/clis/band/post.js +4 -104
  108. package/clis/band/posts.js +3 -48
  109. package/clis/barchart/flow.js +4 -50
  110. package/clis/barchart/greeks.js +5 -125
  111. package/clis/barchart/options.js +5 -51
  112. package/clis/barchart/quote.js +3 -51
  113. package/clis/bbc/news.js +1 -42
  114. package/clis/bbc/topic.js +1 -57
  115. package/clis/bbc/utils.js +1 -79
  116. package/clis/bilibili/article.js +1 -393
  117. package/clis/bilibili/auth.js +1 -36
  118. package/clis/bilibili/categories.js +1 -56
  119. package/clis/bilibili/comment.js +1 -107
  120. package/clis/bilibili/comments.js +1 -136
  121. package/clis/bilibili/download.js +2 -173
  122. package/clis/bilibili/drafts.js +1 -60
  123. package/clis/bilibili/dynamic-post.js +3 -60
  124. package/clis/bilibili/dynamic.js +1 -34
  125. package/clis/bilibili/favorite.js +1 -47
  126. package/clis/bilibili/feed.js +2 -220
  127. package/clis/bilibili/follow.js +1 -140
  128. package/clis/bilibili/following.js +1 -44
  129. package/clis/bilibili/history.js +1 -45
  130. package/clis/bilibili/hot.js +2 -27
  131. package/clis/bilibili/me.js +1 -13
  132. package/clis/bilibili/partitions.js +1 -0
  133. package/clis/bilibili/ranking.js +1 -25
  134. package/clis/bilibili/search.js +1 -24
  135. package/clis/bilibili/stats.js +1 -0
  136. package/clis/bilibili/subtitle.js +3 -123
  137. package/clis/bilibili/summary.js +1 -167
  138. package/clis/bilibili/topics.js +1 -0
  139. package/clis/bilibili/unfollow.js +1 -121
  140. package/clis/bilibili/upload.js +1 -0
  141. package/clis/bilibili/user-videos.js +1 -39
  142. package/clis/bilibili/utils.js +7 -249
  143. package/clis/bilibili/video-drafts.js +1 -0
  144. package/clis/bilibili/video.js +1 -155
  145. package/clis/binance/asks.js +1 -22
  146. package/clis/binance/depth.js +1 -21
  147. package/clis/binance/gainers.js +1 -23
  148. package/clis/binance/klines.js +1 -22
  149. package/clis/binance/losers.js +1 -23
  150. package/clis/binance/pairs.js +1 -22
  151. package/clis/binance/price.js +1 -19
  152. package/clis/binance/prices.js +1 -20
  153. package/clis/binance/ticker.js +1 -22
  154. package/clis/binance/top.js +1 -22
  155. package/clis/binance/trades.js +1 -21
  156. package/clis/bloomberg/businessweek.js +4 -117
  157. package/clis/bloomberg/crypto.js +1 -18
  158. package/clis/bloomberg/economics.js +1 -18
  159. package/clis/bloomberg/feeds.js +1 -16
  160. package/clis/bloomberg/green.js +1 -18
  161. package/clis/bloomberg/industries.js +1 -18
  162. package/clis/bloomberg/main.js +1 -18
  163. package/clis/bloomberg/markets.js +1 -18
  164. package/clis/bloomberg/news.js +2 -51
  165. package/clis/bloomberg/opinions.js +1 -18
  166. package/clis/bloomberg/politics.js +1 -18
  167. package/clis/bloomberg/pursuits.js +1 -18
  168. package/clis/bloomberg/tech.js +1 -18
  169. package/clis/bloomberg/utils.js +17 -380
  170. package/clis/booking/search.js +2 -260
  171. package/clis/boss/auth.js +2 -36
  172. package/clis/boss/batchgreet.js +1 -61
  173. package/clis/boss/chatlist.js +1 -116
  174. package/clis/boss/chatmsg.js +1 -117
  175. package/clis/boss/detail.js +1 -63
  176. package/clis/boss/exchange.js +1 -46
  177. package/clis/boss/greet.js +1 -49
  178. package/clis/boss/invite.js +4 -64
  179. package/clis/boss/joblist.js +1 -31
  180. package/clis/boss/mark.js +1 -70
  181. package/clis/boss/recommend.js +1 -45
  182. package/clis/boss/resume.js +2 -62
  183. package/clis/boss/search.js +1 -197
  184. package/clis/boss/send.js +1 -44
  185. package/clis/boss/stats.js +1 -66
  186. package/clis/boss/utils.js +13 -320
  187. package/clis/brave/search.js +3 -60
  188. package/clis/chaoxing/assignments.js +1 -76
  189. package/clis/chaoxing/auth.js +2 -35
  190. package/clis/chaoxing/exams.js +1 -75
  191. package/clis/chaoxing/utils.js +9 -174
  192. package/clis/chatgpt/ask.js +1 -129
  193. package/clis/chatgpt/auth.js +2 -37
  194. package/clis/chatgpt/detail.js +1 -63
  195. package/clis/chatgpt/history.js +1 -39
  196. package/clis/chatgpt/image.js +1 -167
  197. package/clis/chatgpt/model.js +1 -31
  198. package/clis/chatgpt/new.js +1 -32
  199. package/clis/chatgpt/project-file-add.js +1 -74
  200. package/clis/chatgpt/project-list.js +1 -37
  201. package/clis/chatgpt/read.js +1 -44
  202. package/clis/chatgpt/send.js +1 -68
  203. package/clis/chatgpt/status.js +1 -29
  204. package/clis/chatgpt/utils.js +62 -1196
  205. package/clis/chatgpt-app/ask.js +1 -87
  206. package/clis/chatgpt-app/ax.js +9 -100
  207. package/clis/chatgpt-app/model.js +1 -25
  208. package/clis/chatgpt-app/new.js +1 -61
  209. package/clis/chatgpt-app/read.js +1 -32
  210. package/clis/chatgpt-app/send.js +1 -37
  211. package/clis/chatgpt-app/status.js +1 -26
  212. package/clis/chatwise/ask.js +1 -54
  213. package/clis/chatwise/export.js +2 -28
  214. package/clis/chatwise/history.js +2 -37
  215. package/clis/chatwise/model.js +6 -43
  216. package/clis/chatwise/new.js +1 -2
  217. package/clis/chatwise/read.js +2 -17
  218. package/clis/chatwise/screenshot.js +1 -2
  219. package/clis/chatwise/send.js +1 -28
  220. package/clis/chatwise/status.js +1 -2
  221. package/clis/chatwise/utils.js +8 -76
  222. package/clis/chess/analyze.js +1 -35
  223. package/clis/chess/game.js +1 -114
  224. package/clis/chess/games.js +1 -67
  225. package/clis/chess/stats.js +1 -32
  226. package/clis/chess/utils.js +1 -170
  227. package/clis/claude/ask.js +2 -142
  228. package/clis/claude/auth.js +2 -38
  229. package/clis/claude/detail.js +1 -38
  230. package/clis/claude/history.js +1 -33
  231. package/clis/claude/new.js +1 -29
  232. package/clis/claude/read.js +1 -27
  233. package/clis/claude/send.js +1 -48
  234. package/clis/claude/status.js +1 -26
  235. package/clis/claude/utils.js +23 -307
  236. package/clis/cnblogs/article.js +1 -308
  237. package/clis/cnblogs/login.js +1 -15
  238. package/clis/cnblogs/stats.js +37 -0
  239. package/clis/cnblogs/whoami.js +1 -27
  240. package/clis/cnki/search.js +3 -26
  241. package/clis/codex/_actions.js +3 -201
  242. package/clis/codex/archive.js +1 -37
  243. package/clis/codex/ask.js +6 -61
  244. package/clis/codex/dump.js +1 -2
  245. package/clis/codex/export.js +2 -28
  246. package/clis/codex/extract-diff.js +2 -19
  247. package/clis/codex/history.js +1 -27
  248. package/clis/codex/model.js +8 -154
  249. package/clis/codex/new.js +1 -2
  250. package/clis/codex/pin.js +1 -30
  251. package/clis/codex/projects.js +1 -28
  252. package/clis/codex/read.js +2 -27
  253. package/clis/codex/rename.js +4 -56
  254. package/clis/codex/screenshot.js +1 -2
  255. package/clis/codex/send.js +3 -38
  256. package/clis/codex/sidebar.js +1 -356
  257. package/clis/codex/status.js +1 -2
  258. package/clis/coingecko/categories.js +1 -75
  259. package/clis/coingecko/coin.js +1 -107
  260. package/clis/coingecko/derivatives.js +1 -84
  261. package/clis/coingecko/exchanges.js +1 -74
  262. package/clis/coingecko/global.js +1 -71
  263. package/clis/coingecko/top.js +1 -64
  264. package/clis/coingecko/trending.js +1 -55
  265. package/clis/confluence/create.js +1 -39
  266. package/clis/confluence/page.js +1 -23
  267. package/clis/confluence/search.js +1 -34
  268. package/clis/confluence/shared.js +1 -173
  269. package/clis/confluence/update.js +1 -38
  270. package/clis/coupang/add-to-cart.js +3 -66
  271. package/clis/coupang/auth.js +2 -34
  272. package/clis/coupang/product.js +3 -99
  273. package/clis/coupang/search.js +8 -97
  274. package/clis/coupang/utils.js +1 -316
  275. package/clis/crates/crate.js +1 -62
  276. package/clis/crates/search.js +1 -44
  277. package/clis/crates/utils.js +1 -72
  278. package/clis/csdn/article.js +19 -373
  279. package/clis/csdn/columns.js +1 -41
  280. package/clis/csdn/login.js +1 -17
  281. package/clis/csdn/stats.js +71 -0
  282. package/clis/csdn/whoami.js +1 -37
  283. package/clis/cto51/article.js +1 -271
  284. package/clis/cto51/whoami.js +1 -28
  285. package/clis/ctrip/auth.js +1 -50
  286. package/clis/ctrip/flight.js +2 -121
  287. package/clis/ctrip/hotel-search.js +3 -111
  288. package/clis/ctrip/hotel-suggest.js +1 -45
  289. package/clis/ctrip/search.js +1 -41
  290. package/clis/ctrip/utils.js +6 -360
  291. package/clis/cursor/ask.js +5 -57
  292. package/clis/cursor/composer.js +2 -33
  293. package/clis/cursor/dump.js +1 -2
  294. package/clis/cursor/export.js +3 -32
  295. package/clis/cursor/extract-code.js +2 -20
  296. package/clis/cursor/history.js +2 -20
  297. package/clis/cursor/model.js +4 -40
  298. package/clis/cursor/new.js +1 -2
  299. package/clis/cursor/read.js +2 -20
  300. package/clis/cursor/screenshot.js +1 -2
  301. package/clis/cursor/send.js +2 -31
  302. package/clis/cursor/status.js +1 -2
  303. package/clis/dblp/author.js +1 -133
  304. package/clis/dblp/paper.js +1 -40
  305. package/clis/dblp/search.js +1 -45
  306. package/clis/dblp/utils.js +1 -290
  307. package/clis/dblp/venue.js +1 -64
  308. package/clis/deepseek/ask.js +1 -158
  309. package/clis/deepseek/auth.js +2 -34
  310. package/clis/deepseek/detail.js +1 -46
  311. package/clis/deepseek/history.js +1 -27
  312. package/clis/deepseek/new.js +1 -33
  313. package/clis/deepseek/read.js +1 -25
  314. package/clis/deepseek/send.js +7 -97
  315. package/clis/deepseek/status.js +1 -26
  316. package/clis/deepseek/utils.js +25 -310
  317. package/clis/defillama/protocol.js +1 -84
  318. package/clis/defillama/protocols.js +1 -55
  319. package/clis/defillama/utils.js +1 -99
  320. package/clis/devto/auth.js +9 -0
  321. package/clis/devto/latest.js +1 -74
  322. package/clis/devto/publish.js +17 -0
  323. package/clis/devto/read.js +2 -102
  324. package/clis/devto/tag.js +1 -36
  325. package/clis/devto/top.js +1 -30
  326. package/clis/devto/user.js +1 -35
  327. package/clis/dianping/auth.js +2 -40
  328. package/clis/dianping/cityResolver.js +1 -185
  329. package/clis/dianping/search.js +1 -157
  330. package/clis/dianping/shop.js +1 -173
  331. package/clis/dianping/utils.js +1 -157
  332. package/clis/dictionary/examples.js +1 -28
  333. package/clis/dictionary/search.js +1 -30
  334. package/clis/dictionary/synonyms.js +1 -28
  335. package/clis/discord-app/channels.js +1 -26
  336. package/clis/discord-app/delete.js +3 -52
  337. package/clis/discord-app/goto.js +1 -38
  338. package/clis/discord-app/members.js +2 -20
  339. package/clis/discord-app/read.js +1 -42
  340. package/clis/discord-app/search.js +4 -42
  341. package/clis/discord-app/send.js +3 -21
  342. package/clis/discord-app/servers.js +1 -26
  343. package/clis/discord-app/status.js +1 -17
  344. package/clis/discord-app/thread-read.js +1 -45
  345. package/clis/discord-app/threads.js +1 -37
  346. package/clis/discord-app/utils.js +8 -392
  347. package/clis/dockerhub/image.js +1 -52
  348. package/clis/dockerhub/search.js +1 -47
  349. package/clis/dockerhub/utils.js +1 -100
  350. package/clis/dongchedi/koubei.js +1 -85
  351. package/clis/dongchedi/models.js +1 -91
  352. package/clis/dongchedi/score.js +1 -83
  353. package/clis/dongchedi/search.js +1 -83
  354. package/clis/dongchedi/series.js +1 -87
  355. package/clis/dongchedi/specs.js +1 -115
  356. package/clis/dongchedi/utils.js +1 -180
  357. package/clis/douban/article.js +51 -199
  358. package/clis/douban/auth.js +2 -39
  359. package/clis/douban/book-hot.js +1 -15
  360. package/clis/douban/download.js +1 -68
  361. package/clis/douban/marks.js +3 -60
  362. package/clis/douban/movie-hot.js +1 -15
  363. package/clis/douban/photos.js +1 -35
  364. package/clis/douban/reviews.js +3 -57
  365. package/clis/douban/search.js +1 -18
  366. package/clis/douban/subject.js +1 -46
  367. package/clis/douban/top250.js +2 -20
  368. package/clis/douban/utils.js +24 -337
  369. package/clis/doubao/ask.js +1 -40
  370. package/clis/doubao/auth.js +3 -41
  371. package/clis/doubao/detail.js +1 -35
  372. package/clis/doubao/history.js +1 -30
  373. package/clis/doubao/meeting-summary.js +1 -41
  374. package/clis/doubao/meeting-transcript.js +1 -38
  375. package/clis/doubao/new.js +1 -22
  376. package/clis/doubao/read.js +1 -21
  377. package/clis/doubao/send.js +1 -24
  378. package/clis/doubao/status.js +1 -26
  379. package/clis/doubao/utils.js +40 -492
  380. package/clis/doubao-app/ask.js +1 -54
  381. package/clis/doubao-app/dump.js +1 -25
  382. package/clis/doubao-app/new.js +1 -21
  383. package/clis/doubao-app/read.js +1 -19
  384. package/clis/doubao-app/screenshot.js +1 -19
  385. package/clis/doubao-app/send.js +1 -28
  386. package/clis/doubao-app/status.js +1 -17
  387. package/clis/doubao-app/utils.js +6 -52
  388. package/clis/douyin/_shared/browser-fetch.js +7 -45
  389. package/clis/douyin/_shared/creation-id.js +1 -5
  390. package/clis/douyin/_shared/evaluate-result.js +1 -16
  391. package/clis/douyin/_shared/imagex-upload.js +1 -53
  392. package/clis/douyin/_shared/public-api.js +1 -29
  393. package/clis/douyin/_shared/sts2.js +1 -21
  394. package/clis/douyin/_shared/text-extra.js +1 -15
  395. package/clis/douyin/_shared/timing.js +1 -22
  396. package/clis/douyin/_shared/tos-upload.js +5 -331
  397. package/clis/douyin/_shared/transcode.js +1 -45
  398. package/clis/douyin/_shared/types.js +1 -1
  399. package/clis/douyin/_shared/vod-upload.js +5 -212
  400. package/clis/douyin/activities.js +1 -23
  401. package/clis/douyin/auth.js +1 -39
  402. package/clis/douyin/collections.js +1 -23
  403. package/clis/douyin/delete.js +4 -88
  404. package/clis/douyin/draft.js +18 -337
  405. package/clis/douyin/drafts.js +1 -24
  406. package/clis/douyin/hashtag.js +1 -114
  407. package/clis/douyin/location.js +1 -25
  408. package/clis/douyin/profile.js +1 -29
  409. package/clis/douyin/publish-image.js +62 -0
  410. package/clis/douyin/publish.js +10 -337
  411. package/clis/douyin/search.js +3 -260
  412. package/clis/douyin/stats.js +1 -28
  413. package/clis/douyin/update.js +1 -32
  414. package/clis/douyin/user-videos.js +1 -82
  415. package/clis/douyin/videos.js +1 -52
  416. package/clis/duckduckgo/search.js +1 -131
  417. package/clis/duckduckgo/suggest.js +1 -45
  418. package/clis/eastmoney/_secid.js +1 -78
  419. package/clis/eastmoney/announcement.js +1 -53
  420. package/clis/eastmoney/article.js +1 -340
  421. package/clis/eastmoney/convertible.js +1 -74
  422. package/clis/eastmoney/etf.js +1 -66
  423. package/clis/eastmoney/holders.js +1 -79
  424. package/clis/eastmoney/hot-rank.js +2 -23
  425. package/clis/eastmoney/index-board.js +1 -97
  426. package/clis/eastmoney/kline.js +1 -88
  427. package/clis/eastmoney/kuaixun.js +1 -55
  428. package/clis/eastmoney/longhu.js +1 -68
  429. package/clis/eastmoney/money-flow.js +1 -79
  430. package/clis/eastmoney/northbound.js +1 -58
  431. package/clis/eastmoney/quote.js +1 -108
  432. package/clis/eastmoney/rank.js +1 -95
  433. package/clis/eastmoney/sectors.js +1 -77
  434. package/clis/eastmoney/whoami.js +1 -18
  435. package/clis/endoflife/product.js +1 -55
  436. package/clis/endoflife/utils.js +1 -89
  437. package/clis/facebook/add-friend.js +2 -22
  438. package/clis/facebook/auth.js +1 -43
  439. package/clis/facebook/events.js +2 -17
  440. package/clis/facebook/feed.js +3 -99
  441. package/clis/facebook/friends.js +2 -17
  442. package/clis/facebook/groups.js +2 -17
  443. package/clis/facebook/join-group.js +2 -22
  444. package/clis/facebook/marketplace-inbox.js +2 -52
  445. package/clis/facebook/marketplace-listings.js +2 -53
  446. package/clis/facebook/memories.js +2 -17
  447. package/clis/facebook/notifications.js +3 -305
  448. package/clis/facebook/profile.js +2 -22
  449. package/clis/facebook/search.js +2 -19
  450. package/clis/flathub/app.js +1 -71
  451. package/clis/flathub/search.js +1 -80
  452. package/clis/flathub/utils.js +1 -114
  453. package/clis/flomo/auth.js +2 -35
  454. package/clis/flomo/memos.js +2 -217
  455. package/clis/gemini/ask.js +1 -51
  456. package/clis/gemini/auth.js +2 -36
  457. package/clis/gemini/deep-research-result.js +4 -96
  458. package/clis/gemini/deep-research.js +1 -103
  459. package/clis/gemini/detail.js +1 -82
  460. package/clis/gemini/history.js +1 -70
  461. package/clis/gemini/image.js +2 -110
  462. package/clis/gemini/new.js +1 -22
  463. package/clis/gemini/read.js +1 -36
  464. package/clis/gemini/status.js +1 -32
  465. package/clis/gemini/utils.js +51 -873
  466. package/clis/geogebra/add-circle.js +1 -46
  467. package/clis/geogebra/add-line.js +1 -35
  468. package/clis/geogebra/add-point.js +1 -27
  469. package/clis/geogebra/add-polygon.js +1 -25
  470. package/clis/geogebra/eval.js +1 -35
  471. package/clis/geogebra/hexagon.js +1 -62
  472. package/clis/geogebra/info.js +3 -62
  473. package/clis/geogebra/list.js +1 -35
  474. package/clis/geogebra/triangle.js +1 -60
  475. package/clis/geogebra/utils.js +11 -183
  476. package/clis/ghost/publish.js +1 -0
  477. package/clis/ghost/shared.js +1 -0
  478. package/clis/ghost/whoami.js +1 -0
  479. package/clis/gitee/auth.js +2 -31
  480. package/clis/gitee/index.js +1 -3
  481. package/clis/gitee/search.js +1 -137
  482. package/clis/gitee/trending.js +3 -331
  483. package/clis/gitee/user.js +2 -131
  484. package/clis/github/auth.js +2 -39
  485. package/clis/github-trending/repos.js +1 -168
  486. package/clis/google/news.js +1 -59
  487. package/clis/google/search.js +3 -51
  488. package/clis/google/suggest.js +1 -35
  489. package/clis/google/trends.js +1 -39
  490. package/clis/google/utils.js +1 -23
  491. package/clis/google-scholar/cite.js +8 -62
  492. package/clis/google-scholar/profile.js +4 -60
  493. package/clis/google-scholar/search.js +3 -41
  494. package/clis/goproxy/module.js +1 -47
  495. package/clis/goproxy/utils.js +1 -165
  496. package/clis/goproxy/versions.js +1 -59
  497. package/clis/gov-law/recent.js +1 -22
  498. package/clis/gov-law/search.js +3 -30
  499. package/clis/gov-law/shared.js +5 -27
  500. package/clis/gov-policy/recent.js +2 -84
  501. package/clis/gov-policy/search.js +2 -85
  502. package/clis/gov-policy/utils.js +1 -54
  503. package/clis/grok/ask.js +1 -77
  504. package/clis/grok/auth.js +2 -37
  505. package/clis/grok/delete.js +1 -54
  506. package/clis/grok/detail.js +1 -60
  507. package/clis/grok/export-all.js +7 -246
  508. package/clis/grok/export-utils.js +1 -94
  509. package/clis/grok/export.js +4 -87
  510. package/clis/grok/history.js +1 -48
  511. package/clis/grok/image.js +8 -232
  512. package/clis/grok/new.js +1 -20
  513. package/clis/grok/pin.js +1 -68
  514. package/clis/grok/read.js +1 -39
  515. package/clis/grok/send.js +1 -50
  516. package/clis/grok/status.js +1 -41
  517. package/clis/grok/utils.js +21 -324
  518. package/clis/guazi/browse.js +1 -95
  519. package/clis/guazi/car.js +1 -110
  520. package/clis/guazi/utils.js +1 -133
  521. package/clis/hackernews/ask.js +1 -31
  522. package/clis/hackernews/best.js +1 -31
  523. package/clis/hackernews/jobs.js +1 -29
  524. package/clis/hackernews/new.js +1 -31
  525. package/clis/hackernews/read.js +11 -188
  526. package/clis/hackernews/search.js +1 -38
  527. package/clis/hackernews/show.js +1 -31
  528. package/clis/hackernews/top.js +1 -31
  529. package/clis/hackernews/user.js +1 -23
  530. package/clis/hashnode/auth.js +11 -0
  531. package/clis/hashnode/publish.js +92 -0
  532. package/clis/hf/auth.js +2 -31
  533. package/clis/hf/datasets.js +1 -88
  534. package/clis/hf/models.js +1 -91
  535. package/clis/hf/paper.js +1 -79
  536. package/clis/hf/spaces.js +1 -101
  537. package/clis/hf/top.js +1 -121
  538. package/clis/homebrew/cask.js +1 -39
  539. package/clis/homebrew/formula.js +1 -41
  540. package/clis/homebrew/popular.js +1 -54
  541. package/clis/homebrew/utils.js +1 -100
  542. package/clis/huodongxing/events.js +1 -322
  543. package/clis/hupu/auth.js +2 -35
  544. package/clis/hupu/detail.js +7 -72
  545. package/clis/hupu/hot.js +3 -152
  546. package/clis/hupu/like.js +1 -76
  547. package/clis/hupu/mentions.js +6 -75
  548. package/clis/hupu/reply.js +1 -72
  549. package/clis/hupu/search.js +1 -60
  550. package/clis/hupu/unlike.js +1 -76
  551. package/clis/hupu/utils.js +10 -86
  552. package/clis/imdb/person.js +2 -66
  553. package/clis/imdb/reviews.js +3 -52
  554. package/clis/imdb/search.js +2 -51
  555. package/clis/imdb/title.js +1 -94
  556. package/clis/imdb/top.js +1 -54
  557. package/clis/imdb/trending.js +1 -53
  558. package/clis/imdb/utils.js +13 -136
  559. package/clis/imooc/article.js +1 -192
  560. package/clis/imooc/login.js +1 -15
  561. package/clis/imooc/whoami.js +1 -33
  562. package/clis/indeed/job.js +2 -68
  563. package/clis/indeed/search.js +2 -75
  564. package/clis/indeed/utils.js +1 -152
  565. package/clis/instagram/_shared/private-publish.js +4 -959
  566. package/clis/instagram/_shared/protocol-capture.js +9 -111
  567. package/clis/instagram/_shared/runtime-info.js +2 -50
  568. package/clis/instagram/auth.js +2 -37
  569. package/clis/instagram/collection-create.js +2 -22
  570. package/clis/instagram/collection-delete.js +2 -22
  571. package/clis/instagram/comment.js +2 -24
  572. package/clis/instagram/detail.js +2 -150
  573. package/clis/instagram/download.js +5 -149
  574. package/clis/instagram/explore.js +2 -17
  575. package/clis/instagram/follow.js +2 -22
  576. package/clis/instagram/followers.js +2 -18
  577. package/clis/instagram/following.js +2 -18
  578. package/clis/instagram/like.js +2 -23
  579. package/clis/instagram/note.js +8 -69
  580. package/clis/instagram/post.js +35 -814
  581. package/clis/instagram/profile.js +2 -17
  582. package/clis/instagram/reel.js +18 -393
  583. package/clis/instagram/save.js +2 -23
  584. package/clis/instagram/saved.js +2 -18
  585. package/clis/instagram/search.js +2 -18
  586. package/clis/instagram/story.js +4 -99
  587. package/clis/instagram/unfollow.js +2 -22
  588. package/clis/instagram/unlike.js +2 -23
  589. package/clis/instagram/unsave.js +2 -23
  590. package/clis/instagram/user.js +1 -476
  591. package/clis/jd/add-cart.js +3 -53
  592. package/clis/jd/auth.js +2 -36
  593. package/clis/jd/cart.js +2 -23
  594. package/clis/jd/detail.js +4 -25
  595. package/clis/jd/item.js +65 -697
  596. package/clis/jd/reviews.js +3 -27
  597. package/clis/jd/search.js +3 -27
  598. package/clis/jianshu/article.js +1 -0
  599. package/clis/jianshu/login.js +1 -0
  600. package/clis/jianshu/notebooks.js +1 -0
  601. package/clis/jianshu/whoami.js +1 -0
  602. package/clis/jianyu/auth.js +3 -37
  603. package/clis/jianyu/detail.js +1 -21
  604. package/clis/jianyu/search.js +6 -567
  605. package/clis/jianyu/shared/china-bid-search.js +4 -83
  606. package/clis/jianyu/shared/procurement-contract.js +1 -324
  607. package/clis/jianyu/shared/procurement-detail.js +2 -91
  608. package/clis/jike/auth.js +2 -67
  609. package/clis/jike/comment.js +6 -60
  610. package/clis/jike/create.js +6 -61
  611. package/clis/jike/feed.js +3 -39
  612. package/clis/jike/like.js +3 -41
  613. package/clis/jike/notifications.js +3 -57
  614. package/clis/jike/post.js +2 -41
  615. package/clis/jike/repost.js +10 -95
  616. package/clis/jike/search.js +3 -42
  617. package/clis/jike/topic.js +2 -47
  618. package/clis/jike/user.js +2 -48
  619. package/clis/jike/utils.js +2 -12
  620. package/clis/jimeng/auth.js +2 -35
  621. package/clis/jimeng/generate.js +2 -33
  622. package/clis/jimeng/history.js +2 -27
  623. package/clis/jimeng/new.js +2 -20
  624. package/clis/jimeng/workspaces.js +2 -22
  625. package/clis/jira/attachments.js +1 -28
  626. package/clis/jira/comments.js +1 -28
  627. package/clis/jira/issue.js +1 -28
  628. package/clis/jira/links.js +1 -28
  629. package/clis/jira/search.js +1 -47
  630. package/clis/jira/shared.js +1 -256
  631. package/clis/juejin/article.js +5 -503
  632. package/clis/juejin/categories.js +1 -36
  633. package/clis/juejin/hot.js +1 -37
  634. package/clis/juejin/login.js +1 -15
  635. package/clis/juejin/recommend.js +1 -61
  636. package/clis/juejin/stats.js +53 -0
  637. package/clis/juejin/tags.js +1 -37
  638. package/clis/juejin/utils.js +1 -199
  639. package/clis/juejin/whoami.js +1 -34
  640. package/clis/ke/auth.js +2 -34
  641. package/clis/ke/chengjiao.js +2 -35
  642. package/clis/ke/ershoufang.js +2 -53
  643. package/clis/ke/utils.js +4 -87
  644. package/clis/ke/xiaoqu.js +2 -35
  645. package/clis/ke/zufang.js +3 -48
  646. package/clis/kimi/_utils.js +9 -81
  647. package/clis/kimi/audit-extras.js +14 -218
  648. package/clis/kimi/auth.js +3 -43
  649. package/clis/kimi/chat.js +15 -408
  650. package/clis/kimi/storage.js +5 -160
  651. package/clis/kimi/ui.js +14 -239
  652. package/clis/kimi/usage.js +5 -98
  653. package/clis/kuaishou/auth.js +1 -0
  654. package/clis/kuaishou/publish.js +53 -0
  655. package/clis/lesswrong/_helpers.js +5 -71
  656. package/clis/lesswrong/comments.js +5 -61
  657. package/clis/lesswrong/curated.js +3 -29
  658. package/clis/lesswrong/frontpage.js +3 -29
  659. package/clis/lesswrong/new.js +3 -29
  660. package/clis/lesswrong/read.js +3 -44
  661. package/clis/lesswrong/sequences.js +3 -26
  662. package/clis/lesswrong/shortform.js +3 -29
  663. package/clis/lesswrong/tag.js +3 -44
  664. package/clis/lesswrong/tags.js +3 -26
  665. package/clis/lesswrong/top-month.js +3 -29
  666. package/clis/lesswrong/top-week.js +3 -29
  667. package/clis/lesswrong/top-year.js +3 -29
  668. package/clis/lesswrong/top.js +3 -29
  669. package/clis/lesswrong/user-posts.js +3 -40
  670. package/clis/lesswrong/user.js +3 -43
  671. package/clis/lichess/top.js +1 -46
  672. package/clis/lichess/user.js +1 -91
  673. package/clis/lichess/utils.js +1 -97
  674. package/clis/linkedin/auth.js +2 -37
  675. package/clis/linkedin/connect.js +11 -291
  676. package/clis/linkedin/inbox.js +1 -234
  677. package/clis/linkedin/job-detail.js +4 -167
  678. package/clis/linkedin/jobs-preferences.js +3 -82
  679. package/clis/linkedin/people-search.js +2 -301
  680. package/clis/linkedin/post-analytics.js +1 -74
  681. package/clis/linkedin/posts-core.js +2 -105
  682. package/clis/linkedin/posts.js +1 -22
  683. package/clis/linkedin/profile-analytics.js +2 -95
  684. package/clis/linkedin/profile-experience.js +6 -380
  685. package/clis/linkedin/profile-projects.js +4 -185
  686. package/clis/linkedin/profile-read.js +3 -90
  687. package/clis/linkedin/safe-send.js +8 -313
  688. package/clis/linkedin/salesnav-inbox.js +5 -194
  689. package/clis/linkedin/salesnav-message.js +10 -337
  690. package/clis/linkedin/salesnav-search.js +4 -175
  691. package/clis/linkedin/salesnav-thread.js +1 -212
  692. package/clis/linkedin/search.js +10 -371
  693. package/clis/linkedin/sent-invitations.js +2 -51
  694. package/clis/linkedin/services-read.js +6 -162
  695. package/clis/linkedin/shared.js +2 -116
  696. package/clis/linkedin/thread-snapshot.js +4 -130
  697. package/clis/linkedin/timeline.js +2 -110
  698. package/clis/linkedin-learning/auth.js +2 -37
  699. package/clis/linkedin-learning/course.js +4 -125
  700. package/clis/linkedin-learning/search.js +4 -142
  701. package/clis/linkedin-learning/trending.js +4 -120
  702. package/clis/linux-do/auth.js +2 -37
  703. package/clis/linux-do/categories.js +1 -50
  704. package/clis/linux-do/feed.js +4 -380
  705. package/clis/linux-do/search.js +1 -29
  706. package/clis/linux-do/tags.js +1 -28
  707. package/clis/linux-do/topic-content.js +9 -136
  708. package/clis/linux-do/topic.js +1 -53
  709. package/clis/linux-do/user-posts.js +1 -57
  710. package/clis/linux-do/user-topics.js +1 -37
  711. package/clis/lobsters/active.js +1 -29
  712. package/clis/lobsters/domain.js +1 -92
  713. package/clis/lobsters/hot.js +1 -29
  714. package/clis/lobsters/newest.js +1 -29
  715. package/clis/lobsters/read.js +11 -196
  716. package/clis/lobsters/tag.js +1 -35
  717. package/clis/maimai/auth.js +2 -30
  718. package/clis/maimai/search-talents.js +4 -159
  719. package/clis/manus/_utils.js +2 -107
  720. package/clis/manus/auth.js +2 -36
  721. package/clis/manus/connectors.js +3 -39
  722. package/clis/manus/credits.js +3 -38
  723. package/clis/manus/list.js +4 -63
  724. package/clis/manus/read.js +3 -59
  725. package/clis/manus/skills.js +3 -60
  726. package/clis/manus/status.js +3 -38
  727. package/clis/maven/artifact.js +1 -49
  728. package/clis/maven/search.js +1 -51
  729. package/clis/maven/utils.js +1 -110
  730. package/clis/mdn/search.js +1 -97
  731. package/clis/medium/article.js +12 -0
  732. package/clis/medium/feed.js +1 -16
  733. package/clis/medium/login.js +1 -0
  734. package/clis/medium/search.js +1 -16
  735. package/clis/medium/tag.js +1 -135
  736. package/clis/medium/user.js +1 -16
  737. package/clis/medium/utils.js +3 -20
  738. package/clis/medium/whoami.js +1 -0
  739. package/clis/mubu/doc.js +1 -41
  740. package/clis/mubu/docs.js +1 -44
  741. package/clis/mubu/notes.js +1 -245
  742. package/clis/mubu/recent.js +1 -28
  743. package/clis/mubu/search.js +1 -63
  744. package/clis/mubu/utils.js +16 -289
  745. package/clis/note/auth.js +12 -0
  746. package/clis/note/note-utils.js +2 -0
  747. package/clis/note/publish.js +17 -0
  748. package/clis/notebooklm/add-source.js +8 -231
  749. package/clis/notebooklm/auth.js +2 -36
  750. package/clis/notebooklm/create.js +1 -76
  751. package/clis/notebooklm/current.js +1 -28
  752. package/clis/notebooklm/generate-audio.js +1 -91
  753. package/clis/notebooklm/generate-slides.js +1 -106
  754. package/clis/notebooklm/get.js +1 -37
  755. package/clis/notebooklm/history.js +1 -25
  756. package/clis/notebooklm/list.js +1 -36
  757. package/clis/notebooklm/note-list.js +1 -28
  758. package/clis/notebooklm/notes-get.js +1 -47
  759. package/clis/notebooklm/open.js +1 -42
  760. package/clis/notebooklm/rpc.js +8 -175
  761. package/clis/notebooklm/shared.js +1 -3
  762. package/clis/notebooklm/source-fulltext.js +1 -44
  763. package/clis/notebooklm/source-get.js +1 -40
  764. package/clis/notebooklm/source-guide.js +1 -44
  765. package/clis/notebooklm/source-list.js +1 -30
  766. package/clis/notebooklm/status.js +1 -31
  767. package/clis/notebooklm/summary.js +1 -30
  768. package/clis/notebooklm/utils.js +10 -652
  769. package/clis/notebooklm/write-note.js +1 -103
  770. package/clis/nowcoder/auth.js +2 -43
  771. package/clis/nowcoder/comment.js +1 -0
  772. package/clis/nowcoder/comments.js +1 -0
  773. package/clis/nowcoder/companies.js +1 -24
  774. package/clis/nowcoder/creators.js +1 -28
  775. package/clis/nowcoder/delete.js +1 -0
  776. package/clis/nowcoder/detail.js +2 -18
  777. package/clis/nowcoder/dm-list.js +1 -0
  778. package/clis/nowcoder/dm-read.js +1 -0
  779. package/clis/nowcoder/dm-send.js +1 -0
  780. package/clis/nowcoder/drafts.js +1 -0
  781. package/clis/nowcoder/experience.js +2 -21
  782. package/clis/nowcoder/hot.js +1 -25
  783. package/clis/nowcoder/inbox.js +1 -0
  784. package/clis/nowcoder/jobs.js +1 -22
  785. package/clis/nowcoder/like.js +1 -0
  786. package/clis/nowcoder/my.js +1 -0
  787. package/clis/nowcoder/notifications.js +2 -16
  788. package/clis/nowcoder/papers.js +2 -21
  789. package/clis/nowcoder/post.js +1 -0
  790. package/clis/nowcoder/practice.js +2 -19
  791. package/clis/nowcoder/recommend.js +1 -31
  792. package/clis/nowcoder/referral.js +2 -21
  793. package/clis/nowcoder/salary.js +2 -21
  794. package/clis/nowcoder/search.js +2 -21
  795. package/clis/nowcoder/suggest.js +2 -19
  796. package/clis/nowcoder/topics.js +1 -28
  797. package/clis/nowcoder/trending.js +1 -26
  798. package/clis/nowcoder/utils.js +68 -0
  799. package/clis/npm/downloads.js +1 -59
  800. package/clis/npm/package.js +1 -70
  801. package/clis/npm/search.js +1 -49
  802. package/clis/npm/utils.js +1 -76
  803. package/clis/nuget/package.js +1 -101
  804. package/clis/nuget/search.js +1 -69
  805. package/clis/nuget/utils.js +1 -87
  806. package/clis/nvd/cve.js +1 -121
  807. package/clis/oeis/search.js +1 -63
  808. package/clis/oeis/sequence.js +1 -71
  809. package/clis/oeis/utils.js +1 -88
  810. package/clis/ones/common.js +6 -127
  811. package/clis/ones/enrich-tasks.js +1 -37
  812. package/clis/ones/login.js +2 -81
  813. package/clis/ones/logout.js +1 -18
  814. package/clis/ones/me.js +1 -31
  815. package/clis/ones/my-tasks.js +1 -121
  816. package/clis/ones/resolve-labels.js +1 -64
  817. package/clis/ones/task-helpers.js +1 -212
  818. package/clis/ones/task.js +1 -67
  819. package/clis/ones/tasks.js +1 -80
  820. package/clis/ones/token-info.js +1 -43
  821. package/clis/ones/worklog.js +7 -261
  822. package/clis/openalex/search.js +1 -69
  823. package/clis/openalex/utils.js +1 -160
  824. package/clis/openalex/work.js +1 -65
  825. package/clis/openfda/drug-label.js +1 -74
  826. package/clis/openfda/food-recall.js +1 -65
  827. package/clis/openfda/utils.js +1 -67
  828. package/clis/openreview/author.js +1 -58
  829. package/clis/openreview/paper.js +1 -43
  830. package/clis/openreview/reviews.js +3 -130
  831. package/clis/openreview/search.js +1 -46
  832. package/clis/openreview/utils.js +1 -172
  833. package/clis/openreview/venue.js +1 -63
  834. package/clis/oschina/article.js +1 -237
  835. package/clis/oschina/catalogs.js +1 -31
  836. package/clis/oschina/login.js +1 -16
  837. package/clis/oschina/stats.js +54 -0
  838. package/clis/oschina/whoami.js +1 -35
  839. package/clis/osv/query.js +1 -72
  840. package/clis/osv/utils.js +1 -169
  841. package/clis/osv/vulnerability.js +1 -54
  842. package/clis/packagist/package.js +1 -49
  843. package/clis/packagist/search.js +1 -43
  844. package/clis/packagist/utils.js +1 -113
  845. package/clis/paperreview/feedback.js +1 -53
  846. package/clis/paperreview/review.js +1 -38
  847. package/clis/paperreview/submit.js +1 -86
  848. package/clis/paperreview/utils.js +1 -197
  849. package/clis/pinterest/api.js +1 -0
  850. package/clis/pinterest/auth.js +1 -0
  851. package/clis/pinterest/boards.js +1 -0
  852. package/clis/pinterest/client.js +20 -0
  853. package/clis/pinterest/publish.js +13 -0
  854. package/clis/pixiv/auth.js +2 -40
  855. package/clis/pixiv/detail.js +1 -66
  856. package/clis/pixiv/download.js +1 -82
  857. package/clis/pixiv/illusts.js +1 -66
  858. package/clis/pixiv/ranking.js +2 -36
  859. package/clis/pixiv/search.js +1 -44
  860. package/clis/pixiv/user.js +1 -59
  861. package/clis/pixiv/utils.js +3 -83
  862. package/clis/powerchina/auth.js +2 -37
  863. package/clis/powerchina/search.js +1 -251
  864. package/clis/producthunt/browse.js +2 -48
  865. package/clis/producthunt/hot.js +2 -49
  866. package/clis/producthunt/posts.js +1 -29
  867. package/clis/producthunt/today.js +1 -36
  868. package/clis/producthunt/utils.js +1 -99
  869. package/clis/pubmed/article.js +1 -55
  870. package/clis/pubmed/author.js +1 -64
  871. package/clis/pubmed/citations.js +1 -36
  872. package/clis/pubmed/clinical-trial.js +1 -59
  873. package/clis/pubmed/journal.js +1 -59
  874. package/clis/pubmed/mesh.js +1 -47
  875. package/clis/pubmed/related.js +1 -45
  876. package/clis/pubmed/review.js +1 -58
  877. package/clis/pubmed/search.js +1 -75
  878. package/clis/pubmed/utils.js +1 -325
  879. package/clis/pypi/downloads.js +1 -66
  880. package/clis/pypi/package.js +1 -79
  881. package/clis/pypi/utils.js +1 -55
  882. package/clis/qiita/auth.js +1 -0
  883. package/clis/qiita/gql.js +32 -0
  884. package/clis/qiita/publish.js +7 -0
  885. package/clis/qoder/_utils.js +18 -96
  886. package/clis/qoder/composer.js +1 -45
  887. package/clis/qoder/history.js +3 -27
  888. package/clis/qoder/quest.js +1 -147
  889. package/clis/qoder/read.js +1 -29
  890. package/clis/qoder/status.js +1 -21
  891. package/clis/qoder/ui.js +14 -287
  892. package/clis/quark/auth.js +2 -33
  893. package/clis/quark/ls.js +1 -64
  894. package/clis/quark/mkdir.js +1 -37
  895. package/clis/quark/mv.js +1 -54
  896. package/clis/quark/rename.js +1 -27
  897. package/clis/quark/rm.js +1 -25
  898. package/clis/quark/save.js +1 -81
  899. package/clis/quark/share-tree.js +1 -46
  900. package/clis/quark/utils.js +4 -137
  901. package/clis/qwen/ask.js +1 -104
  902. package/clis/qwen/auth.js +3 -42
  903. package/clis/qwen/detail.js +1 -62
  904. package/clis/qwen/history.js +1 -61
  905. package/clis/qwen/image.js +5 -153
  906. package/clis/qwen/new.js +1 -23
  907. package/clis/qwen/read.js +1 -41
  908. package/clis/qwen/send.js +1 -55
  909. package/clis/qwen/status.js +1 -37
  910. package/clis/qwen/utils.js +16 -292
  911. package/clis/reddit/auth.js +2 -37
  912. package/clis/reddit/comment.js +4 -26
  913. package/clis/reddit/frontpage.js +2 -32
  914. package/clis/reddit/home.js +3 -117
  915. package/clis/reddit/hot.js +2 -37
  916. package/clis/reddit/popular.js +2 -35
  917. package/clis/reddit/read.js +10 -200
  918. package/clis/reddit/reply.js +4 -130
  919. package/clis/reddit/save.js +4 -26
  920. package/clis/reddit/saved.js +3 -29
  921. package/clis/reddit/search.js +2 -53
  922. package/clis/reddit/subreddit-info.js +3 -90
  923. package/clis/reddit/subreddit.js +2 -47
  924. package/clis/reddit/subscribe.js +4 -26
  925. package/clis/reddit/subscribed.js +4 -101
  926. package/clis/reddit/upvote.js +4 -26
  927. package/clis/reddit/upvoted.js +3 -29
  928. package/clis/reddit/user-comments.js +2 -27
  929. package/clis/reddit/user-posts.js +2 -28
  930. package/clis/reddit/user.js +2 -20
  931. package/clis/reddit/whoami.js +2 -66
  932. package/clis/rednote/auth.js +2 -35
  933. package/clis/rednote/comments.js +1 -85
  934. package/clis/rednote/download.js +1 -59
  935. package/clis/rednote/feed.js +1 -27
  936. package/clis/rednote/note.js +1 -68
  937. package/clis/rednote/notifications.js +3 -75
  938. package/clis/rednote/search.js +2 -77
  939. package/clis/rednote/user.js +1 -55
  940. package/clis/rest-countries/country.js +1 -65
  941. package/clis/rest-countries/region.js +1 -64
  942. package/clis/rest-countries/utils.js +1 -126
  943. package/clis/reuters/article-detail.js +1 -53
  944. package/clis/reuters/auth.js +3 -31
  945. package/clis/reuters/search.js +1 -63
  946. package/clis/reuters/utils.js +5 -114
  947. package/clis/rfc/rfc.js +1 -52
  948. package/clis/rfc/utils.js +1 -72
  949. package/clis/rubygems/gem.js +1 -42
  950. package/clis/rubygems/search.js +1 -47
  951. package/clis/rubygems/utils.js +1 -86
  952. package/clis/segmentfault/_signed-request.js +43 -0
  953. package/clis/segmentfault/article.js +3 -406
  954. package/clis/segmentfault/channels.js +1 -64
  955. package/clis/segmentfault/login.js +1 -15
  956. package/clis/segmentfault/stats.js +82 -0
  957. package/clis/segmentfault/tags.js +1 -67
  958. package/clis/segmentfault/whoami.js +1 -53
  959. package/clis/semanticscholar/citations.js +1 -61
  960. package/clis/semanticscholar/paper.js +1 -52
  961. package/clis/semanticscholar/recommendations.js +1 -47
  962. package/clis/semanticscholar/search.js +1 -48
  963. package/clis/semanticscholar/utils.js +1 -196
  964. package/clis/sinablog/article.js +1 -15
  965. package/clis/sinablog/hot.js +1 -15
  966. package/clis/sinablog/search.js +1 -52
  967. package/clis/sinablog/user.js +1 -16
  968. package/clis/sinablog/utils.js +9 -42
  969. package/clis/sinafinance/news.js +1 -62
  970. package/clis/sinafinance/rolling-news.js +2 -23
  971. package/clis/sinafinance/stock-rank.js +3 -28
  972. package/clis/sinafinance/stock.js +1 -121
  973. package/clis/slock/attachment-download.js +1 -72
  974. package/clis/slock/attachment-upload.js +7 -85
  975. package/clis/slock/attachment-url.js +1 -53
  976. package/clis/slock/auth-verify.js +1 -19
  977. package/clis/slock/bookmark-add.js +5 -37
  978. package/clis/slock/bookmark-list.js +4 -44
  979. package/clis/slock/bookmark-remove.js +4 -39
  980. package/clis/slock/channel-action.js +1 -63
  981. package/clis/slock/channel-archive.js +1 -9
  982. package/clis/slock/channel-create.js +1 -48
  983. package/clis/slock/channel-files.js +1 -51
  984. package/clis/slock/channel-info.js +1 -42
  985. package/clis/slock/channel-join.js +1 -9
  986. package/clis/slock/channel-leave.js +1 -9
  987. package/clis/slock/channel-list.js +1 -40
  988. package/clis/slock/channel-mark.js +1 -71
  989. package/clis/slock/channel-members.js +1 -64
  990. package/clis/slock/channel-unarchive.js +1 -11
  991. package/clis/slock/dm-list.js +1 -41
  992. package/clis/slock/errors.js +1 -30
  993. package/clis/slock/in-page.js +30 -130
  994. package/clis/slock/inbox-done.js +5 -36
  995. package/clis/slock/inbox-read-all.js +1 -32
  996. package/clis/slock/inbox.js +1 -74
  997. package/clis/slock/login.js +1 -3
  998. package/clis/slock/message-read.js +24 -131
  999. package/clis/slock/message-search.js +10 -58
  1000. package/clis/slock/message-send.js +25 -119
  1001. package/clis/slock/reaction-add.js +1 -42
  1002. package/clis/slock/reaction-remove.js +1 -42
  1003. package/clis/slock/resolve.js +1 -74
  1004. package/clis/slock/server-list.js +3 -32
  1005. package/clis/slock/server-use.js +6 -41
  1006. package/clis/slock/shared.js +1 -14
  1007. package/clis/slock/task-claim.js +4 -62
  1008. package/clis/slock/task-convert.js +13 -84
  1009. package/clis/slock/task-create.js +6 -64
  1010. package/clis/slock/task-delete.js +5 -51
  1011. package/clis/slock/task-get.js +6 -54
  1012. package/clis/slock/task-list-server.js +5 -56
  1013. package/clis/slock/task-list.js +6 -62
  1014. package/clis/slock/task-status.js +6 -80
  1015. package/clis/slock/task-unclaim.js +4 -57
  1016. package/clis/slock/thread-done.js +1 -9
  1017. package/clis/slock/thread-follow.js +1 -46
  1018. package/clis/slock/thread-list.js +1 -44
  1019. package/clis/slock/thread-state.js +1 -45
  1020. package/clis/slock/thread-undone.js +1 -9
  1021. package/clis/slock/thread-unfollow.js +1 -9
  1022. package/clis/slock/unread-summary.js +5 -36
  1023. package/clis/slock/whoami.js +1 -12
  1024. package/clis/smzdm/search.js +3 -81
  1025. package/clis/sohu/article.js +1 -501
  1026. package/clis/sohu/attributes.js +1 -36
  1027. package/clis/sohu/categories.js +1 -48
  1028. package/clis/sohu/channels.js +1 -34
  1029. package/clis/sohu/columns.js +1 -36
  1030. package/clis/sohu/login.js +1 -15
  1031. package/clis/sohu/stats.js +95 -0
  1032. package/clis/sohu/topics.js +1 -50
  1033. package/clis/sohu/whoami.js +1 -27
  1034. package/clis/spotify/spotify.js +1 -327
  1035. package/clis/spotify/utils.js +8 -66
  1036. package/clis/stackoverflow/bounties.js +1 -35
  1037. package/clis/stackoverflow/hot.js +1 -32
  1038. package/clis/stackoverflow/read.js +10 -311
  1039. package/clis/stackoverflow/related.js +1 -66
  1040. package/clis/stackoverflow/search.js +1 -35
  1041. package/clis/stackoverflow/tag.js +1 -60
  1042. package/clis/stackoverflow/unanswered.js +1 -33
  1043. package/clis/stackoverflow/user.js +1 -50
  1044. package/clis/stackoverflow/utils.js +1 -118
  1045. package/clis/steam/app.js +1 -67
  1046. package/clis/steam/search.js +1 -58
  1047. package/clis/steam/top-sellers.js +1 -26
  1048. package/clis/steam/utils.js +1 -107
  1049. package/clis/substack/auth.js +11 -0
  1050. package/clis/substack/feed.js +1 -16
  1051. package/clis/substack/post-utils.js +2 -0
  1052. package/clis/substack/publication.js +1 -16
  1053. package/clis/substack/publish.js +10 -0
  1054. package/clis/substack/search.js +1 -79
  1055. package/clis/substack/utils.js +6 -34
  1056. package/clis/suno/auth.js +2 -40
  1057. package/clis/suno/download.js +5 -128
  1058. package/clis/suno/generate.js +4 -231
  1059. package/clis/suno/list.js +4 -69
  1060. package/clis/suno/status.js +1 -63
  1061. package/clis/suno/utils.js +29 -476
  1062. package/clis/taobao/add-cart.js +6 -63
  1063. package/clis/taobao/auth.js +3 -53
  1064. package/clis/taobao/cart.js +3 -31
  1065. package/clis/taobao/detail.js +5 -28
  1066. package/clis/taobao/reviews.js +4 -29
  1067. package/clis/taobao/search.js +3 -36
  1068. package/clis/tdx/hot-rank.js +2 -25
  1069. package/clis/test-utils.js +1 -61
  1070. package/clis/ths/hot-rank.js +2 -25
  1071. package/clis/tieba/hot.js +3 -35
  1072. package/clis/tieba/posts.js +1 -86
  1073. package/clis/tieba/read.js +2 -59
  1074. package/clis/tieba/search.js +3 -58
  1075. package/clis/tieba/utils.js +1 -240
  1076. package/clis/tiktok/auth.js +2 -37
  1077. package/clis/tiktok/comment.js +5 -81
  1078. package/clis/tiktok/creator-videos.js +3 -228
  1079. package/clis/tiktok/explore.js +8 -76
  1080. package/clis/tiktok/follow.js +8 -81
  1081. package/clis/tiktok/following.js +8 -76
  1082. package/clis/tiktok/friends.js +8 -75
  1083. package/clis/tiktok/like.js +2 -17
  1084. package/clis/tiktok/live.js +7 -72
  1085. package/clis/tiktok/notifications.js +10 -86
  1086. package/clis/tiktok/profile.js +2 -31
  1087. package/clis/tiktok/publish.js +82 -0
  1088. package/clis/tiktok/save.js +2 -17
  1089. package/clis/tiktok/search.js +2 -18
  1090. package/clis/tiktok/unfollow.js +7 -79
  1091. package/clis/tiktok/unlike.js +2 -17
  1092. package/clis/tiktok/unsave.js +2 -17
  1093. package/clis/tiktok/user.js +9 -82
  1094. package/clis/tiktok/utils.js +7 -240
  1095. package/clis/toutiao/article.js +1 -0
  1096. package/clis/toutiao/articles.js +2 -51
  1097. package/clis/toutiao/auth.js +2 -35
  1098. package/clis/toutiao/hot.js +1 -63
  1099. package/clis/toutiao/utils.js +2 -161
  1100. package/clis/trae-cn/activity.js +1 -22
  1101. package/clis/trae-cn/approve.js +1 -52
  1102. package/clis/trae-cn/ask.js +1 -99
  1103. package/clis/trae-cn/dump.js +1 -5
  1104. package/clis/trae-cn/export.js +3 -40
  1105. package/clis/trae-cn/model.js +1 -22
  1106. package/clis/trae-cn/new.js +1 -63
  1107. package/clis/trae-cn/read.js +1 -23
  1108. package/clis/trae-cn/screenshot.js +1 -5
  1109. package/clis/trae-cn/select-model.js +1 -25
  1110. package/clis/trae-cn/send.js +1 -23
  1111. package/clis/trae-cn/setup.js +1 -75
  1112. package/clis/trae-cn/status.js +1 -27
  1113. package/clis/trae-cn/targets.js +1 -96
  1114. package/clis/trae-cn/utils.js +24 -318
  1115. package/clis/trae-cn/watch.js +3 -119
  1116. package/clis/trae-solo/_actions.js +5 -24
  1117. package/clis/trae-solo/_fs.js +6 -118
  1118. package/clis/trae-solo/_state.js +2 -111
  1119. package/clis/trae-solo/automation.js +4 -58
  1120. package/clis/trae-solo/history.js +2 -41
  1121. package/clis/trae-solo/mode.js +4 -54
  1122. package/clis/trae-solo/model.js +4 -88
  1123. package/clis/trae-solo/renderer-storage.js +4 -163
  1124. package/clis/trae-solo/settings.js +1 -54
  1125. package/clis/trae-solo/skill-fs.js +1 -123
  1126. package/clis/trae-solo/skill.js +12 -151
  1127. package/clis/trae-solo/state-fs.js +2 -156
  1128. package/clis/trae-solo/status.js +1 -2
  1129. package/clis/trae-solo/task-fs.js +5 -181
  1130. package/clis/trae-solo/user-rules.js +1 -29
  1131. package/clis/trae-solo/workspaces-fs.js +1 -113
  1132. package/clis/tumblr/auth.js +24 -0
  1133. package/clis/tumblr/publish.js +14 -0
  1134. package/clis/tvmaze/search.js +1 -61
  1135. package/clis/tvmaze/show.js +1 -60
  1136. package/clis/tvmaze/utils.js +1 -110
  1137. package/clis/twitter/accept.js +7 -95
  1138. package/clis/twitter/article.js +7 -61
  1139. package/clis/twitter/auth.js +2 -39
  1140. package/clis/twitter/block.js +4 -32
  1141. package/clis/twitter/bookmark-folder.js +3 -189
  1142. package/clis/twitter/bookmark-folders.js +3 -113
  1143. package/clis/twitter/bookmark.js +3 -33
  1144. package/clis/twitter/bookmarks.js +4 -158
  1145. package/clis/twitter/delete.js +5 -123
  1146. package/clis/twitter/device-follow.js +3 -184
  1147. package/clis/twitter/dm-list.js +1 -0
  1148. package/clis/twitter/dm-read.js +1 -0
  1149. package/clis/twitter/dm-send.js +13 -0
  1150. package/clis/twitter/dm-shared.js +6 -0
  1151. package/clis/twitter/download.js +6 -449
  1152. package/clis/twitter/follow-batch.js +5 -124
  1153. package/clis/twitter/follow.js +4 -32
  1154. package/clis/twitter/followers.js +5 -139
  1155. package/clis/twitter/following.js +2 -272
  1156. package/clis/twitter/hide-reply.js +3 -33
  1157. package/clis/twitter/like.js +3 -35
  1158. package/clis/twitter/likes.js +8 -235
  1159. package/clis/twitter/list-add-batch.js +1 -32
  1160. package/clis/twitter/list-add-core.js +9 -219
  1161. package/clis/twitter/list-add.js +1 -20
  1162. package/clis/twitter/list-batch-utils.js +1 -95
  1163. package/clis/twitter/list-create.js +5 -148
  1164. package/clis/twitter/list-delete.js +4 -126
  1165. package/clis/twitter/list-remove-batch.js +1 -32
  1166. package/clis/twitter/list-remove-core.js +9 -173
  1167. package/clis/twitter/list-remove.js +1 -20
  1168. package/clis/twitter/list-tweets.js +7 -179
  1169. package/clis/twitter/lists.js +6 -157
  1170. package/clis/twitter/notifications.js +2 -126
  1171. package/clis/twitter/post.js +32 -357
  1172. package/clis/twitter/profile.js +7 -115
  1173. package/clis/twitter/quote.js +7 -118
  1174. package/clis/twitter/reply-dm.js +7 -78
  1175. package/clis/twitter/reply.js +12 -167
  1176. package/clis/twitter/retweet.js +3 -35
  1177. package/clis/twitter/schedule.js +11 -167
  1178. package/clis/twitter/scheduled-delete.js +3 -48
  1179. package/clis/twitter/scheduled-list.js +2 -30
  1180. package/clis/twitter/scheduled-utils.js +3 -17
  1181. package/clis/twitter/search.js +5 -339
  1182. package/clis/twitter/shared.js +6 -494
  1183. package/clis/twitter/thread.js +4 -164
  1184. package/clis/twitter/timeline.js +3 -210
  1185. package/clis/twitter/trending.js +2 -42
  1186. package/clis/twitter/tweets.js +6 -341
  1187. package/clis/twitter/unblock.js +4 -32
  1188. package/clis/twitter/unbookmark.js +3 -33
  1189. package/clis/twitter/unfollow.js +4 -32
  1190. package/clis/twitter/unlike.js +3 -35
  1191. package/clis/twitter/unretweet.js +3 -35
  1192. package/clis/twitter/utils.js +11 -279
  1193. package/clis/uisdc/news.js +2 -82
  1194. package/clis/uiverse/_shared.js +11 -181
  1195. package/clis/uiverse/code.js +1 -49
  1196. package/clis/uiverse/preview.js +1 -73
  1197. package/clis/upwork/auth.js +2 -36
  1198. package/clis/upwork/detail.js +2 -112
  1199. package/clis/upwork/feed.js +3 -91
  1200. package/clis/upwork/search.js +2 -96
  1201. package/clis/upwork/utils.js +1 -323
  1202. package/clis/v2ex/auth.js +2 -36
  1203. package/clis/v2ex/daily.js +3 -61
  1204. package/clis/v2ex/hot.js +1 -26
  1205. package/clis/v2ex/latest.js +1 -26
  1206. package/clis/v2ex/me.js +2 -44
  1207. package/clis/v2ex/member.js +1 -28
  1208. package/clis/v2ex/node.js +1 -39
  1209. package/clis/v2ex/nodes.js +1 -26
  1210. package/clis/v2ex/notifications.js +2 -34
  1211. package/clis/v2ex/replies.js +1 -27
  1212. package/clis/v2ex/topic.js +1 -31
  1213. package/clis/v2ex/user.js +1 -34
  1214. package/clis/wanfang/search.js +4 -28
  1215. package/clis/web/read.js +9 -240
  1216. package/clis/wechat-channels/auth.js +2 -47
  1217. package/clis/wechat-channels/publish.js +37 -534
  1218. package/clis/weibo/article.js +1 -0
  1219. package/clis/weibo/auth.js +3 -39
  1220. package/clis/weibo/comments.js +4 -29
  1221. package/clis/weibo/delete.js +3 -91
  1222. package/clis/weibo/favorites.js +8 -151
  1223. package/clis/weibo/feed.js +5 -41
  1224. package/clis/weibo/hot.js +2 -24
  1225. package/clis/weibo/me.js +3 -27
  1226. package/clis/weibo/post.js +3 -32
  1227. package/clis/weibo/publish.js +10 -244
  1228. package/clis/weibo/search.js +2 -35
  1229. package/clis/weibo/user-posts.js +7 -149
  1230. package/clis/weibo/user.js +3 -29
  1231. package/clis/weibo/utils.js +3 -46
  1232. package/clis/weixin/article.js +1 -332
  1233. package/clis/weixin/create-draft.js +26 -226
  1234. package/clis/weixin/download.js +2 -273
  1235. package/clis/weixin/drafts.js +2 -41
  1236. package/clis/weixin/login.js +1 -0
  1237. package/clis/weixin/search.js +2 -115
  1238. package/clis/weixin/stats.js +43 -0
  1239. package/clis/weixin/whoami.js +1 -26
  1240. package/clis/weread/ai-outline.js +2 -171
  1241. package/clis/weread/auth.js +2 -37
  1242. package/clis/weread/book-search.js +2 -438
  1243. package/clis/weread/book.js +2 -232
  1244. package/clis/weread/highlights.js +1 -24
  1245. package/clis/weread/notebooks.js +1 -22
  1246. package/clis/weread/notes.js +1 -30
  1247. package/clis/weread/ranking.js +1 -29
  1248. package/clis/weread/search.js +1 -186
  1249. package/clis/weread/shelf.js +1 -66
  1250. package/clis/weread/utils.js +6 -260
  1251. package/clis/weread-official/book.js +1 -135
  1252. package/clis/weread-official/discover.js +1 -107
  1253. package/clis/weread-official/list-apis.js +1 -95
  1254. package/clis/weread-official/notes.js +1 -171
  1255. package/clis/weread-official/readdata.js +1 -158
  1256. package/clis/weread-official/review.js +1 -93
  1257. package/clis/weread-official/search.js +1 -106
  1258. package/clis/weread-official/shelf.js +1 -97
  1259. package/clis/weread-official/utils.js +1 -293
  1260. package/clis/wikidata/entity.js +1 -60
  1261. package/clis/wikidata/search.js +1 -50
  1262. package/clis/wikidata/utils.js +1 -117
  1263. package/clis/wikipedia/page.js +2 -94
  1264. package/clis/wikipedia/random.js +1 -20
  1265. package/clis/wikipedia/search.js +1 -31
  1266. package/clis/wikipedia/summary.js +1 -24
  1267. package/clis/wikipedia/trending.js +1 -40
  1268. package/clis/wikipedia/utils.js +1 -31
  1269. package/clis/wordpress/publish.js +1 -0
  1270. package/clis/wordpress/shared.js +1 -0
  1271. package/clis/wordpress/whoami.js +1 -0
  1272. package/clis/woshipm/article.js +1 -301
  1273. package/clis/woshipm/login.js +1 -15
  1274. package/clis/woshipm/stats.js +52 -0
  1275. package/clis/woshipm/whoami.js +1 -34
  1276. package/clis/wttr/current.js +1 -63
  1277. package/clis/wttr/forecast.js +1 -71
  1278. package/clis/wttr/utils.js +1 -50
  1279. package/clis/xianyu/auth.js +2 -59
  1280. package/clis/xianyu/chat.js +1 -74
  1281. package/clis/xianyu/im.js +13 -95
  1282. package/clis/xianyu/inbox.js +1 -96
  1283. package/clis/xianyu/item.js +5 -61
  1284. package/clis/xianyu/messages.js +1 -91
  1285. package/clis/xianyu/publish.js +19 -299
  1286. package/clis/xianyu/reply.js +1 -82
  1287. package/clis/xianyu/search.js +8 -129
  1288. package/clis/xianyu/utils.js +1 -8
  1289. package/clis/xiaoe/auth.js +2 -47
  1290. package/clis/xiaoe/catalog.js +2 -95
  1291. package/clis/xiaoe/content.js +2 -161
  1292. package/clis/xiaoe/courses.js +2 -86
  1293. package/clis/xiaoe/detail.js +2 -19
  1294. package/clis/xiaoe/play-url.js +2 -26
  1295. package/clis/xiaohongshu/ask.js +8 -304
  1296. package/clis/xiaohongshu/auth.js +2 -42
  1297. package/clis/xiaohongshu/collection-helpers.js +5 -224
  1298. package/clis/xiaohongshu/comments.js +5 -144
  1299. package/clis/xiaohongshu/creator-note-detail.js +7 -409
  1300. package/clis/xiaohongshu/creator-notes-summary.js +1 -98
  1301. package/clis/xiaohongshu/creator-notes.js +13 -385
  1302. package/clis/xiaohongshu/creator-profile.js +2 -44
  1303. package/clis/xiaohongshu/creator-stats.js +2 -65
  1304. package/clis/xiaohongshu/delete-note.js +7 -207
  1305. package/clis/xiaohongshu/download.js +4 -71
  1306. package/clis/xiaohongshu/draft-clear.js +5 -52
  1307. package/clis/xiaohongshu/draft-delete.js +9 -75
  1308. package/clis/xiaohongshu/draft-open.js +1 -43
  1309. package/clis/xiaohongshu/draft-utils.js +5 -111
  1310. package/clis/xiaohongshu/drafts.js +1 -28
  1311. package/clis/xiaohongshu/feed.js +2 -127
  1312. package/clis/xiaohongshu/follow.js +3 -154
  1313. package/clis/xiaohongshu/liked.js +1 -29
  1314. package/clis/xiaohongshu/note-helpers.js +1 -69
  1315. package/clis/xiaohongshu/note.js +2 -74
  1316. package/clis/xiaohongshu/notifications.js +1 -46
  1317. package/clis/xiaohongshu/publish-video.js +87 -0
  1318. package/clis/xiaohongshu/publish.js +54 -910
  1319. package/clis/xiaohongshu/saved.js +1 -29
  1320. package/clis/xiaohongshu/search.js +8 -194
  1321. package/clis/xiaohongshu/unfollow.js +5 -192
  1322. package/clis/xiaohongshu/user-helpers.js +1 -78
  1323. package/clis/xiaohongshu/user.js +2 -112
  1324. package/clis/xiaoyuzhou/auth.js +3 -303
  1325. package/clis/xiaoyuzhou/download.js +1 -54
  1326. package/clis/xiaoyuzhou/episode.js +1 -34
  1327. package/clis/xiaoyuzhou/podcast-episodes.js +1 -41
  1328. package/clis/xiaoyuzhou/podcast.js +1 -33
  1329. package/clis/xiaoyuzhou/transcript.js +1 -77
  1330. package/clis/xiaoyuzhou/utils.js +1 -15
  1331. package/clis/xueqiu/article.js +4 -388
  1332. package/clis/xueqiu/auth.js +2 -38
  1333. package/clis/xueqiu/comments.js +4 -321
  1334. package/clis/xueqiu/danjuan-utils.js +4 -46
  1335. package/clis/xueqiu/earnings-date.js +1 -45
  1336. package/clis/xueqiu/events.js +17 -58
  1337. package/clis/xueqiu/feed.js +1 -39
  1338. package/clis/xueqiu/fund-holdings.js +1 -29
  1339. package/clis/xueqiu/fund-snapshot.js +1 -26
  1340. package/clis/xueqiu/groups.js +1 -23
  1341. package/clis/xueqiu/hashtags.js +26 -71
  1342. package/clis/xueqiu/hot-stock.js +1 -32
  1343. package/clis/xueqiu/hot.js +1 -37
  1344. package/clis/xueqiu/kline.js +1 -44
  1345. package/clis/xueqiu/search.js +1 -37
  1346. package/clis/xueqiu/stock.js +1 -65
  1347. package/clis/xueqiu/stocks.js +13 -49
  1348. package/clis/xueqiu/users.js +12 -48
  1349. package/clis/xueqiu/utils.js +3 -42
  1350. package/clis/xueqiu/watchlist.js +1 -37
  1351. package/clis/yahoo/search.js +3 -74
  1352. package/clis/yahoo-finance/quote.js +3 -27
  1353. package/clis/yollomi/background.js +1 -46
  1354. package/clis/yollomi/edit.js +1 -57
  1355. package/clis/yollomi/face-swap.js +1 -44
  1356. package/clis/yollomi/generate.js +1 -101
  1357. package/clis/yollomi/models.js +1 -34
  1358. package/clis/yollomi/object-remover.js +1 -43
  1359. package/clis/yollomi/remove-bg.js +1 -39
  1360. package/clis/yollomi/restore.js +1 -39
  1361. package/clis/yollomi/try-on.js +1 -47
  1362. package/clis/yollomi/upload.js +4 -59
  1363. package/clis/yollomi/upscale.js +1 -54
  1364. package/clis/yollomi/utils.js +4 -168
  1365. package/clis/yollomi/video.js +1 -57
  1366. package/clis/youdao/note.js +5 -150
  1367. package/clis/youtube/auth.js +2 -36
  1368. package/clis/youtube/channel.js +4 -113
  1369. package/clis/youtube/comments.js +4 -36
  1370. package/clis/youtube/feed.js +3 -35
  1371. package/clis/youtube/history.js +3 -35
  1372. package/clis/youtube/like.js +5 -39
  1373. package/clis/youtube/playlist.js +7 -58
  1374. package/clis/youtube/publish.js +56 -0
  1375. package/clis/youtube/search.js +3 -64
  1376. package/clis/youtube/subscribe.js +7 -41
  1377. package/clis/youtube/subscriptions.js +4 -36
  1378. package/clis/youtube/transcript-group.js +2 -226
  1379. package/clis/youtube/transcript.js +13 -252
  1380. package/clis/youtube/unlike.js +5 -39
  1381. package/clis/youtube/unsubscribe.js +7 -41
  1382. package/clis/youtube/utils.js +4 -190
  1383. package/clis/youtube/video.js +4 -60
  1384. package/clis/youtube/watch-later.js +6 -42
  1385. package/clis/yuanbao/ask.js +25 -242
  1386. package/clis/yuanbao/auth.js +2 -38
  1387. package/clis/yuanbao/detail.js +1 -65
  1388. package/clis/yuanbao/history.js +1 -51
  1389. package/clis/yuanbao/new.js +4 -60
  1390. package/clis/yuanbao/read.js +1 -38
  1391. package/clis/yuanbao/send.js +1 -57
  1392. package/clis/yuanbao/shared.js +10 -224
  1393. package/clis/yuanbao/status.js +1 -44
  1394. package/clis/yuque/article.js +1 -293
  1395. package/clis/yuque/whoami.js +1 -60
  1396. package/clis/zhihu/answer-comments.js +3 -272
  1397. package/clis/zhihu/answer-detail.js +3 -208
  1398. package/clis/zhihu/answer.js +4 -43
  1399. package/clis/zhihu/article-transform.js +1 -100
  1400. package/clis/zhihu/article.js +6 -129
  1401. package/clis/zhihu/auth.js +2 -50
  1402. package/clis/zhihu/collection.js +3 -195
  1403. package/clis/zhihu/collections.js +3 -124
  1404. package/clis/zhihu/comment.js +5 -43
  1405. package/clis/zhihu/download.js +2 -43
  1406. package/clis/zhihu/favorite.js +6 -54
  1407. package/clis/zhihu/follow.js +4 -35
  1408. package/clis/zhihu/followers.js +1 -40
  1409. package/clis/zhihu/following.js +1 -40
  1410. package/clis/zhihu/hot.js +2 -25
  1411. package/clis/zhihu/like.js +4 -35
  1412. package/clis/zhihu/paginate.js +3 -120
  1413. package/clis/zhihu/pin.js +4 -59
  1414. package/clis/zhihu/pins.js +1 -41
  1415. package/clis/zhihu/question.js +3 -109
  1416. package/clis/zhihu/recommend.js +3 -99
  1417. package/clis/zhihu/search.js +3 -198
  1418. package/clis/zhihu/stats.js +41 -0
  1419. package/clis/zhihu/target.js +1 -91
  1420. package/clis/zhihu/text.js +4 -27
  1421. package/clis/zhihu/user-answers.js +1 -41
  1422. package/clis/zhihu/user-arg.js +1 -34
  1423. package/clis/zhihu/user-articles.js +1 -40
  1424. package/clis/zhihu/user.js +3 -51
  1425. package/clis/zhihu/write-shared.js +7 -176
  1426. package/clis/zlibrary/info.js +1 -48
  1427. package/clis/zlibrary/search.js +1 -47
  1428. package/clis/zlibrary/utils.js +6 -94
  1429. package/clis/zsxq/auth.js +3 -38
  1430. package/clis/zsxq/dynamics.js +1 -48
  1431. package/clis/zsxq/groups.js +1 -33
  1432. package/clis/zsxq/search.js +1 -44
  1433. package/clis/zsxq/topic.js +1 -50
  1434. package/clis/zsxq/topics.js +1 -26
  1435. package/clis/zsxq/utils.js +5 -166
  1436. package/dist/src/adapter-shadow.js +2 -72
  1437. package/dist/src/adapter-source.js +1 -24
  1438. package/dist/src/browser/analyze.js +1 -405
  1439. package/dist/src/browser/article-extract.js +2 -169
  1440. package/dist/src/browser/ax-snapshot.js +2 -217
  1441. package/dist/src/browser/base-page.js +26 -861
  1442. package/dist/src/browser/bridge-readiness.js +1 -24
  1443. package/dist/src/browser/bridge.js +1 -58
  1444. package/dist/src/browser/cdp.d.ts +5 -0
  1445. package/dist/src/browser/cdp.js +1 -536
  1446. package/dist/src/browser/compound.js +2 -32
  1447. package/dist/src/browser/config.js +1 -14
  1448. package/dist/src/browser/daemon-client.js +1 -135
  1449. package/dist/src/browser/daemon-lifecycle.js +12 -150
  1450. package/dist/src/browser/daemon-transport.js +1 -68
  1451. package/dist/src/browser/daemon-version.js +2 -12
  1452. package/dist/src/browser/dom-helpers.js +36 -109
  1453. package/dist/src/browser/dom-snapshot.js +21 -106
  1454. package/dist/src/browser/errors.js +5 -78
  1455. package/dist/src/browser/extract.js +6 -96
  1456. package/dist/src/browser/find.js +13 -83
  1457. package/dist/src/browser/fingerprint.d.ts +44 -0
  1458. package/dist/src/browser/fingerprint.js +82 -0
  1459. package/dist/src/browser/html-tree.js +7 -58
  1460. package/dist/src/browser/index.js +1 -12
  1461. package/dist/src/browser/managed-chrome.d.ts +89 -0
  1462. package/dist/src/browser/managed-chrome.js +1 -0
  1463. package/dist/src/browser/network-cache.js +1 -78
  1464. package/dist/src/browser/network-key.js +1 -66
  1465. package/dist/src/browser/page.js +7 -445
  1466. package/dist/src/browser/profile.d.ts +82 -0
  1467. package/dist/src/browser/profile.js +2 -85
  1468. package/dist/src/browser/proxy-test.d.ts +28 -0
  1469. package/dist/src/browser/proxy-test.js +12 -0
  1470. package/dist/src/browser/shape-filter.js +1 -101
  1471. package/dist/src/browser/shape.js +1 -95
  1472. package/dist/src/browser/stealth.js +2 -25
  1473. package/dist/src/browser/tabs.js +2 -70
  1474. package/dist/src/browser/target-errors.js +1 -45
  1475. package/dist/src/browser/target-resolver.js +27 -174
  1476. package/dist/src/browser/trace.js +2 -91
  1477. package/dist/src/browser/utils.js +1 -64
  1478. package/dist/src/browser/verify-fixture.js +2 -318
  1479. package/dist/src/browser/visual-refs.js +6 -20
  1480. package/dist/src/browser-session-lock.d.ts +13 -0
  1481. package/dist/src/browser-session-lock.js +1 -0
  1482. package/dist/src/browser-session-lock.test.d.ts +1 -0
  1483. package/dist/src/build-manifest.js +15 -362
  1484. package/dist/src/capabilityRouting.js +1 -56
  1485. package/dist/src/cli-argv-preprocess.js +1 -303
  1486. package/dist/src/cli.js +29 -3319
  1487. package/dist/src/commanderAdapter.js +3 -210
  1488. package/dist/src/commands/auth.js +2 -434
  1489. package/dist/src/commands/daemon.d.ts +16 -0
  1490. package/dist/src/commands/daemon.js +1 -98
  1491. package/dist/src/completion-fast.js +1 -88
  1492. package/dist/src/completion-shared.js +4 -34
  1493. package/dist/src/completion.js +1 -68
  1494. package/dist/src/constants.js +1 -38
  1495. package/dist/src/convention-audit.js +2 -553
  1496. package/dist/src/daemon-utils.js +1 -37
  1497. package/dist/src/daemon.js +1 -455
  1498. package/dist/src/discovery.js +2 -280
  1499. package/dist/src/doctor.js +17 -230
  1500. package/dist/src/download/article-download.js +21 -305
  1501. package/dist/src/download/index.js +7 -369
  1502. package/dist/src/download/media-download.js +1 -127
  1503. package/dist/src/download/progress.js +5 -120
  1504. package/dist/src/electron-apps.js +1 -91
  1505. package/dist/src/errors.js +2 -193
  1506. package/dist/src/execution.js +2 -513
  1507. package/dist/src/external.js +1 -227
  1508. package/dist/src/help.js +8 -555
  1509. package/dist/src/hooks.js +1 -58
  1510. package/dist/src/interceptor.js +25 -85
  1511. package/dist/src/launcher.d.ts +1 -1
  1512. package/dist/src/launcher.js +7 -232
  1513. package/dist/src/logger.js +9 -49
  1514. package/dist/src/main.js +9 -175
  1515. package/dist/src/manifest-types.js +1 -9
  1516. package/dist/src/node-network.js +1 -177
  1517. package/dist/src/observation/artifact.js +8 -260
  1518. package/dist/src/observation/events.js +1 -1
  1519. package/dist/src/observation/index.js +1 -7
  1520. package/dist/src/observation/manager.js +1 -27
  1521. package/dist/src/observation/redaction.js +2 -81
  1522. package/dist/src/observation/retention.js +1 -160
  1523. package/dist/src/observation/ring-buffer.js +1 -45
  1524. package/dist/src/observation/session.js +1 -50
  1525. package/dist/src/output.js +2 -159
  1526. package/dist/src/package-paths.js +1 -41
  1527. package/dist/src/pipeline/executor.js +1 -93
  1528. package/dist/src/pipeline/index.js +1 -5
  1529. package/dist/src/pipeline/registry.js +1 -55
  1530. package/dist/src/pipeline/steps/browser.js +1 -86
  1531. package/dist/src/pipeline/steps/download.js +1 -252
  1532. package/dist/src/pipeline/steps/fetch.js +6 -112
  1533. package/dist/src/pipeline/steps/intercept.js +1 -50
  1534. package/dist/src/pipeline/steps/tap.js +17 -57
  1535. package/dist/src/pipeline/steps/transform.js +1 -97
  1536. package/dist/src/pipeline/template.js +1 -354
  1537. package/dist/src/plugin-manifest.js +1 -160
  1538. package/dist/src/plugin-scaffold.js +19 -87
  1539. package/dist/src/plugin.js +20 -1250
  1540. package/dist/src/rate-limit.js +2 -125
  1541. package/dist/src/registry-api.js +1 -10
  1542. package/dist/src/registry.js +1 -125
  1543. package/dist/src/runtime-detect.js +1 -47
  1544. package/dist/src/runtime.d.ts +10 -0
  1545. package/dist/src/runtime.js +1 -54
  1546. package/dist/src/scripts/framework.js +1 -25
  1547. package/dist/src/scripts/interact.js +1 -20
  1548. package/dist/src/scripts/store.js +1 -48
  1549. package/dist/src/serialization.js +4 -102
  1550. package/dist/src/skills.js +6 -127
  1551. package/dist/src/snapshotFormatter.js +3 -338
  1552. package/dist/src/tui.js +16 -179
  1553. package/dist/src/types.js +1 -7
  1554. package/dist/src/update-check.js +8 -202
  1555. package/dist/src/utils.js +6 -120
  1556. package/dist/src/validate.js +3 -129
  1557. package/dist/src/verify.js +2 -71
  1558. package/dist/src/version.js +1 -22
  1559. package/package.json +7 -4
  1560. package/scripts/minify-release.mjs +115 -0
  1561. package/clis/12306/utils.test.js +0 -424
  1562. package/clis/1688/assets.test.js +0 -39
  1563. package/clis/1688/download.test.js +0 -31
  1564. package/clis/1688/item.test.js +0 -67
  1565. package/clis/1688/search.test.js +0 -75
  1566. package/clis/1688/shared.test.js +0 -57
  1567. package/clis/1688/store.test.js +0 -62
  1568. package/clis/36kr/article.test.js +0 -46
  1569. package/clis/36kr/hot.test.js +0 -15
  1570. package/clis/36kr/news.test.js +0 -85
  1571. package/clis/51job/utils.test.js +0 -69
  1572. package/clis/_atlassian/shared.test.js +0 -170
  1573. package/clis/_shared/article/auth.test.js +0 -98
  1574. package/clis/_shared/article/format.test.js +0 -68
  1575. package/clis/_shared/article/images.test.js +0 -182
  1576. package/clis/_shared/article/page-runtime.test.js +0 -155
  1577. package/clis/_shared/article/publish.test.js +0 -104
  1578. package/clis/_shared/site-auth.test.js +0 -98
  1579. package/clis/aibase/news.test.js +0 -59
  1580. package/clis/amazon/bestsellers.test.js +0 -29
  1581. package/clis/amazon/discussion.test.js +0 -124
  1582. package/clis/amazon/offer.test.js +0 -29
  1583. package/clis/amazon/product.test.js +0 -24
  1584. package/clis/amazon/rankings.test.js +0 -41
  1585. package/clis/amazon/search.test.js +0 -22
  1586. package/clis/amazon/shared.test.js +0 -44
  1587. package/clis/antigravity/antigravity.test.js +0 -172
  1588. package/clis/apple-podcasts/commands.test.js +0 -119
  1589. package/clis/apple-podcasts/utils.test.js +0 -57
  1590. package/clis/archive/archive.test.js +0 -262
  1591. package/clis/arxiv/arxiv.test.js +0 -112
  1592. package/clis/autohome/autohome.test.js +0 -115
  1593. package/clis/baidu-scholar/search.test.js +0 -23
  1594. package/clis/baijiahao/article.test.js +0 -395
  1595. package/clis/barchart/greeks.test.js +0 -138
  1596. package/clis/bilibili/article.test.js +0 -384
  1597. package/clis/bilibili/comment.test.js +0 -153
  1598. package/clis/bilibili/comments.test.js +0 -142
  1599. package/clis/bilibili/download.test.js +0 -173
  1600. package/clis/bilibili/dynamic.test.js +0 -68
  1601. package/clis/bilibili/follow.test.js +0 -203
  1602. package/clis/bilibili/hot.test.js +0 -17
  1603. package/clis/bilibili/subtitle.test.js +0 -240
  1604. package/clis/bilibili/summary.test.js +0 -210
  1605. package/clis/bilibili/utils.test.js +0 -97
  1606. package/clis/bilibili/video.test.js +0 -308
  1607. package/clis/binance/commands.test.js +0 -70
  1608. package/clis/bloomberg/businessweek.test.js +0 -149
  1609. package/clis/bloomberg/utils.test.js +0 -129
  1610. package/clis/bluesky/feeds.js +0 -28
  1611. package/clis/bluesky/followers.js +0 -28
  1612. package/clis/bluesky/following.js +0 -28
  1613. package/clis/bluesky/profile.js +0 -30
  1614. package/clis/bluesky/search.js +0 -29
  1615. package/clis/bluesky/starter-packs.js +0 -29
  1616. package/clis/bluesky/thread.js +0 -31
  1617. package/clis/bluesky/trending.js +0 -20
  1618. package/clis/bluesky/user.js +0 -35
  1619. package/clis/booking/booking.test.js +0 -356
  1620. package/clis/boss/chatlist.test.js +0 -211
  1621. package/clis/boss/chatmsg.test.js +0 -230
  1622. package/clis/boss/search.test.js +0 -78
  1623. package/clis/boss/utils.test.js +0 -34
  1624. package/clis/brave/search.test.js +0 -76
  1625. package/clis/chaoxing/utils.test.js +0 -45
  1626. package/clis/chatgpt/commands.test.js +0 -204
  1627. package/clis/chatgpt/envelope.test.js +0 -108
  1628. package/clis/chatgpt/image.test.js +0 -207
  1629. package/clis/chatgpt/model.test.js +0 -36
  1630. package/clis/chatgpt/utils.test.js +0 -1453
  1631. package/clis/chatgpt-app/ax.test.js +0 -95
  1632. package/clis/chatgpt-app/commands.test.js +0 -45
  1633. package/clis/chatwise/composer.test.js +0 -186
  1634. package/clis/chess/analyze.test.js +0 -79
  1635. package/clis/chess/game.test.js +0 -178
  1636. package/clis/chess/games.test.js +0 -164
  1637. package/clis/chess/stats.test.js +0 -79
  1638. package/clis/chess/utils.test.js +0 -230
  1639. package/clis/claude/ask.test.js +0 -338
  1640. package/clis/claude/commands.test.js +0 -118
  1641. package/clis/claude/utils.test.js +0 -148
  1642. package/clis/cnblogs/article.test.js +0 -346
  1643. package/clis/cnki/search.test.js +0 -18
  1644. package/clis/codex/sidebar.test.js +0 -388
  1645. package/clis/coingecko/coingecko.test.js +0 -109
  1646. package/clis/confluence/commands.test.js +0 -195
  1647. package/clis/coupang/coupang.test.js +0 -159
  1648. package/clis/coupang/utils.test.js +0 -62
  1649. package/clis/csdn/article.test.js +0 -378
  1650. package/clis/cto51/article.test.js +0 -326
  1651. package/clis/ctrip/ctrip.test.js +0 -719
  1652. package/clis/dblp/dblp.test.js +0 -397
  1653. package/clis/deepseek/ask.test.js +0 -399
  1654. package/clis/deepseek/detail.test.js +0 -81
  1655. package/clis/deepseek/send.test.js +0 -107
  1656. package/clis/deepseek/utils.test.js +0 -370
  1657. package/clis/defillama/defillama.test.js +0 -99
  1658. package/clis/devto/devto.test.js +0 -236
  1659. package/clis/dianping/dianping.test.js +0 -578
  1660. package/clis/discord-app/commands.test.js +0 -395
  1661. package/clis/dongchedi/dongchedi.test.js +0 -191
  1662. package/clis/douban/article.test.js +0 -136
  1663. package/clis/douban/download.test.js +0 -170
  1664. package/clis/douban/movie-hot.test.js +0 -14
  1665. package/clis/douban/search.test.js +0 -11
  1666. package/clis/douban/subject.test.js +0 -11
  1667. package/clis/douban/utils.test.js +0 -488
  1668. package/clis/doubao/detail.test.js +0 -42
  1669. package/clis/doubao/history.test.js +0 -37
  1670. package/clis/doubao/utils.test.js +0 -396
  1671. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  1672. package/clis/douyin/_shared/creation-id.test.js +0 -22
  1673. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  1674. package/clis/douyin/_shared/sts2.test.js +0 -27
  1675. package/clis/douyin/_shared/text-extra.test.js +0 -37
  1676. package/clis/douyin/_shared/timing.test.js +0 -28
  1677. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  1678. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  1679. package/clis/douyin/_shared/transcode.test.js +0 -91
  1680. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  1681. package/clis/douyin/activities.test.js +0 -55
  1682. package/clis/douyin/collections.test.js +0 -45
  1683. package/clis/douyin/delete.test.js +0 -100
  1684. package/clis/douyin/draft.test.js +0 -347
  1685. package/clis/douyin/drafts.test.js +0 -11
  1686. package/clis/douyin/hashtag.test.js +0 -171
  1687. package/clis/douyin/location.test.js +0 -23
  1688. package/clis/douyin/profile.test.js +0 -46
  1689. package/clis/douyin/publish-upload-id.test.js +0 -206
  1690. package/clis/douyin/publish.test.js +0 -38
  1691. package/clis/douyin/search.test.js +0 -307
  1692. package/clis/douyin/stats.test.js +0 -22
  1693. package/clis/douyin/update.test.js +0 -11
  1694. package/clis/douyin/user-videos.test.js +0 -151
  1695. package/clis/douyin/videos.test.js +0 -54
  1696. package/clis/duckduckgo/search.test.js +0 -128
  1697. package/clis/duckduckgo/suggest.test.js +0 -66
  1698. package/clis/eastmoney/article.test.js +0 -427
  1699. package/clis/eastmoney/hot-rank.test.js +0 -59
  1700. package/clis/endoflife/endoflife.test.js +0 -51
  1701. package/clis/facebook/feed.test.js +0 -169
  1702. package/clis/facebook/marketplace.test.js +0 -91
  1703. package/clis/facebook/notifications.test.js +0 -458
  1704. package/clis/facebook/search.test.js +0 -55
  1705. package/clis/flathub/flathub.test.js +0 -90
  1706. package/clis/flomo/memos.test.js +0 -144
  1707. package/clis/gemini/ask.test.js +0 -100
  1708. package/clis/gemini/commands.test.js +0 -212
  1709. package/clis/gemini/deep-research-result.test.js +0 -155
  1710. package/clis/gemini/deep-research.test.js +0 -181
  1711. package/clis/gemini/reply-state.test.js +0 -671
  1712. package/clis/gemini/utils.test.js +0 -392
  1713. package/clis/geogebra/geogebra.test.js +0 -175
  1714. package/clis/gitee/search.test.js +0 -65
  1715. package/clis/gitee/user.test.js +0 -63
  1716. package/clis/github-trending/repos.test.js +0 -149
  1717. package/clis/google/utils.test.js +0 -75
  1718. package/clis/google-scholar/cite.test.js +0 -47
  1719. package/clis/google-scholar/profile.test.js +0 -49
  1720. package/clis/google-scholar/search.test.js +0 -71
  1721. package/clis/goproxy/goproxy.test.js +0 -103
  1722. package/clis/gov-law/commands.test.js +0 -39
  1723. package/clis/gov-policy/gov-policy.test.js +0 -224
  1724. package/clis/grok/ask.test.js +0 -29
  1725. package/clis/grok/export.test.js +0 -210
  1726. package/clis/grok/utils.test.js +0 -141
  1727. package/clis/guazi/guazi.test.js +0 -126
  1728. package/clis/hackernews/hackernews.test.js +0 -132
  1729. package/clis/hf/hf.test.js +0 -16
  1730. package/clis/huodongxing/events.test.js +0 -296
  1731. package/clis/hupu/hot.test.js +0 -224
  1732. package/clis/imdb/utils.test.js +0 -88
  1733. package/clis/imooc/article.test.js +0 -264
  1734. package/clis/indeed/indeed.test.js +0 -375
  1735. package/clis/instagram/_shared/private-publish.test.js +0 -705
  1736. package/clis/instagram/_shared/protocol-capture.test.js +0 -114
  1737. package/clis/instagram/detail.test.js +0 -137
  1738. package/clis/instagram/download.test.js +0 -118
  1739. package/clis/instagram/instagram.test.js +0 -381
  1740. package/clis/instagram/note.test.js +0 -53
  1741. package/clis/instagram/post.test.js +0 -1647
  1742. package/clis/instagram/reel.test.js +0 -167
  1743. package/clis/instagram/story.test.js +0 -134
  1744. package/clis/instagram/user.test.js +0 -282
  1745. package/clis/jd/commands.test.js +0 -41
  1746. package/clis/jd/item.test.js +0 -354
  1747. package/clis/jianyu/search.test.js +0 -153
  1748. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  1749. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  1750. package/clis/jike/read.test.js +0 -86
  1751. package/clis/jira/commands.test.js +0 -287
  1752. package/clis/juejin/article.test.js +0 -299
  1753. package/clis/juejin/juejin.test.js +0 -241
  1754. package/clis/kimi/kimi.test.js +0 -187
  1755. package/clis/lesswrong/frontpage.test.js +0 -37
  1756. package/clis/lichess/lichess.test.js +0 -85
  1757. package/clis/linkedin/connect.test.js +0 -328
  1758. package/clis/linkedin/inbox.test.js +0 -152
  1759. package/clis/linkedin/job-detail.test.js +0 -64
  1760. package/clis/linkedin/jobs-preferences.test.js +0 -43
  1761. package/clis/linkedin/people-search.test.js +0 -216
  1762. package/clis/linkedin/post-analytics.test.js +0 -40
  1763. package/clis/linkedin/posts.test.js +0 -40
  1764. package/clis/linkedin/profile-analytics.test.js +0 -67
  1765. package/clis/linkedin/profile-experience.test.js +0 -152
  1766. package/clis/linkedin/profile-projects.test.js +0 -111
  1767. package/clis/linkedin/profile-read.test.js +0 -77
  1768. package/clis/linkedin/safe-send.test.js +0 -255
  1769. package/clis/linkedin/salesnav-inbox.test.js +0 -113
  1770. package/clis/linkedin/salesnav-message.test.js +0 -172
  1771. package/clis/linkedin/salesnav-search.test.js +0 -76
  1772. package/clis/linkedin/salesnav-thread.test.js +0 -79
  1773. package/clis/linkedin/search.test.js +0 -222
  1774. package/clis/linkedin/sent-invitations.test.js +0 -62
  1775. package/clis/linkedin/services-read.test.js +0 -105
  1776. package/clis/linkedin/thread-snapshot.test.js +0 -89
  1777. package/clis/linkedin/timeline.test.js +0 -81
  1778. package/clis/linkedin-learning/course.test.js +0 -114
  1779. package/clis/linkedin-learning/search.test.js +0 -144
  1780. package/clis/linkedin-learning/trending.test.js +0 -123
  1781. package/clis/linux-do/feed.test.js +0 -153
  1782. package/clis/linux-do/topic-content.test.js +0 -59
  1783. package/clis/lobsters/lobsters.test.js +0 -169
  1784. package/clis/maimai/search-talents.test.js +0 -29
  1785. package/clis/manus/manus.test.js +0 -382
  1786. package/clis/notebooklm/add-source.test.js +0 -97
  1787. package/clis/notebooklm/compat.test.js +0 -16
  1788. package/clis/notebooklm/create.test.js +0 -58
  1789. package/clis/notebooklm/generate-audio.test.js +0 -63
  1790. package/clis/notebooklm/generate-slides.test.js +0 -75
  1791. package/clis/notebooklm/history.test.js +0 -58
  1792. package/clis/notebooklm/note-list.test.js +0 -56
  1793. package/clis/notebooklm/notes-get.test.js +0 -72
  1794. package/clis/notebooklm/open.test.js +0 -63
  1795. package/clis/notebooklm/rpc.test.js +0 -131
  1796. package/clis/notebooklm/source-fulltext.test.js +0 -106
  1797. package/clis/notebooklm/source-get.test.js +0 -84
  1798. package/clis/notebooklm/source-guide.test.js +0 -104
  1799. package/clis/notebooklm/summary.test.js +0 -78
  1800. package/clis/notebooklm/utils.test.js +0 -449
  1801. package/clis/notebooklm/write-note.test.js +0 -70
  1802. package/clis/nuget/nuget.test.js +0 -111
  1803. package/clis/oeis/oeis.test.js +0 -88
  1804. package/clis/ones/task-helpers.test.js +0 -12
  1805. package/clis/ones/worklog.test.js +0 -20
  1806. package/clis/openfda/openfda.test.js +0 -114
  1807. package/clis/openreview/openreview.test.js +0 -427
  1808. package/clis/oschina/article.test.js +0 -361
  1809. package/clis/osv/osv.test.js +0 -97
  1810. package/clis/paperreview/commands.test.js +0 -243
  1811. package/clis/paperreview/utils.test.js +0 -49
  1812. package/clis/pixiv/detail.test.js +0 -93
  1813. package/clis/pixiv/download.test.js +0 -97
  1814. package/clis/pixiv/illusts.test.js +0 -99
  1815. package/clis/pixiv/search.test.js +0 -83
  1816. package/clis/pixiv/user.test.js +0 -100
  1817. package/clis/powerchina/search.test.js +0 -93
  1818. package/clis/producthunt/utils.test.js +0 -64
  1819. package/clis/pubmed/pubmed.test.js +0 -464
  1820. package/clis/qoder/qoder.test.js +0 -125
  1821. package/clis/quark/utils.test.js +0 -58
  1822. package/clis/qwen/ask.test.js +0 -36
  1823. package/clis/qwen/utils.test.js +0 -128
  1824. package/clis/reddit/extract-media.test.js +0 -149
  1825. package/clis/reddit/frontpage.test.js +0 -34
  1826. package/clis/reddit/home.test.js +0 -170
  1827. package/clis/reddit/hot.test.js +0 -32
  1828. package/clis/reddit/popular.test.js +0 -26
  1829. package/clis/reddit/read.test.js +0 -402
  1830. package/clis/reddit/reply.test.js +0 -89
  1831. package/clis/reddit/search.test.js +0 -26
  1832. package/clis/reddit/subreddit-info.test.js +0 -163
  1833. package/clis/reddit/subreddit.test.js +0 -31
  1834. package/clis/reddit/subscribed.test.js +0 -168
  1835. package/clis/reddit/whoami.test.js +0 -105
  1836. package/clis/rednote/navigation.test.js +0 -26
  1837. package/clis/rednote/rednote.test.js +0 -240
  1838. package/clis/rest-countries/rest-countries.test.js +0 -83
  1839. package/clis/reuters/reuters.test.js +0 -299
  1840. package/clis/rfc/rfc.test.js +0 -74
  1841. package/clis/segmentfault/article.test.js +0 -470
  1842. package/clis/semanticscholar/semanticscholar.test.js +0 -279
  1843. package/clis/sinafinance/stock.test.js +0 -59
  1844. package/clis/slock/api-base-canary.test.js +0 -62
  1845. package/clis/slock/attachment-download.test.js +0 -102
  1846. package/clis/slock/attachment-upload.test.js +0 -131
  1847. package/clis/slock/attachment-url.test.js +0 -41
  1848. package/clis/slock/bookmark-add.test.js +0 -38
  1849. package/clis/slock/bookmark-list.test.js +0 -47
  1850. package/clis/slock/bookmark-remove.test.js +0 -24
  1851. package/clis/slock/channel-action.test.js +0 -65
  1852. package/clis/slock/channel-create.test.js +0 -40
  1853. package/clis/slock/channel-files.test.js +0 -32
  1854. package/clis/slock/channel-info.test.js +0 -25
  1855. package/clis/slock/channel-list.test.js +0 -37
  1856. package/clis/slock/channel-mark.test.js +0 -49
  1857. package/clis/slock/channel-members.test.js +0 -44
  1858. package/clis/slock/cross-command.test.js +0 -21
  1859. package/clis/slock/dm-list.test.js +0 -26
  1860. package/clis/slock/error-detail-canary.test.js +0 -144
  1861. package/clis/slock/errors.test.js +0 -29
  1862. package/clis/slock/in-page.test.js +0 -362
  1863. package/clis/slock/inbox-done.test.js +0 -21
  1864. package/clis/slock/inbox-read-all.test.js +0 -20
  1865. package/clis/slock/inbox.test.js +0 -46
  1866. package/clis/slock/message-read.test.js +0 -83
  1867. package/clis/slock/message-search.test.js +0 -61
  1868. package/clis/slock/message-send.test.js +0 -127
  1869. package/clis/slock/reaction-add.test.js +0 -36
  1870. package/clis/slock/reaction-remove.test.js +0 -29
  1871. package/clis/slock/resolve.test.js +0 -102
  1872. package/clis/slock/server-list.test.js +0 -24
  1873. package/clis/slock/server-override-canary.test.js +0 -87
  1874. package/clis/slock/server-use.test.js +0 -48
  1875. package/clis/slock/short-id-canary.test.js +0 -86
  1876. package/clis/slock/site-session-canary.test.js +0 -49
  1877. package/clis/slock/task-claim.test.js +0 -81
  1878. package/clis/slock/task-convert.test.js +0 -82
  1879. package/clis/slock/task-create.test.js +0 -65
  1880. package/clis/slock/task-delete.test.js +0 -52
  1881. package/clis/slock/task-get.test.js +0 -45
  1882. package/clis/slock/task-list-server.test.js +0 -48
  1883. package/clis/slock/task-list.test.js +0 -59
  1884. package/clis/slock/task-status.test.js +0 -76
  1885. package/clis/slock/task-unclaim.test.js +0 -49
  1886. package/clis/slock/thread-follow.test.js +0 -34
  1887. package/clis/slock/thread-list.test.js +0 -24
  1888. package/clis/slock/thread-state.test.js +0 -38
  1889. package/clis/slock/unread-summary.test.js +0 -31
  1890. package/clis/slock/whoami.test.js +0 -23
  1891. package/clis/smzdm/search.test.js +0 -114
  1892. package/clis/sohu/article.test.js +0 -397
  1893. package/clis/spotify/utils.test.js +0 -67
  1894. package/clis/stackoverflow/stackoverflow.test.js +0 -404
  1895. package/clis/steam/steam.test.js +0 -46
  1896. package/clis/substack/utils.test.js +0 -44
  1897. package/clis/suno/commands.test.js +0 -188
  1898. package/clis/suno/download.test.js +0 -151
  1899. package/clis/suno/generate.test.js +0 -252
  1900. package/clis/suno/utils.test.js +0 -329
  1901. package/clis/taobao/commands.test.js +0 -41
  1902. package/clis/tdx/hot-rank.test.js +0 -59
  1903. package/clis/ths/hot-rank.test.js +0 -64
  1904. package/clis/tieba/commands.test.js +0 -79
  1905. package/clis/tieba/utils.test.js +0 -290
  1906. package/clis/tiktok/creator-videos.test.js +0 -113
  1907. package/clis/tiktok/refactor.test.js +0 -389
  1908. package/clis/tiktok/write-refactor.test.js +0 -370
  1909. package/clis/toutiao/toutiao.test.js +0 -378
  1910. package/clis/trae-cn/trae-cn.test.js +0 -412
  1911. package/clis/trae-solo/trae-solo.test.js +0 -67
  1912. package/clis/tvmaze/tvmaze.test.js +0 -93
  1913. package/clis/twitter/bookmark-folder.test.js +0 -396
  1914. package/clis/twitter/bookmark-folders.test.js +0 -152
  1915. package/clis/twitter/bookmark.test.js +0 -74
  1916. package/clis/twitter/bookmarks.test.js +0 -206
  1917. package/clis/twitter/delete.test.js +0 -103
  1918. package/clis/twitter/device-follow.test.js +0 -287
  1919. package/clis/twitter/download.test.js +0 -457
  1920. package/clis/twitter/follow-batch.test.js +0 -137
  1921. package/clis/twitter/followers.test.js +0 -62
  1922. package/clis/twitter/following.test.js +0 -359
  1923. package/clis/twitter/hide-reply.test.js +0 -76
  1924. package/clis/twitter/like.test.js +0 -73
  1925. package/clis/twitter/likes.test.js +0 -220
  1926. package/clis/twitter/list-add.test.js +0 -133
  1927. package/clis/twitter/list-batch.test.js +0 -113
  1928. package/clis/twitter/list-create.test.js +0 -169
  1929. package/clis/twitter/list-delete.test.js +0 -102
  1930. package/clis/twitter/list-remove.test.js +0 -147
  1931. package/clis/twitter/list-tweets.test.js +0 -198
  1932. package/clis/twitter/lists.test.js +0 -253
  1933. package/clis/twitter/post.test.js +0 -334
  1934. package/clis/twitter/profile.test.js +0 -150
  1935. package/clis/twitter/quote.test.js +0 -230
  1936. package/clis/twitter/reply.test.js +0 -237
  1937. package/clis/twitter/retweet.test.js +0 -73
  1938. package/clis/twitter/schedule.test.js +0 -86
  1939. package/clis/twitter/scheduled-delete.test.js +0 -58
  1940. package/clis/twitter/scheduled-list.test.js +0 -36
  1941. package/clis/twitter/search.test.js +0 -400
  1942. package/clis/twitter/shared.test.js +0 -1012
  1943. package/clis/twitter/thread.test.js +0 -58
  1944. package/clis/twitter/timeline.test.js +0 -104
  1945. package/clis/twitter/trending.test.js +0 -15
  1946. package/clis/twitter/tweets.test.js +0 -487
  1947. package/clis/twitter/unbookmark.test.js +0 -73
  1948. package/clis/twitter/unlike.test.js +0 -75
  1949. package/clis/twitter/unretweet.test.js +0 -73
  1950. package/clis/twitter/utils.test.js +0 -169
  1951. package/clis/uisdc/news.test.js +0 -66
  1952. package/clis/uiverse/_shared.test.js +0 -62
  1953. package/clis/uiverse/navigation.test.js +0 -12
  1954. package/clis/upwork/upwork.test.js +0 -566
  1955. package/clis/wanfang/search.test.js +0 -23
  1956. package/clis/web/read.test.js +0 -392
  1957. package/clis/wechat-channels/publish.test.js +0 -144
  1958. package/clis/weibo/delete.test.js +0 -94
  1959. package/clis/weibo/envelope.test.js +0 -85
  1960. package/clis/weibo/favorites.test.js +0 -114
  1961. package/clis/weibo/publish.test.js +0 -192
  1962. package/clis/weibo/user-posts.test.js +0 -92
  1963. package/clis/weibo/utils.test.js +0 -36
  1964. package/clis/weixin/article.test.js +0 -299
  1965. package/clis/weixin/download.test.js +0 -106
  1966. package/clis/weixin/drafts.test.js +0 -69
  1967. package/clis/weixin/search.test.js +0 -227
  1968. package/clis/weread/ai-outline.test.js +0 -83
  1969. package/clis/weread/book-search.test.js +0 -242
  1970. package/clis/weread/commands.test.js +0 -398
  1971. package/clis/weread/private-api-regression.test.js +0 -369
  1972. package/clis/weread/search-regression.test.js +0 -494
  1973. package/clis/weread/utils.test.js +0 -128
  1974. package/clis/weread-official/commands.test.js +0 -385
  1975. package/clis/weread-official/utils.test.js +0 -242
  1976. package/clis/wikidata/wikidata.test.js +0 -83
  1977. package/clis/wikipedia/trending.test.js +0 -57
  1978. package/clis/woshipm/article.test.js +0 -305
  1979. package/clis/wttr/wttr.test.js +0 -84
  1980. package/clis/xianyu/chat.test.js +0 -84
  1981. package/clis/xianyu/im.test.js +0 -253
  1982. package/clis/xianyu/item.test.js +0 -56
  1983. package/clis/xianyu/publish.test.js +0 -220
  1984. package/clis/xianyu/search.test.js +0 -104
  1985. package/clis/xiaoe/xiaoe.test.js +0 -486
  1986. package/clis/xiaohongshu/ask.test.js +0 -271
  1987. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  1988. package/clis/xiaohongshu/comments.test.js +0 -320
  1989. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  1990. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  1991. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  1992. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  1993. package/clis/xiaohongshu/delete-note.test.js +0 -177
  1994. package/clis/xiaohongshu/download.test.js +0 -415
  1995. package/clis/xiaohongshu/drafts.test.js +0 -172
  1996. package/clis/xiaohongshu/feed.test.js +0 -126
  1997. package/clis/xiaohongshu/follow.test.js +0 -211
  1998. package/clis/xiaohongshu/liked.test.js +0 -82
  1999. package/clis/xiaohongshu/navigation.test.js +0 -38
  2000. package/clis/xiaohongshu/note.test.js +0 -249
  2001. package/clis/xiaohongshu/publish.test.js +0 -1155
  2002. package/clis/xiaohongshu/saved.test.js +0 -143
  2003. package/clis/xiaohongshu/search.test.js +0 -394
  2004. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  2005. package/clis/xiaohongshu/user.test.js +0 -141
  2006. package/clis/xiaoyuzhou/auth.test.js +0 -124
  2007. package/clis/xiaoyuzhou/download.test.js +0 -135
  2008. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  2009. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  2010. package/clis/xiaoyuzhou/utils.test.js +0 -39
  2011. package/clis/xueqiu/article.test.js +0 -505
  2012. package/clis/xueqiu/comments.test.js +0 -696
  2013. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  2014. package/clis/xueqiu/utils.test.js +0 -26
  2015. package/clis/yahoo/search.test.js +0 -94
  2016. package/clis/youdao/note.test.js +0 -99
  2017. package/clis/youtube/channel.test.js +0 -283
  2018. package/clis/youtube/feed.test.js +0 -131
  2019. package/clis/youtube/transcript-group.test.js +0 -99
  2020. package/clis/youtube/transcript.test.js +0 -296
  2021. package/clis/youtube/utils.test.js +0 -84
  2022. package/clis/youtube/video.test.js +0 -111
  2023. package/clis/yuanbao/ask.test.js +0 -124
  2024. package/clis/yuanbao/new.test.js +0 -30
  2025. package/clis/yuanbao/shared.test.js +0 -80
  2026. package/clis/yuque/article.test.js +0 -415
  2027. package/clis/zhihu/answer-comments.test.js +0 -287
  2028. package/clis/zhihu/answer-detail.test.js +0 -338
  2029. package/clis/zhihu/answer.test.js +0 -54
  2030. package/clis/zhihu/article-transform.test.js +0 -43
  2031. package/clis/zhihu/collection.test.js +0 -337
  2032. package/clis/zhihu/collections.test.js +0 -182
  2033. package/clis/zhihu/comment.test.js +0 -50
  2034. package/clis/zhihu/download.test.js +0 -12
  2035. package/clis/zhihu/favorite.test.js +0 -59
  2036. package/clis/zhihu/follow.test.js +0 -42
  2037. package/clis/zhihu/followers.test.js +0 -42
  2038. package/clis/zhihu/following.test.js +0 -44
  2039. package/clis/zhihu/like.test.js +0 -41
  2040. package/clis/zhihu/pins.test.js +0 -44
  2041. package/clis/zhihu/question.test.js +0 -251
  2042. package/clis/zhihu/recommend.test.js +0 -143
  2043. package/clis/zhihu/search.test.js +0 -198
  2044. package/clis/zhihu/target.test.js +0 -77
  2045. package/clis/zhihu/text.test.js +0 -24
  2046. package/clis/zhihu/user-answers.test.js +0 -69
  2047. package/clis/zhihu/user-articles.test.js +0 -44
  2048. package/clis/zhihu/user.test.js +0 -73
  2049. package/clis/zhihu/write-shared.test.js +0 -179
  2050. package/clis/zlibrary/commands.test.js +0 -65
  2051. package/clis/zsxq/search.test.js +0 -24
  2052. package/clis/zsxq/topic.test.js +0 -30
  2053. package/clis/zsxq/topics.test.js +0 -24
  2054. package/clis/zsxq/utils.test.js +0 -31
  2055. package/dist/src/adapter-shadow.test.js +0 -49
  2056. package/dist/src/adapter-source.test.js +0 -29
  2057. package/dist/src/browser/analyze.test.js +0 -209
  2058. package/dist/src/browser/article-extract.e2e.test.js +0 -105
  2059. package/dist/src/browser/article-extract.test.js +0 -94
  2060. package/dist/src/browser/ax-snapshot.test.js +0 -91
  2061. package/dist/src/browser/base-page.test.js +0 -803
  2062. package/dist/src/browser/bridge-readiness.test.js +0 -57
  2063. package/dist/src/browser/cdp-click-fixture.test.js +0 -87
  2064. package/dist/src/browser/cdp.test.js +0 -79
  2065. package/dist/src/browser/compound.test.js +0 -175
  2066. package/dist/src/browser/daemon-client.test.js +0 -318
  2067. package/dist/src/browser/dom-helpers.test.js +0 -106
  2068. package/dist/src/browser/dom-snapshot.test.js +0 -313
  2069. package/dist/src/browser/errors.test.js +0 -60
  2070. package/dist/src/browser/extract.test.js +0 -129
  2071. package/dist/src/browser/find.test.js +0 -180
  2072. package/dist/src/browser/html-tree.test.js +0 -181
  2073. package/dist/src/browser/network-cache.test.js +0 -75
  2074. package/dist/src/browser/network-key.test.js +0 -49
  2075. package/dist/src/browser/page.test.js +0 -406
  2076. package/dist/src/browser/shape-filter.test.js +0 -101
  2077. package/dist/src/browser/shape.test.js +0 -82
  2078. package/dist/src/browser/stealth.test.js +0 -134
  2079. package/dist/src/browser/target-errors.test.js +0 -94
  2080. package/dist/src/browser/target-resolver.test.js +0 -118
  2081. package/dist/src/browser/utils.test.js +0 -29
  2082. package/dist/src/browser/verify-fixture.test.js +0 -219
  2083. package/dist/src/browser.test.js +0 -291
  2084. package/dist/src/build-manifest.test.js +0 -341
  2085. package/dist/src/capabilityRouting.test.js +0 -63
  2086. package/dist/src/cli-argv-preprocess.test.js +0 -304
  2087. package/dist/src/cli.test.js +0 -3003
  2088. package/dist/src/commanderAdapter.test.js +0 -386
  2089. package/dist/src/commands/auth.test.js +0 -309
  2090. package/dist/src/commands/daemon.test.js +0 -283
  2091. package/dist/src/completion.test.js +0 -24
  2092. package/dist/src/convention-audit.test.js +0 -247
  2093. package/dist/src/daemon.test.js +0 -60
  2094. package/dist/src/doctor.test.js +0 -263
  2095. package/dist/src/download/article-download.test.js +0 -235
  2096. package/dist/src/download/index.test.js +0 -177
  2097. package/dist/src/download/media-download.test.js +0 -112
  2098. package/dist/src/download/progress.test.js +0 -36
  2099. package/dist/src/electron-apps.test.js +0 -76
  2100. package/dist/src/engine.test.js +0 -337
  2101. package/dist/src/errors.test.js +0 -109
  2102. package/dist/src/execution.test.js +0 -645
  2103. package/dist/src/extension-manifest-regression.test.js +0 -12
  2104. package/dist/src/external.test.js +0 -188
  2105. package/dist/src/help.test.js +0 -58
  2106. package/dist/src/hooks.test.js +0 -92
  2107. package/dist/src/interceptor.test.js +0 -81
  2108. package/dist/src/launcher.test.js +0 -191
  2109. package/dist/src/node-network.test.js +0 -81
  2110. package/dist/src/observation/artifact.test.js +0 -121
  2111. package/dist/src/observation/manager.test.js +0 -13
  2112. package/dist/src/observation/redaction.test.js +0 -32
  2113. package/dist/src/observation/retention.test.js +0 -118
  2114. package/dist/src/observation/ring-buffer.test.js +0 -22
  2115. package/dist/src/output.test.js +0 -79
  2116. package/dist/src/package-exports.test.js +0 -112
  2117. package/dist/src/pipeline/executor.test.js +0 -182
  2118. package/dist/src/pipeline/steps/download.test.js +0 -102
  2119. package/dist/src/pipeline/steps/fetch.test.js +0 -188
  2120. package/dist/src/pipeline/template.test.js +0 -212
  2121. package/dist/src/pipeline/transform.test.js +0 -174
  2122. package/dist/src/plugin-manifest.test.js +0 -179
  2123. package/dist/src/plugin-scaffold.test.js +0 -83
  2124. package/dist/src/plugin.test.js +0 -1349
  2125. package/dist/src/rate-limit.test.js +0 -66
  2126. package/dist/src/registry.test.js +0 -209
  2127. package/dist/src/runtime-detect.test.js +0 -39
  2128. package/dist/src/serialization.test.js +0 -78
  2129. package/dist/src/skills.test.js +0 -71
  2130. package/dist/src/snapshotFormatter.test.js +0 -521
  2131. package/dist/src/tui.test.js +0 -19
  2132. package/dist/src/update-check.test.js +0 -116
  2133. package/dist/src/utils.test.js +0 -155
  2134. package/dist/src/validate.test.js +0 -90
  2135. package/dist/src/verify.test.js +0 -63
  2136. package/dist/src/weixin-download.test.js +0 -45
@@ -1,70 +1,4 @@
1
- import { CommandExecutionError } from '@jackwener/opencli/errors';
2
- export const GEMINI_DOMAIN = 'gemini.google.com';
3
- export const GEMINI_APP_URL = 'https://gemini.google.com/app';
4
- export const GEMINI_DEEP_RESEARCH_DEFAULT_TOOL_LABELS = ['Deep Research', 'Deep research', '\u6df1\u5ea6\u7814\u7a76'];
5
- export const GEMINI_DEEP_RESEARCH_DEFAULT_CONFIRM_LABELS = [
6
- 'Start research',
7
- 'Start Research',
8
- 'Start deep research',
9
- 'Start Deep Research',
10
- 'Generate research plan',
11
- 'Generate Research Plan',
12
- 'Generate deep research plan',
13
- 'Generate Deep Research Plan',
14
- '\u5f00\u59cb\u7814\u7a76',
15
- '\u5f00\u59cb\u6df1\u5ea6\u7814\u7a76',
16
- '\u5f00\u59cb\u8c03\u7814',
17
- '\u751f\u6210\u7814\u7a76\u8ba1\u5212',
18
- '\u751f\u6210\u8c03\u7814\u8ba1\u5212',
19
- ];
20
- const GEMINI_RESPONSE_NOISE_PATTERNS = [
21
- /Gemini can make mistakes\.?/gi,
22
- /Google Terms/gi,
23
- /Google Privacy Policy/gi,
24
- /Opens in a new window/gi,
25
- ];
26
- const GEMINI_TRANSCRIPT_CHROME_MARKERS = ['gemini', '我的内容', '对话', 'google terms', 'google privacy policy'];
27
- const GEMINI_COMPOSER_SELECTORS = [
28
- '.ql-editor[contenteditable="true"]',
29
- '.ql-editor[role="textbox"]',
30
- '.ql-editor[aria-label*="Gemini"]',
31
- '[contenteditable="true"][aria-label*="Gemini"]',
32
- '[aria-label="Enter a prompt for Gemini"]',
33
- '[aria-label*="prompt for Gemini"]',
34
- ];
35
- const GEMINI_COMPOSER_MARKER_ATTR = 'data-opencli-gemini-composer';
36
- const GEMINI_COMPOSER_PREPARE_ATTEMPTS = 4;
37
- const GEMINI_COMPOSER_PREPARE_WAIT_SECONDS = 1;
38
- function isObjectRecord(value) {
39
- return !!value && typeof value === 'object' && !Array.isArray(value);
40
- }
41
- function unwrapGeminiEvaluateResult(value, context) {
42
- if (isObjectRecord(value) && Object.prototype.hasOwnProperty.call(value, 'session')) {
43
- if (Object.prototype.hasOwnProperty.call(value, 'data')) {
44
- return value.data;
45
- }
46
- throw new CommandExecutionError(`${context} returned a malformed Browser Bridge envelope`);
47
- }
48
- return value;
49
- }
50
- function requireGeminiArrayResult(value, context) {
51
- const unwrapped = unwrapGeminiEvaluateResult(value, context);
52
- if (!Array.isArray(unwrapped)) {
53
- throw new CommandExecutionError(`${context} returned a malformed result`);
54
- }
55
- return unwrapped;
56
- }
57
- function requireGeminiObjectResult(value, context) {
58
- const unwrapped = unwrapGeminiEvaluateResult(value, context);
59
- if (!isObjectRecord(unwrapped)) {
60
- throw new CommandExecutionError(`${context} returned a malformed result`);
61
- }
62
- return unwrapped;
63
- }
64
- function buildGeminiComposerLocatorScript() {
65
- const selectorsJson = JSON.stringify(GEMINI_COMPOSER_SELECTORS);
66
- const markerAttrJson = JSON.stringify(GEMINI_COMPOSER_MARKER_ATTR);
67
- return `
1
+ import{CommandExecutionError as P}from"@jackwener/opencli/errors";export const GEMINI_DOMAIN="gemini.google.com",GEMINI_APP_URL="https://gemini.google.com/app",GEMINI_DEEP_RESEARCH_DEFAULT_TOOL_LABELS=["Deep Research","Deep research","深度研究"],GEMINI_DEEP_RESEARCH_DEFAULT_CONFIRM_LABELS=["Start research","Start Research","Start deep research","Start Deep Research","Generate research plan","Generate Research Plan","Generate deep research plan","Generate Deep Research Plan","开始研究","开始深度研究","开始调研","生成研究计划","生成调研计划"];const s=[/Gemini can make mistakes\.?/gi,/Google Terms/gi,/Google Privacy Policy/gi,/Opens in a new window/gi],i=["gemini","我的内容","对话","google terms","google privacy policy"],Y=['.ql-editor[contenteditable="true"]','.ql-editor[role="textbox"]','.ql-editor[aria-label*="Gemini"]','[contenteditable="true"][aria-label*="Gemini"]','[aria-label="Enter a prompt for Gemini"]','[aria-label*="prompt for Gemini"]'],Z="data-opencli-gemini-composer",_=4,u=1;function S(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function U(f,g){if(S(f)&&Object.prototype.hasOwnProperty.call(f,"session")){if(Object.prototype.hasOwnProperty.call(f,"data"))return f.data;throw new P(`${g} returned a malformed Browser Bridge envelope`)}return f}function V(f,g){const j=U(f,g);if(!Array.isArray(j))throw new P(`${g} returned a malformed result`);return j}function $(f,g){const j=U(f,g);if(!S(j))throw new P(`${g} returned a malformed result`);return j}function Q(){const f=JSON.stringify(Y);return`
68
2
  const isVisible = (el) => {
69
3
  if (!(el instanceof HTMLElement)) return false;
70
4
  const style = window.getComputedStyle(el);
@@ -73,7 +7,7 @@ function buildGeminiComposerLocatorScript() {
73
7
  return rect.width > 0 && rect.height > 0;
74
8
  };
75
9
 
76
- const markerAttr = ${markerAttrJson};
10
+ const markerAttr = ${JSON.stringify(Z)};
77
11
  const clearComposerMarkers = (active) => {
78
12
  document.querySelectorAll('[' + markerAttr + ']').forEach((node) => {
79
13
  if (node !== active) node.removeAttribute(markerAttr);
@@ -91,189 +25,23 @@ function buildGeminiComposerLocatorScript() {
91
25
  const marked = document.querySelector('[' + markerAttr + '="1"]');
92
26
  if (marked instanceof HTMLElement && isVisible(marked)) return marked;
93
27
 
94
- const selectors = ${selectorsJson};
28
+ const selectors = ${f};
95
29
  for (const selector of selectors) {
96
30
  const node = Array.from(document.querySelectorAll(selector)).find((candidate) => candidate instanceof HTMLElement && isVisible(candidate));
97
31
  if (node instanceof HTMLElement) return markComposer(node);
98
32
  }
99
33
  return null;
100
34
  };
101
- `;
102
- }
103
- export function resolveGeminiLabels(value, fallback) {
104
- const label = String(value ?? '').trim();
105
- return label ? [label] : fallback;
106
- }
107
- export function parseGeminiTitleMatchMode(value, fallback = 'contains') {
108
- const raw = String(value ?? fallback).trim().toLowerCase();
109
- if (raw === 'contains' || raw === 'exact')
110
- return raw;
111
- return null;
112
- }
113
- export function parseGeminiConversationUrl(value) {
114
- const raw = String(value ?? '').trim();
115
- if (!raw)
116
- return null;
117
- try {
118
- const url = new URL(raw);
119
- if (url.hostname !== GEMINI_DOMAIN && !url.hostname.endsWith(`.${GEMINI_DOMAIN}`))
120
- return null;
121
- if (!url.pathname.startsWith('/app/'))
122
- return null;
123
- return url.href;
124
- }
125
- catch {
126
- return null;
127
- }
128
- }
129
- export function normalizeGeminiTitle(value) {
130
- return value.replace(/\s+/g, ' ').trim().toLowerCase();
131
- }
132
- export function pickGeminiConversationByTitle(conversations, query, mode = 'contains') {
133
- const normalizedQuery = normalizeGeminiTitle(query);
134
- if (!normalizedQuery)
135
- return null;
136
- for (const conversation of conversations) {
137
- const normalizedTitle = normalizeGeminiTitle(conversation.Title);
138
- if (!normalizedTitle)
139
- continue;
140
- if (mode === 'exact') {
141
- if (normalizedTitle === normalizedQuery)
142
- return conversation;
143
- continue;
144
- }
145
- if (normalizedTitle.includes(normalizedQuery))
146
- return conversation;
147
- }
148
- return null;
149
- }
150
- export function resolveGeminiConversationForQuery(conversations, query, mode) {
151
- const normalizedQuery = String(query ?? '').trim();
152
- if (!normalizedQuery)
153
- return conversations[0] ?? null;
154
- const exact = pickGeminiConversationByTitle(conversations, normalizedQuery, 'exact');
155
- if (exact)
156
- return exact;
157
- if (mode === 'contains')
158
- return pickGeminiConversationByTitle(conversations, normalizedQuery, 'contains');
159
- return null;
160
- }
161
- export function sanitizeGeminiResponseText(value, promptText) {
162
- let sanitized = value;
163
- for (const pattern of GEMINI_RESPONSE_NOISE_PATTERNS) {
164
- sanitized = sanitized.replace(pattern, '');
165
- }
166
- sanitized = sanitized.trim();
167
- const prompt = promptText.trim();
168
- if (!prompt)
169
- return sanitized;
170
- if (sanitized === prompt)
171
- return '';
172
- for (const separator of ['\n\n', '\n', '\r\n\r\n', '\r\n']) {
173
- const prefix = `${prompt}${separator}`;
174
- if (sanitized.startsWith(prefix)) {
175
- return sanitized.slice(prefix.length).trim();
176
- }
177
- }
178
- return sanitized;
179
- }
180
- export function collectGeminiTranscriptAdditions(beforeLines, currentLines, promptText) {
181
- const beforeSet = new Set(beforeLines);
182
- const additions = currentLines
183
- .filter((line) => !beforeSet.has(line))
184
- .map((line) => extractGeminiTranscriptLineCandidate(line, promptText))
185
- .filter((line) => line && line !== promptText);
186
- return additions.join('\n').trim();
187
- }
188
- export function collapseAdjacentGeminiTurns(turns) {
189
- const collapsed = [];
190
- for (const turn of turns) {
191
- if (!turn || typeof turn.Role !== 'string' || typeof turn.Text !== 'string')
192
- continue;
193
- const previous = collapsed.at(-1);
194
- if (previous?.Role === turn.Role && previous.Text === turn.Text)
195
- continue;
196
- collapsed.push(turn);
197
- }
198
- return collapsed;
199
- }
200
- function hasGeminiTurnPrefix(before, current) {
201
- if (before.length > current.length)
202
- return false;
203
- return before.every((turn, index) => (turn.Role === current[index]?.Role
204
- && turn.Text === current[index]?.Text));
205
- }
206
- function findLastMatchingGeminiTurnIndex(turns, target) {
207
- if (!target)
208
- return null;
209
- for (let index = turns.length - 1; index >= 0; index -= 1) {
210
- const turn = turns[index];
211
- if (turn?.Role === target.Role && turn.Text === target.Text) {
212
- return index;
213
- }
214
- }
215
- return null;
216
- }
217
- function diffTrustedStructuredTurns(before, current) {
218
- if (!before.structuredTurnsTrusted || !current.structuredTurnsTrusted) {
219
- return {
220
- appendedTurns: [],
221
- hasTrustedAppend: false,
222
- hasNewUserTurn: false,
223
- hasNewAssistantTurn: false,
224
- };
225
- }
226
- if (!hasGeminiTurnPrefix(before.turns, current.turns)) {
227
- return {
228
- appendedTurns: [],
229
- hasTrustedAppend: false,
230
- hasNewUserTurn: false,
231
- hasNewAssistantTurn: false,
232
- };
233
- }
234
- const appendedTurns = current.turns.slice(before.turns.length);
235
- return {
236
- appendedTurns,
237
- hasTrustedAppend: appendedTurns.length > 0,
238
- hasNewUserTurn: appendedTurns.some((turn) => turn.Role === 'User'),
239
- hasNewAssistantTurn: appendedTurns.some((turn) => turn.Role === 'Assistant'),
240
- };
241
- }
242
- function diffTranscriptLines(before, current) {
243
- const beforeLines = new Set(before.transcriptLines);
244
- return current.transcriptLines.filter((line) => !beforeLines.has(line));
245
- }
246
- function isLikelyGeminiTranscriptChrome(line) {
247
- const lower = line.toLowerCase();
248
- const markerHits = GEMINI_TRANSCRIPT_CHROME_MARKERS.filter((marker) => lower.includes(marker)).length;
249
- return markerHits >= 2;
250
- }
251
- function extractGeminiTranscriptLineCandidate(transcriptLine, promptText) {
252
- const candidate = transcriptLine.trim();
253
- if (!candidate)
254
- return '';
255
- const prompt = promptText.trim();
256
- const sanitized = sanitizeGeminiResponseText(candidate, promptText);
257
- if (!prompt)
258
- return sanitized;
259
- if (!candidate.includes(prompt))
260
- return sanitized;
261
- if (sanitized && sanitized !== prompt && sanitized !== candidate)
262
- return sanitized;
263
- if (isLikelyGeminiTranscriptChrome(candidate))
264
- return '';
265
- // Some transcript snapshots flatten "prompt + answer" into a single line.
266
- // Recover the answer only when the line starts with the current prompt.
267
- if (candidate.startsWith(prompt)) {
268
- const tail = candidate.slice(prompt.length).replace(/^[\s::,,-]+/, '').trim();
269
- return tail ? sanitizeGeminiResponseText(tail, '') : '';
270
- }
271
- return sanitized;
272
- }
273
- function getStateScript() {
274
- return `
35
+ `}export function resolveGeminiLabels(f,g){const j=String(f??"").trim();return j?[j]:g}export function parseGeminiTitleMatchMode(f,g="contains"){const j=String(f??g).trim().toLowerCase();if(j==="contains"||j==="exact")return j;return null}export function parseGeminiConversationUrl(f){const g=String(f??"").trim();if(!g)return null;try{const j=new URL(g);if(j.hostname!==GEMINI_DOMAIN&&!j.hostname.endsWith(`.${GEMINI_DOMAIN}`))return null;if(!j.pathname.startsWith("/app/"))return null;return j.href}catch{return null}}export function normalizeGeminiTitle(f){return f.replace(/\s+/g," ").trim().toLowerCase()}export function pickGeminiConversationByTitle(f,g,j="contains"){const q=normalizeGeminiTitle(g);if(!q)return null;for(const w of f){const v=normalizeGeminiTitle(w.Title);if(!v)continue;if(j==="exact"){if(v===q)return w;continue}if(v.includes(q))return w}return null}export function resolveGeminiConversationForQuery(f,g,j){const q=String(g??"").trim();if(!q)return f[0]??null;const w=pickGeminiConversationByTitle(f,q,"exact");if(w)return w;if(j==="contains")return pickGeminiConversationByTitle(f,q,"contains");return null}export function sanitizeGeminiResponseText(f,g){let j=f;for(const w of s)j=j.replace(w,"");j=j.trim();const q=g.trim();if(!q)return j;if(j===q)return"";for(const w of[`
36
+
37
+ `,`
38
+ `,`\r
39
+ \r
40
+ `,`\r
41
+ `]){const v=`${q}${w}`;if(j.startsWith(v))return j.slice(v.length).trim()}return j}export function collectGeminiTranscriptAdditions(f,g,j){const q=new Set(f);return g.filter((v)=>!q.has(v)).map((v)=>F(v,j)).filter((v)=>v&&v!==j).join(`
42
+ `).trim()}export function collapseAdjacentGeminiTurns(f){const g=[];for(const j of f){if(!j||typeof j.Role!=="string"||typeof j.Text!=="string")continue;const q=g.at(-1);if(q?.Role===j.Role&&q.Text===j.Text)continue;g.push(j)}return g}function W(f,g){if(f.length>g.length)return!1;return f.every((j,q)=>j.Role===g[q]?.Role&&j.Text===g[q]?.Text)}function c(f,g){if(!g)return null;for(let j=f.length-1;j>=0;j-=1){const q=f[j];if(q?.Role===g.Role&&q.Text===g.Text)return j}return null}function b(f,g){if(!f.structuredTurnsTrusted||!g.structuredTurnsTrusted)return{appendedTurns:[],hasTrustedAppend:!1,hasNewUserTurn:!1,hasNewAssistantTurn:!1};if(!W(f.turns,g.turns))return{appendedTurns:[],hasTrustedAppend:!1,hasNewUserTurn:!1,hasNewAssistantTurn:!1};const j=g.turns.slice(f.turns.length);return{appendedTurns:j,hasTrustedAppend:j.length>0,hasNewUserTurn:j.some((q)=>q.Role==="User"),hasNewAssistantTurn:j.some((q)=>q.Role==="Assistant")}}function y(f,g){const j=new Set(f.transcriptLines);return g.transcriptLines.filter((q)=>!j.has(q))}function d(f){const g=f.toLowerCase();return i.filter((q)=>g.includes(q)).length>=2}function F(f,g){const j=f.trim();if(!j)return"";const q=g.trim(),w=sanitizeGeminiResponseText(j,g);if(!q)return w;if(!j.includes(q))return w;if(w&&w!==q&&w!==j)return w;if(d(j))return"";if(j.startsWith(q)){const v=j.slice(q.length).replace(/^[\s::,,-]+/,"").trim();return v?sanitizeGeminiResponseText(v,""):""}return w}function a(){return`
275
43
  (() => {
276
- ${buildGeminiComposerLocatorScript()}
44
+ ${Q()}
277
45
 
278
46
  const signInNode = Array.from(document.querySelectorAll('a, button')).find((node) => {
279
47
  const text = (node.textContent || '').trim().toLowerCase();
@@ -296,12 +64,9 @@ function getStateScript() {
296
64
  canSend: !!composer,
297
65
  };
298
66
  })()
299
- `;
300
- }
301
- function readGeminiSnapshotScript() {
302
- return `
67
+ `}function G(){return`
303
68
  (() => {
304
- ${buildGeminiComposerLocatorScript()}
69
+ ${Q()}
305
70
  const composer = findComposer();
306
71
  const composerText = composer?.textContent?.replace(/\\u00a0/g, ' ').trim() || '';
307
72
  const isGenerating = !!Array.from(document.querySelectorAll('button, [role="button"]')).find((node) => {
@@ -312,8 +77,8 @@ function readGeminiSnapshotScript() {
312
77
  || text === '停止回答'
313
78
  || aria === '停止回答';
314
79
  });
315
- const turns = ${getTurnsScript().trim()};
316
- const transcriptLines = ${getTranscriptLinesScript().trim()};
80
+ const turns = ${k().trim()};
81
+ const transcriptLines = ${h().trim()};
317
82
 
318
83
  return {
319
84
  url: window.location.href,
@@ -324,22 +89,7 @@ function readGeminiSnapshotScript() {
324
89
  structuredTurnsTrusted: turns.length > 0 || transcriptLines.length === 0,
325
90
  };
326
91
  })()
327
- `;
328
- }
329
- function isGeminiConversationUrl(url) {
330
- try {
331
- const parsed = new URL(url);
332
- if (parsed.hostname !== GEMINI_DOMAIN && !parsed.hostname.endsWith(`.${GEMINI_DOMAIN}`))
333
- return false;
334
- const pathname = parsed.pathname.replace(/\/+$/, '');
335
- return pathname.startsWith('/app/') && pathname !== '/app';
336
- }
337
- catch {
338
- return false;
339
- }
340
- }
341
- function getTranscriptLinesScript() {
342
- return `
92
+ `}function R(f){try{const g=new URL(f);if(g.hostname!==GEMINI_DOMAIN&&!g.hostname.endsWith(`.${GEMINI_DOMAIN}`))return!1;const j=g.pathname.replace(/\/+$/,"");return j.startsWith("/app/")&&j!=="/app"}catch{return!1}}function h(){return`
343
93
  (() => {
344
94
  const clean = (value) => (value || '')
345
95
  .replace(/\\u00a0/g, ' ')
@@ -394,9 +144,9 @@ function getTranscriptLinesScript() {
394
144
  const noisyPatterns = [
395
145
  /^Google Terms$/,
396
146
  /^Google Privacy Policy$/,
397
- /^Gemini is AI and can make mistakes\.?$/,
147
+ /^Gemini is AI and can make mistakes.?$/,
398
148
  /^and the$/,
399
- /^apply\.$/,
149
+ /^apply.$/,
400
150
  /^Opens in a new window$/,
401
151
  /^Open mode picker$/,
402
152
  /^Open upload file menu$/,
@@ -411,10 +161,7 @@ function getTranscriptLinesScript() {
411
161
  && !stopLines.has(line)
412
162
  && !noisyPatterns.some((pattern) => pattern.test(line)));
413
163
  })()
414
- `;
415
- }
416
- function getTurnsScript() {
417
- return `
164
+ `}function k(){return`
418
165
  (() => {
419
166
  const clean = (value) => (value || '')
420
167
  .replace(/\\u00a0/g, ' ')
@@ -470,12 +217,9 @@ function getTurnsScript() {
470
217
 
471
218
  return turns;
472
219
  })()
473
- `;
474
- }
475
- function prepareComposerScript() {
476
- return `
220
+ `}function e(){return`
477
221
  (() => {
478
- ${buildGeminiComposerLocatorScript()}
222
+ ${Q()}
479
223
  const composer = findComposer();
480
224
 
481
225
  if (!(composer instanceof HTMLElement)) {
@@ -504,24 +248,18 @@ function prepareComposerScript() {
504
248
  label: composer.getAttribute('aria-label') || '',
505
249
  };
506
250
  })()
507
- `;
508
- }
509
- function composerHasTextScript() {
510
- return `
251
+ `}function n(){return`
511
252
  (() => {
512
- ${buildGeminiComposerLocatorScript()}
253
+ ${Q()}
513
254
  const composer = findComposer();
514
255
 
515
256
  return {
516
257
  hasText: !!(composer && ((composer.textContent || '').trim() || (composer.innerText || '').trim())),
517
258
  };
518
259
  })()
519
- `;
520
- }
521
- function insertComposerTextFallbackScript(text) {
522
- return `
260
+ `}function I(f){return`
523
261
  ((inputText) => {
524
- ${buildGeminiComposerLocatorScript()}
262
+ ${Q()}
525
263
  const composer = findComposer();
526
264
 
527
265
  if (!(composer instanceof HTMLElement)) {
@@ -558,13 +296,10 @@ function insertComposerTextFallbackScript(text) {
558
296
  return {
559
297
  hasText: !!((composer.textContent || '').trim() || (composer.innerText || '').trim()),
560
298
  };
561
- })(${JSON.stringify(text)})
562
- `;
563
- }
564
- function submitComposerScript() {
565
- return `
299
+ })(${JSON.stringify(f)})
300
+ `}function m(){return`
566
301
  (() => {
567
- ${buildGeminiComposerLocatorScript()}
302
+ ${Q()}
568
303
  const composer = findComposer();
569
304
 
570
305
  if (!(composer instanceof HTMLElement)) {
@@ -629,12 +364,9 @@ function submitComposerScript() {
629
364
 
630
365
  return 'enter';
631
366
  })()
632
- `;
633
- }
634
- function dispatchComposerEnterScript() {
635
- return `
367
+ `}function A(){return`
636
368
  (() => {
637
- ${buildGeminiComposerLocatorScript()}
369
+ ${Q()}
638
370
  const composer = findComposer();
639
371
 
640
372
  if (!(composer instanceof HTMLElement)) {
@@ -646,10 +378,7 @@ function dispatchComposerEnterScript() {
646
378
  composer.dispatchEvent(new KeyboardEvent('keyup', { key: 'Enter', code: 'Enter', keyCode: 13, which: 13, bubbles: true }));
647
379
  return 'enter';
648
380
  })()
649
- `;
650
- }
651
- function clickNewChatScript() {
652
- return `
381
+ `}function o(){return`
653
382
  (() => {
654
383
  const isVisible = (el) => {
655
384
  if (!(el instanceof HTMLElement)) return false;
@@ -679,10 +408,7 @@ function clickNewChatScript() {
679
408
  }
680
409
  return 'navigate';
681
410
  })()
682
- `;
683
- }
684
- function openGeminiToolsMenuScript() {
685
- return `
411
+ `}function t(){return`
686
412
  (() => {
687
413
  const labels = ['tools', 'tool', 'mode', '研究', 'deep research', 'deep-research', '工具'];
688
414
  const normalize = (value) => (value || '').replace(/\\s+/g, ' ').trim().toLowerCase();
@@ -774,11 +500,7 @@ function openGeminiToolsMenuScript() {
774
500
  }
775
501
  return false;
776
502
  })()
777
- `;
778
- }
779
- function selectGeminiToolScript(labels) {
780
- const labelsJson = JSON.stringify(labels);
781
- return `
503
+ `}function r(f){return`
782
504
  ((targetLabels) => {
783
505
  const isDisabled = (el) => {
784
506
  if (!(el instanceof HTMLElement)) return true;
@@ -842,12 +564,8 @@ function selectGeminiToolScript(labels) {
842
564
  }
843
565
 
844
566
  return '';
845
- })(${labelsJson})
846
- `;
847
- }
848
- function clickGeminiConfirmButtonScript(labels) {
849
- const labelsJson = JSON.stringify(labels);
850
- return `
567
+ })(${JSON.stringify(f)})
568
+ `}function ff(f){return`
851
569
  ((targetLabels) => {
852
570
  const isDisabled = (el) => {
853
571
  if (!(el instanceof HTMLElement)) return true;
@@ -908,11 +626,8 @@ function clickGeminiConfirmButtonScript(labels) {
908
626
  }
909
627
 
910
628
  return '';
911
- })(${labelsJson})
912
- `;
913
- }
914
- function getGeminiConversationListScript() {
915
- return `
629
+ })(${JSON.stringify(f)})
630
+ `}function gf(){return`
916
631
  (() => {
917
632
  const normalizeText = (value) => String(value || '').replace(/\\s+/g, ' ').trim();
918
633
  const clampText = (value, maxLength) => {
@@ -970,16 +685,7 @@ function getGeminiConversationListScript() {
970
685
 
971
686
  return results;
972
687
  })()
973
- `;
974
- }
975
-
976
- // Gemini collapses the sidebar's "最近" / "Recents" section by default, so the
977
- // /app/<id> conversation anchors are not present in the DOM (or are hidden)
978
- // until that section is expanded. The script below opens the sidebar if it is
979
- // collapsed and expands the Recents toggle, returning true if it likely
980
- // changed the DOM and the caller should retry extraction.
981
- function expandGeminiRecentScript() {
982
- return `
688
+ `}function x(){return`
983
689
  (() => {
984
690
  const normalize = (value) => String(value || '').replace(/\\s+/g, ' ').trim();
985
691
  const isVisible = (el) => {
@@ -1025,11 +731,7 @@ function expandGeminiRecentScript() {
1025
731
 
1026
732
  return changed;
1027
733
  })()
1028
- `;
1029
- }
1030
- function clickGeminiConversationByTitleScript(query) {
1031
- const normalizedQuery = normalizeGeminiTitle(query);
1032
- return `
734
+ `}function jf(f){const g=normalizeGeminiTitle(f);return`
1033
735
  ((targetQuery) => {
1034
736
  const normalizeText = (value) => String(value || '').replace(/\\s+/g, ' ').trim().toLowerCase();
1035
737
  const isDisabled = (el) => {
@@ -1064,379 +766,9 @@ function clickGeminiConversationByTitleScript(query) {
1064
766
  return true;
1065
767
  }
1066
768
  return false;
1067
- })(${JSON.stringify(normalizedQuery)})
1068
- `;
1069
- }
1070
- function currentUrlScript() {
1071
- return 'window.location.href';
1072
- }
1073
- export async function isOnGemini(page) {
1074
- const url = await page.evaluate(currentUrlScript()).catch(() => '');
1075
- if (typeof url !== 'string' || !url)
1076
- return false;
1077
- try {
1078
- const hostname = new URL(url).hostname;
1079
- return hostname === GEMINI_DOMAIN || hostname.endsWith(`.${GEMINI_DOMAIN}`);
1080
- }
1081
- catch {
1082
- return false;
1083
- }
1084
- }
1085
- export async function ensureGeminiPage(page) {
1086
- if (!(await isOnGemini(page))) {
1087
- await page.goto(GEMINI_APP_URL, { waitUntil: 'load', settleMs: 2500 });
1088
- await page.wait(1);
1089
- }
1090
- }
1091
- export async function getCurrentGeminiUrl(page) {
1092
- await ensureGeminiPage(page);
1093
- const url = await page.evaluate(currentUrlScript()).catch(() => '');
1094
- if (typeof url === 'string' && url.trim())
1095
- return url;
1096
- return GEMINI_APP_URL;
1097
- }
1098
- export async function openGeminiToolsMenu(page) {
1099
- await ensureGeminiPage(page);
1100
- const opened = await page.evaluate(openGeminiToolsMenuScript());
1101
- if (opened) {
1102
- await page.wait(0.5);
1103
- return true;
1104
- }
1105
- return false;
1106
- }
1107
- export async function selectGeminiTool(page, labels) {
1108
- await ensureGeminiPage(page);
1109
- await openGeminiToolsMenu(page);
1110
- const matched = await page.evaluate(selectGeminiToolScript(labels));
1111
- return typeof matched === 'string' ? matched : '';
1112
- }
1113
- export async function waitForGeminiConfirmButton(page, labels, timeoutSeconds) {
1114
- await ensureGeminiPage(page);
1115
- const pollIntervalSeconds = 1;
1116
- const maxPolls = Math.max(1, Math.ceil(timeoutSeconds / pollIntervalSeconds));
1117
- for (let index = 0; index < maxPolls; index += 1) {
1118
- await page.wait(index === 0 ? 0.5 : pollIntervalSeconds);
1119
- const matched = await page.evaluate(clickGeminiConfirmButtonScript(labels));
1120
- if (typeof matched === 'string' && matched)
1121
- return matched;
1122
- }
1123
- return '';
1124
- }
1125
- export async function getGeminiPageState(page) {
1126
- await ensureGeminiPage(page);
1127
- return requireGeminiObjectResult(await page.evaluate(getStateScript()), 'Gemini status');
1128
- }
1129
- export async function startNewGeminiChat(page) {
1130
- await ensureGeminiPage(page);
1131
- const action = await page.evaluate(clickNewChatScript());
1132
- if (action === 'navigate') {
1133
- await page.goto(GEMINI_APP_URL, { waitUntil: 'load', settleMs: 2500 });
1134
- }
1135
- await page.wait(1);
1136
- return action;
1137
- }
1138
- export async function getGeminiConversationList(page) {
1139
- await ensureGeminiPage(page);
1140
- let rows = [];
1141
- // Gemini collapses the sidebar "最近"/Recents section by default, hiding
1142
- // the conversation anchors. Retry extraction after expanding it.
1143
- for (let attempt = 0; attempt < 3; attempt += 1) {
1144
- const raw = requireGeminiArrayResult(await page.evaluate(getGeminiConversationListScript()), 'Gemini conversation list');
1145
- rows = raw.flatMap((item) => {
1146
- if (!isObjectRecord(item) || typeof item.title !== 'string' || typeof item.url !== 'string') {
1147
- throw new CommandExecutionError('Gemini conversation list returned a malformed row');
1148
- }
1149
- if (!isGeminiConversationUrl(item.url))
1150
- return [];
1151
- return { Title: item.title, Url: item.url };
1152
- });
1153
- if (rows.length > 0)
1154
- break;
1155
- const changedRaw = unwrapGeminiEvaluateResult(await page.evaluate(expandGeminiRecentScript()), 'Gemini sidebar expand');
1156
- const changed = changedRaw === true;
1157
- // Give the React sidebar a moment to render the expanded anchors,
1158
- // longer on the first expansion (sidebar slide-in is async).
1159
- await page.wait(attempt === 0 ? 1.2 : 0.6);
1160
- if (!changed && attempt > 0)
1161
- break;
1162
- }
1163
- return rows;
1164
- }
1165
- export async function clickGeminiConversationByTitle(page, query) {
1166
- await ensureGeminiPage(page);
1167
- const normalizedQuery = normalizeGeminiTitle(query);
1168
- if (!normalizedQuery)
1169
- return false;
1170
- const clicked = await page.evaluate(clickGeminiConversationByTitleScript(normalizedQuery));
1171
- if (clicked)
1172
- await page.wait(1);
1173
- return !!clicked;
1174
- }
1175
- export async function getGeminiVisibleTurns(page) {
1176
- const turns = await getGeminiStructuredTurns(page);
1177
- if (Array.isArray(turns) && turns.length > 0)
1178
- return turns;
1179
- const lines = await getGeminiTranscriptLines(page);
1180
- return lines.map((line) => ({ Role: 'System', Text: line }));
1181
- }
1182
- async function getGeminiStructuredTurns(page) {
1183
- await ensureGeminiPage(page);
1184
- const raw = requireGeminiArrayResult(await page.evaluate(getTurnsScript()), 'Gemini visible turns');
1185
- for (const turn of raw) {
1186
- if (!isObjectRecord(turn) || typeof turn.Role !== 'string' || typeof turn.Text !== 'string') {
1187
- throw new CommandExecutionError('Gemini visible turns returned a malformed row');
1188
- }
1189
- }
1190
- const turns = collapseAdjacentGeminiTurns(raw);
1191
- return Array.isArray(turns) ? turns : [];
1192
- }
1193
- export async function getGeminiTranscriptLines(page) {
1194
- await ensureGeminiPage(page);
1195
- const lines = requireGeminiArrayResult(await page.evaluate(getTranscriptLinesScript()), 'Gemini transcript lines');
1196
- if (!lines.every((line) => typeof line === 'string')) {
1197
- throw new CommandExecutionError('Gemini transcript lines returned a malformed row');
1198
- }
1199
- return lines;
1200
- }
1201
- export async function waitForGeminiTranscript(page, attempts = 5) {
1202
- let lines = [];
1203
- for (let index = 0; index < attempts; index += 1) {
1204
- lines = await getGeminiTranscriptLines(page);
1205
- if (lines.length > 0)
1206
- return lines;
1207
- if (index < attempts - 1)
1208
- await page.wait(1);
1209
- }
1210
- return lines;
1211
- }
1212
- export async function getLatestGeminiAssistantResponse(page) {
1213
- await ensureGeminiPage(page);
1214
- const turns = await getGeminiVisibleTurns(page);
1215
- const assistantTurn = [...turns].reverse().find((turn) => turn.Role === 'Assistant');
1216
- if (assistantTurn?.Text) {
1217
- return sanitizeGeminiResponseText(assistantTurn.Text, '');
1218
- }
1219
- const lines = await getGeminiTranscriptLines(page);
1220
- return lines.join('\n').trim();
1221
- }
1222
- export async function readGeminiSnapshot(page) {
1223
- await ensureGeminiPage(page);
1224
- const snapshot = requireGeminiObjectResult(await page.evaluate(readGeminiSnapshotScript()), 'Gemini page snapshot');
1225
- if (!Array.isArray(snapshot.turns) ||
1226
- !Array.isArray(snapshot.transcriptLines) ||
1227
- typeof snapshot.composerHasText !== 'boolean' ||
1228
- typeof snapshot.isGenerating !== 'boolean' ||
1229
- typeof snapshot.structuredTurnsTrusted !== 'boolean') {
1230
- throw new CommandExecutionError('Gemini page snapshot returned a malformed result');
1231
- }
1232
- return snapshot;
1233
- }
1234
- function findLastUserTurnIndex(turns) {
1235
- for (let index = turns.length - 1; index >= 0; index -= 1) {
1236
- if (turns[index]?.Role === 'User')
1237
- return index;
1238
- }
1239
- return null;
1240
- }
1241
- function findLastUserTurn(turns) {
1242
- const index = findLastUserTurnIndex(turns);
1243
- return index === null ? null : turns[index] ?? null;
1244
- }
1245
- export async function waitForGeminiSubmission(page, before, timeoutSeconds) {
1246
- const preSendAssistantCount = before.turns.filter((turn) => turn.Role === 'Assistant').length;
1247
- const maxPolls = Math.max(1, Math.ceil(timeoutSeconds));
1248
- for (let index = 0; index < maxPolls; index += 1) {
1249
- await page.wait(index === 0 ? 0.5 : 1);
1250
- const current = await readGeminiSnapshot(page);
1251
- const structuredAppend = diffTrustedStructuredTurns(before, current);
1252
- const transcriptDelta = diffTranscriptLines(before, current);
1253
- if (structuredAppend.hasTrustedAppend && structuredAppend.hasNewUserTurn) {
1254
- return {
1255
- snapshot: current,
1256
- preSendAssistantCount,
1257
- userAnchorTurn: findLastUserTurn(current.turns),
1258
- reason: 'user_turn',
1259
- };
1260
- }
1261
- if (!current.composerHasText && current.isGenerating) {
1262
- return {
1263
- snapshot: current,
1264
- preSendAssistantCount,
1265
- userAnchorTurn: findLastUserTurn(current.turns),
1266
- reason: 'composer_generating',
1267
- };
1268
- }
1269
- // Transcript-only growth is noisy on /app root. When URL is available,
1270
- // trust this signal only after Gemini has navigated into a concrete
1271
- // conversation URL. (Keep backwards compatibility for mocked snapshots
1272
- // that don't carry url.)
1273
- const transcriptSubmissionAllowed = !current.url || isGeminiConversationUrl(String(current.url));
1274
- if (!current.composerHasText && transcriptDelta.length > 0 && transcriptSubmissionAllowed) {
1275
- return {
1276
- snapshot: current,
1277
- preSendAssistantCount,
1278
- userAnchorTurn: findLastUserTurn(current.turns),
1279
- reason: 'composer_transcript',
1280
- };
1281
- }
1282
- }
1283
- return null;
1284
- }
1285
- export async function sendGeminiMessage(page, text) {
1286
- await ensureGeminiPage(page);
1287
- let prepared;
1288
- for (let attempt = 0; attempt < GEMINI_COMPOSER_PREPARE_ATTEMPTS; attempt += 1) {
1289
- prepared = await page.evaluate(prepareComposerScript());
1290
- if (prepared?.ok)
1291
- break;
1292
- if (attempt < GEMINI_COMPOSER_PREPARE_ATTEMPTS - 1)
1293
- await page.wait(GEMINI_COMPOSER_PREPARE_WAIT_SECONDS);
1294
- }
1295
- if (!prepared?.ok) {
1296
- throw new CommandExecutionError(prepared?.reason || 'Could not find Gemini composer');
1297
- }
1298
- let hasText = false;
1299
- if (page.nativeType) {
1300
- try {
1301
- await page.nativeType(text);
1302
- await page.wait(0.2);
1303
- const nativeState = await page.evaluate(composerHasTextScript());
1304
- hasText = !!nativeState?.hasText;
1305
- }
1306
- catch { }
1307
- }
1308
- if (!hasText) {
1309
- const fallbackState = await page.evaluate(insertComposerTextFallbackScript(text));
1310
- hasText = !!fallbackState?.hasText;
1311
- }
1312
- if (!hasText) {
1313
- throw new CommandExecutionError('Failed to insert text into Gemini composer');
1314
- }
1315
- const submitAction = await page.evaluate(submitComposerScript());
1316
- if (submitAction === 'button') {
1317
- await page.wait(1);
1318
- return 'button';
1319
- }
1320
- if (page.nativeKeyPress) {
1321
- try {
1322
- await page.nativeKeyPress('Enter');
1323
- }
1324
- catch {
1325
- await page.evaluate(dispatchComposerEnterScript());
1326
- }
1327
- }
1328
- else {
1329
- await page.evaluate(dispatchComposerEnterScript());
1330
- }
1331
- await page.wait(1);
1332
- return 'enter';
1333
- }
1334
- function normalizeGeminiExportUrls(value) {
1335
- if (!Array.isArray(value))
1336
- return [];
1337
- const seen = new Set();
1338
- const urls = [];
1339
- for (const item of value) {
1340
- const raw = String(item ?? '').trim();
1341
- if (!raw || seen.has(raw))
1342
- continue;
1343
- seen.add(raw);
1344
- urls.push(raw);
1345
- }
1346
- return urls;
1347
- }
1348
- export function pickGeminiDeepResearchExportUrl(rawUrls, currentUrl) {
1349
- let bestScore = -Infinity;
1350
- let bestUrl = '';
1351
- let bestSource = 'none';
1352
- const sourceWeight = {
1353
- fetch: 50,
1354
- xhr: 45,
1355
- 'fetch-body': 72,
1356
- 'xhr-body': 72,
1357
- 'fetch-body-docs-id': 95,
1358
- 'xhr-body-docs-id': 95,
1359
- open: 55,
1360
- anchor: 55,
1361
- performance: 35,
1362
- };
1363
- for (const rawEntry of rawUrls) {
1364
- const match = rawEntry.match(/^([a-z-]+)::(.+)$/i);
1365
- const sourceKey = (match?.[1] ?? 'performance').toLowerCase();
1366
- const rawUrl = (match?.[2] ?? rawEntry).trim();
1367
- if (!rawUrl)
1368
- continue;
1369
- let parsedUrl = rawUrl;
1370
- let isBlob = false;
1371
- if (rawUrl.startsWith('blob:')) {
1372
- isBlob = true;
1373
- }
1374
- else {
1375
- try {
1376
- parsedUrl = new URL(rawUrl, currentUrl).href;
1377
- }
1378
- catch {
1379
- continue;
1380
- }
1381
- }
1382
- if (!isBlob) {
1383
- try {
1384
- const parsed = new URL(parsedUrl);
1385
- if (!['http:', 'https:'].includes(parsed.protocol))
1386
- continue;
1387
- }
1388
- catch {
1389
- continue;
1390
- }
1391
- }
1392
- const hasMarkdownSignal = /\.md(?:$|[?#])/i.test(parsedUrl) || /markdown/i.test(parsedUrl);
1393
- const hasExportSignal = /export|download|attachment|file|save-report/i.test(parsedUrl);
1394
- const isGoogleDocUrl = /docs\.google\.com\/document\//i.test(parsedUrl);
1395
- const isGoogleSheetUrl = /docs\.google\.com\/spreadsheets\//i.test(parsedUrl);
1396
- const isNoiseEndpoint = /cspreport|allowlist|gen_204|telemetry|metrics|analytics|doubleclick|logging|collect|favicon/i.test(parsedUrl);
1397
- let score = sourceWeight[sourceKey] ?? 20;
1398
- if (hasMarkdownSignal)
1399
- score += 45;
1400
- if (hasExportSignal)
1401
- score += 25;
1402
- if (isGoogleDocUrl)
1403
- score += 100;
1404
- if (isGoogleSheetUrl)
1405
- score -= 160;
1406
- if (/gemini\.google\.com\/app\//i.test(parsedUrl))
1407
- score -= 60;
1408
- if (/googleapis\.com|gstatic\.com|doubleclick\.net|google-analytics/i.test(parsedUrl))
1409
- score -= 40;
1410
- if (!hasMarkdownSignal && !hasExportSignal && !isBlob)
1411
- score -= 40;
1412
- if (isNoiseEndpoint)
1413
- score -= 120;
1414
- if (parsedUrl === currentUrl)
1415
- score -= 80;
1416
- if (isBlob)
1417
- score += 25;
1418
- if (score > bestScore) {
1419
- bestScore = score;
1420
- bestUrl = parsedUrl;
1421
- if (isBlob)
1422
- bestSource = 'blob';
1423
- else if (sourceKey === 'open')
1424
- bestSource = 'window-open';
1425
- else if (sourceKey === 'anchor')
1426
- bestSource = 'anchor';
1427
- else if (sourceKey === 'performance')
1428
- bestSource = 'performance';
1429
- else
1430
- bestSource = 'network';
1431
- }
1432
- }
1433
- if (!bestUrl || bestScore < 60) {
1434
- return { url: '', source: 'none' };
1435
- }
1436
- return { url: bestUrl, source: bestSource };
1437
- }
1438
- function exportGeminiDeepResearchReportScript(maxWaitMs) {
1439
- return `
769
+ })(${JSON.stringify(g)})
770
+ `}function C(){return"window.location.href"}export async function isOnGemini(f){const g=await f.evaluate(C()).catch(()=>"");if(typeof g!=="string"||!g)return!1;try{const j=new URL(g).hostname;return j===GEMINI_DOMAIN||j.endsWith(`.${GEMINI_DOMAIN}`)}catch{return!1}}export async function ensureGeminiPage(f){if(!await isOnGemini(f)){await f.goto(GEMINI_APP_URL,{waitUntil:"load",settleMs:2500});await f.wait(1)}}export async function getCurrentGeminiUrl(f){await ensureGeminiPage(f);const g=await f.evaluate(C()).catch(()=>"");if(typeof g==="string"&&g.trim())return g;return GEMINI_APP_URL}export async function openGeminiToolsMenu(f){await ensureGeminiPage(f);if(await f.evaluate(t())){await f.wait(0.5);return!0}return!1}export async function selectGeminiTool(f,g){await ensureGeminiPage(f);await openGeminiToolsMenu(f);const j=await f.evaluate(r(g));return typeof j==="string"?j:""}export async function waitForGeminiConfirmButton(f,g,j){await ensureGeminiPage(f);const q=1,w=Math.max(1,Math.ceil(j/q));for(let v=0;v<w;v+=1){await f.wait(v===0?0.5:q);const z=await f.evaluate(ff(g));if(typeof z==="string"&&z)return z}return""}export async function getGeminiPageState(f){await ensureGeminiPage(f);return $(await f.evaluate(a()),"Gemini status")}export async function startNewGeminiChat(f){await ensureGeminiPage(f);const g=await f.evaluate(o());if(g==="navigate")await f.goto(GEMINI_APP_URL,{waitUntil:"load",settleMs:2500});await f.wait(1);return g}export async function getGeminiConversationList(f){await ensureGeminiPage(f);let g=[];for(let j=0;j<3;j+=1){g=V(await f.evaluate(gf()),"Gemini conversation list").flatMap((z)=>{if(!S(z)||typeof z.title!=="string"||typeof z.url!=="string")throw new P("Gemini conversation list returned a malformed row");if(!R(z.url))return[];return{Title:z.title,Url:z.url}});if(g.length>0)break;const v=U(await f.evaluate(x()),"Gemini sidebar expand")===!0;await f.wait(j===0?1.2:0.6);if(!v&&j>0)break}return g}export async function clickGeminiConversationByTitle(f,g){await ensureGeminiPage(f);const j=normalizeGeminiTitle(g);if(!j)return!1;const q=await f.evaluate(jf(j));if(q)await f.wait(1);return!!q}export async function getGeminiVisibleTurns(f){const g=await qf(f);if(Array.isArray(g)&&g.length>0)return g;return(await getGeminiTranscriptLines(f)).map((q)=>({Role:"System",Text:q}))}async function qf(f){await ensureGeminiPage(f);const g=V(await f.evaluate(k()),"Gemini visible turns");for(const q of g)if(!S(q)||typeof q.Role!=="string"||typeof q.Text!=="string")throw new P("Gemini visible turns returned a malformed row");const j=collapseAdjacentGeminiTurns(g);return Array.isArray(j)?j:[]}export async function getGeminiTranscriptLines(f){await ensureGeminiPage(f);const g=V(await f.evaluate(h()),"Gemini transcript lines");if(!g.every((j)=>typeof j==="string"))throw new P("Gemini transcript lines returned a malformed row");return g}export async function waitForGeminiTranscript(f,g=5){let j=[];for(let q=0;q<g;q+=1){j=await getGeminiTranscriptLines(f);if(j.length>0)return j;if(q<g-1)await f.wait(1)}return j}export async function getLatestGeminiAssistantResponse(f){await ensureGeminiPage(f);const j=[...await getGeminiVisibleTurns(f)].reverse().find((w)=>w.Role==="Assistant");if(j?.Text)return sanitizeGeminiResponseText(j.Text,"");return(await getGeminiTranscriptLines(f)).join(`
771
+ `).trim()}export async function readGeminiSnapshot(f){await ensureGeminiPage(f);const g=$(await f.evaluate(G()),"Gemini page snapshot");if(!Array.isArray(g.turns)||!Array.isArray(g.transcriptLines)||typeof g.composerHasText!=="boolean"||typeof g.isGenerating!=="boolean"||typeof g.structuredTurnsTrusted!=="boolean")throw new P("Gemini page snapshot returned a malformed result");return g}function vf(f){for(let g=f.length-1;g>=0;g-=1)if(f[g]?.Role==="User")return g;return null}function X(f){const g=vf(f);return g===null?null:f[g]??null}export async function waitForGeminiSubmission(f,g,j){const q=g.turns.filter((v)=>v.Role==="Assistant").length,w=Math.max(1,Math.ceil(j));for(let v=0;v<w;v+=1){await f.wait(v===0?0.5:1);const z=await readGeminiSnapshot(f),H=b(g,z),D=y(g,z);if(H.hasTrustedAppend&&H.hasNewUserTurn)return{snapshot:z,preSendAssistantCount:q,userAnchorTurn:X(z.turns),reason:"user_turn"};if(!z.composerHasText&&z.isGenerating)return{snapshot:z,preSendAssistantCount:q,userAnchorTurn:X(z.turns),reason:"composer_generating"};const J=!z.url||R(String(z.url));if(!z.composerHasText&&D.length>0&&J)return{snapshot:z,preSendAssistantCount:q,userAnchorTurn:X(z.turns),reason:"composer_transcript"}}return null}export async function sendGeminiMessage(f,g){await ensureGeminiPage(f);let j;for(let v=0;v<_;v+=1){j=await f.evaluate(e());if(j?.ok)break;if(v<_-1)await f.wait(u)}if(!j?.ok)throw new P(j?.reason||"Could not find Gemini composer");let q=!1;if(f.nativeType)try{await f.nativeType(g);await f.wait(0.2);q=!!(await f.evaluate(n()))?.hasText}catch{}if(!q)q=!!(await f.evaluate(I(g)))?.hasText;if(!q)throw new P("Failed to insert text into Gemini composer");if(await f.evaluate(m())==="button"){await f.wait(1);return"button"}if(f.nativeKeyPress)try{await f.nativeKeyPress("Enter")}catch{await f.evaluate(A())}else await f.evaluate(A());await f.wait(1);return"enter"}function wf(f){if(!Array.isArray(f))return[];const g=new Set,j=[];for(const q of f){const w=String(q??"").trim();if(!w||g.has(w))continue;g.add(w);j.push(w)}return j}export function pickGeminiDeepResearchExportUrl(f,g){let j=-1/0,q="",w="none";const v={fetch:50,xhr:45,"fetch-body":72,"xhr-body":72,"fetch-body-docs-id":95,"xhr-body-docs-id":95,open:55,anchor:55,performance:35};for(const z of f){const H=z.match(/^([a-z-]+)::(.+)$/i),D=(H?.[1]??"performance").toLowerCase(),J=(H?.[2]??z).trim();if(!J)continue;let B=J,N=!1;if(J.startsWith("blob:"))N=!0;else try{B=new URL(J,g).href}catch{continue}if(!N)try{const p=new URL(B);if(!["http:","https:"].includes(p.protocol))continue}catch{continue}const E=/\.md(?:$|[?#])/i.test(B)||/markdown/i.test(B),K=/export|download|attachment|file|save-report/i.test(B),L=/docs\.google\.com\/document\//i.test(B),O=/docs\.google\.com\/spreadsheets\//i.test(B),l=/cspreport|allowlist|gen_204|telemetry|metrics|analytics|doubleclick|logging|collect|favicon/i.test(B);let M=v[D]??20;if(E)M+=45;if(K)M+=25;if(L)M+=100;if(O)M-=160;if(/gemini\.google\.com\/app\//i.test(B))M-=60;if(/googleapis\.com|gstatic\.com|doubleclick\.net|google-analytics/i.test(B))M-=40;if(!E&&!K&&!N)M-=40;if(l)M-=120;if(B===g)M-=80;if(N)M+=25;if(M>j){j=M;q=B;if(N)w="blob";else if(D==="open")w="window-open";else if(D==="anchor")w="anchor";else if(D==="performance")w="performance";else w="network"}}if(!q||j<60)return{url:"",source:"none"};return{url:q,source:w}}function zf(f){return`
1440
772
  (async () => {
1441
773
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
1442
774
  const labels = {
@@ -1788,7 +1120,7 @@ function exportGeminiDeepResearchReportScript(maxWaitMs) {
1788
1120
  return { ok: false, step: 'export-docs', currentUrl: window.location.href, share, trace, urls: collectUrls() };
1789
1121
  }
1790
1122
 
1791
- const deadline = Date.now() + ${Math.max(5000, Math.min(maxWaitMs, 180000))};
1123
+ const deadline = Date.now() + ${Math.max(5000,Math.min(f,180000))};
1792
1124
  while (Date.now() < deadline) {
1793
1125
  const urls = collectUrls();
1794
1126
  const hasDocsSignal = urls.some((value) => /docs\\.google\\.com\\/document\\//i.test(String(value || '')));
@@ -1805,60 +1137,7 @@ function exportGeminiDeepResearchReportScript(maxWaitMs) {
1805
1137
 
1806
1138
  return { ok: true, step: 'timeout', currentUrl: window.location.href, share, exportDocs: exportDocsBtn, trace, urls: collectUrls() };
1807
1139
  })()
1808
- `;
1809
- }
1810
- function extractDocsUrlFromTabs(tabs) {
1811
- if (!Array.isArray(tabs))
1812
- return '';
1813
- for (const tab of tabs) {
1814
- if (!tab || typeof tab !== 'object')
1815
- continue;
1816
- const url = String(tab.url ?? '').trim();
1817
- if (/^https:\/\/docs\.google\.com\/document\//i.test(url))
1818
- return url;
1819
- }
1820
- return '';
1821
- }
1822
- export async function exportGeminiDeepResearchReport(page, timeoutSeconds = 120) {
1823
- await ensureGeminiPage(page);
1824
- const timeoutMs = Math.max(1, timeoutSeconds) * 1000;
1825
- const tabsBefore = await page.tabs().catch(() => []);
1826
- const exportScript = exportGeminiDeepResearchReportScript(timeoutMs);
1827
- const raw = await page.evaluate(exportScript).catch(() => null);
1828
- const tabsAfter = await page.tabs().catch(() => []);
1829
- const docsUrlFromTabs = extractDocsUrlFromTabs(tabsAfter) || extractDocsUrlFromTabs(tabsBefore);
1830
- if (docsUrlFromTabs) {
1831
- return { url: docsUrlFromTabs, source: 'tab' };
1832
- }
1833
- const docsUrlFromCurrent = typeof raw?.currentUrl === 'string' && /^https:\/\/docs\.google\.com\/document\//i.test(raw.currentUrl)
1834
- ? raw.currentUrl
1835
- : '';
1836
- if (docsUrlFromCurrent) {
1837
- return { url: docsUrlFromCurrent, source: 'window-open' };
1838
- }
1839
- const urls = normalizeGeminiExportUrls(raw?.urls);
1840
- const currentUrl = typeof raw?.currentUrl === 'string' && raw.currentUrl
1841
- ? raw.currentUrl
1842
- : await getCurrentGeminiUrl(page);
1843
- return pickGeminiDeepResearchExportUrl(urls, currentUrl);
1844
- }
1845
- export const __test__ = {
1846
- GEMINI_COMPOSER_SELECTORS,
1847
- GEMINI_COMPOSER_MARKER_ATTR,
1848
- collapseAdjacentGeminiTurns,
1849
- clickNewChatScript,
1850
- diffTranscriptLines,
1851
- diffTrustedStructuredTurns,
1852
- hasGeminiTurnPrefix,
1853
- readGeminiSnapshot,
1854
- readGeminiSnapshotScript,
1855
- expandGeminiRecentScript,
1856
- submitComposerScript,
1857
- insertComposerTextFallbackScript,
1858
- };
1859
- export async function getGeminiVisibleImageUrls(page) {
1860
- await ensureGeminiPage(page);
1861
- return await page.evaluate(`
1140
+ `}function T(f){if(!Array.isArray(f))return"";for(const g of f){if(!g||typeof g!=="object")continue;const j=String(g.url??"").trim();if(/^https:\/\/docs\.google\.com\/document\//i.test(j))return j}return""}export async function exportGeminiDeepResearchReport(f,g=120){await ensureGeminiPage(f);const j=Math.max(1,g)*1000,q=await f.tabs().catch(()=>[]),w=zf(j),v=await f.evaluate(w).catch(()=>null),z=await f.tabs().catch(()=>[]),H=T(z)||T(q);if(H)return{url:H,source:"tab"};const D=typeof v?.currentUrl==="string"&&/^https:\/\/docs\.google\.com\/document\//i.test(v.currentUrl)?v.currentUrl:"";if(D)return{url:D,source:"window-open"};const J=wf(v?.urls),B=typeof v?.currentUrl==="string"&&v.currentUrl?v.currentUrl:await getCurrentGeminiUrl(f);return pickGeminiDeepResearchExportUrl(J,B)}export const __test__={GEMINI_COMPOSER_SELECTORS:Y,GEMINI_COMPOSER_MARKER_ATTR:Z,collapseAdjacentGeminiTurns,clickNewChatScript:o,diffTranscriptLines:y,diffTrustedStructuredTurns:b,hasGeminiTurnPrefix:W,readGeminiSnapshot,readGeminiSnapshotScript:G,expandGeminiRecentScript:x,submitComposerScript:m,insertComposerTextFallbackScript:I};export async function getGeminiVisibleImageUrls(f){await ensureGeminiPage(f);return await f.evaluate(`
1862
1141
  (() => {
1863
1142
  const isVisible = (el) => {
1864
1143
  if (!(el instanceof HTMLElement)) return false;
@@ -1886,36 +1165,9 @@ export async function getGeminiVisibleImageUrls(page) {
1886
1165
  }
1887
1166
  return urls;
1888
1167
  })()
1889
- `);
1890
- }
1891
- export async function waitForGeminiImages(page, beforeUrls, timeoutSeconds) {
1892
- const beforeSet = new Set(beforeUrls);
1893
- const pollIntervalSeconds = 3;
1894
- const maxPolls = Math.max(1, Math.ceil(timeoutSeconds / pollIntervalSeconds));
1895
- let lastUrls = [];
1896
- let stableCount = 0;
1897
- for (let index = 0; index < maxPolls; index += 1) {
1898
- await page.wait(index === 0 ? 2 : pollIntervalSeconds);
1899
- const urls = (await getGeminiVisibleImageUrls(page)).filter((url) => !beforeSet.has(url));
1900
- if (urls.length === 0)
1901
- continue;
1902
- const key = urls.join('\n');
1903
- const prevKey = lastUrls.join('\n');
1904
- if (key == prevKey)
1905
- stableCount += 1;
1906
- else {
1907
- lastUrls = urls;
1908
- stableCount = 1;
1909
- }
1910
- if (stableCount >= 2 || index === maxPolls - 1)
1911
- return lastUrls;
1912
- }
1913
- return lastUrls;
1914
- }
1915
- export async function exportGeminiImages(page, urls) {
1916
- await ensureGeminiPage(page);
1917
- const urlsJson = JSON.stringify(urls);
1918
- return await page.evaluate(`
1168
+ `)}export async function waitForGeminiImages(f,g,j){const q=new Set(g),w=3,v=Math.max(1,Math.ceil(j/w));let z=[],H=0;for(let D=0;D<v;D+=1){await f.wait(D===0?2:w);const J=(await getGeminiVisibleImageUrls(f)).filter((E)=>!q.has(E));if(J.length===0)continue;const B=J.join(`
1169
+ `),N=z.join(`
1170
+ `);if(B==N)H+=1;else{z=J;H=1}if(H>=2||D===v-1)return z}return z}export async function exportGeminiImages(f,g){await ensureGeminiPage(f);const j=JSON.stringify(g);return await f.evaluate(`
1919
1171
  (async (targetUrls) => {
1920
1172
  const blobToDataUrl = (blob) => new Promise((resolve, reject) => {
1921
1173
  const reader = new FileReader();
@@ -1977,80 +1229,6 @@ export async function exportGeminiImages(page, urls) {
1977
1229
  }
1978
1230
 
1979
1231
  return results;
1980
- })(${urlsJson})
1981
- `);
1982
- }
1983
- export async function waitForGeminiResponse(page, baseline, promptText, timeoutSeconds) {
1984
- if (timeoutSeconds <= 0)
1985
- return '';
1986
- // Reply ownership must survive Gemini prepending older history later.
1987
- // Re-anchor on the submitted user turn when possible, and otherwise only
1988
- // accept assistants that are appended to the exact submission snapshot.
1989
- const pickStructuredReplyCandidate = (current) => {
1990
- if (!current.structuredTurnsTrusted)
1991
- return '';
1992
- const userAnchorTurnIndex = findLastMatchingGeminiTurnIndex(current.turns, baseline.userAnchorTurn);
1993
- if (userAnchorTurnIndex !== null) {
1994
- const candidate = current.turns
1995
- .slice(userAnchorTurnIndex + 1)
1996
- .filter((turn) => turn.Role === 'Assistant')
1997
- .at(-1);
1998
- return candidate ? sanitizeGeminiResponseText(candidate.Text, promptText) : '';
1999
- }
2000
- if (hasGeminiTurnPrefix(baseline.snapshot.turns, current.turns)) {
2001
- const appendedAssistant = current.turns
2002
- .slice(baseline.snapshot.turns.length)
2003
- .filter((turn) => turn.Role === 'Assistant')
2004
- .at(-1);
2005
- if (appendedAssistant) {
2006
- return sanitizeGeminiResponseText(appendedAssistant.Text, promptText);
2007
- }
2008
- }
2009
- return '';
2010
- };
2011
- const pickFallbackGeminiTranscriptReply = (current) => current.transcriptLines
2012
- .filter((line) => !baseline.snapshot.transcriptLines.includes(line))
2013
- .map((line) => extractGeminiTranscriptLineCandidate(line, promptText))
2014
- .filter(Boolean)
2015
- .join('\n')
2016
- .trim();
2017
- const maxPolls = Math.max(1, Math.ceil(timeoutSeconds / 2));
2018
- let lastStructured = '';
2019
- let structuredStableCount = 0;
2020
- let lastTranscript = '';
2021
- let transcriptStableCount = 0;
2022
- let transcriptMissCount = 0;
2023
- for (let index = 0; index < maxPolls; index += 1) {
2024
- await page.wait(index === 0 ? 1 : 2);
2025
- const current = await readGeminiSnapshot(page);
2026
- const structuredCandidate = pickStructuredReplyCandidate(current);
2027
- if (structuredCandidate) {
2028
- if (structuredCandidate === lastStructured)
2029
- structuredStableCount += 1;
2030
- else {
2031
- lastStructured = structuredCandidate;
2032
- structuredStableCount = 1;
2033
- }
2034
- if (!current.isGenerating && structuredStableCount >= 2) {
2035
- return structuredCandidate;
2036
- }
2037
- continue;
2038
- }
2039
- transcriptMissCount += 1;
2040
- if (transcriptMissCount < 2)
2041
- continue;
2042
- const transcriptCandidate = pickFallbackGeminiTranscriptReply(current);
2043
- if (!transcriptCandidate)
2044
- continue;
2045
- if (transcriptCandidate === lastTranscript)
2046
- transcriptStableCount += 1;
2047
- else {
2048
- lastTranscript = transcriptCandidate;
2049
- transcriptStableCount = 1;
2050
- }
2051
- if (!current.isGenerating && transcriptStableCount >= 2) {
2052
- return transcriptCandidate;
2053
- }
2054
- }
2055
- return '';
2056
- }
1232
+ })(${j})
1233
+ `)}export async function waitForGeminiResponse(f,g,j,q){if(q<=0)return"";const w=(E)=>{if(!E.structuredTurnsTrusted)return"";const K=c(E.turns,g.userAnchorTurn);if(K!==null){const L=E.turns.slice(K+1).filter((O)=>O.Role==="Assistant").at(-1);return L?sanitizeGeminiResponseText(L.Text,j):""}if(W(g.snapshot.turns,E.turns)){const L=E.turns.slice(g.snapshot.turns.length).filter((O)=>O.Role==="Assistant").at(-1);if(L)return sanitizeGeminiResponseText(L.Text,j)}return""},v=(E)=>E.transcriptLines.filter((K)=>!g.snapshot.transcriptLines.includes(K)).map((K)=>F(K,j)).filter(Boolean).join(`
1234
+ `).trim(),z=Math.max(1,Math.ceil(q/2));let H="",D=0,J="",B=0,N=0;for(let E=0;E<z;E+=1){await f.wait(E===0?1:2);const K=await readGeminiSnapshot(f),L=w(K);if(L){if(L===H)D+=1;else{H=L;D=1}if(!K.isGenerating&&D>=2)return L;continue}N+=1;if(N<2)continue;const O=v(K);if(!O)continue;if(O===J)B+=1;else{J=O;B=1}if(!K.isGenerating&&B>=2)return O}return""}