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.
- package/LICENSE +24 -0
- package/cli-manifest.json +3116 -305
- package/clis/12306/auth.js +2 -36
- package/clis/12306/me.js +3 -67
- package/clis/12306/orders.js +3 -86
- package/clis/12306/passengers.js +4 -80
- package/clis/12306/price.js +1 -166
- package/clis/12306/stations.js +1 -66
- package/clis/12306/train.js +1 -91
- package/clis/12306/trains.js +1 -166
- package/clis/12306/utils.js +1 -272
- package/clis/1688/assets.js +2 -80
- package/clis/1688/auth.js +1 -46
- package/clis/1688/download.js +1 -77
- package/clis/1688/item.js +4 -171
- package/clis/1688/search.js +4 -185
- package/clis/1688/shared.js +6 -552
- package/clis/1688/store.js +5 -206
- package/clis/1point3acres/auth.js +2 -36
- package/clis/1point3acres/digest.js +1 -35
- package/clis/1point3acres/forum.js +1 -51
- package/clis/1point3acres/forums.js +1 -44
- package/clis/1point3acres/hot.js +1 -35
- package/clis/1point3acres/latest.js +1 -35
- package/clis/1point3acres/notifications.js +1 -64
- package/clis/1point3acres/search.js +1 -71
- package/clis/1point3acres/thread.js +2 -117
- package/clis/1point3acres/user.js +1 -77
- package/clis/1point3acres/utils.js +5 -246
- package/clis/36kr/article.js +3 -49
- package/clis/36kr/hot.js +2 -73
- package/clis/36kr/news.js +1 -52
- package/clis/36kr/search.js +2 -45
- package/clis/51job/company.js +2 -92
- package/clis/51job/detail.js +2 -76
- package/clis/51job/hot.js +1 -56
- package/clis/51job/search.js +1 -80
- package/clis/51job/utils.js +7 -288
- package/clis/_atlassian/shared.js +21 -577
- package/clis/_shared/article/auth.js +15 -123
- package/clis/_shared/article/douban-md2draft.js +4 -110
- package/clis/_shared/article/format.js +1 -71
- package/clis/_shared/article/images.js +7 -125
- package/clis/_shared/article/login.js +1 -90
- package/clis/_shared/article/page-runtime.js +148 -35
- package/clis/_shared/article/publish.js +29 -182
- package/clis/_shared/common.js +1 -32
- package/clis/_shared/content-guard.js +1 -0
- package/clis/_shared/desktop-commands.js +1 -112
- package/clis/_shared/search-adapter.js +1 -70
- package/clis/_shared/site-auth.js +1 -118
- package/clis/_shared/token-auth.js +2 -0
- package/clis/_shared/video-publish.js +62 -0
- package/clis/aibase/news.js +2 -81
- package/clis/amazon/auth.js +2 -36
- package/clis/amazon/bestsellers.js +1 -8
- package/clis/amazon/discussion.js +3 -106
- package/clis/amazon/movers-shakers.js +1 -8
- package/clis/amazon/new-releases.js +1 -8
- package/clis/amazon/offer.js +3 -115
- package/clis/amazon/product.js +5 -73
- package/clis/amazon/rankings.js +2 -161
- package/clis/amazon/search.js +2 -74
- package/clis/amazon/shared.js +6 -360
- package/clis/antigravity/_actions.js +14 -131
- package/clis/antigravity/audit-extras.js +10 -273
- package/clis/antigravity/delete.js +1 -60
- package/clis/antigravity/dump.js +1 -29
- package/clis/antigravity/extract-code.js +2 -17
- package/clis/antigravity/history.js +1 -26
- package/clis/antigravity/mark-read.js +1 -52
- package/clis/antigravity/model.js +6 -77
- package/clis/antigravity/new.js +2 -19
- package/clis/antigravity/read.js +2 -27
- package/clis/antigravity/rename.js +1 -33
- package/clis/antigravity/send.js +3 -28
- package/clis/antigravity/serve.js +18 -479
- package/clis/antigravity/status.js +1 -19
- package/clis/antigravity/storage.js +6 -360
- package/clis/antigravity/watch.js +2 -39
- package/clis/apple-podcasts/episodes.js +1 -29
- package/clis/apple-podcasts/search.js +1 -31
- package/clis/apple-podcasts/top.js +1 -45
- package/clis/apple-podcasts/utils.js +1 -30
- package/clis/archive/item.js +1 -92
- package/clis/archive/search.js +1 -115
- package/clis/archive/snapshots.js +1 -129
- package/clis/archive/wayback.js +1 -83
- package/clis/arxiv/author.js +1 -44
- package/clis/arxiv/paper.js +1 -22
- package/clis/arxiv/recent.js +1 -33
- package/clis/arxiv/search.js +1 -36
- package/clis/arxiv/utils.js +1 -112
- package/clis/autohome/brand.js +1 -108
- package/clis/autohome/score.js +1 -103
- package/clis/autohome/utils.js +1 -157
- package/clis/baidu-scholar/search.js +3 -27
- package/clis/baijiahao/article.js +1 -392
- package/clis/baijiahao/lists.js +1 -70
- package/clis/baijiahao/login.js +1 -15
- package/clis/baijiahao/publish.js +57 -0
- package/clis/baijiahao/stats.js +1 -0
- package/clis/baijiahao/whoami.js +1 -33
- package/clis/band/auth.js +2 -35
- package/clis/band/bands.js +2 -38
- package/clis/band/mentions.js +2 -124
- package/clis/band/post.js +4 -104
- package/clis/band/posts.js +3 -48
- package/clis/barchart/flow.js +4 -50
- package/clis/barchart/greeks.js +5 -125
- package/clis/barchart/options.js +5 -51
- package/clis/barchart/quote.js +3 -51
- package/clis/bbc/news.js +1 -42
- package/clis/bbc/topic.js +1 -57
- package/clis/bbc/utils.js +1 -79
- package/clis/bilibili/article.js +1 -393
- package/clis/bilibili/auth.js +1 -36
- package/clis/bilibili/categories.js +1 -56
- package/clis/bilibili/comment.js +1 -107
- package/clis/bilibili/comments.js +1 -136
- package/clis/bilibili/download.js +2 -173
- package/clis/bilibili/drafts.js +1 -60
- package/clis/bilibili/dynamic-post.js +3 -60
- package/clis/bilibili/dynamic.js +1 -34
- package/clis/bilibili/favorite.js +1 -47
- package/clis/bilibili/feed.js +2 -220
- package/clis/bilibili/follow.js +1 -140
- package/clis/bilibili/following.js +1 -44
- package/clis/bilibili/history.js +1 -45
- package/clis/bilibili/hot.js +2 -27
- package/clis/bilibili/me.js +1 -13
- package/clis/bilibili/partitions.js +1 -0
- package/clis/bilibili/ranking.js +1 -25
- package/clis/bilibili/search.js +1 -24
- package/clis/bilibili/stats.js +1 -0
- package/clis/bilibili/subtitle.js +3 -123
- package/clis/bilibili/summary.js +1 -167
- package/clis/bilibili/topics.js +1 -0
- package/clis/bilibili/unfollow.js +1 -121
- package/clis/bilibili/upload.js +1 -0
- package/clis/bilibili/user-videos.js +1 -39
- package/clis/bilibili/utils.js +7 -249
- package/clis/bilibili/video-drafts.js +1 -0
- package/clis/bilibili/video.js +1 -155
- package/clis/binance/asks.js +1 -22
- package/clis/binance/depth.js +1 -21
- package/clis/binance/gainers.js +1 -23
- package/clis/binance/klines.js +1 -22
- package/clis/binance/losers.js +1 -23
- package/clis/binance/pairs.js +1 -22
- package/clis/binance/price.js +1 -19
- package/clis/binance/prices.js +1 -20
- package/clis/binance/ticker.js +1 -22
- package/clis/binance/top.js +1 -22
- package/clis/binance/trades.js +1 -21
- package/clis/bloomberg/businessweek.js +4 -117
- package/clis/bloomberg/crypto.js +1 -18
- package/clis/bloomberg/economics.js +1 -18
- package/clis/bloomberg/feeds.js +1 -16
- package/clis/bloomberg/green.js +1 -18
- package/clis/bloomberg/industries.js +1 -18
- package/clis/bloomberg/main.js +1 -18
- package/clis/bloomberg/markets.js +1 -18
- package/clis/bloomberg/news.js +2 -51
- package/clis/bloomberg/opinions.js +1 -18
- package/clis/bloomberg/politics.js +1 -18
- package/clis/bloomberg/pursuits.js +1 -18
- package/clis/bloomberg/tech.js +1 -18
- package/clis/bloomberg/utils.js +17 -380
- package/clis/booking/search.js +2 -260
- package/clis/boss/auth.js +2 -36
- package/clis/boss/batchgreet.js +1 -61
- package/clis/boss/chatlist.js +1 -116
- package/clis/boss/chatmsg.js +1 -117
- package/clis/boss/detail.js +1 -63
- package/clis/boss/exchange.js +1 -46
- package/clis/boss/greet.js +1 -49
- package/clis/boss/invite.js +4 -64
- package/clis/boss/joblist.js +1 -31
- package/clis/boss/mark.js +1 -70
- package/clis/boss/recommend.js +1 -45
- package/clis/boss/resume.js +2 -62
- package/clis/boss/search.js +1 -197
- package/clis/boss/send.js +1 -44
- package/clis/boss/stats.js +1 -66
- package/clis/boss/utils.js +13 -320
- package/clis/brave/search.js +3 -60
- package/clis/chaoxing/assignments.js +1 -76
- package/clis/chaoxing/auth.js +2 -35
- package/clis/chaoxing/exams.js +1 -75
- package/clis/chaoxing/utils.js +9 -174
- package/clis/chatgpt/ask.js +1 -129
- package/clis/chatgpt/auth.js +2 -37
- package/clis/chatgpt/detail.js +1 -63
- package/clis/chatgpt/history.js +1 -39
- package/clis/chatgpt/image.js +1 -167
- package/clis/chatgpt/model.js +1 -31
- package/clis/chatgpt/new.js +1 -32
- package/clis/chatgpt/project-file-add.js +1 -74
- package/clis/chatgpt/project-list.js +1 -37
- package/clis/chatgpt/read.js +1 -44
- package/clis/chatgpt/send.js +1 -68
- package/clis/chatgpt/status.js +1 -29
- package/clis/chatgpt/utils.js +62 -1196
- package/clis/chatgpt-app/ask.js +1 -87
- package/clis/chatgpt-app/ax.js +9 -100
- package/clis/chatgpt-app/model.js +1 -25
- package/clis/chatgpt-app/new.js +1 -61
- package/clis/chatgpt-app/read.js +1 -32
- package/clis/chatgpt-app/send.js +1 -37
- package/clis/chatgpt-app/status.js +1 -26
- package/clis/chatwise/ask.js +1 -54
- package/clis/chatwise/export.js +2 -28
- package/clis/chatwise/history.js +2 -37
- package/clis/chatwise/model.js +6 -43
- package/clis/chatwise/new.js +1 -2
- package/clis/chatwise/read.js +2 -17
- package/clis/chatwise/screenshot.js +1 -2
- package/clis/chatwise/send.js +1 -28
- package/clis/chatwise/status.js +1 -2
- package/clis/chatwise/utils.js +8 -76
- package/clis/chess/analyze.js +1 -35
- package/clis/chess/game.js +1 -114
- package/clis/chess/games.js +1 -67
- package/clis/chess/stats.js +1 -32
- package/clis/chess/utils.js +1 -170
- package/clis/claude/ask.js +2 -142
- package/clis/claude/auth.js +2 -38
- package/clis/claude/detail.js +1 -38
- package/clis/claude/history.js +1 -33
- package/clis/claude/new.js +1 -29
- package/clis/claude/read.js +1 -27
- package/clis/claude/send.js +1 -48
- package/clis/claude/status.js +1 -26
- package/clis/claude/utils.js +23 -307
- package/clis/cnblogs/article.js +1 -308
- package/clis/cnblogs/login.js +1 -15
- package/clis/cnblogs/stats.js +37 -0
- package/clis/cnblogs/whoami.js +1 -27
- package/clis/cnki/search.js +3 -26
- package/clis/codex/_actions.js +3 -201
- package/clis/codex/archive.js +1 -37
- package/clis/codex/ask.js +6 -61
- package/clis/codex/dump.js +1 -2
- package/clis/codex/export.js +2 -28
- package/clis/codex/extract-diff.js +2 -19
- package/clis/codex/history.js +1 -27
- package/clis/codex/model.js +8 -154
- package/clis/codex/new.js +1 -2
- package/clis/codex/pin.js +1 -30
- package/clis/codex/projects.js +1 -28
- package/clis/codex/read.js +2 -27
- package/clis/codex/rename.js +4 -56
- package/clis/codex/screenshot.js +1 -2
- package/clis/codex/send.js +3 -38
- package/clis/codex/sidebar.js +1 -356
- package/clis/codex/status.js +1 -2
- package/clis/coingecko/categories.js +1 -75
- package/clis/coingecko/coin.js +1 -107
- package/clis/coingecko/derivatives.js +1 -84
- package/clis/coingecko/exchanges.js +1 -74
- package/clis/coingecko/global.js +1 -71
- package/clis/coingecko/top.js +1 -64
- package/clis/coingecko/trending.js +1 -55
- package/clis/confluence/create.js +1 -39
- package/clis/confluence/page.js +1 -23
- package/clis/confluence/search.js +1 -34
- package/clis/confluence/shared.js +1 -173
- package/clis/confluence/update.js +1 -38
- package/clis/coupang/add-to-cart.js +3 -66
- package/clis/coupang/auth.js +2 -34
- package/clis/coupang/product.js +3 -99
- package/clis/coupang/search.js +8 -97
- package/clis/coupang/utils.js +1 -316
- package/clis/crates/crate.js +1 -62
- package/clis/crates/search.js +1 -44
- package/clis/crates/utils.js +1 -72
- package/clis/csdn/article.js +19 -373
- package/clis/csdn/columns.js +1 -41
- package/clis/csdn/login.js +1 -17
- package/clis/csdn/stats.js +71 -0
- package/clis/csdn/whoami.js +1 -37
- package/clis/cto51/article.js +1 -271
- package/clis/cto51/whoami.js +1 -28
- package/clis/ctrip/auth.js +1 -50
- package/clis/ctrip/flight.js +2 -121
- package/clis/ctrip/hotel-search.js +3 -111
- package/clis/ctrip/hotel-suggest.js +1 -45
- package/clis/ctrip/search.js +1 -41
- package/clis/ctrip/utils.js +6 -360
- package/clis/cursor/ask.js +5 -57
- package/clis/cursor/composer.js +2 -33
- package/clis/cursor/dump.js +1 -2
- package/clis/cursor/export.js +3 -32
- package/clis/cursor/extract-code.js +2 -20
- package/clis/cursor/history.js +2 -20
- package/clis/cursor/model.js +4 -40
- package/clis/cursor/new.js +1 -2
- package/clis/cursor/read.js +2 -20
- package/clis/cursor/screenshot.js +1 -2
- package/clis/cursor/send.js +2 -31
- package/clis/cursor/status.js +1 -2
- package/clis/dblp/author.js +1 -133
- package/clis/dblp/paper.js +1 -40
- package/clis/dblp/search.js +1 -45
- package/clis/dblp/utils.js +1 -290
- package/clis/dblp/venue.js +1 -64
- package/clis/deepseek/ask.js +1 -158
- package/clis/deepseek/auth.js +2 -34
- package/clis/deepseek/detail.js +1 -46
- package/clis/deepseek/history.js +1 -27
- package/clis/deepseek/new.js +1 -33
- package/clis/deepseek/read.js +1 -25
- package/clis/deepseek/send.js +7 -97
- package/clis/deepseek/status.js +1 -26
- package/clis/deepseek/utils.js +25 -310
- package/clis/defillama/protocol.js +1 -84
- package/clis/defillama/protocols.js +1 -55
- package/clis/defillama/utils.js +1 -99
- package/clis/devto/auth.js +9 -0
- package/clis/devto/latest.js +1 -74
- package/clis/devto/publish.js +17 -0
- package/clis/devto/read.js +2 -102
- package/clis/devto/tag.js +1 -36
- package/clis/devto/top.js +1 -30
- package/clis/devto/user.js +1 -35
- package/clis/dianping/auth.js +2 -40
- package/clis/dianping/cityResolver.js +1 -185
- package/clis/dianping/search.js +1 -157
- package/clis/dianping/shop.js +1 -173
- package/clis/dianping/utils.js +1 -157
- package/clis/dictionary/examples.js +1 -28
- package/clis/dictionary/search.js +1 -30
- package/clis/dictionary/synonyms.js +1 -28
- package/clis/discord-app/channels.js +1 -26
- package/clis/discord-app/delete.js +3 -52
- package/clis/discord-app/goto.js +1 -38
- package/clis/discord-app/members.js +2 -20
- package/clis/discord-app/read.js +1 -42
- package/clis/discord-app/search.js +4 -42
- package/clis/discord-app/send.js +3 -21
- package/clis/discord-app/servers.js +1 -26
- package/clis/discord-app/status.js +1 -17
- package/clis/discord-app/thread-read.js +1 -45
- package/clis/discord-app/threads.js +1 -37
- package/clis/discord-app/utils.js +8 -392
- package/clis/dockerhub/image.js +1 -52
- package/clis/dockerhub/search.js +1 -47
- package/clis/dockerhub/utils.js +1 -100
- package/clis/dongchedi/koubei.js +1 -85
- package/clis/dongchedi/models.js +1 -91
- package/clis/dongchedi/score.js +1 -83
- package/clis/dongchedi/search.js +1 -83
- package/clis/dongchedi/series.js +1 -87
- package/clis/dongchedi/specs.js +1 -115
- package/clis/dongchedi/utils.js +1 -180
- package/clis/douban/article.js +51 -199
- package/clis/douban/auth.js +2 -39
- package/clis/douban/book-hot.js +1 -15
- package/clis/douban/download.js +1 -68
- package/clis/douban/marks.js +3 -60
- package/clis/douban/movie-hot.js +1 -15
- package/clis/douban/photos.js +1 -35
- package/clis/douban/reviews.js +3 -57
- package/clis/douban/search.js +1 -18
- package/clis/douban/subject.js +1 -46
- package/clis/douban/top250.js +2 -20
- package/clis/douban/utils.js +24 -337
- package/clis/doubao/ask.js +1 -40
- package/clis/doubao/auth.js +3 -41
- package/clis/doubao/detail.js +1 -35
- package/clis/doubao/history.js +1 -30
- package/clis/doubao/meeting-summary.js +1 -41
- package/clis/doubao/meeting-transcript.js +1 -38
- package/clis/doubao/new.js +1 -22
- package/clis/doubao/read.js +1 -21
- package/clis/doubao/send.js +1 -24
- package/clis/doubao/status.js +1 -26
- package/clis/doubao/utils.js +40 -492
- package/clis/doubao-app/ask.js +1 -54
- package/clis/doubao-app/dump.js +1 -25
- package/clis/doubao-app/new.js +1 -21
- package/clis/doubao-app/read.js +1 -19
- package/clis/doubao-app/screenshot.js +1 -19
- package/clis/doubao-app/send.js +1 -28
- package/clis/doubao-app/status.js +1 -17
- package/clis/doubao-app/utils.js +6 -52
- package/clis/douyin/_shared/browser-fetch.js +7 -45
- package/clis/douyin/_shared/creation-id.js +1 -5
- package/clis/douyin/_shared/evaluate-result.js +1 -16
- package/clis/douyin/_shared/imagex-upload.js +1 -53
- package/clis/douyin/_shared/public-api.js +1 -29
- package/clis/douyin/_shared/sts2.js +1 -21
- package/clis/douyin/_shared/text-extra.js +1 -15
- package/clis/douyin/_shared/timing.js +1 -22
- package/clis/douyin/_shared/tos-upload.js +5 -331
- package/clis/douyin/_shared/transcode.js +1 -45
- package/clis/douyin/_shared/types.js +1 -1
- package/clis/douyin/_shared/vod-upload.js +5 -212
- package/clis/douyin/activities.js +1 -23
- package/clis/douyin/auth.js +1 -39
- package/clis/douyin/collections.js +1 -23
- package/clis/douyin/delete.js +4 -88
- package/clis/douyin/draft.js +18 -337
- package/clis/douyin/drafts.js +1 -24
- package/clis/douyin/hashtag.js +1 -114
- package/clis/douyin/location.js +1 -25
- package/clis/douyin/profile.js +1 -29
- package/clis/douyin/publish-image.js +62 -0
- package/clis/douyin/publish.js +10 -337
- package/clis/douyin/search.js +3 -260
- package/clis/douyin/stats.js +1 -28
- package/clis/douyin/update.js +1 -32
- package/clis/douyin/user-videos.js +1 -82
- package/clis/douyin/videos.js +1 -52
- package/clis/duckduckgo/search.js +1 -131
- package/clis/duckduckgo/suggest.js +1 -45
- package/clis/eastmoney/_secid.js +1 -78
- package/clis/eastmoney/announcement.js +1 -53
- package/clis/eastmoney/article.js +1 -340
- package/clis/eastmoney/convertible.js +1 -74
- package/clis/eastmoney/etf.js +1 -66
- package/clis/eastmoney/holders.js +1 -79
- package/clis/eastmoney/hot-rank.js +2 -23
- package/clis/eastmoney/index-board.js +1 -97
- package/clis/eastmoney/kline.js +1 -88
- package/clis/eastmoney/kuaixun.js +1 -55
- package/clis/eastmoney/longhu.js +1 -68
- package/clis/eastmoney/money-flow.js +1 -79
- package/clis/eastmoney/northbound.js +1 -58
- package/clis/eastmoney/quote.js +1 -108
- package/clis/eastmoney/rank.js +1 -95
- package/clis/eastmoney/sectors.js +1 -77
- package/clis/eastmoney/whoami.js +1 -18
- package/clis/endoflife/product.js +1 -55
- package/clis/endoflife/utils.js +1 -89
- package/clis/facebook/add-friend.js +2 -22
- package/clis/facebook/auth.js +1 -43
- package/clis/facebook/events.js +2 -17
- package/clis/facebook/feed.js +3 -99
- package/clis/facebook/friends.js +2 -17
- package/clis/facebook/groups.js +2 -17
- package/clis/facebook/join-group.js +2 -22
- package/clis/facebook/marketplace-inbox.js +2 -52
- package/clis/facebook/marketplace-listings.js +2 -53
- package/clis/facebook/memories.js +2 -17
- package/clis/facebook/notifications.js +3 -305
- package/clis/facebook/profile.js +2 -22
- package/clis/facebook/search.js +2 -19
- package/clis/flathub/app.js +1 -71
- package/clis/flathub/search.js +1 -80
- package/clis/flathub/utils.js +1 -114
- package/clis/flomo/auth.js +2 -35
- package/clis/flomo/memos.js +2 -217
- package/clis/gemini/ask.js +1 -51
- package/clis/gemini/auth.js +2 -36
- package/clis/gemini/deep-research-result.js +4 -96
- package/clis/gemini/deep-research.js +1 -103
- package/clis/gemini/detail.js +1 -82
- package/clis/gemini/history.js +1 -70
- package/clis/gemini/image.js +2 -110
- package/clis/gemini/new.js +1 -22
- package/clis/gemini/read.js +1 -36
- package/clis/gemini/status.js +1 -32
- package/clis/gemini/utils.js +51 -873
- package/clis/geogebra/add-circle.js +1 -46
- package/clis/geogebra/add-line.js +1 -35
- package/clis/geogebra/add-point.js +1 -27
- package/clis/geogebra/add-polygon.js +1 -25
- package/clis/geogebra/eval.js +1 -35
- package/clis/geogebra/hexagon.js +1 -62
- package/clis/geogebra/info.js +3 -62
- package/clis/geogebra/list.js +1 -35
- package/clis/geogebra/triangle.js +1 -60
- package/clis/geogebra/utils.js +11 -183
- package/clis/ghost/publish.js +1 -0
- package/clis/ghost/shared.js +1 -0
- package/clis/ghost/whoami.js +1 -0
- package/clis/gitee/auth.js +2 -31
- package/clis/gitee/index.js +1 -3
- package/clis/gitee/search.js +1 -137
- package/clis/gitee/trending.js +3 -331
- package/clis/gitee/user.js +2 -131
- package/clis/github/auth.js +2 -39
- package/clis/github-trending/repos.js +1 -168
- package/clis/google/news.js +1 -59
- package/clis/google/search.js +3 -51
- package/clis/google/suggest.js +1 -35
- package/clis/google/trends.js +1 -39
- package/clis/google/utils.js +1 -23
- package/clis/google-scholar/cite.js +8 -62
- package/clis/google-scholar/profile.js +4 -60
- package/clis/google-scholar/search.js +3 -41
- package/clis/goproxy/module.js +1 -47
- package/clis/goproxy/utils.js +1 -165
- package/clis/goproxy/versions.js +1 -59
- package/clis/gov-law/recent.js +1 -22
- package/clis/gov-law/search.js +3 -30
- package/clis/gov-law/shared.js +5 -27
- package/clis/gov-policy/recent.js +2 -84
- package/clis/gov-policy/search.js +2 -85
- package/clis/gov-policy/utils.js +1 -54
- package/clis/grok/ask.js +1 -77
- package/clis/grok/auth.js +2 -37
- package/clis/grok/delete.js +1 -54
- package/clis/grok/detail.js +1 -60
- package/clis/grok/export-all.js +7 -246
- package/clis/grok/export-utils.js +1 -94
- package/clis/grok/export.js +4 -87
- package/clis/grok/history.js +1 -48
- package/clis/grok/image.js +8 -232
- package/clis/grok/new.js +1 -20
- package/clis/grok/pin.js +1 -68
- package/clis/grok/read.js +1 -39
- package/clis/grok/send.js +1 -50
- package/clis/grok/status.js +1 -41
- package/clis/grok/utils.js +21 -324
- package/clis/guazi/browse.js +1 -95
- package/clis/guazi/car.js +1 -110
- package/clis/guazi/utils.js +1 -133
- package/clis/hackernews/ask.js +1 -31
- package/clis/hackernews/best.js +1 -31
- package/clis/hackernews/jobs.js +1 -29
- package/clis/hackernews/new.js +1 -31
- package/clis/hackernews/read.js +11 -188
- package/clis/hackernews/search.js +1 -38
- package/clis/hackernews/show.js +1 -31
- package/clis/hackernews/top.js +1 -31
- package/clis/hackernews/user.js +1 -23
- package/clis/hashnode/auth.js +11 -0
- package/clis/hashnode/publish.js +92 -0
- package/clis/hf/auth.js +2 -31
- package/clis/hf/datasets.js +1 -88
- package/clis/hf/models.js +1 -91
- package/clis/hf/paper.js +1 -79
- package/clis/hf/spaces.js +1 -101
- package/clis/hf/top.js +1 -121
- package/clis/homebrew/cask.js +1 -39
- package/clis/homebrew/formula.js +1 -41
- package/clis/homebrew/popular.js +1 -54
- package/clis/homebrew/utils.js +1 -100
- package/clis/huodongxing/events.js +1 -322
- package/clis/hupu/auth.js +2 -35
- package/clis/hupu/detail.js +7 -72
- package/clis/hupu/hot.js +3 -152
- package/clis/hupu/like.js +1 -76
- package/clis/hupu/mentions.js +6 -75
- package/clis/hupu/reply.js +1 -72
- package/clis/hupu/search.js +1 -60
- package/clis/hupu/unlike.js +1 -76
- package/clis/hupu/utils.js +10 -86
- package/clis/imdb/person.js +2 -66
- package/clis/imdb/reviews.js +3 -52
- package/clis/imdb/search.js +2 -51
- package/clis/imdb/title.js +1 -94
- package/clis/imdb/top.js +1 -54
- package/clis/imdb/trending.js +1 -53
- package/clis/imdb/utils.js +13 -136
- package/clis/imooc/article.js +1 -192
- package/clis/imooc/login.js +1 -15
- package/clis/imooc/whoami.js +1 -33
- package/clis/indeed/job.js +2 -68
- package/clis/indeed/search.js +2 -75
- package/clis/indeed/utils.js +1 -152
- package/clis/instagram/_shared/private-publish.js +4 -959
- package/clis/instagram/_shared/protocol-capture.js +9 -111
- package/clis/instagram/_shared/runtime-info.js +2 -50
- package/clis/instagram/auth.js +2 -37
- package/clis/instagram/collection-create.js +2 -22
- package/clis/instagram/collection-delete.js +2 -22
- package/clis/instagram/comment.js +2 -24
- package/clis/instagram/detail.js +2 -150
- package/clis/instagram/download.js +5 -149
- package/clis/instagram/explore.js +2 -17
- package/clis/instagram/follow.js +2 -22
- package/clis/instagram/followers.js +2 -18
- package/clis/instagram/following.js +2 -18
- package/clis/instagram/like.js +2 -23
- package/clis/instagram/note.js +8 -69
- package/clis/instagram/post.js +35 -814
- package/clis/instagram/profile.js +2 -17
- package/clis/instagram/reel.js +18 -393
- package/clis/instagram/save.js +2 -23
- package/clis/instagram/saved.js +2 -18
- package/clis/instagram/search.js +2 -18
- package/clis/instagram/story.js +4 -99
- package/clis/instagram/unfollow.js +2 -22
- package/clis/instagram/unlike.js +2 -23
- package/clis/instagram/unsave.js +2 -23
- package/clis/instagram/user.js +1 -476
- package/clis/jd/add-cart.js +3 -53
- package/clis/jd/auth.js +2 -36
- package/clis/jd/cart.js +2 -23
- package/clis/jd/detail.js +4 -25
- package/clis/jd/item.js +65 -697
- package/clis/jd/reviews.js +3 -27
- package/clis/jd/search.js +3 -27
- package/clis/jianshu/article.js +1 -0
- package/clis/jianshu/login.js +1 -0
- package/clis/jianshu/notebooks.js +1 -0
- package/clis/jianshu/whoami.js +1 -0
- package/clis/jianyu/auth.js +3 -37
- package/clis/jianyu/detail.js +1 -21
- package/clis/jianyu/search.js +6 -567
- package/clis/jianyu/shared/china-bid-search.js +4 -83
- package/clis/jianyu/shared/procurement-contract.js +1 -324
- package/clis/jianyu/shared/procurement-detail.js +2 -91
- package/clis/jike/auth.js +2 -67
- package/clis/jike/comment.js +6 -60
- package/clis/jike/create.js +6 -61
- package/clis/jike/feed.js +3 -39
- package/clis/jike/like.js +3 -41
- package/clis/jike/notifications.js +3 -57
- package/clis/jike/post.js +2 -41
- package/clis/jike/repost.js +10 -95
- package/clis/jike/search.js +3 -42
- package/clis/jike/topic.js +2 -47
- package/clis/jike/user.js +2 -48
- package/clis/jike/utils.js +2 -12
- package/clis/jimeng/auth.js +2 -35
- package/clis/jimeng/generate.js +2 -33
- package/clis/jimeng/history.js +2 -27
- package/clis/jimeng/new.js +2 -20
- package/clis/jimeng/workspaces.js +2 -22
- package/clis/jira/attachments.js +1 -28
- package/clis/jira/comments.js +1 -28
- package/clis/jira/issue.js +1 -28
- package/clis/jira/links.js +1 -28
- package/clis/jira/search.js +1 -47
- package/clis/jira/shared.js +1 -256
- package/clis/juejin/article.js +5 -503
- package/clis/juejin/categories.js +1 -36
- package/clis/juejin/hot.js +1 -37
- package/clis/juejin/login.js +1 -15
- package/clis/juejin/recommend.js +1 -61
- package/clis/juejin/stats.js +53 -0
- package/clis/juejin/tags.js +1 -37
- package/clis/juejin/utils.js +1 -199
- package/clis/juejin/whoami.js +1 -34
- package/clis/ke/auth.js +2 -34
- package/clis/ke/chengjiao.js +2 -35
- package/clis/ke/ershoufang.js +2 -53
- package/clis/ke/utils.js +4 -87
- package/clis/ke/xiaoqu.js +2 -35
- package/clis/ke/zufang.js +3 -48
- package/clis/kimi/_utils.js +9 -81
- package/clis/kimi/audit-extras.js +14 -218
- package/clis/kimi/auth.js +3 -43
- package/clis/kimi/chat.js +15 -408
- package/clis/kimi/storage.js +5 -160
- package/clis/kimi/ui.js +14 -239
- package/clis/kimi/usage.js +5 -98
- package/clis/kuaishou/auth.js +1 -0
- package/clis/kuaishou/publish.js +53 -0
- package/clis/lesswrong/_helpers.js +5 -71
- package/clis/lesswrong/comments.js +5 -61
- package/clis/lesswrong/curated.js +3 -29
- package/clis/lesswrong/frontpage.js +3 -29
- package/clis/lesswrong/new.js +3 -29
- package/clis/lesswrong/read.js +3 -44
- package/clis/lesswrong/sequences.js +3 -26
- package/clis/lesswrong/shortform.js +3 -29
- package/clis/lesswrong/tag.js +3 -44
- package/clis/lesswrong/tags.js +3 -26
- package/clis/lesswrong/top-month.js +3 -29
- package/clis/lesswrong/top-week.js +3 -29
- package/clis/lesswrong/top-year.js +3 -29
- package/clis/lesswrong/top.js +3 -29
- package/clis/lesswrong/user-posts.js +3 -40
- package/clis/lesswrong/user.js +3 -43
- package/clis/lichess/top.js +1 -46
- package/clis/lichess/user.js +1 -91
- package/clis/lichess/utils.js +1 -97
- package/clis/linkedin/auth.js +2 -37
- package/clis/linkedin/connect.js +11 -291
- package/clis/linkedin/inbox.js +1 -234
- package/clis/linkedin/job-detail.js +4 -167
- package/clis/linkedin/jobs-preferences.js +3 -82
- package/clis/linkedin/people-search.js +2 -301
- package/clis/linkedin/post-analytics.js +1 -74
- package/clis/linkedin/posts-core.js +2 -105
- package/clis/linkedin/posts.js +1 -22
- package/clis/linkedin/profile-analytics.js +2 -95
- package/clis/linkedin/profile-experience.js +6 -380
- package/clis/linkedin/profile-projects.js +4 -185
- package/clis/linkedin/profile-read.js +3 -90
- package/clis/linkedin/safe-send.js +8 -313
- package/clis/linkedin/salesnav-inbox.js +5 -194
- package/clis/linkedin/salesnav-message.js +10 -337
- package/clis/linkedin/salesnav-search.js +4 -175
- package/clis/linkedin/salesnav-thread.js +1 -212
- package/clis/linkedin/search.js +10 -371
- package/clis/linkedin/sent-invitations.js +2 -51
- package/clis/linkedin/services-read.js +6 -162
- package/clis/linkedin/shared.js +2 -116
- package/clis/linkedin/thread-snapshot.js +4 -130
- package/clis/linkedin/timeline.js +2 -110
- package/clis/linkedin-learning/auth.js +2 -37
- package/clis/linkedin-learning/course.js +4 -125
- package/clis/linkedin-learning/search.js +4 -142
- package/clis/linkedin-learning/trending.js +4 -120
- package/clis/linux-do/auth.js +2 -37
- package/clis/linux-do/categories.js +1 -50
- package/clis/linux-do/feed.js +4 -380
- package/clis/linux-do/search.js +1 -29
- package/clis/linux-do/tags.js +1 -28
- package/clis/linux-do/topic-content.js +9 -136
- package/clis/linux-do/topic.js +1 -53
- package/clis/linux-do/user-posts.js +1 -57
- package/clis/linux-do/user-topics.js +1 -37
- package/clis/lobsters/active.js +1 -29
- package/clis/lobsters/domain.js +1 -92
- package/clis/lobsters/hot.js +1 -29
- package/clis/lobsters/newest.js +1 -29
- package/clis/lobsters/read.js +11 -196
- package/clis/lobsters/tag.js +1 -35
- package/clis/maimai/auth.js +2 -30
- package/clis/maimai/search-talents.js +4 -159
- package/clis/manus/_utils.js +2 -107
- package/clis/manus/auth.js +2 -36
- package/clis/manus/connectors.js +3 -39
- package/clis/manus/credits.js +3 -38
- package/clis/manus/list.js +4 -63
- package/clis/manus/read.js +3 -59
- package/clis/manus/skills.js +3 -60
- package/clis/manus/status.js +3 -38
- package/clis/maven/artifact.js +1 -49
- package/clis/maven/search.js +1 -51
- package/clis/maven/utils.js +1 -110
- package/clis/mdn/search.js +1 -97
- package/clis/medium/article.js +12 -0
- package/clis/medium/feed.js +1 -16
- package/clis/medium/login.js +1 -0
- package/clis/medium/search.js +1 -16
- package/clis/medium/tag.js +1 -135
- package/clis/medium/user.js +1 -16
- package/clis/medium/utils.js +3 -20
- package/clis/medium/whoami.js +1 -0
- package/clis/mubu/doc.js +1 -41
- package/clis/mubu/docs.js +1 -44
- package/clis/mubu/notes.js +1 -245
- package/clis/mubu/recent.js +1 -28
- package/clis/mubu/search.js +1 -63
- package/clis/mubu/utils.js +16 -289
- package/clis/note/auth.js +12 -0
- package/clis/note/note-utils.js +2 -0
- package/clis/note/publish.js +17 -0
- package/clis/notebooklm/add-source.js +8 -231
- package/clis/notebooklm/auth.js +2 -36
- package/clis/notebooklm/create.js +1 -76
- package/clis/notebooklm/current.js +1 -28
- package/clis/notebooklm/generate-audio.js +1 -91
- package/clis/notebooklm/generate-slides.js +1 -106
- package/clis/notebooklm/get.js +1 -37
- package/clis/notebooklm/history.js +1 -25
- package/clis/notebooklm/list.js +1 -36
- package/clis/notebooklm/note-list.js +1 -28
- package/clis/notebooklm/notes-get.js +1 -47
- package/clis/notebooklm/open.js +1 -42
- package/clis/notebooklm/rpc.js +8 -175
- package/clis/notebooklm/shared.js +1 -3
- package/clis/notebooklm/source-fulltext.js +1 -44
- package/clis/notebooklm/source-get.js +1 -40
- package/clis/notebooklm/source-guide.js +1 -44
- package/clis/notebooklm/source-list.js +1 -30
- package/clis/notebooklm/status.js +1 -31
- package/clis/notebooklm/summary.js +1 -30
- package/clis/notebooklm/utils.js +10 -652
- package/clis/notebooklm/write-note.js +1 -103
- package/clis/nowcoder/auth.js +2 -43
- package/clis/nowcoder/comment.js +1 -0
- package/clis/nowcoder/comments.js +1 -0
- package/clis/nowcoder/companies.js +1 -24
- package/clis/nowcoder/creators.js +1 -28
- package/clis/nowcoder/delete.js +1 -0
- package/clis/nowcoder/detail.js +2 -18
- package/clis/nowcoder/dm-list.js +1 -0
- package/clis/nowcoder/dm-read.js +1 -0
- package/clis/nowcoder/dm-send.js +1 -0
- package/clis/nowcoder/drafts.js +1 -0
- package/clis/nowcoder/experience.js +2 -21
- package/clis/nowcoder/hot.js +1 -25
- package/clis/nowcoder/inbox.js +1 -0
- package/clis/nowcoder/jobs.js +1 -22
- package/clis/nowcoder/like.js +1 -0
- package/clis/nowcoder/my.js +1 -0
- package/clis/nowcoder/notifications.js +2 -16
- package/clis/nowcoder/papers.js +2 -21
- package/clis/nowcoder/post.js +1 -0
- package/clis/nowcoder/practice.js +2 -19
- package/clis/nowcoder/recommend.js +1 -31
- package/clis/nowcoder/referral.js +2 -21
- package/clis/nowcoder/salary.js +2 -21
- package/clis/nowcoder/search.js +2 -21
- package/clis/nowcoder/suggest.js +2 -19
- package/clis/nowcoder/topics.js +1 -28
- package/clis/nowcoder/trending.js +1 -26
- package/clis/nowcoder/utils.js +68 -0
- package/clis/npm/downloads.js +1 -59
- package/clis/npm/package.js +1 -70
- package/clis/npm/search.js +1 -49
- package/clis/npm/utils.js +1 -76
- package/clis/nuget/package.js +1 -101
- package/clis/nuget/search.js +1 -69
- package/clis/nuget/utils.js +1 -87
- package/clis/nvd/cve.js +1 -121
- package/clis/oeis/search.js +1 -63
- package/clis/oeis/sequence.js +1 -71
- package/clis/oeis/utils.js +1 -88
- package/clis/ones/common.js +6 -127
- package/clis/ones/enrich-tasks.js +1 -37
- package/clis/ones/login.js +2 -81
- package/clis/ones/logout.js +1 -18
- package/clis/ones/me.js +1 -31
- package/clis/ones/my-tasks.js +1 -121
- package/clis/ones/resolve-labels.js +1 -64
- package/clis/ones/task-helpers.js +1 -212
- package/clis/ones/task.js +1 -67
- package/clis/ones/tasks.js +1 -80
- package/clis/ones/token-info.js +1 -43
- package/clis/ones/worklog.js +7 -261
- package/clis/openalex/search.js +1 -69
- package/clis/openalex/utils.js +1 -160
- package/clis/openalex/work.js +1 -65
- package/clis/openfda/drug-label.js +1 -74
- package/clis/openfda/food-recall.js +1 -65
- package/clis/openfda/utils.js +1 -67
- package/clis/openreview/author.js +1 -58
- package/clis/openreview/paper.js +1 -43
- package/clis/openreview/reviews.js +3 -130
- package/clis/openreview/search.js +1 -46
- package/clis/openreview/utils.js +1 -172
- package/clis/openreview/venue.js +1 -63
- package/clis/oschina/article.js +1 -237
- package/clis/oschina/catalogs.js +1 -31
- package/clis/oschina/login.js +1 -16
- package/clis/oschina/stats.js +54 -0
- package/clis/oschina/whoami.js +1 -35
- package/clis/osv/query.js +1 -72
- package/clis/osv/utils.js +1 -169
- package/clis/osv/vulnerability.js +1 -54
- package/clis/packagist/package.js +1 -49
- package/clis/packagist/search.js +1 -43
- package/clis/packagist/utils.js +1 -113
- package/clis/paperreview/feedback.js +1 -53
- package/clis/paperreview/review.js +1 -38
- package/clis/paperreview/submit.js +1 -86
- package/clis/paperreview/utils.js +1 -197
- package/clis/pinterest/api.js +1 -0
- package/clis/pinterest/auth.js +1 -0
- package/clis/pinterest/boards.js +1 -0
- package/clis/pinterest/client.js +20 -0
- package/clis/pinterest/publish.js +13 -0
- package/clis/pixiv/auth.js +2 -40
- package/clis/pixiv/detail.js +1 -66
- package/clis/pixiv/download.js +1 -82
- package/clis/pixiv/illusts.js +1 -66
- package/clis/pixiv/ranking.js +2 -36
- package/clis/pixiv/search.js +1 -44
- package/clis/pixiv/user.js +1 -59
- package/clis/pixiv/utils.js +3 -83
- package/clis/powerchina/auth.js +2 -37
- package/clis/powerchina/search.js +1 -251
- package/clis/producthunt/browse.js +2 -48
- package/clis/producthunt/hot.js +2 -49
- package/clis/producthunt/posts.js +1 -29
- package/clis/producthunt/today.js +1 -36
- package/clis/producthunt/utils.js +1 -99
- package/clis/pubmed/article.js +1 -55
- package/clis/pubmed/author.js +1 -64
- package/clis/pubmed/citations.js +1 -36
- package/clis/pubmed/clinical-trial.js +1 -59
- package/clis/pubmed/journal.js +1 -59
- package/clis/pubmed/mesh.js +1 -47
- package/clis/pubmed/related.js +1 -45
- package/clis/pubmed/review.js +1 -58
- package/clis/pubmed/search.js +1 -75
- package/clis/pubmed/utils.js +1 -325
- package/clis/pypi/downloads.js +1 -66
- package/clis/pypi/package.js +1 -79
- package/clis/pypi/utils.js +1 -55
- package/clis/qiita/auth.js +1 -0
- package/clis/qiita/gql.js +32 -0
- package/clis/qiita/publish.js +7 -0
- package/clis/qoder/_utils.js +18 -96
- package/clis/qoder/composer.js +1 -45
- package/clis/qoder/history.js +3 -27
- package/clis/qoder/quest.js +1 -147
- package/clis/qoder/read.js +1 -29
- package/clis/qoder/status.js +1 -21
- package/clis/qoder/ui.js +14 -287
- package/clis/quark/auth.js +2 -33
- package/clis/quark/ls.js +1 -64
- package/clis/quark/mkdir.js +1 -37
- package/clis/quark/mv.js +1 -54
- package/clis/quark/rename.js +1 -27
- package/clis/quark/rm.js +1 -25
- package/clis/quark/save.js +1 -81
- package/clis/quark/share-tree.js +1 -46
- package/clis/quark/utils.js +4 -137
- package/clis/qwen/ask.js +1 -104
- package/clis/qwen/auth.js +3 -42
- package/clis/qwen/detail.js +1 -62
- package/clis/qwen/history.js +1 -61
- package/clis/qwen/image.js +5 -153
- package/clis/qwen/new.js +1 -23
- package/clis/qwen/read.js +1 -41
- package/clis/qwen/send.js +1 -55
- package/clis/qwen/status.js +1 -37
- package/clis/qwen/utils.js +16 -292
- package/clis/reddit/auth.js +2 -37
- package/clis/reddit/comment.js +4 -26
- package/clis/reddit/frontpage.js +2 -32
- package/clis/reddit/home.js +3 -117
- package/clis/reddit/hot.js +2 -37
- package/clis/reddit/popular.js +2 -35
- package/clis/reddit/read.js +10 -200
- package/clis/reddit/reply.js +4 -130
- package/clis/reddit/save.js +4 -26
- package/clis/reddit/saved.js +3 -29
- package/clis/reddit/search.js +2 -53
- package/clis/reddit/subreddit-info.js +3 -90
- package/clis/reddit/subreddit.js +2 -47
- package/clis/reddit/subscribe.js +4 -26
- package/clis/reddit/subscribed.js +4 -101
- package/clis/reddit/upvote.js +4 -26
- package/clis/reddit/upvoted.js +3 -29
- package/clis/reddit/user-comments.js +2 -27
- package/clis/reddit/user-posts.js +2 -28
- package/clis/reddit/user.js +2 -20
- package/clis/reddit/whoami.js +2 -66
- package/clis/rednote/auth.js +2 -35
- package/clis/rednote/comments.js +1 -85
- package/clis/rednote/download.js +1 -59
- package/clis/rednote/feed.js +1 -27
- package/clis/rednote/note.js +1 -68
- package/clis/rednote/notifications.js +3 -75
- package/clis/rednote/search.js +2 -77
- package/clis/rednote/user.js +1 -55
- package/clis/rest-countries/country.js +1 -65
- package/clis/rest-countries/region.js +1 -64
- package/clis/rest-countries/utils.js +1 -126
- package/clis/reuters/article-detail.js +1 -53
- package/clis/reuters/auth.js +3 -31
- package/clis/reuters/search.js +1 -63
- package/clis/reuters/utils.js +5 -114
- package/clis/rfc/rfc.js +1 -52
- package/clis/rfc/utils.js +1 -72
- package/clis/rubygems/gem.js +1 -42
- package/clis/rubygems/search.js +1 -47
- package/clis/rubygems/utils.js +1 -86
- package/clis/segmentfault/_signed-request.js +43 -0
- package/clis/segmentfault/article.js +3 -406
- package/clis/segmentfault/channels.js +1 -64
- package/clis/segmentfault/login.js +1 -15
- package/clis/segmentfault/stats.js +82 -0
- package/clis/segmentfault/tags.js +1 -67
- package/clis/segmentfault/whoami.js +1 -53
- package/clis/semanticscholar/citations.js +1 -61
- package/clis/semanticscholar/paper.js +1 -52
- package/clis/semanticscholar/recommendations.js +1 -47
- package/clis/semanticscholar/search.js +1 -48
- package/clis/semanticscholar/utils.js +1 -196
- package/clis/sinablog/article.js +1 -15
- package/clis/sinablog/hot.js +1 -15
- package/clis/sinablog/search.js +1 -52
- package/clis/sinablog/user.js +1 -16
- package/clis/sinablog/utils.js +9 -42
- package/clis/sinafinance/news.js +1 -62
- package/clis/sinafinance/rolling-news.js +2 -23
- package/clis/sinafinance/stock-rank.js +3 -28
- package/clis/sinafinance/stock.js +1 -121
- package/clis/slock/attachment-download.js +1 -72
- package/clis/slock/attachment-upload.js +7 -85
- package/clis/slock/attachment-url.js +1 -53
- package/clis/slock/auth-verify.js +1 -19
- package/clis/slock/bookmark-add.js +5 -37
- package/clis/slock/bookmark-list.js +4 -44
- package/clis/slock/bookmark-remove.js +4 -39
- package/clis/slock/channel-action.js +1 -63
- package/clis/slock/channel-archive.js +1 -9
- package/clis/slock/channel-create.js +1 -48
- package/clis/slock/channel-files.js +1 -51
- package/clis/slock/channel-info.js +1 -42
- package/clis/slock/channel-join.js +1 -9
- package/clis/slock/channel-leave.js +1 -9
- package/clis/slock/channel-list.js +1 -40
- package/clis/slock/channel-mark.js +1 -71
- package/clis/slock/channel-members.js +1 -64
- package/clis/slock/channel-unarchive.js +1 -11
- package/clis/slock/dm-list.js +1 -41
- package/clis/slock/errors.js +1 -30
- package/clis/slock/in-page.js +30 -130
- package/clis/slock/inbox-done.js +5 -36
- package/clis/slock/inbox-read-all.js +1 -32
- package/clis/slock/inbox.js +1 -74
- package/clis/slock/login.js +1 -3
- package/clis/slock/message-read.js +24 -131
- package/clis/slock/message-search.js +10 -58
- package/clis/slock/message-send.js +25 -119
- package/clis/slock/reaction-add.js +1 -42
- package/clis/slock/reaction-remove.js +1 -42
- package/clis/slock/resolve.js +1 -74
- package/clis/slock/server-list.js +3 -32
- package/clis/slock/server-use.js +6 -41
- package/clis/slock/shared.js +1 -14
- package/clis/slock/task-claim.js +4 -62
- package/clis/slock/task-convert.js +13 -84
- package/clis/slock/task-create.js +6 -64
- package/clis/slock/task-delete.js +5 -51
- package/clis/slock/task-get.js +6 -54
- package/clis/slock/task-list-server.js +5 -56
- package/clis/slock/task-list.js +6 -62
- package/clis/slock/task-status.js +6 -80
- package/clis/slock/task-unclaim.js +4 -57
- package/clis/slock/thread-done.js +1 -9
- package/clis/slock/thread-follow.js +1 -46
- package/clis/slock/thread-list.js +1 -44
- package/clis/slock/thread-state.js +1 -45
- package/clis/slock/thread-undone.js +1 -9
- package/clis/slock/thread-unfollow.js +1 -9
- package/clis/slock/unread-summary.js +5 -36
- package/clis/slock/whoami.js +1 -12
- package/clis/smzdm/search.js +3 -81
- package/clis/sohu/article.js +1 -501
- package/clis/sohu/attributes.js +1 -36
- package/clis/sohu/categories.js +1 -48
- package/clis/sohu/channels.js +1 -34
- package/clis/sohu/columns.js +1 -36
- package/clis/sohu/login.js +1 -15
- package/clis/sohu/stats.js +95 -0
- package/clis/sohu/topics.js +1 -50
- package/clis/sohu/whoami.js +1 -27
- package/clis/spotify/spotify.js +1 -327
- package/clis/spotify/utils.js +8 -66
- package/clis/stackoverflow/bounties.js +1 -35
- package/clis/stackoverflow/hot.js +1 -32
- package/clis/stackoverflow/read.js +10 -311
- package/clis/stackoverflow/related.js +1 -66
- package/clis/stackoverflow/search.js +1 -35
- package/clis/stackoverflow/tag.js +1 -60
- package/clis/stackoverflow/unanswered.js +1 -33
- package/clis/stackoverflow/user.js +1 -50
- package/clis/stackoverflow/utils.js +1 -118
- package/clis/steam/app.js +1 -67
- package/clis/steam/search.js +1 -58
- package/clis/steam/top-sellers.js +1 -26
- package/clis/steam/utils.js +1 -107
- package/clis/substack/auth.js +11 -0
- package/clis/substack/feed.js +1 -16
- package/clis/substack/post-utils.js +2 -0
- package/clis/substack/publication.js +1 -16
- package/clis/substack/publish.js +10 -0
- package/clis/substack/search.js +1 -79
- package/clis/substack/utils.js +6 -34
- package/clis/suno/auth.js +2 -40
- package/clis/suno/download.js +5 -128
- package/clis/suno/generate.js +4 -231
- package/clis/suno/list.js +4 -69
- package/clis/suno/status.js +1 -63
- package/clis/suno/utils.js +29 -476
- package/clis/taobao/add-cart.js +6 -63
- package/clis/taobao/auth.js +3 -53
- package/clis/taobao/cart.js +3 -31
- package/clis/taobao/detail.js +5 -28
- package/clis/taobao/reviews.js +4 -29
- package/clis/taobao/search.js +3 -36
- package/clis/tdx/hot-rank.js +2 -25
- package/clis/test-utils.js +1 -61
- package/clis/ths/hot-rank.js +2 -25
- package/clis/tieba/hot.js +3 -35
- package/clis/tieba/posts.js +1 -86
- package/clis/tieba/read.js +2 -59
- package/clis/tieba/search.js +3 -58
- package/clis/tieba/utils.js +1 -240
- package/clis/tiktok/auth.js +2 -37
- package/clis/tiktok/comment.js +5 -81
- package/clis/tiktok/creator-videos.js +3 -228
- package/clis/tiktok/explore.js +8 -76
- package/clis/tiktok/follow.js +8 -81
- package/clis/tiktok/following.js +8 -76
- package/clis/tiktok/friends.js +8 -75
- package/clis/tiktok/like.js +2 -17
- package/clis/tiktok/live.js +7 -72
- package/clis/tiktok/notifications.js +10 -86
- package/clis/tiktok/profile.js +2 -31
- package/clis/tiktok/publish.js +82 -0
- package/clis/tiktok/save.js +2 -17
- package/clis/tiktok/search.js +2 -18
- package/clis/tiktok/unfollow.js +7 -79
- package/clis/tiktok/unlike.js +2 -17
- package/clis/tiktok/unsave.js +2 -17
- package/clis/tiktok/user.js +9 -82
- package/clis/tiktok/utils.js +7 -240
- package/clis/toutiao/article.js +1 -0
- package/clis/toutiao/articles.js +2 -51
- package/clis/toutiao/auth.js +2 -35
- package/clis/toutiao/hot.js +1 -63
- package/clis/toutiao/utils.js +2 -161
- package/clis/trae-cn/activity.js +1 -22
- package/clis/trae-cn/approve.js +1 -52
- package/clis/trae-cn/ask.js +1 -99
- package/clis/trae-cn/dump.js +1 -5
- package/clis/trae-cn/export.js +3 -40
- package/clis/trae-cn/model.js +1 -22
- package/clis/trae-cn/new.js +1 -63
- package/clis/trae-cn/read.js +1 -23
- package/clis/trae-cn/screenshot.js +1 -5
- package/clis/trae-cn/select-model.js +1 -25
- package/clis/trae-cn/send.js +1 -23
- package/clis/trae-cn/setup.js +1 -75
- package/clis/trae-cn/status.js +1 -27
- package/clis/trae-cn/targets.js +1 -96
- package/clis/trae-cn/utils.js +24 -318
- package/clis/trae-cn/watch.js +3 -119
- package/clis/trae-solo/_actions.js +5 -24
- package/clis/trae-solo/_fs.js +6 -118
- package/clis/trae-solo/_state.js +2 -111
- package/clis/trae-solo/automation.js +4 -58
- package/clis/trae-solo/history.js +2 -41
- package/clis/trae-solo/mode.js +4 -54
- package/clis/trae-solo/model.js +4 -88
- package/clis/trae-solo/renderer-storage.js +4 -163
- package/clis/trae-solo/settings.js +1 -54
- package/clis/trae-solo/skill-fs.js +1 -123
- package/clis/trae-solo/skill.js +12 -151
- package/clis/trae-solo/state-fs.js +2 -156
- package/clis/trae-solo/status.js +1 -2
- package/clis/trae-solo/task-fs.js +5 -181
- package/clis/trae-solo/user-rules.js +1 -29
- package/clis/trae-solo/workspaces-fs.js +1 -113
- package/clis/tumblr/auth.js +24 -0
- package/clis/tumblr/publish.js +14 -0
- package/clis/tvmaze/search.js +1 -61
- package/clis/tvmaze/show.js +1 -60
- package/clis/tvmaze/utils.js +1 -110
- package/clis/twitter/accept.js +7 -95
- package/clis/twitter/article.js +7 -61
- package/clis/twitter/auth.js +2 -39
- package/clis/twitter/block.js +4 -32
- package/clis/twitter/bookmark-folder.js +3 -189
- package/clis/twitter/bookmark-folders.js +3 -113
- package/clis/twitter/bookmark.js +3 -33
- package/clis/twitter/bookmarks.js +4 -158
- package/clis/twitter/delete.js +5 -123
- package/clis/twitter/device-follow.js +3 -184
- package/clis/twitter/dm-list.js +1 -0
- package/clis/twitter/dm-read.js +1 -0
- package/clis/twitter/dm-send.js +13 -0
- package/clis/twitter/dm-shared.js +6 -0
- package/clis/twitter/download.js +6 -449
- package/clis/twitter/follow-batch.js +5 -124
- package/clis/twitter/follow.js +4 -32
- package/clis/twitter/followers.js +5 -139
- package/clis/twitter/following.js +2 -272
- package/clis/twitter/hide-reply.js +3 -33
- package/clis/twitter/like.js +3 -35
- package/clis/twitter/likes.js +8 -235
- package/clis/twitter/list-add-batch.js +1 -32
- package/clis/twitter/list-add-core.js +9 -219
- package/clis/twitter/list-add.js +1 -20
- package/clis/twitter/list-batch-utils.js +1 -95
- package/clis/twitter/list-create.js +5 -148
- package/clis/twitter/list-delete.js +4 -126
- package/clis/twitter/list-remove-batch.js +1 -32
- package/clis/twitter/list-remove-core.js +9 -173
- package/clis/twitter/list-remove.js +1 -20
- package/clis/twitter/list-tweets.js +7 -179
- package/clis/twitter/lists.js +6 -157
- package/clis/twitter/notifications.js +2 -126
- package/clis/twitter/post.js +32 -357
- package/clis/twitter/profile.js +7 -115
- package/clis/twitter/quote.js +7 -118
- package/clis/twitter/reply-dm.js +7 -78
- package/clis/twitter/reply.js +12 -167
- package/clis/twitter/retweet.js +3 -35
- package/clis/twitter/schedule.js +11 -167
- package/clis/twitter/scheduled-delete.js +3 -48
- package/clis/twitter/scheduled-list.js +2 -30
- package/clis/twitter/scheduled-utils.js +3 -17
- package/clis/twitter/search.js +5 -339
- package/clis/twitter/shared.js +6 -494
- package/clis/twitter/thread.js +4 -164
- package/clis/twitter/timeline.js +3 -210
- package/clis/twitter/trending.js +2 -42
- package/clis/twitter/tweets.js +6 -341
- package/clis/twitter/unblock.js +4 -32
- package/clis/twitter/unbookmark.js +3 -33
- package/clis/twitter/unfollow.js +4 -32
- package/clis/twitter/unlike.js +3 -35
- package/clis/twitter/unretweet.js +3 -35
- package/clis/twitter/utils.js +11 -279
- package/clis/uisdc/news.js +2 -82
- package/clis/uiverse/_shared.js +11 -181
- package/clis/uiverse/code.js +1 -49
- package/clis/uiverse/preview.js +1 -73
- package/clis/upwork/auth.js +2 -36
- package/clis/upwork/detail.js +2 -112
- package/clis/upwork/feed.js +3 -91
- package/clis/upwork/search.js +2 -96
- package/clis/upwork/utils.js +1 -323
- package/clis/v2ex/auth.js +2 -36
- package/clis/v2ex/daily.js +3 -61
- package/clis/v2ex/hot.js +1 -26
- package/clis/v2ex/latest.js +1 -26
- package/clis/v2ex/me.js +2 -44
- package/clis/v2ex/member.js +1 -28
- package/clis/v2ex/node.js +1 -39
- package/clis/v2ex/nodes.js +1 -26
- package/clis/v2ex/notifications.js +2 -34
- package/clis/v2ex/replies.js +1 -27
- package/clis/v2ex/topic.js +1 -31
- package/clis/v2ex/user.js +1 -34
- package/clis/wanfang/search.js +4 -28
- package/clis/web/read.js +9 -240
- package/clis/wechat-channels/auth.js +2 -47
- package/clis/wechat-channels/publish.js +37 -534
- package/clis/weibo/article.js +1 -0
- package/clis/weibo/auth.js +3 -39
- package/clis/weibo/comments.js +4 -29
- package/clis/weibo/delete.js +3 -91
- package/clis/weibo/favorites.js +8 -151
- package/clis/weibo/feed.js +5 -41
- package/clis/weibo/hot.js +2 -24
- package/clis/weibo/me.js +3 -27
- package/clis/weibo/post.js +3 -32
- package/clis/weibo/publish.js +10 -244
- package/clis/weibo/search.js +2 -35
- package/clis/weibo/user-posts.js +7 -149
- package/clis/weibo/user.js +3 -29
- package/clis/weibo/utils.js +3 -46
- package/clis/weixin/article.js +1 -332
- package/clis/weixin/create-draft.js +26 -226
- package/clis/weixin/download.js +2 -273
- package/clis/weixin/drafts.js +2 -41
- package/clis/weixin/login.js +1 -0
- package/clis/weixin/search.js +2 -115
- package/clis/weixin/stats.js +43 -0
- package/clis/weixin/whoami.js +1 -26
- package/clis/weread/ai-outline.js +2 -171
- package/clis/weread/auth.js +2 -37
- package/clis/weread/book-search.js +2 -438
- package/clis/weread/book.js +2 -232
- package/clis/weread/highlights.js +1 -24
- package/clis/weread/notebooks.js +1 -22
- package/clis/weread/notes.js +1 -30
- package/clis/weread/ranking.js +1 -29
- package/clis/weread/search.js +1 -186
- package/clis/weread/shelf.js +1 -66
- package/clis/weread/utils.js +6 -260
- package/clis/weread-official/book.js +1 -135
- package/clis/weread-official/discover.js +1 -107
- package/clis/weread-official/list-apis.js +1 -95
- package/clis/weread-official/notes.js +1 -171
- package/clis/weread-official/readdata.js +1 -158
- package/clis/weread-official/review.js +1 -93
- package/clis/weread-official/search.js +1 -106
- package/clis/weread-official/shelf.js +1 -97
- package/clis/weread-official/utils.js +1 -293
- package/clis/wikidata/entity.js +1 -60
- package/clis/wikidata/search.js +1 -50
- package/clis/wikidata/utils.js +1 -117
- package/clis/wikipedia/page.js +2 -94
- package/clis/wikipedia/random.js +1 -20
- package/clis/wikipedia/search.js +1 -31
- package/clis/wikipedia/summary.js +1 -24
- package/clis/wikipedia/trending.js +1 -40
- package/clis/wikipedia/utils.js +1 -31
- package/clis/wordpress/publish.js +1 -0
- package/clis/wordpress/shared.js +1 -0
- package/clis/wordpress/whoami.js +1 -0
- package/clis/woshipm/article.js +1 -301
- package/clis/woshipm/login.js +1 -15
- package/clis/woshipm/stats.js +52 -0
- package/clis/woshipm/whoami.js +1 -34
- package/clis/wttr/current.js +1 -63
- package/clis/wttr/forecast.js +1 -71
- package/clis/wttr/utils.js +1 -50
- package/clis/xianyu/auth.js +2 -59
- package/clis/xianyu/chat.js +1 -74
- package/clis/xianyu/im.js +13 -95
- package/clis/xianyu/inbox.js +1 -96
- package/clis/xianyu/item.js +5 -61
- package/clis/xianyu/messages.js +1 -91
- package/clis/xianyu/publish.js +19 -299
- package/clis/xianyu/reply.js +1 -82
- package/clis/xianyu/search.js +8 -129
- package/clis/xianyu/utils.js +1 -8
- package/clis/xiaoe/auth.js +2 -47
- package/clis/xiaoe/catalog.js +2 -95
- package/clis/xiaoe/content.js +2 -161
- package/clis/xiaoe/courses.js +2 -86
- package/clis/xiaoe/detail.js +2 -19
- package/clis/xiaoe/play-url.js +2 -26
- package/clis/xiaohongshu/ask.js +8 -304
- package/clis/xiaohongshu/auth.js +2 -42
- package/clis/xiaohongshu/collection-helpers.js +5 -224
- package/clis/xiaohongshu/comments.js +5 -144
- package/clis/xiaohongshu/creator-note-detail.js +7 -409
- package/clis/xiaohongshu/creator-notes-summary.js +1 -98
- package/clis/xiaohongshu/creator-notes.js +13 -385
- package/clis/xiaohongshu/creator-profile.js +2 -44
- package/clis/xiaohongshu/creator-stats.js +2 -65
- package/clis/xiaohongshu/delete-note.js +7 -207
- package/clis/xiaohongshu/download.js +4 -71
- package/clis/xiaohongshu/draft-clear.js +5 -52
- package/clis/xiaohongshu/draft-delete.js +9 -75
- package/clis/xiaohongshu/draft-open.js +1 -43
- package/clis/xiaohongshu/draft-utils.js +5 -111
- package/clis/xiaohongshu/drafts.js +1 -28
- package/clis/xiaohongshu/feed.js +2 -127
- package/clis/xiaohongshu/follow.js +3 -154
- package/clis/xiaohongshu/liked.js +1 -29
- package/clis/xiaohongshu/note-helpers.js +1 -69
- package/clis/xiaohongshu/note.js +2 -74
- package/clis/xiaohongshu/notifications.js +1 -46
- package/clis/xiaohongshu/publish-video.js +87 -0
- package/clis/xiaohongshu/publish.js +54 -910
- package/clis/xiaohongshu/saved.js +1 -29
- package/clis/xiaohongshu/search.js +8 -194
- package/clis/xiaohongshu/unfollow.js +5 -192
- package/clis/xiaohongshu/user-helpers.js +1 -78
- package/clis/xiaohongshu/user.js +2 -112
- package/clis/xiaoyuzhou/auth.js +3 -303
- package/clis/xiaoyuzhou/download.js +1 -54
- package/clis/xiaoyuzhou/episode.js +1 -34
- package/clis/xiaoyuzhou/podcast-episodes.js +1 -41
- package/clis/xiaoyuzhou/podcast.js +1 -33
- package/clis/xiaoyuzhou/transcript.js +1 -77
- package/clis/xiaoyuzhou/utils.js +1 -15
- package/clis/xueqiu/article.js +4 -388
- package/clis/xueqiu/auth.js +2 -38
- package/clis/xueqiu/comments.js +4 -321
- package/clis/xueqiu/danjuan-utils.js +4 -46
- package/clis/xueqiu/earnings-date.js +1 -45
- package/clis/xueqiu/events.js +17 -58
- package/clis/xueqiu/feed.js +1 -39
- package/clis/xueqiu/fund-holdings.js +1 -29
- package/clis/xueqiu/fund-snapshot.js +1 -26
- package/clis/xueqiu/groups.js +1 -23
- package/clis/xueqiu/hashtags.js +26 -71
- package/clis/xueqiu/hot-stock.js +1 -32
- package/clis/xueqiu/hot.js +1 -37
- package/clis/xueqiu/kline.js +1 -44
- package/clis/xueqiu/search.js +1 -37
- package/clis/xueqiu/stock.js +1 -65
- package/clis/xueqiu/stocks.js +13 -49
- package/clis/xueqiu/users.js +12 -48
- package/clis/xueqiu/utils.js +3 -42
- package/clis/xueqiu/watchlist.js +1 -37
- package/clis/yahoo/search.js +3 -74
- package/clis/yahoo-finance/quote.js +3 -27
- package/clis/yollomi/background.js +1 -46
- package/clis/yollomi/edit.js +1 -57
- package/clis/yollomi/face-swap.js +1 -44
- package/clis/yollomi/generate.js +1 -101
- package/clis/yollomi/models.js +1 -34
- package/clis/yollomi/object-remover.js +1 -43
- package/clis/yollomi/remove-bg.js +1 -39
- package/clis/yollomi/restore.js +1 -39
- package/clis/yollomi/try-on.js +1 -47
- package/clis/yollomi/upload.js +4 -59
- package/clis/yollomi/upscale.js +1 -54
- package/clis/yollomi/utils.js +4 -168
- package/clis/yollomi/video.js +1 -57
- package/clis/youdao/note.js +5 -150
- package/clis/youtube/auth.js +2 -36
- package/clis/youtube/channel.js +4 -113
- package/clis/youtube/comments.js +4 -36
- package/clis/youtube/feed.js +3 -35
- package/clis/youtube/history.js +3 -35
- package/clis/youtube/like.js +5 -39
- package/clis/youtube/playlist.js +7 -58
- package/clis/youtube/publish.js +56 -0
- package/clis/youtube/search.js +3 -64
- package/clis/youtube/subscribe.js +7 -41
- package/clis/youtube/subscriptions.js +4 -36
- package/clis/youtube/transcript-group.js +2 -226
- package/clis/youtube/transcript.js +13 -252
- package/clis/youtube/unlike.js +5 -39
- package/clis/youtube/unsubscribe.js +7 -41
- package/clis/youtube/utils.js +4 -190
- package/clis/youtube/video.js +4 -60
- package/clis/youtube/watch-later.js +6 -42
- package/clis/yuanbao/ask.js +25 -242
- package/clis/yuanbao/auth.js +2 -38
- package/clis/yuanbao/detail.js +1 -65
- package/clis/yuanbao/history.js +1 -51
- package/clis/yuanbao/new.js +4 -60
- package/clis/yuanbao/read.js +1 -38
- package/clis/yuanbao/send.js +1 -57
- package/clis/yuanbao/shared.js +10 -224
- package/clis/yuanbao/status.js +1 -44
- package/clis/yuque/article.js +1 -293
- package/clis/yuque/whoami.js +1 -60
- package/clis/zhihu/answer-comments.js +3 -272
- package/clis/zhihu/answer-detail.js +3 -208
- package/clis/zhihu/answer.js +4 -43
- package/clis/zhihu/article-transform.js +1 -100
- package/clis/zhihu/article.js +6 -129
- package/clis/zhihu/auth.js +2 -50
- package/clis/zhihu/collection.js +3 -195
- package/clis/zhihu/collections.js +3 -124
- package/clis/zhihu/comment.js +5 -43
- package/clis/zhihu/download.js +2 -43
- package/clis/zhihu/favorite.js +6 -54
- package/clis/zhihu/follow.js +4 -35
- package/clis/zhihu/followers.js +1 -40
- package/clis/zhihu/following.js +1 -40
- package/clis/zhihu/hot.js +2 -25
- package/clis/zhihu/like.js +4 -35
- package/clis/zhihu/paginate.js +3 -120
- package/clis/zhihu/pin.js +4 -59
- package/clis/zhihu/pins.js +1 -41
- package/clis/zhihu/question.js +3 -109
- package/clis/zhihu/recommend.js +3 -99
- package/clis/zhihu/search.js +3 -198
- package/clis/zhihu/stats.js +41 -0
- package/clis/zhihu/target.js +1 -91
- package/clis/zhihu/text.js +4 -27
- package/clis/zhihu/user-answers.js +1 -41
- package/clis/zhihu/user-arg.js +1 -34
- package/clis/zhihu/user-articles.js +1 -40
- package/clis/zhihu/user.js +3 -51
- package/clis/zhihu/write-shared.js +7 -176
- package/clis/zlibrary/info.js +1 -48
- package/clis/zlibrary/search.js +1 -47
- package/clis/zlibrary/utils.js +6 -94
- package/clis/zsxq/auth.js +3 -38
- package/clis/zsxq/dynamics.js +1 -48
- package/clis/zsxq/groups.js +1 -33
- package/clis/zsxq/search.js +1 -44
- package/clis/zsxq/topic.js +1 -50
- package/clis/zsxq/topics.js +1 -26
- package/clis/zsxq/utils.js +5 -166
- package/dist/src/adapter-shadow.js +2 -72
- package/dist/src/adapter-source.js +1 -24
- package/dist/src/browser/analyze.js +1 -405
- package/dist/src/browser/article-extract.js +2 -169
- package/dist/src/browser/ax-snapshot.js +2 -217
- package/dist/src/browser/base-page.js +26 -861
- package/dist/src/browser/bridge-readiness.js +1 -24
- package/dist/src/browser/bridge.js +1 -58
- package/dist/src/browser/cdp.d.ts +5 -0
- package/dist/src/browser/cdp.js +1 -536
- package/dist/src/browser/compound.js +2 -32
- package/dist/src/browser/config.js +1 -14
- package/dist/src/browser/daemon-client.js +1 -135
- package/dist/src/browser/daemon-lifecycle.js +12 -150
- package/dist/src/browser/daemon-transport.js +1 -68
- package/dist/src/browser/daemon-version.js +2 -12
- package/dist/src/browser/dom-helpers.js +36 -109
- package/dist/src/browser/dom-snapshot.js +21 -106
- package/dist/src/browser/errors.js +5 -78
- package/dist/src/browser/extract.js +6 -96
- package/dist/src/browser/find.js +13 -83
- package/dist/src/browser/fingerprint.d.ts +44 -0
- package/dist/src/browser/fingerprint.js +82 -0
- package/dist/src/browser/html-tree.js +7 -58
- package/dist/src/browser/index.js +1 -12
- package/dist/src/browser/managed-chrome.d.ts +89 -0
- package/dist/src/browser/managed-chrome.js +1 -0
- package/dist/src/browser/network-cache.js +1 -78
- package/dist/src/browser/network-key.js +1 -66
- package/dist/src/browser/page.js +7 -445
- package/dist/src/browser/profile.d.ts +82 -0
- package/dist/src/browser/profile.js +2 -85
- package/dist/src/browser/proxy-test.d.ts +28 -0
- package/dist/src/browser/proxy-test.js +12 -0
- package/dist/src/browser/shape-filter.js +1 -101
- package/dist/src/browser/shape.js +1 -95
- package/dist/src/browser/stealth.js +2 -25
- package/dist/src/browser/tabs.js +2 -70
- package/dist/src/browser/target-errors.js +1 -45
- package/dist/src/browser/target-resolver.js +27 -174
- package/dist/src/browser/trace.js +2 -91
- package/dist/src/browser/utils.js +1 -64
- package/dist/src/browser/verify-fixture.js +2 -318
- package/dist/src/browser/visual-refs.js +6 -20
- package/dist/src/browser-session-lock.d.ts +13 -0
- package/dist/src/browser-session-lock.js +1 -0
- package/dist/src/browser-session-lock.test.d.ts +1 -0
- package/dist/src/build-manifest.js +15 -362
- package/dist/src/capabilityRouting.js +1 -56
- package/dist/src/cli-argv-preprocess.js +1 -303
- package/dist/src/cli.js +29 -3319
- package/dist/src/commanderAdapter.js +3 -210
- package/dist/src/commands/auth.js +2 -434
- package/dist/src/commands/daemon.d.ts +16 -0
- package/dist/src/commands/daemon.js +1 -98
- package/dist/src/completion-fast.js +1 -88
- package/dist/src/completion-shared.js +4 -34
- package/dist/src/completion.js +1 -68
- package/dist/src/constants.js +1 -38
- package/dist/src/convention-audit.js +2 -553
- package/dist/src/daemon-utils.js +1 -37
- package/dist/src/daemon.js +1 -455
- package/dist/src/discovery.js +2 -280
- package/dist/src/doctor.js +17 -230
- package/dist/src/download/article-download.js +21 -305
- package/dist/src/download/index.js +7 -369
- package/dist/src/download/media-download.js +1 -127
- package/dist/src/download/progress.js +5 -120
- package/dist/src/electron-apps.js +1 -91
- package/dist/src/errors.js +2 -193
- package/dist/src/execution.js +2 -513
- package/dist/src/external.js +1 -227
- package/dist/src/help.js +8 -555
- package/dist/src/hooks.js +1 -58
- package/dist/src/interceptor.js +25 -85
- package/dist/src/launcher.d.ts +1 -1
- package/dist/src/launcher.js +7 -232
- package/dist/src/logger.js +9 -49
- package/dist/src/main.js +9 -175
- package/dist/src/manifest-types.js +1 -9
- package/dist/src/node-network.js +1 -177
- package/dist/src/observation/artifact.js +8 -260
- package/dist/src/observation/events.js +1 -1
- package/dist/src/observation/index.js +1 -7
- package/dist/src/observation/manager.js +1 -27
- package/dist/src/observation/redaction.js +2 -81
- package/dist/src/observation/retention.js +1 -160
- package/dist/src/observation/ring-buffer.js +1 -45
- package/dist/src/observation/session.js +1 -50
- package/dist/src/output.js +2 -159
- package/dist/src/package-paths.js +1 -41
- package/dist/src/pipeline/executor.js +1 -93
- package/dist/src/pipeline/index.js +1 -5
- package/dist/src/pipeline/registry.js +1 -55
- package/dist/src/pipeline/steps/browser.js +1 -86
- package/dist/src/pipeline/steps/download.js +1 -252
- package/dist/src/pipeline/steps/fetch.js +6 -112
- package/dist/src/pipeline/steps/intercept.js +1 -50
- package/dist/src/pipeline/steps/tap.js +17 -57
- package/dist/src/pipeline/steps/transform.js +1 -97
- package/dist/src/pipeline/template.js +1 -354
- package/dist/src/plugin-manifest.js +1 -160
- package/dist/src/plugin-scaffold.js +19 -87
- package/dist/src/plugin.js +20 -1250
- package/dist/src/rate-limit.js +2 -125
- package/dist/src/registry-api.js +1 -10
- package/dist/src/registry.js +1 -125
- package/dist/src/runtime-detect.js +1 -47
- package/dist/src/runtime.d.ts +10 -0
- package/dist/src/runtime.js +1 -54
- package/dist/src/scripts/framework.js +1 -25
- package/dist/src/scripts/interact.js +1 -20
- package/dist/src/scripts/store.js +1 -48
- package/dist/src/serialization.js +4 -102
- package/dist/src/skills.js +6 -127
- package/dist/src/snapshotFormatter.js +3 -338
- package/dist/src/tui.js +16 -179
- package/dist/src/types.js +1 -7
- package/dist/src/update-check.js +8 -202
- package/dist/src/utils.js +6 -120
- package/dist/src/validate.js +3 -129
- package/dist/src/verify.js +2 -71
- package/dist/src/version.js +1 -22
- package/package.json +7 -4
- package/scripts/minify-release.mjs +115 -0
- package/clis/12306/utils.test.js +0 -424
- package/clis/1688/assets.test.js +0 -39
- package/clis/1688/download.test.js +0 -31
- package/clis/1688/item.test.js +0 -67
- package/clis/1688/search.test.js +0 -75
- package/clis/1688/shared.test.js +0 -57
- package/clis/1688/store.test.js +0 -62
- package/clis/36kr/article.test.js +0 -46
- package/clis/36kr/hot.test.js +0 -15
- package/clis/36kr/news.test.js +0 -85
- package/clis/51job/utils.test.js +0 -69
- package/clis/_atlassian/shared.test.js +0 -170
- package/clis/_shared/article/auth.test.js +0 -98
- package/clis/_shared/article/format.test.js +0 -68
- package/clis/_shared/article/images.test.js +0 -182
- package/clis/_shared/article/page-runtime.test.js +0 -155
- package/clis/_shared/article/publish.test.js +0 -104
- package/clis/_shared/site-auth.test.js +0 -98
- package/clis/aibase/news.test.js +0 -59
- package/clis/amazon/bestsellers.test.js +0 -29
- package/clis/amazon/discussion.test.js +0 -124
- package/clis/amazon/offer.test.js +0 -29
- package/clis/amazon/product.test.js +0 -24
- package/clis/amazon/rankings.test.js +0 -41
- package/clis/amazon/search.test.js +0 -22
- package/clis/amazon/shared.test.js +0 -44
- package/clis/antigravity/antigravity.test.js +0 -172
- package/clis/apple-podcasts/commands.test.js +0 -119
- package/clis/apple-podcasts/utils.test.js +0 -57
- package/clis/archive/archive.test.js +0 -262
- package/clis/arxiv/arxiv.test.js +0 -112
- package/clis/autohome/autohome.test.js +0 -115
- package/clis/baidu-scholar/search.test.js +0 -23
- package/clis/baijiahao/article.test.js +0 -395
- package/clis/barchart/greeks.test.js +0 -138
- package/clis/bilibili/article.test.js +0 -384
- package/clis/bilibili/comment.test.js +0 -153
- package/clis/bilibili/comments.test.js +0 -142
- package/clis/bilibili/download.test.js +0 -173
- package/clis/bilibili/dynamic.test.js +0 -68
- package/clis/bilibili/follow.test.js +0 -203
- package/clis/bilibili/hot.test.js +0 -17
- package/clis/bilibili/subtitle.test.js +0 -240
- package/clis/bilibili/summary.test.js +0 -210
- package/clis/bilibili/utils.test.js +0 -97
- package/clis/bilibili/video.test.js +0 -308
- package/clis/binance/commands.test.js +0 -70
- package/clis/bloomberg/businessweek.test.js +0 -149
- package/clis/bloomberg/utils.test.js +0 -129
- package/clis/bluesky/feeds.js +0 -28
- package/clis/bluesky/followers.js +0 -28
- package/clis/bluesky/following.js +0 -28
- package/clis/bluesky/profile.js +0 -30
- package/clis/bluesky/search.js +0 -29
- package/clis/bluesky/starter-packs.js +0 -29
- package/clis/bluesky/thread.js +0 -31
- package/clis/bluesky/trending.js +0 -20
- package/clis/bluesky/user.js +0 -35
- package/clis/booking/booking.test.js +0 -356
- package/clis/boss/chatlist.test.js +0 -211
- package/clis/boss/chatmsg.test.js +0 -230
- package/clis/boss/search.test.js +0 -78
- package/clis/boss/utils.test.js +0 -34
- package/clis/brave/search.test.js +0 -76
- package/clis/chaoxing/utils.test.js +0 -45
- package/clis/chatgpt/commands.test.js +0 -204
- package/clis/chatgpt/envelope.test.js +0 -108
- package/clis/chatgpt/image.test.js +0 -207
- package/clis/chatgpt/model.test.js +0 -36
- package/clis/chatgpt/utils.test.js +0 -1453
- package/clis/chatgpt-app/ax.test.js +0 -95
- package/clis/chatgpt-app/commands.test.js +0 -45
- package/clis/chatwise/composer.test.js +0 -186
- package/clis/chess/analyze.test.js +0 -79
- package/clis/chess/game.test.js +0 -178
- package/clis/chess/games.test.js +0 -164
- package/clis/chess/stats.test.js +0 -79
- package/clis/chess/utils.test.js +0 -230
- package/clis/claude/ask.test.js +0 -338
- package/clis/claude/commands.test.js +0 -118
- package/clis/claude/utils.test.js +0 -148
- package/clis/cnblogs/article.test.js +0 -346
- package/clis/cnki/search.test.js +0 -18
- package/clis/codex/sidebar.test.js +0 -388
- package/clis/coingecko/coingecko.test.js +0 -109
- package/clis/confluence/commands.test.js +0 -195
- package/clis/coupang/coupang.test.js +0 -159
- package/clis/coupang/utils.test.js +0 -62
- package/clis/csdn/article.test.js +0 -378
- package/clis/cto51/article.test.js +0 -326
- package/clis/ctrip/ctrip.test.js +0 -719
- package/clis/dblp/dblp.test.js +0 -397
- package/clis/deepseek/ask.test.js +0 -399
- package/clis/deepseek/detail.test.js +0 -81
- package/clis/deepseek/send.test.js +0 -107
- package/clis/deepseek/utils.test.js +0 -370
- package/clis/defillama/defillama.test.js +0 -99
- package/clis/devto/devto.test.js +0 -236
- package/clis/dianping/dianping.test.js +0 -578
- package/clis/discord-app/commands.test.js +0 -395
- package/clis/dongchedi/dongchedi.test.js +0 -191
- package/clis/douban/article.test.js +0 -136
- package/clis/douban/download.test.js +0 -170
- package/clis/douban/movie-hot.test.js +0 -14
- package/clis/douban/search.test.js +0 -11
- package/clis/douban/subject.test.js +0 -11
- package/clis/douban/utils.test.js +0 -488
- package/clis/doubao/detail.test.js +0 -42
- package/clis/doubao/history.test.js +0 -37
- package/clis/doubao/utils.test.js +0 -396
- package/clis/douyin/_shared/browser-fetch.test.js +0 -64
- package/clis/douyin/_shared/creation-id.test.js +0 -22
- package/clis/douyin/_shared/imagex-upload.test.js +0 -87
- package/clis/douyin/_shared/sts2.test.js +0 -27
- package/clis/douyin/_shared/text-extra.test.js +0 -37
- package/clis/douyin/_shared/timing.test.js +0 -28
- package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
- package/clis/douyin/_shared/tos-upload.test.js +0 -229
- package/clis/douyin/_shared/transcode.test.js +0 -91
- package/clis/douyin/_shared/vod-upload.test.js +0 -38
- package/clis/douyin/activities.test.js +0 -55
- package/clis/douyin/collections.test.js +0 -45
- package/clis/douyin/delete.test.js +0 -100
- package/clis/douyin/draft.test.js +0 -347
- package/clis/douyin/drafts.test.js +0 -11
- package/clis/douyin/hashtag.test.js +0 -171
- package/clis/douyin/location.test.js +0 -23
- package/clis/douyin/profile.test.js +0 -46
- package/clis/douyin/publish-upload-id.test.js +0 -206
- package/clis/douyin/publish.test.js +0 -38
- package/clis/douyin/search.test.js +0 -307
- package/clis/douyin/stats.test.js +0 -22
- package/clis/douyin/update.test.js +0 -11
- package/clis/douyin/user-videos.test.js +0 -151
- package/clis/douyin/videos.test.js +0 -54
- package/clis/duckduckgo/search.test.js +0 -128
- package/clis/duckduckgo/suggest.test.js +0 -66
- package/clis/eastmoney/article.test.js +0 -427
- package/clis/eastmoney/hot-rank.test.js +0 -59
- package/clis/endoflife/endoflife.test.js +0 -51
- package/clis/facebook/feed.test.js +0 -169
- package/clis/facebook/marketplace.test.js +0 -91
- package/clis/facebook/notifications.test.js +0 -458
- package/clis/facebook/search.test.js +0 -55
- package/clis/flathub/flathub.test.js +0 -90
- package/clis/flomo/memos.test.js +0 -144
- package/clis/gemini/ask.test.js +0 -100
- package/clis/gemini/commands.test.js +0 -212
- package/clis/gemini/deep-research-result.test.js +0 -155
- package/clis/gemini/deep-research.test.js +0 -181
- package/clis/gemini/reply-state.test.js +0 -671
- package/clis/gemini/utils.test.js +0 -392
- package/clis/geogebra/geogebra.test.js +0 -175
- package/clis/gitee/search.test.js +0 -65
- package/clis/gitee/user.test.js +0 -63
- package/clis/github-trending/repos.test.js +0 -149
- package/clis/google/utils.test.js +0 -75
- package/clis/google-scholar/cite.test.js +0 -47
- package/clis/google-scholar/profile.test.js +0 -49
- package/clis/google-scholar/search.test.js +0 -71
- package/clis/goproxy/goproxy.test.js +0 -103
- package/clis/gov-law/commands.test.js +0 -39
- package/clis/gov-policy/gov-policy.test.js +0 -224
- package/clis/grok/ask.test.js +0 -29
- package/clis/grok/export.test.js +0 -210
- package/clis/grok/utils.test.js +0 -141
- package/clis/guazi/guazi.test.js +0 -126
- package/clis/hackernews/hackernews.test.js +0 -132
- package/clis/hf/hf.test.js +0 -16
- package/clis/huodongxing/events.test.js +0 -296
- package/clis/hupu/hot.test.js +0 -224
- package/clis/imdb/utils.test.js +0 -88
- package/clis/imooc/article.test.js +0 -264
- package/clis/indeed/indeed.test.js +0 -375
- package/clis/instagram/_shared/private-publish.test.js +0 -705
- package/clis/instagram/_shared/protocol-capture.test.js +0 -114
- package/clis/instagram/detail.test.js +0 -137
- package/clis/instagram/download.test.js +0 -118
- package/clis/instagram/instagram.test.js +0 -381
- package/clis/instagram/note.test.js +0 -53
- package/clis/instagram/post.test.js +0 -1647
- package/clis/instagram/reel.test.js +0 -167
- package/clis/instagram/story.test.js +0 -134
- package/clis/instagram/user.test.js +0 -282
- package/clis/jd/commands.test.js +0 -41
- package/clis/jd/item.test.js +0 -354
- package/clis/jianyu/search.test.js +0 -153
- package/clis/jianyu/shared/procurement-contract.test.js +0 -72
- package/clis/jianyu/shared/procurement-detail.test.js +0 -84
- package/clis/jike/read.test.js +0 -86
- package/clis/jira/commands.test.js +0 -287
- package/clis/juejin/article.test.js +0 -299
- package/clis/juejin/juejin.test.js +0 -241
- package/clis/kimi/kimi.test.js +0 -187
- package/clis/lesswrong/frontpage.test.js +0 -37
- package/clis/lichess/lichess.test.js +0 -85
- package/clis/linkedin/connect.test.js +0 -328
- package/clis/linkedin/inbox.test.js +0 -152
- package/clis/linkedin/job-detail.test.js +0 -64
- package/clis/linkedin/jobs-preferences.test.js +0 -43
- package/clis/linkedin/people-search.test.js +0 -216
- package/clis/linkedin/post-analytics.test.js +0 -40
- package/clis/linkedin/posts.test.js +0 -40
- package/clis/linkedin/profile-analytics.test.js +0 -67
- package/clis/linkedin/profile-experience.test.js +0 -152
- package/clis/linkedin/profile-projects.test.js +0 -111
- package/clis/linkedin/profile-read.test.js +0 -77
- package/clis/linkedin/safe-send.test.js +0 -255
- package/clis/linkedin/salesnav-inbox.test.js +0 -113
- package/clis/linkedin/salesnav-message.test.js +0 -172
- package/clis/linkedin/salesnav-search.test.js +0 -76
- package/clis/linkedin/salesnav-thread.test.js +0 -79
- package/clis/linkedin/search.test.js +0 -222
- package/clis/linkedin/sent-invitations.test.js +0 -62
- package/clis/linkedin/services-read.test.js +0 -105
- package/clis/linkedin/thread-snapshot.test.js +0 -89
- package/clis/linkedin/timeline.test.js +0 -81
- package/clis/linkedin-learning/course.test.js +0 -114
- package/clis/linkedin-learning/search.test.js +0 -144
- package/clis/linkedin-learning/trending.test.js +0 -123
- package/clis/linux-do/feed.test.js +0 -153
- package/clis/linux-do/topic-content.test.js +0 -59
- package/clis/lobsters/lobsters.test.js +0 -169
- package/clis/maimai/search-talents.test.js +0 -29
- package/clis/manus/manus.test.js +0 -382
- package/clis/notebooklm/add-source.test.js +0 -97
- package/clis/notebooklm/compat.test.js +0 -16
- package/clis/notebooklm/create.test.js +0 -58
- package/clis/notebooklm/generate-audio.test.js +0 -63
- package/clis/notebooklm/generate-slides.test.js +0 -75
- package/clis/notebooklm/history.test.js +0 -58
- package/clis/notebooklm/note-list.test.js +0 -56
- package/clis/notebooklm/notes-get.test.js +0 -72
- package/clis/notebooklm/open.test.js +0 -63
- package/clis/notebooklm/rpc.test.js +0 -131
- package/clis/notebooklm/source-fulltext.test.js +0 -106
- package/clis/notebooklm/source-get.test.js +0 -84
- package/clis/notebooklm/source-guide.test.js +0 -104
- package/clis/notebooklm/summary.test.js +0 -78
- package/clis/notebooklm/utils.test.js +0 -449
- package/clis/notebooklm/write-note.test.js +0 -70
- package/clis/nuget/nuget.test.js +0 -111
- package/clis/oeis/oeis.test.js +0 -88
- package/clis/ones/task-helpers.test.js +0 -12
- package/clis/ones/worklog.test.js +0 -20
- package/clis/openfda/openfda.test.js +0 -114
- package/clis/openreview/openreview.test.js +0 -427
- package/clis/oschina/article.test.js +0 -361
- package/clis/osv/osv.test.js +0 -97
- package/clis/paperreview/commands.test.js +0 -243
- package/clis/paperreview/utils.test.js +0 -49
- package/clis/pixiv/detail.test.js +0 -93
- package/clis/pixiv/download.test.js +0 -97
- package/clis/pixiv/illusts.test.js +0 -99
- package/clis/pixiv/search.test.js +0 -83
- package/clis/pixiv/user.test.js +0 -100
- package/clis/powerchina/search.test.js +0 -93
- package/clis/producthunt/utils.test.js +0 -64
- package/clis/pubmed/pubmed.test.js +0 -464
- package/clis/qoder/qoder.test.js +0 -125
- package/clis/quark/utils.test.js +0 -58
- package/clis/qwen/ask.test.js +0 -36
- package/clis/qwen/utils.test.js +0 -128
- package/clis/reddit/extract-media.test.js +0 -149
- package/clis/reddit/frontpage.test.js +0 -34
- package/clis/reddit/home.test.js +0 -170
- package/clis/reddit/hot.test.js +0 -32
- package/clis/reddit/popular.test.js +0 -26
- package/clis/reddit/read.test.js +0 -402
- package/clis/reddit/reply.test.js +0 -89
- package/clis/reddit/search.test.js +0 -26
- package/clis/reddit/subreddit-info.test.js +0 -163
- package/clis/reddit/subreddit.test.js +0 -31
- package/clis/reddit/subscribed.test.js +0 -168
- package/clis/reddit/whoami.test.js +0 -105
- package/clis/rednote/navigation.test.js +0 -26
- package/clis/rednote/rednote.test.js +0 -240
- package/clis/rest-countries/rest-countries.test.js +0 -83
- package/clis/reuters/reuters.test.js +0 -299
- package/clis/rfc/rfc.test.js +0 -74
- package/clis/segmentfault/article.test.js +0 -470
- package/clis/semanticscholar/semanticscholar.test.js +0 -279
- package/clis/sinafinance/stock.test.js +0 -59
- package/clis/slock/api-base-canary.test.js +0 -62
- package/clis/slock/attachment-download.test.js +0 -102
- package/clis/slock/attachment-upload.test.js +0 -131
- package/clis/slock/attachment-url.test.js +0 -41
- package/clis/slock/bookmark-add.test.js +0 -38
- package/clis/slock/bookmark-list.test.js +0 -47
- package/clis/slock/bookmark-remove.test.js +0 -24
- package/clis/slock/channel-action.test.js +0 -65
- package/clis/slock/channel-create.test.js +0 -40
- package/clis/slock/channel-files.test.js +0 -32
- package/clis/slock/channel-info.test.js +0 -25
- package/clis/slock/channel-list.test.js +0 -37
- package/clis/slock/channel-mark.test.js +0 -49
- package/clis/slock/channel-members.test.js +0 -44
- package/clis/slock/cross-command.test.js +0 -21
- package/clis/slock/dm-list.test.js +0 -26
- package/clis/slock/error-detail-canary.test.js +0 -144
- package/clis/slock/errors.test.js +0 -29
- package/clis/slock/in-page.test.js +0 -362
- package/clis/slock/inbox-done.test.js +0 -21
- package/clis/slock/inbox-read-all.test.js +0 -20
- package/clis/slock/inbox.test.js +0 -46
- package/clis/slock/message-read.test.js +0 -83
- package/clis/slock/message-search.test.js +0 -61
- package/clis/slock/message-send.test.js +0 -127
- package/clis/slock/reaction-add.test.js +0 -36
- package/clis/slock/reaction-remove.test.js +0 -29
- package/clis/slock/resolve.test.js +0 -102
- package/clis/slock/server-list.test.js +0 -24
- package/clis/slock/server-override-canary.test.js +0 -87
- package/clis/slock/server-use.test.js +0 -48
- package/clis/slock/short-id-canary.test.js +0 -86
- package/clis/slock/site-session-canary.test.js +0 -49
- package/clis/slock/task-claim.test.js +0 -81
- package/clis/slock/task-convert.test.js +0 -82
- package/clis/slock/task-create.test.js +0 -65
- package/clis/slock/task-delete.test.js +0 -52
- package/clis/slock/task-get.test.js +0 -45
- package/clis/slock/task-list-server.test.js +0 -48
- package/clis/slock/task-list.test.js +0 -59
- package/clis/slock/task-status.test.js +0 -76
- package/clis/slock/task-unclaim.test.js +0 -49
- package/clis/slock/thread-follow.test.js +0 -34
- package/clis/slock/thread-list.test.js +0 -24
- package/clis/slock/thread-state.test.js +0 -38
- package/clis/slock/unread-summary.test.js +0 -31
- package/clis/slock/whoami.test.js +0 -23
- package/clis/smzdm/search.test.js +0 -114
- package/clis/sohu/article.test.js +0 -397
- package/clis/spotify/utils.test.js +0 -67
- package/clis/stackoverflow/stackoverflow.test.js +0 -404
- package/clis/steam/steam.test.js +0 -46
- package/clis/substack/utils.test.js +0 -44
- package/clis/suno/commands.test.js +0 -188
- package/clis/suno/download.test.js +0 -151
- package/clis/suno/generate.test.js +0 -252
- package/clis/suno/utils.test.js +0 -329
- package/clis/taobao/commands.test.js +0 -41
- package/clis/tdx/hot-rank.test.js +0 -59
- package/clis/ths/hot-rank.test.js +0 -64
- package/clis/tieba/commands.test.js +0 -79
- package/clis/tieba/utils.test.js +0 -290
- package/clis/tiktok/creator-videos.test.js +0 -113
- package/clis/tiktok/refactor.test.js +0 -389
- package/clis/tiktok/write-refactor.test.js +0 -370
- package/clis/toutiao/toutiao.test.js +0 -378
- package/clis/trae-cn/trae-cn.test.js +0 -412
- package/clis/trae-solo/trae-solo.test.js +0 -67
- package/clis/tvmaze/tvmaze.test.js +0 -93
- package/clis/twitter/bookmark-folder.test.js +0 -396
- package/clis/twitter/bookmark-folders.test.js +0 -152
- package/clis/twitter/bookmark.test.js +0 -74
- package/clis/twitter/bookmarks.test.js +0 -206
- package/clis/twitter/delete.test.js +0 -103
- package/clis/twitter/device-follow.test.js +0 -287
- package/clis/twitter/download.test.js +0 -457
- package/clis/twitter/follow-batch.test.js +0 -137
- package/clis/twitter/followers.test.js +0 -62
- package/clis/twitter/following.test.js +0 -359
- package/clis/twitter/hide-reply.test.js +0 -76
- package/clis/twitter/like.test.js +0 -73
- package/clis/twitter/likes.test.js +0 -220
- package/clis/twitter/list-add.test.js +0 -133
- package/clis/twitter/list-batch.test.js +0 -113
- package/clis/twitter/list-create.test.js +0 -169
- package/clis/twitter/list-delete.test.js +0 -102
- package/clis/twitter/list-remove.test.js +0 -147
- package/clis/twitter/list-tweets.test.js +0 -198
- package/clis/twitter/lists.test.js +0 -253
- package/clis/twitter/post.test.js +0 -334
- package/clis/twitter/profile.test.js +0 -150
- package/clis/twitter/quote.test.js +0 -230
- package/clis/twitter/reply.test.js +0 -237
- package/clis/twitter/retweet.test.js +0 -73
- package/clis/twitter/schedule.test.js +0 -86
- package/clis/twitter/scheduled-delete.test.js +0 -58
- package/clis/twitter/scheduled-list.test.js +0 -36
- package/clis/twitter/search.test.js +0 -400
- package/clis/twitter/shared.test.js +0 -1012
- package/clis/twitter/thread.test.js +0 -58
- package/clis/twitter/timeline.test.js +0 -104
- package/clis/twitter/trending.test.js +0 -15
- package/clis/twitter/tweets.test.js +0 -487
- package/clis/twitter/unbookmark.test.js +0 -73
- package/clis/twitter/unlike.test.js +0 -75
- package/clis/twitter/unretweet.test.js +0 -73
- package/clis/twitter/utils.test.js +0 -169
- package/clis/uisdc/news.test.js +0 -66
- package/clis/uiverse/_shared.test.js +0 -62
- package/clis/uiverse/navigation.test.js +0 -12
- package/clis/upwork/upwork.test.js +0 -566
- package/clis/wanfang/search.test.js +0 -23
- package/clis/web/read.test.js +0 -392
- package/clis/wechat-channels/publish.test.js +0 -144
- package/clis/weibo/delete.test.js +0 -94
- package/clis/weibo/envelope.test.js +0 -85
- package/clis/weibo/favorites.test.js +0 -114
- package/clis/weibo/publish.test.js +0 -192
- package/clis/weibo/user-posts.test.js +0 -92
- package/clis/weibo/utils.test.js +0 -36
- package/clis/weixin/article.test.js +0 -299
- package/clis/weixin/download.test.js +0 -106
- package/clis/weixin/drafts.test.js +0 -69
- package/clis/weixin/search.test.js +0 -227
- package/clis/weread/ai-outline.test.js +0 -83
- package/clis/weread/book-search.test.js +0 -242
- package/clis/weread/commands.test.js +0 -398
- package/clis/weread/private-api-regression.test.js +0 -369
- package/clis/weread/search-regression.test.js +0 -494
- package/clis/weread/utils.test.js +0 -128
- package/clis/weread-official/commands.test.js +0 -385
- package/clis/weread-official/utils.test.js +0 -242
- package/clis/wikidata/wikidata.test.js +0 -83
- package/clis/wikipedia/trending.test.js +0 -57
- package/clis/woshipm/article.test.js +0 -305
- package/clis/wttr/wttr.test.js +0 -84
- package/clis/xianyu/chat.test.js +0 -84
- package/clis/xianyu/im.test.js +0 -253
- package/clis/xianyu/item.test.js +0 -56
- package/clis/xianyu/publish.test.js +0 -220
- package/clis/xianyu/search.test.js +0 -104
- package/clis/xiaoe/xiaoe.test.js +0 -486
- package/clis/xiaohongshu/ask.test.js +0 -271
- package/clis/xiaohongshu/collection-helpers.test.js +0 -125
- package/clis/xiaohongshu/comments.test.js +0 -320
- package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
- package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
- package/clis/xiaohongshu/creator-notes.test.js +0 -281
- package/clis/xiaohongshu/creator-stats.test.js +0 -24
- package/clis/xiaohongshu/delete-note.test.js +0 -177
- package/clis/xiaohongshu/download.test.js +0 -415
- package/clis/xiaohongshu/drafts.test.js +0 -172
- package/clis/xiaohongshu/feed.test.js +0 -126
- package/clis/xiaohongshu/follow.test.js +0 -211
- package/clis/xiaohongshu/liked.test.js +0 -82
- package/clis/xiaohongshu/navigation.test.js +0 -38
- package/clis/xiaohongshu/note.test.js +0 -249
- package/clis/xiaohongshu/publish.test.js +0 -1155
- package/clis/xiaohongshu/saved.test.js +0 -143
- package/clis/xiaohongshu/search.test.js +0 -394
- package/clis/xiaohongshu/user-helpers.test.js +0 -160
- package/clis/xiaohongshu/user.test.js +0 -141
- package/clis/xiaoyuzhou/auth.test.js +0 -124
- package/clis/xiaoyuzhou/download.test.js +0 -135
- package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
- package/clis/xiaoyuzhou/transcript.test.js +0 -195
- package/clis/xiaoyuzhou/utils.test.js +0 -39
- package/clis/xueqiu/article.test.js +0 -505
- package/clis/xueqiu/comments.test.js +0 -696
- package/clis/xueqiu/danjuan-utils.test.js +0 -41
- package/clis/xueqiu/utils.test.js +0 -26
- package/clis/yahoo/search.test.js +0 -94
- package/clis/youdao/note.test.js +0 -99
- package/clis/youtube/channel.test.js +0 -283
- package/clis/youtube/feed.test.js +0 -131
- package/clis/youtube/transcript-group.test.js +0 -99
- package/clis/youtube/transcript.test.js +0 -296
- package/clis/youtube/utils.test.js +0 -84
- package/clis/youtube/video.test.js +0 -111
- package/clis/yuanbao/ask.test.js +0 -124
- package/clis/yuanbao/new.test.js +0 -30
- package/clis/yuanbao/shared.test.js +0 -80
- package/clis/yuque/article.test.js +0 -415
- package/clis/zhihu/answer-comments.test.js +0 -287
- package/clis/zhihu/answer-detail.test.js +0 -338
- package/clis/zhihu/answer.test.js +0 -54
- package/clis/zhihu/article-transform.test.js +0 -43
- package/clis/zhihu/collection.test.js +0 -337
- package/clis/zhihu/collections.test.js +0 -182
- package/clis/zhihu/comment.test.js +0 -50
- package/clis/zhihu/download.test.js +0 -12
- package/clis/zhihu/favorite.test.js +0 -59
- package/clis/zhihu/follow.test.js +0 -42
- package/clis/zhihu/followers.test.js +0 -42
- package/clis/zhihu/following.test.js +0 -44
- package/clis/zhihu/like.test.js +0 -41
- package/clis/zhihu/pins.test.js +0 -44
- package/clis/zhihu/question.test.js +0 -251
- package/clis/zhihu/recommend.test.js +0 -143
- package/clis/zhihu/search.test.js +0 -198
- package/clis/zhihu/target.test.js +0 -77
- package/clis/zhihu/text.test.js +0 -24
- package/clis/zhihu/user-answers.test.js +0 -69
- package/clis/zhihu/user-articles.test.js +0 -44
- package/clis/zhihu/user.test.js +0 -73
- package/clis/zhihu/write-shared.test.js +0 -179
- package/clis/zlibrary/commands.test.js +0 -65
- package/clis/zsxq/search.test.js +0 -24
- package/clis/zsxq/topic.test.js +0 -30
- package/clis/zsxq/topics.test.js +0 -24
- package/clis/zsxq/utils.test.js +0 -31
- package/dist/src/adapter-shadow.test.js +0 -49
- package/dist/src/adapter-source.test.js +0 -29
- package/dist/src/browser/analyze.test.js +0 -209
- package/dist/src/browser/article-extract.e2e.test.js +0 -105
- package/dist/src/browser/article-extract.test.js +0 -94
- package/dist/src/browser/ax-snapshot.test.js +0 -91
- package/dist/src/browser/base-page.test.js +0 -803
- package/dist/src/browser/bridge-readiness.test.js +0 -57
- package/dist/src/browser/cdp-click-fixture.test.js +0 -87
- package/dist/src/browser/cdp.test.js +0 -79
- package/dist/src/browser/compound.test.js +0 -175
- package/dist/src/browser/daemon-client.test.js +0 -318
- package/dist/src/browser/dom-helpers.test.js +0 -106
- package/dist/src/browser/dom-snapshot.test.js +0 -313
- package/dist/src/browser/errors.test.js +0 -60
- package/dist/src/browser/extract.test.js +0 -129
- package/dist/src/browser/find.test.js +0 -180
- package/dist/src/browser/html-tree.test.js +0 -181
- package/dist/src/browser/network-cache.test.js +0 -75
- package/dist/src/browser/network-key.test.js +0 -49
- package/dist/src/browser/page.test.js +0 -406
- package/dist/src/browser/shape-filter.test.js +0 -101
- package/dist/src/browser/shape.test.js +0 -82
- package/dist/src/browser/stealth.test.js +0 -134
- package/dist/src/browser/target-errors.test.js +0 -94
- package/dist/src/browser/target-resolver.test.js +0 -118
- package/dist/src/browser/utils.test.js +0 -29
- package/dist/src/browser/verify-fixture.test.js +0 -219
- package/dist/src/browser.test.js +0 -291
- package/dist/src/build-manifest.test.js +0 -341
- package/dist/src/capabilityRouting.test.js +0 -63
- package/dist/src/cli-argv-preprocess.test.js +0 -304
- package/dist/src/cli.test.js +0 -3003
- package/dist/src/commanderAdapter.test.js +0 -386
- package/dist/src/commands/auth.test.js +0 -309
- package/dist/src/commands/daemon.test.js +0 -283
- package/dist/src/completion.test.js +0 -24
- package/dist/src/convention-audit.test.js +0 -247
- package/dist/src/daemon.test.js +0 -60
- package/dist/src/doctor.test.js +0 -263
- package/dist/src/download/article-download.test.js +0 -235
- package/dist/src/download/index.test.js +0 -177
- package/dist/src/download/media-download.test.js +0 -112
- package/dist/src/download/progress.test.js +0 -36
- package/dist/src/electron-apps.test.js +0 -76
- package/dist/src/engine.test.js +0 -337
- package/dist/src/errors.test.js +0 -109
- package/dist/src/execution.test.js +0 -645
- package/dist/src/extension-manifest-regression.test.js +0 -12
- package/dist/src/external.test.js +0 -188
- package/dist/src/help.test.js +0 -58
- package/dist/src/hooks.test.js +0 -92
- package/dist/src/interceptor.test.js +0 -81
- package/dist/src/launcher.test.js +0 -191
- package/dist/src/node-network.test.js +0 -81
- package/dist/src/observation/artifact.test.js +0 -121
- package/dist/src/observation/manager.test.js +0 -13
- package/dist/src/observation/redaction.test.js +0 -32
- package/dist/src/observation/retention.test.js +0 -118
- package/dist/src/observation/ring-buffer.test.js +0 -22
- package/dist/src/output.test.js +0 -79
- package/dist/src/package-exports.test.js +0 -112
- package/dist/src/pipeline/executor.test.js +0 -182
- package/dist/src/pipeline/steps/download.test.js +0 -102
- package/dist/src/pipeline/steps/fetch.test.js +0 -188
- package/dist/src/pipeline/template.test.js +0 -212
- package/dist/src/pipeline/transform.test.js +0 -174
- package/dist/src/plugin-manifest.test.js +0 -179
- package/dist/src/plugin-scaffold.test.js +0 -83
- package/dist/src/plugin.test.js +0 -1349
- package/dist/src/rate-limit.test.js +0 -66
- package/dist/src/registry.test.js +0 -209
- package/dist/src/runtime-detect.test.js +0 -39
- package/dist/src/serialization.test.js +0 -78
- package/dist/src/skills.test.js +0 -71
- package/dist/src/snapshotFormatter.test.js +0 -521
- package/dist/src/tui.test.js +0 -19
- package/dist/src/update-check.test.js +0 -116
- package/dist/src/utils.test.js +0 -155
- package/dist/src/validate.test.js +0 -90
- package/dist/src/verify.test.js +0 -63
- package/dist/src/weixin-download.test.js +0 -45
package/clis/gemini/utils.js
CHANGED
|
@@ -1,70 +1,4 @@
|
|
|
1
|
-
import
|
|
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 = ${
|
|
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 = ${
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
export function
|
|
108
|
-
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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 = ${
|
|
316
|
-
const transcriptLines = ${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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(
|
|
562
|
-
|
|
563
|
-
}
|
|
564
|
-
function submitComposerScript() {
|
|
565
|
-
return `
|
|
299
|
+
})(${JSON.stringify(f)})
|
|
300
|
+
`}function m(){return`
|
|
566
301
|
(() => {
|
|
567
|
-
${
|
|
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
|
-
${
|
|
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
|
-
})(${
|
|
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
|
-
})(${
|
|
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(
|
|
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,
|
|
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
|
|
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
|
-
})(${
|
|
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""}
|