publishport-opencli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +214 -0
- package/README.md +299 -0
- package/README.zh-CN.md +341 -0
- package/cli-manifest.json +51513 -0
- package/clis/12306/auth.js +25 -0
- package/clis/12306/me.js +9 -0
- package/clis/12306/orders.js +13 -0
- package/clis/12306/passengers.js +14 -0
- package/clis/12306/price.js +1 -0
- package/clis/12306/stations.js +1 -0
- package/clis/12306/train.js +1 -0
- package/clis/12306/trains.js +1 -0
- package/clis/12306/utils.js +1 -0
- package/clis/1688/assets.js +127 -0
- package/clis/1688/auth.js +1 -0
- package/clis/1688/download.js +1 -0
- package/clis/1688/item.js +21 -0
- package/clis/1688/search.js +129 -0
- package/clis/1688/shared.js +11 -0
- package/clis/1688/store.js +26 -0
- package/clis/1point3acres/auth.js +18 -0
- package/clis/1point3acres/digest.js +1 -0
- package/clis/1point3acres/forum.js +1 -0
- package/clis/1point3acres/forums.js +1 -0
- package/clis/1point3acres/hot.js +1 -0
- package/clis/1point3acres/latest.js +1 -0
- package/clis/1point3acres/notifications.js +1 -0
- package/clis/1point3acres/search.js +1 -0
- package/clis/1point3acres/thread.js +2 -0
- package/clis/1point3acres/user.js +1 -0
- package/clis/1point3acres/utils.js +6 -0
- package/clis/36kr/article.js +20 -0
- package/clis/36kr/hot.js +16 -0
- package/clis/36kr/news.js +1 -0
- package/clis/36kr/search.js +36 -0
- package/clis/51job/company.js +36 -0
- package/clis/51job/detail.js +35 -0
- package/clis/51job/hot.js +1 -0
- package/clis/51job/search.js +1 -0
- package/clis/51job/utils.js +21 -0
- package/clis/_atlassian/shared.js +21 -0
- package/clis/_shared/article/auth.js +16 -0
- package/clis/_shared/article/douban-md2draft.js +4 -0
- package/clis/_shared/article/format.js +1 -0
- package/clis/_shared/article/images.js +95 -0
- package/clis/_shared/article/login.js +1 -0
- package/clis/_shared/article/page-runtime.js +745 -0
- package/clis/_shared/article/publish.js +34 -0
- package/clis/_shared/common.js +1 -0
- package/clis/_shared/content-guard.js +1 -0
- package/clis/_shared/desktop-commands.js +1 -0
- package/clis/_shared/search-adapter.js +1 -0
- package/clis/_shared/site-auth.js +1 -0
- package/clis/_shared/token-auth.js +2 -0
- package/clis/_shared/video-publish.js +62 -0
- package/clis/aibase/news.js +31 -0
- package/clis/amazon/auth.js +19 -0
- package/clis/amazon/bestsellers.js +1 -0
- package/clis/amazon/discussion.js +20 -0
- package/clis/amazon/movers-shakers.js +1 -0
- package/clis/amazon/new-releases.js +1 -0
- package/clis/amazon/offer.js +29 -0
- package/clis/amazon/product.js +25 -0
- package/clis/amazon/rankings.js +68 -0
- package/clis/amazon/search.js +16 -0
- package/clis/amazon/shared.js +11 -0
- package/clis/antigravity/SKILL.md +38 -0
- package/clis/antigravity/_actions.js +201 -0
- package/clis/antigravity/audit-extras.js +78 -0
- package/clis/antigravity/delete.js +1 -0
- package/clis/antigravity/dump.js +1 -0
- package/clis/antigravity/extract-code.js +18 -0
- package/clis/antigravity/history.js +1 -0
- package/clis/antigravity/mark-read.js +1 -0
- package/clis/antigravity/model.js +90 -0
- package/clis/antigravity/new.js +9 -0
- package/clis/antigravity/read.js +10 -0
- package/clis/antigravity/rename.js +1 -0
- package/clis/antigravity/send.js +11 -0
- package/clis/antigravity/serve.js +97 -0
- package/clis/antigravity/status.js +1 -0
- package/clis/antigravity/storage.js +12 -0
- package/clis/antigravity/watch.js +6 -0
- package/clis/apple-podcasts/episodes.js +1 -0
- package/clis/apple-podcasts/search.js +1 -0
- package/clis/apple-podcasts/top.js +1 -0
- package/clis/apple-podcasts/utils.js +1 -0
- package/clis/archive/item.js +1 -0
- package/clis/archive/search.js +1 -0
- package/clis/archive/snapshots.js +1 -0
- package/clis/archive/wayback.js +1 -0
- package/clis/arxiv/author.js +1 -0
- package/clis/arxiv/paper.js +1 -0
- package/clis/arxiv/recent.js +1 -0
- package/clis/arxiv/search.js +1 -0
- package/clis/arxiv/utils.js +1 -0
- package/clis/autohome/__fixtures__/catalog.html +11 -0
- package/clis/autohome/__fixtures__/koubei.json +116 -0
- package/clis/autohome/brand.js +1 -0
- package/clis/autohome/score.js +1 -0
- package/clis/autohome/utils.js +1 -0
- package/clis/baidu-scholar/search.js +63 -0
- package/clis/baijiahao/article.js +1 -0
- package/clis/baijiahao/lists.js +1 -0
- package/clis/baijiahao/login.js +1 -0
- package/clis/baijiahao/publish.js +57 -0
- package/clis/baijiahao/stats.js +1 -0
- package/clis/baijiahao/whoami.js +1 -0
- package/clis/band/auth.js +29 -0
- package/clis/band/bands.js +37 -0
- package/clis/band/mentions.js +6 -0
- package/clis/band/post.js +76 -0
- package/clis/band/posts.js +50 -0
- package/clis/barchart/flow.js +70 -0
- package/clis/barchart/greeks.js +88 -0
- package/clis/barchart/options.js +61 -0
- package/clis/barchart/quote.js +87 -0
- package/clis/bbc/news.js +1 -0
- package/clis/bbc/topic.js +1 -0
- package/clis/bbc/utils.js +1 -0
- package/clis/bilibili/article.js +1 -0
- package/clis/bilibili/auth.js +1 -0
- package/clis/bilibili/categories.js +1 -0
- package/clis/bilibili/coin.js +1 -0
- package/clis/bilibili/comment-del.js +1 -0
- package/clis/bilibili/comment-like.js +1 -0
- package/clis/bilibili/comment.js +1 -0
- package/clis/bilibili/comments.js +1 -0
- package/clis/bilibili/dm-list.js +1 -0
- package/clis/bilibili/dm-read.js +1 -0
- package/clis/bilibili/dm-send.js +1 -0
- package/clis/bilibili/download.js +7 -0
- package/clis/bilibili/drafts.js +1 -0
- package/clis/bilibili/dynamic-post.js +24 -0
- package/clis/bilibili/dynamic.js +1 -0
- package/clis/bilibili/favorite-add.js +1 -0
- package/clis/bilibili/favorite.js +1 -0
- package/clis/bilibili/feed.js +2 -0
- package/clis/bilibili/follow.js +1 -0
- package/clis/bilibili/following.js +1 -0
- package/clis/bilibili/history.js +1 -0
- package/clis/bilibili/hot.js +15 -0
- package/clis/bilibili/like.js +1 -0
- package/clis/bilibili/me.js +1 -0
- package/clis/bilibili/partitions.js +1 -0
- package/clis/bilibili/ranking.js +1 -0
- package/clis/bilibili/search.js +1 -0
- package/clis/bilibili/stats.js +1 -0
- package/clis/bilibili/subtitle.js +21 -0
- package/clis/bilibili/summary.js +1 -0
- package/clis/bilibili/topics.js +1 -0
- package/clis/bilibili/unfollow.js +1 -0
- package/clis/bilibili/upload.js +1 -0
- package/clis/bilibili/user-videos.js +1 -0
- package/clis/bilibili/utils.js +50 -0
- package/clis/bilibili/video-drafts.js +1 -0
- package/clis/bilibili/video.js +1 -0
- package/clis/binance/asks.js +1 -0
- package/clis/binance/depth.js +1 -0
- package/clis/binance/gainers.js +1 -0
- package/clis/binance/klines.js +1 -0
- package/clis/binance/losers.js +1 -0
- package/clis/binance/pairs.js +1 -0
- package/clis/binance/price.js +1 -0
- package/clis/binance/prices.js +1 -0
- package/clis/binance/ticker.js +1 -0
- package/clis/binance/top.js +1 -0
- package/clis/binance/trades.js +1 -0
- package/clis/bloomberg/businessweek.js +12 -0
- package/clis/bloomberg/crypto.js +1 -0
- package/clis/bloomberg/economics.js +1 -0
- package/clis/bloomberg/feeds.js +1 -0
- package/clis/bloomberg/green.js +1 -0
- package/clis/bloomberg/industries.js +1 -0
- package/clis/bloomberg/main.js +1 -0
- package/clis/bloomberg/markets.js +1 -0
- package/clis/bloomberg/news.js +57 -0
- package/clis/bloomberg/opinions.js +1 -0
- package/clis/bloomberg/politics.js +1 -0
- package/clis/bloomberg/pursuits.js +1 -0
- package/clis/bloomberg/tech.js +1 -0
- package/clis/bloomberg/utils.js +17 -0
- package/clis/bluesky/post.js +1 -0
- package/clis/bluesky/shared.js +56 -0
- package/clis/bluesky/whoami.js +1 -0
- package/clis/booking/search.js +93 -0
- package/clis/boss/auth.js +13 -0
- package/clis/boss/batchgreet.js +1 -0
- package/clis/boss/chatlist.js +1 -0
- package/clis/boss/chatmsg.js +1 -0
- package/clis/boss/detail.js +1 -0
- package/clis/boss/exchange.js +1 -0
- package/clis/boss/greet.js +1 -0
- package/clis/boss/invite.js +4 -0
- package/clis/boss/joblist.js +1 -0
- package/clis/boss/mark.js +1 -0
- package/clis/boss/recommend.js +1 -0
- package/clis/boss/resume.js +90 -0
- package/clis/boss/search.js +1 -0
- package/clis/boss/send.js +1 -0
- package/clis/boss/stats.js +1 -0
- package/clis/boss/utils.js +161 -0
- package/clis/brave/search.js +23 -0
- package/clis/chaoxing/assignments.js +1 -0
- package/clis/chaoxing/auth.js +21 -0
- package/clis/chaoxing/exams.js +1 -0
- package/clis/chaoxing/utils.js +58 -0
- package/clis/chatgpt/ask.js +1 -0
- package/clis/chatgpt/auth.js +17 -0
- package/clis/chatgpt/detail.js +1 -0
- package/clis/chatgpt/history.js +1 -0
- package/clis/chatgpt/image.js +1 -0
- package/clis/chatgpt/model.js +1 -0
- package/clis/chatgpt/new.js +1 -0
- package/clis/chatgpt/project-file-add.js +1 -0
- package/clis/chatgpt/project-list.js +1 -0
- package/clis/chatgpt/read.js +1 -0
- package/clis/chatgpt/send.js +1 -0
- package/clis/chatgpt/status.js +1 -0
- package/clis/chatgpt/utils.js +1092 -0
- package/clis/chatgpt-app/ask.js +1 -0
- package/clis/chatgpt-app/ax.js +512 -0
- package/clis/chatgpt-app/model.js +1 -0
- package/clis/chatgpt-app/new.js +1 -0
- package/clis/chatgpt-app/read.js +1 -0
- package/clis/chatgpt-app/send.js +1 -0
- package/clis/chatgpt-app/status.js +1 -0
- package/clis/chatwise/ask.js +1 -0
- package/clis/chatwise/export.js +21 -0
- package/clis/chatwise/history.js +26 -0
- package/clis/chatwise/model.js +48 -0
- package/clis/chatwise/new.js +1 -0
- package/clis/chatwise/read.js +25 -0
- package/clis/chatwise/screenshot.js +1 -0
- package/clis/chatwise/send.js +1 -0
- package/clis/chatwise/status.js +1 -0
- package/clis/chatwise/utils.js +75 -0
- package/clis/chess/analyze.js +1 -0
- package/clis/chess/game.js +1 -0
- package/clis/chess/games.js +1 -0
- package/clis/chess/stats.js +1 -0
- package/clis/chess/utils.js +1 -0
- package/clis/claude/ask.js +4 -0
- package/clis/claude/auth.js +19 -0
- package/clis/claude/detail.js +1 -0
- package/clis/claude/history.js +1 -0
- package/clis/claude/new.js +1 -0
- package/clis/claude/read.js +1 -0
- package/clis/claude/send.js +1 -0
- package/clis/claude/status.js +1 -0
- package/clis/claude/utils.js +179 -0
- package/clis/cnblogs/article.js +1 -0
- package/clis/cnblogs/login.js +1 -0
- package/clis/cnblogs/stats.js +37 -0
- package/clis/cnblogs/whoami.js +1 -0
- package/clis/cnki/search.js +38 -0
- package/clis/codex/_actions.js +72 -0
- package/clis/codex/archive.js +1 -0
- package/clis/codex/ask.js +23 -0
- package/clis/codex/dump.js +1 -0
- package/clis/codex/export.js +12 -0
- package/clis/codex/extract-diff.js +28 -0
- package/clis/codex/history.js +1 -0
- package/clis/codex/model.js +118 -0
- package/clis/codex/new.js +1 -0
- package/clis/codex/pin.js +1 -0
- package/clis/codex/projects.js +1 -0
- package/clis/codex/read.js +16 -0
- package/clis/codex/rename.js +34 -0
- package/clis/codex/screenshot.js +1 -0
- package/clis/codex/send.js +16 -0
- package/clis/codex/sidebar.js +1 -0
- package/clis/codex/status.js +1 -0
- package/clis/coingecko/categories.js +1 -0
- package/clis/coingecko/coin.js +1 -0
- package/clis/coingecko/derivatives.js +1 -0
- package/clis/coingecko/exchanges.js +1 -0
- package/clis/coingecko/global.js +1 -0
- package/clis/coingecko/top.js +1 -0
- package/clis/coingecko/trending.js +1 -0
- package/clis/confluence/create.js +1 -0
- package/clis/confluence/page.js +1 -0
- package/clis/confluence/search.js +1 -0
- package/clis/confluence/shared.js +1 -0
- package/clis/confluence/update.js +1 -0
- package/clis/coupang/add-to-cart.js +86 -0
- package/clis/coupang/auth.js +16 -0
- package/clis/coupang/product.js +161 -0
- package/clis/coupang/search.js +385 -0
- package/clis/coupang/utils.js +1 -0
- package/clis/crates/crate.js +1 -0
- package/clis/crates/search.js +1 -0
- package/clis/crates/utils.js +1 -0
- package/clis/csdn/article.js +29 -0
- package/clis/csdn/columns.js +1 -0
- package/clis/csdn/login.js +1 -0
- package/clis/csdn/stats.js +71 -0
- package/clis/csdn/whoami.js +1 -0
- package/clis/cto51/article.js +1 -0
- package/clis/cto51/whoami.js +1 -0
- package/clis/ctrip/auth.js +1 -0
- package/clis/ctrip/flight.js +17 -0
- package/clis/ctrip/hotel-search.js +24 -0
- package/clis/ctrip/hotel-suggest.js +1 -0
- package/clis/ctrip/search.js +1 -0
- package/clis/ctrip/utils.js +119 -0
- package/clis/cursor/ask.js +22 -0
- package/clis/cursor/composer.js +12 -0
- package/clis/cursor/dump.js +1 -0
- package/clis/cursor/export.js +23 -0
- package/clis/cursor/extract-code.js +18 -0
- package/clis/cursor/history.js +26 -0
- package/clis/cursor/model.js +18 -0
- package/clis/cursor/new.js +1 -0
- package/clis/cursor/read.js +27 -0
- package/clis/cursor/screenshot.js +1 -0
- package/clis/cursor/send.js +12 -0
- package/clis/cursor/status.js +1 -0
- package/clis/dblp/author.js +1 -0
- package/clis/dblp/paper.js +1 -0
- package/clis/dblp/search.js +1 -0
- package/clis/dblp/utils.js +1 -0
- package/clis/dblp/venue.js +1 -0
- package/clis/deepseek/ask.js +1 -0
- package/clis/deepseek/auth.js +22 -0
- package/clis/deepseek/detail.js +1 -0
- package/clis/deepseek/history.js +1 -0
- package/clis/deepseek/new.js +1 -0
- package/clis/deepseek/read.js +1 -0
- package/clis/deepseek/send.js +50 -0
- package/clis/deepseek/status.js +1 -0
- package/clis/deepseek/utils.js +202 -0
- package/clis/defillama/protocol.js +1 -0
- package/clis/defillama/protocols.js +1 -0
- package/clis/defillama/utils.js +1 -0
- package/clis/devto/auth.js +9 -0
- package/clis/devto/latest.js +1 -0
- package/clis/devto/publish.js +17 -0
- package/clis/devto/read.js +3 -0
- package/clis/devto/stats.js +27 -0
- package/clis/devto/tag.js +1 -0
- package/clis/devto/top.js +1 -0
- package/clis/devto/user.js +1 -0
- package/clis/dianping/__fixtures__/search.html +168 -0
- package/clis/dianping/__fixtures__/shop.html +6 -0
- package/clis/dianping/auth.js +10 -0
- package/clis/dianping/cityResolver.js +4 -0
- package/clis/dianping/search.js +1 -0
- package/clis/dianping/shop.js +1 -0
- package/clis/dianping/utils.js +1 -0
- package/clis/dictionary/examples.js +1 -0
- package/clis/dictionary/search.js +1 -0
- package/clis/dictionary/synonyms.js +1 -0
- package/clis/discord-app/channels.js +1 -0
- package/clis/discord-app/delete.js +66 -0
- package/clis/discord-app/goto.js +1 -0
- package/clis/discord-app/members.js +21 -0
- package/clis/discord-app/read.js +1 -0
- package/clis/discord-app/search.js +29 -0
- package/clis/discord-app/send.js +10 -0
- package/clis/discord-app/servers.js +1 -0
- package/clis/discord-app/status.js +1 -0
- package/clis/discord-app/thread-read.js +1 -0
- package/clis/discord-app/threads.js +1 -0
- package/clis/discord-app/utils.js +226 -0
- package/clis/discord-web/auth.js +10 -0
- package/clis/discord-web/send.js +13 -0
- package/clis/dockerhub/image.js +1 -0
- package/clis/dockerhub/search.js +1 -0
- package/clis/dockerhub/utils.js +1 -0
- package/clis/dongchedi/__fixtures__/search.json +60 -0
- package/clis/dongchedi/__fixtures__/series-detail.json +911 -0
- package/clis/dongchedi/__fixtures__/series-score.json +1396 -0
- package/clis/dongchedi/koubei.js +1 -0
- package/clis/dongchedi/models.js +1 -0
- package/clis/dongchedi/score.js +1 -0
- package/clis/dongchedi/search.js +1 -0
- package/clis/dongchedi/series.js +1 -0
- package/clis/dongchedi/specs.js +1 -0
- package/clis/dongchedi/utils.js +1 -0
- package/clis/douban/article.js +53 -0
- package/clis/douban/auth.js +21 -0
- package/clis/douban/book-hot.js +1 -0
- package/clis/douban/download.js +1 -0
- package/clis/douban/marks.js +59 -0
- package/clis/douban/movie-hot.js +1 -0
- package/clis/douban/photos.js +1 -0
- package/clis/douban/reviews.js +53 -0
- package/clis/douban/search.js +1 -0
- package/clis/douban/subject.js +1 -0
- package/clis/douban/top250.js +50 -0
- package/clis/douban/utils.js +344 -0
- package/clis/doubao/ask.js +1 -0
- package/clis/doubao/auth.js +28 -0
- package/clis/doubao/detail.js +1 -0
- package/clis/doubao/history.js +1 -0
- package/clis/doubao/meeting-summary.js +1 -0
- package/clis/doubao/meeting-transcript.js +1 -0
- package/clis/doubao/new.js +1 -0
- package/clis/doubao/read.js +1 -0
- package/clis/doubao/send.js +1 -0
- package/clis/doubao/status.js +1 -0
- package/clis/doubao/utils.js +704 -0
- package/clis/doubao-app/ask.js +1 -0
- package/clis/doubao-app/dump.js +1 -0
- package/clis/doubao-app/new.js +1 -0
- package/clis/doubao-app/read.js +1 -0
- package/clis/doubao-app/screenshot.js +1 -0
- package/clis/doubao-app/send.js +1 -0
- package/clis/doubao-app/status.js +1 -0
- package/clis/doubao-app/utils.js +64 -0
- package/clis/douyin/_shared/browser-fetch.js +28 -0
- package/clis/douyin/_shared/creation-id.js +1 -0
- package/clis/douyin/_shared/evaluate-result.js +1 -0
- package/clis/douyin/_shared/imagex-upload.js +1 -0
- package/clis/douyin/_shared/public-api.js +1 -0
- package/clis/douyin/_shared/sts2.js +1 -0
- package/clis/douyin/_shared/text-extra.js +1 -0
- package/clis/douyin/_shared/timing.js +1 -0
- package/clis/douyin/_shared/tos-upload.js +5 -0
- package/clis/douyin/_shared/transcode.js +1 -0
- package/clis/douyin/_shared/types.js +1 -0
- package/clis/douyin/_shared/vod-upload.js +5 -0
- package/clis/douyin/activities.js +1 -0
- package/clis/douyin/auth.js +1 -0
- package/clis/douyin/collections.js +1 -0
- package/clis/douyin/delete.js +76 -0
- package/clis/douyin/draft.js +166 -0
- package/clis/douyin/drafts.js +1 -0
- package/clis/douyin/hashtag.js +1 -0
- package/clis/douyin/location.js +1 -0
- package/clis/douyin/profile.js +1 -0
- package/clis/douyin/publish-image.js +64 -0
- package/clis/douyin/publish.js +14 -0
- package/clis/douyin/search.js +51 -0
- package/clis/douyin/stats.js +1 -0
- package/clis/douyin/update.js +1 -0
- package/clis/douyin/user-videos.js +1 -0
- package/clis/douyin/videos.js +1 -0
- package/clis/duckduckgo/search.js +1 -0
- package/clis/duckduckgo/suggest.js +1 -0
- package/clis/eastmoney/_secid.js +1 -0
- package/clis/eastmoney/announcement.js +1 -0
- package/clis/eastmoney/article.js +1 -0
- package/clis/eastmoney/convertible.js +1 -0
- package/clis/eastmoney/etf.js +1 -0
- package/clis/eastmoney/holders.js +1 -0
- package/clis/eastmoney/hot-rank.js +30 -0
- package/clis/eastmoney/index-board.js +1 -0
- package/clis/eastmoney/kline.js +1 -0
- package/clis/eastmoney/kuaixun.js +1 -0
- package/clis/eastmoney/longhu.js +1 -0
- package/clis/eastmoney/money-flow.js +1 -0
- package/clis/eastmoney/northbound.js +1 -0
- package/clis/eastmoney/quote.js +1 -0
- package/clis/eastmoney/rank.js +1 -0
- package/clis/eastmoney/sectors.js +1 -0
- package/clis/eastmoney/whoami.js +1 -0
- package/clis/endoflife/product.js +1 -0
- package/clis/endoflife/utils.js +1 -0
- package/clis/facebook/__fixtures__/notifications-page.html +13 -0
- package/clis/facebook/add-friend.js +24 -0
- package/clis/facebook/auth.js +1 -0
- package/clis/facebook/comment.js +18 -0
- package/clis/facebook/events.js +26 -0
- package/clis/facebook/feed.js +209 -0
- package/clis/facebook/friends.js +24 -0
- package/clis/facebook/groups.js +32 -0
- package/clis/facebook/join-group.js +25 -0
- package/clis/facebook/like.js +29 -0
- package/clis/facebook/marketplace-inbox.js +34 -0
- package/clis/facebook/marketplace-listings.js +33 -0
- package/clis/facebook/memories.js +21 -0
- package/clis/facebook/notifications.js +31 -0
- package/clis/facebook/post.js +88 -0
- package/clis/facebook/profile.js +18 -0
- package/clis/facebook/search.js +22 -0
- package/clis/flathub/app.js +1 -0
- package/clis/flathub/search.js +1 -0
- package/clis/flathub/utils.js +1 -0
- package/clis/flomo/auth.js +22 -0
- package/clis/flomo/memos.js +13 -0
- package/clis/gemini/ask.js +1 -0
- package/clis/gemini/auth.js +14 -0
- package/clis/gemini/deep-research-result.js +4 -0
- package/clis/gemini/deep-research.js +1 -0
- package/clis/gemini/detail.js +1 -0
- package/clis/gemini/history.js +1 -0
- package/clis/gemini/image.js +3 -0
- package/clis/gemini/new.js +1 -0
- package/clis/gemini/read.js +1 -0
- package/clis/gemini/status.js +1 -0
- package/clis/gemini/utils.js +1234 -0
- package/clis/geogebra/add-circle.js +1 -0
- package/clis/geogebra/add-line.js +1 -0
- package/clis/geogebra/add-point.js +1 -0
- package/clis/geogebra/add-polygon.js +1 -0
- package/clis/geogebra/eval.js +1 -0
- package/clis/geogebra/hexagon.js +1 -0
- package/clis/geogebra/info.js +13 -0
- package/clis/geogebra/list.js +1 -0
- package/clis/geogebra/triangle.js +1 -0
- package/clis/geogebra/utils.js +99 -0
- 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 +12 -0
- package/clis/gitee/index.js +1 -0
- package/clis/gitee/search.js +1 -0
- package/clis/gitee/trending.js +240 -0
- package/clis/gitee/user.js +71 -0
- package/clis/github/auth.js +7 -0
- package/clis/github-trending/repos.js +1 -0
- package/clis/google/news.js +1 -0
- package/clis/google/search.js +90 -0
- package/clis/google/suggest.js +1 -0
- package/clis/google/trends.js +1 -0
- package/clis/google/utils.js +1 -0
- package/clis/google-scholar/cite.js +20 -0
- package/clis/google-scholar/profile.js +36 -0
- package/clis/google-scholar/search.js +35 -0
- package/clis/goproxy/module.js +1 -0
- package/clis/goproxy/utils.js +1 -0
- package/clis/goproxy/versions.js +1 -0
- package/clis/gov-law/recent.js +1 -0
- package/clis/gov-law/search.js +14 -0
- package/clis/gov-law/shared.js +29 -0
- package/clis/gov-policy/__fixtures__/recent.html +16 -0
- package/clis/gov-policy/__fixtures__/search.html +41 -0
- package/clis/gov-policy/recent.js +8 -0
- package/clis/gov-policy/search.js +8 -0
- package/clis/gov-policy/utils.js +1 -0
- package/clis/grok/ask.js +1 -0
- package/clis/grok/auth.js +17 -0
- package/clis/grok/delete.js +1 -0
- package/clis/grok/detail.js +1 -0
- package/clis/grok/export-all.js +170 -0
- package/clis/grok/export-utils.js +1 -0
- package/clis/grok/export.js +106 -0
- package/clis/grok/history.js +1 -0
- package/clis/grok/image.js +119 -0
- package/clis/grok/image.test.ts +127 -0
- package/clis/grok/new.js +1 -0
- package/clis/grok/pin.js +1 -0
- package/clis/grok/read.js +1 -0
- package/clis/grok/send.js +1 -0
- package/clis/grok/status.js +1 -0
- package/clis/grok/utils.js +337 -0
- package/clis/guazi/__fixtures__/detail.html +7 -0
- package/clis/guazi/__fixtures__/list.html +5 -0
- package/clis/guazi/browse.js +1 -0
- package/clis/guazi/car.js +1 -0
- package/clis/guazi/utils.js +1 -0
- package/clis/hackernews/ask.js +1 -0
- package/clis/hackernews/auth.js +9 -0
- package/clis/hackernews/best.js +1 -0
- package/clis/hackernews/comment.js +61 -0
- package/clis/hackernews/jobs.js +1 -0
- package/clis/hackernews/new.js +1 -0
- package/clis/hackernews/read.js +11 -0
- package/clis/hackernews/search.js +1 -0
- package/clis/hackernews/show.js +1 -0
- package/clis/hackernews/submit.js +65 -0
- package/clis/hackernews/top.js +1 -0
- package/clis/hackernews/user.js +1 -0
- package/clis/hashnode/auth.js +11 -0
- package/clis/hashnode/publish.js +92 -0
- package/clis/hf/auth.js +12 -0
- package/clis/hf/datasets.js +1 -0
- package/clis/hf/models.js +1 -0
- package/clis/hf/paper.js +1 -0
- package/clis/hf/spaces.js +1 -0
- package/clis/hf/top.js +1 -0
- package/clis/homebrew/cask.js +1 -0
- package/clis/homebrew/formula.js +1 -0
- package/clis/homebrew/popular.js +1 -0
- package/clis/homebrew/utils.js +1 -0
- package/clis/huodongxing/events.js +1 -0
- package/clis/hupu/__fixtures__/hot-home.html +64 -0
- package/clis/hupu/auth.js +14 -0
- package/clis/hupu/detail.js +7 -0
- package/clis/hupu/hot.js +14 -0
- package/clis/hupu/like.js +1 -0
- package/clis/hupu/mentions.js +91 -0
- package/clis/hupu/reply.js +1 -0
- package/clis/hupu/search.js +1 -0
- package/clis/hupu/unlike.js +1 -0
- package/clis/hupu/utils.js +243 -0
- package/clis/imdb/person.js +140 -0
- package/clis/imdb/reviews.js +40 -0
- package/clis/imdb/search.js +113 -0
- package/clis/imdb/title.js +1 -0
- package/clis/imdb/top.js +1 -0
- package/clis/imdb/trending.js +1 -0
- package/clis/imdb/utils.js +162 -0
- package/clis/imooc/article.js +59 -0
- package/clis/imooc/login.js +1 -0
- package/clis/imooc/whoami.js +1 -0
- package/clis/indeed/job.js +20 -0
- package/clis/indeed/search.js +37 -0
- package/clis/indeed/utils.js +1 -0
- package/clis/infoq/article.js +19 -0
- package/clis/infoq/login.js +1 -0
- package/clis/infoq/whoami.js +1 -0
- package/clis/instagram/_shared/private-publish.js +75 -0
- package/clis/instagram/_shared/protocol-capture.js +180 -0
- package/clis/instagram/_shared/runtime-info.js +33 -0
- package/clis/instagram/auth.js +22 -0
- package/clis/instagram/collection-create.js +38 -0
- package/clis/instagram/collection-delete.js +72 -0
- package/clis/instagram/comment.js +26 -0
- package/clis/instagram/detail.js +2 -0
- package/clis/instagram/download.js +83 -0
- package/clis/instagram/explore.js +27 -0
- package/clis/instagram/follow.js +24 -0
- package/clis/instagram/followers.js +30 -0
- package/clis/instagram/following.js +74 -0
- package/clis/instagram/like.js +25 -0
- package/clis/instagram/note.js +162 -0
- package/clis/instagram/post.js +718 -0
- package/clis/instagram/profile.js +25 -0
- package/clis/instagram/reel.js +452 -0
- package/clis/instagram/save.js +25 -0
- package/clis/instagram/saved.js +37 -0
- package/clis/instagram/search.js +23 -0
- package/clis/instagram/story.js +21 -0
- package/clis/instagram/unfollow.js +21 -0
- package/clis/instagram/unlike.js +25 -0
- package/clis/instagram/unsave.js +25 -0
- package/clis/instagram/user.js +1 -0
- package/clis/jd/add-cart.js +22 -0
- package/clis/jd/auth.js +12 -0
- package/clis/jd/cart.js +59 -0
- package/clis/jd/detail.js +42 -0
- package/clis/jd/item.js +98 -0
- package/clis/jd/item.test.ts +517 -0
- package/clis/jd/reviews.js +31 -0
- package/clis/jd/search.js +42 -0
- 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 +28 -0
- package/clis/jianyu/detail.js +1 -0
- package/clis/jianyu/search.js +73 -0
- package/clis/jianyu/shared/china-bid-search.js +86 -0
- package/clis/jianyu/shared/procurement-contract.js +1 -0
- package/clis/jianyu/shared/procurement-detail.js +18 -0
- package/clis/jike/auth.js +19 -0
- package/clis/jike/comment.js +82 -0
- package/clis/jike/create.js +83 -0
- package/clis/jike/feed.js +32 -0
- package/clis/jike/like.js +38 -0
- package/clis/jike/notifications.js +115 -0
- package/clis/jike/post.js +33 -0
- package/clis/jike/repost.js +67 -0
- package/clis/jike/search.js +29 -0
- package/clis/jike/topic.js +20 -0
- package/clis/jike/user.js +19 -0
- package/clis/jike/utils.js +15 -0
- package/clis/jimeng/auth.js +13 -0
- package/clis/jimeng/generate.js +60 -0
- package/clis/jimeng/history.js +32 -0
- package/clis/jimeng/new.js +26 -0
- package/clis/jimeng/workspaces.js +22 -0
- package/clis/jira/attachments.js +1 -0
- package/clis/jira/comments.js +1 -0
- package/clis/jira/issue.js +1 -0
- package/clis/jira/links.js +1 -0
- package/clis/jira/search.js +1 -0
- package/clis/jira/shared.js +1 -0
- package/clis/juejin/article.js +5 -0
- package/clis/juejin/categories.js +1 -0
- package/clis/juejin/hot.js +1 -0
- package/clis/juejin/login.js +1 -0
- package/clis/juejin/recommend.js +1 -0
- package/clis/juejin/stats.js +53 -0
- package/clis/juejin/tags.js +1 -0
- package/clis/juejin/utils.js +1 -0
- package/clis/juejin/whoami.js +1 -0
- package/clis/ke/auth.js +14 -0
- package/clis/ke/chengjiao.js +45 -0
- package/clis/ke/ershoufang.js +50 -0
- package/clis/ke/utils.js +21 -0
- package/clis/ke/xiaoqu.js +45 -0
- package/clis/ke/zufang.js +50 -0
- package/clis/kimi/_utils.js +38 -0
- package/clis/kimi/audit-extras.js +64 -0
- package/clis/kimi/auth.js +17 -0
- package/clis/kimi/chat.js +77 -0
- package/clis/kimi/storage.js +14 -0
- package/clis/kimi/ui.js +89 -0
- package/clis/kimi/usage.js +51 -0
- package/clis/kuaishou/auth.js +1 -0
- package/clis/kuaishou/publish.js +53 -0
- package/clis/lesswrong/_helpers.js +9 -0
- package/clis/lesswrong/comments.js +9 -0
- package/clis/lesswrong/curated.js +5 -0
- package/clis/lesswrong/frontpage.js +5 -0
- package/clis/lesswrong/new.js +5 -0
- package/clis/lesswrong/read.js +5 -0
- package/clis/lesswrong/sequences.js +5 -0
- package/clis/lesswrong/shortform.js +5 -0
- package/clis/lesswrong/tag.js +5 -0
- package/clis/lesswrong/tags.js +5 -0
- package/clis/lesswrong/top-month.js +5 -0
- package/clis/lesswrong/top-week.js +5 -0
- package/clis/lesswrong/top-year.js +5 -0
- package/clis/lesswrong/top.js +5 -0
- package/clis/lesswrong/user-posts.js +5 -0
- package/clis/lesswrong/user.js +5 -0
- package/clis/lichess/top.js +1 -0
- package/clis/lichess/user.js +1 -0
- package/clis/lichess/utils.js +1 -0
- package/clis/linkedin/auth.js +27 -0
- package/clis/linkedin/comment.js +1 -0
- package/clis/linkedin/connect.js +244 -0
- package/clis/linkedin/create.js +113 -0
- package/clis/linkedin/follow.js +1 -0
- package/clis/linkedin/inbox.js +1 -0
- package/clis/linkedin/job-detail.js +40 -0
- package/clis/linkedin/jobs-preferences.js +34 -0
- package/clis/linkedin/like.js +1 -0
- package/clis/linkedin/notifications.js +1 -0
- package/clis/linkedin/people-search.js +1 -0
- package/clis/linkedin/post-analytics.js +1 -0
- package/clis/linkedin/post-comments.js +1 -0
- package/clis/linkedin/post-detail.js +1 -0
- package/clis/linkedin/posts-core.js +138 -0
- package/clis/linkedin/posts.js +1 -0
- package/clis/linkedin/profile-analytics.js +1 -0
- package/clis/linkedin/profile-api.js +218 -0
- package/clis/linkedin/profile-experience.js +1 -0
- package/clis/linkedin/profile-projects.js +1 -0
- package/clis/linkedin/profile-read.js +3 -0
- package/clis/linkedin/reply.js +1 -0
- package/clis/linkedin/repost.js +1 -0
- package/clis/linkedin/safe-send.js +155 -0
- package/clis/linkedin/salesnav-inbox.js +21 -0
- package/clis/linkedin/salesnav-message.js +33 -0
- package/clis/linkedin/salesnav-search.js +15 -0
- package/clis/linkedin/salesnav-thread.js +1 -0
- package/clis/linkedin/search-api.js +42 -0
- package/clis/linkedin/search.js +50 -0
- package/clis/linkedin/sent-invitations.js +46 -0
- package/clis/linkedin/services-read.js +57 -0
- package/clis/linkedin/shared.js +10 -0
- package/clis/linkedin/social-api.js +260 -0
- package/clis/linkedin/thread-snapshot.js +81 -0
- package/clis/linkedin/timeline.js +37 -0
- package/clis/linkedin-learning/auth.js +27 -0
- package/clis/linkedin-learning/course.js +17 -0
- package/clis/linkedin-learning/search.js +17 -0
- package/clis/linkedin-learning/trending.js +17 -0
- package/clis/linux-do/auth.js +20 -0
- package/clis/linux-do/categories.js +1 -0
- package/clis/linux-do/feed.js +19 -0
- package/clis/linux-do/search.js +1 -0
- package/clis/linux-do/tags.js +1 -0
- package/clis/linux-do/topic-content.js +28 -0
- package/clis/linux-do/topic.js +1 -0
- package/clis/linux-do/user-posts.js +1 -0
- package/clis/linux-do/user-topics.js +1 -0
- package/clis/lobsters/active.js +1 -0
- package/clis/lobsters/domain.js +1 -0
- package/clis/lobsters/hot.js +1 -0
- package/clis/lobsters/newest.js +1 -0
- package/clis/lobsters/read.js +11 -0
- package/clis/lobsters/tag.js +1 -0
- package/clis/maimai/auth.js +19 -0
- package/clis/maimai/search-talents.js +37 -0
- package/clis/manus/_utils.js +28 -0
- package/clis/manus/auth.js +20 -0
- package/clis/manus/connectors.js +4 -0
- package/clis/manus/credits.js +4 -0
- package/clis/manus/list.js +7 -0
- package/clis/manus/read.js +7 -0
- package/clis/manus/skills.js +4 -0
- package/clis/manus/status.js +8 -0
- package/clis/mastodon/post.js +1 -0
- package/clis/mastodon/shared.js +48 -0
- package/clis/mastodon/whoami.js +1 -0
- package/clis/maven/artifact.js +1 -0
- package/clis/maven/search.js +1 -0
- package/clis/maven/utils.js +1 -0
- package/clis/mdn/search.js +1 -0
- package/clis/medium/article.js +12 -0
- package/clis/medium/feed.js +1 -0
- package/clis/medium/login.js +1 -0
- package/clis/medium/search.js +1 -0
- package/clis/medium/stats.js +56 -0
- package/clis/medium/tag.js +1 -0
- package/clis/medium/user.js +1 -0
- package/clis/medium/utils.js +62 -0
- package/clis/medium/whoami.js +1 -0
- package/clis/mubu/doc.js +1 -0
- package/clis/mubu/docs.js +1 -0
- package/clis/mubu/notes.js +1 -0
- package/clis/mubu/recent.js +1 -0
- package/clis/mubu/search.js +1 -0
- package/clis/mubu/utils.js +31 -0
- 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 +46 -0
- package/clis/notebooklm/auth.js +21 -0
- package/clis/notebooklm/create.js +1 -0
- package/clis/notebooklm/current.js +1 -0
- package/clis/notebooklm/generate-audio.js +1 -0
- package/clis/notebooklm/generate-slides.js +1 -0
- package/clis/notebooklm/get.js +1 -0
- package/clis/notebooklm/history.js +1 -0
- package/clis/notebooklm/list.js +1 -0
- package/clis/notebooklm/note-list.js +1 -0
- package/clis/notebooklm/notes-get.js +1 -0
- package/clis/notebooklm/open.js +1 -0
- package/clis/notebooklm/rpc.js +36 -0
- package/clis/notebooklm/shared.js +1 -0
- package/clis/notebooklm/source-fulltext.js +1 -0
- package/clis/notebooklm/source-get.js +1 -0
- package/clis/notebooklm/source-guide.js +1 -0
- package/clis/notebooklm/source-list.js +1 -0
- package/clis/notebooklm/status.js +1 -0
- package/clis/notebooklm/summary.js +1 -0
- package/clis/notebooklm/utils.js +172 -0
- package/clis/notebooklm/write-note.js +1 -0
- package/clis/nowcoder/auth.js +24 -0
- package/clis/nowcoder/comment.js +1 -0
- package/clis/nowcoder/comments.js +1 -0
- package/clis/nowcoder/companies.js +1 -0
- package/clis/nowcoder/creators.js +1 -0
- package/clis/nowcoder/delete.js +1 -0
- package/clis/nowcoder/detail.js +46 -0
- 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 +20 -0
- package/clis/nowcoder/hot.js +1 -0
- package/clis/nowcoder/inbox.js +1 -0
- package/clis/nowcoder/jobs.js +1 -0
- package/clis/nowcoder/like.js +1 -0
- package/clis/nowcoder/my.js +1 -0
- package/clis/nowcoder/notifications.js +16 -0
- package/clis/nowcoder/papers.js +22 -0
- package/clis/nowcoder/post.js +1 -0
- package/clis/nowcoder/practice.js +21 -0
- package/clis/nowcoder/recommend.js +1 -0
- package/clis/nowcoder/referral.js +21 -0
- package/clis/nowcoder/salary.js +22 -0
- package/clis/nowcoder/search.js +31 -0
- package/clis/nowcoder/suggest.js +17 -0
- package/clis/nowcoder/topics.js +1 -0
- package/clis/nowcoder/trending.js +1 -0
- package/clis/nowcoder/utils.js +68 -0
- package/clis/npm/downloads.js +1 -0
- package/clis/npm/package.js +1 -0
- package/clis/npm/search.js +1 -0
- package/clis/npm/utils.js +1 -0
- package/clis/nuget/package.js +1 -0
- package/clis/nuget/search.js +1 -0
- package/clis/nuget/utils.js +1 -0
- package/clis/nvd/cve.js +1 -0
- package/clis/oeis/search.js +1 -0
- package/clis/oeis/sequence.js +1 -0
- package/clis/oeis/utils.js +1 -0
- package/clis/ones/common.js +23 -0
- package/clis/ones/enrich-tasks.js +1 -0
- package/clis/ones/login.js +2 -0
- package/clis/ones/logout.js +1 -0
- package/clis/ones/me.js +1 -0
- package/clis/ones/my-tasks.js +1 -0
- package/clis/ones/resolve-labels.js +1 -0
- package/clis/ones/task-helpers.js +1 -0
- package/clis/ones/task.js +1 -0
- package/clis/ones/tasks.js +1 -0
- package/clis/ones/token-info.js +1 -0
- package/clis/ones/worklog.js +14 -0
- package/clis/openalex/search.js +1 -0
- package/clis/openalex/utils.js +1 -0
- package/clis/openalex/work.js +1 -0
- package/clis/openfda/drug-label.js +1 -0
- package/clis/openfda/food-recall.js +1 -0
- package/clis/openfda/utils.js +1 -0
- package/clis/openreview/author.js +1 -0
- package/clis/openreview/paper.js +1 -0
- package/clis/openreview/reviews.js +4 -0
- package/clis/openreview/search.js +1 -0
- package/clis/openreview/utils.js +1 -0
- package/clis/openreview/venue.js +1 -0
- package/clis/oschina/article.js +1 -0
- package/clis/oschina/catalogs.js +1 -0
- package/clis/oschina/login.js +1 -0
- package/clis/oschina/stats.js +54 -0
- package/clis/oschina/whoami.js +1 -0
- package/clis/osv/query.js +1 -0
- package/clis/osv/utils.js +1 -0
- package/clis/osv/vulnerability.js +1 -0
- package/clis/packagist/package.js +1 -0
- package/clis/packagist/search.js +1 -0
- package/clis/packagist/utils.js +1 -0
- package/clis/paperreview/feedback.js +1 -0
- package/clis/paperreview/review.js +1 -0
- package/clis/paperreview/submit.js +1 -0
- package/clis/paperreview/utils.js +1 -0
- 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 +17 -0
- package/clis/pixiv/detail.js +1 -0
- package/clis/pixiv/download.js +1 -0
- package/clis/pixiv/illusts.js +1 -0
- package/clis/pixiv/ranking.js +26 -0
- package/clis/pixiv/search.js +1 -0
- package/clis/pixiv/user.js +1 -0
- package/clis/pixiv/utils.js +18 -0
- package/clis/powerchina/auth.js +17 -0
- package/clis/powerchina/search.js +1 -0
- package/clis/producthunt/browse.js +54 -0
- package/clis/producthunt/hot.js +64 -0
- package/clis/producthunt/posts.js +1 -0
- package/clis/producthunt/today.js +1 -0
- package/clis/producthunt/utils.js +1 -0
- package/clis/pubmed/article.js +1 -0
- package/clis/pubmed/author.js +1 -0
- package/clis/pubmed/citations.js +1 -0
- package/clis/pubmed/clinical-trial.js +1 -0
- package/clis/pubmed/journal.js +1 -0
- package/clis/pubmed/mesh.js +1 -0
- package/clis/pubmed/related.js +1 -0
- package/clis/pubmed/review.js +1 -0
- package/clis/pubmed/search.js +1 -0
- package/clis/pubmed/utils.js +1 -0
- package/clis/pypi/downloads.js +1 -0
- package/clis/pypi/package.js +1 -0
- package/clis/pypi/utils.js +1 -0
- package/clis/qiita/auth.js +1 -0
- package/clis/qiita/gql.js +32 -0
- package/clis/qiita/publish.js +7 -0
- package/clis/qiita/stats.js +37 -0
- package/clis/qoder/_utils.js +113 -0
- package/clis/qoder/composer.js +1 -0
- package/clis/qoder/history.js +25 -0
- package/clis/qoder/quest.js +1 -0
- package/clis/qoder/read.js +1 -0
- package/clis/qoder/status.js +1 -0
- package/clis/qoder/ui.js +59 -0
- package/clis/quark/auth.js +16 -0
- package/clis/quark/ls.js +1 -0
- package/clis/quark/mkdir.js +1 -0
- package/clis/quark/mv.js +1 -0
- package/clis/quark/rename.js +1 -0
- package/clis/quark/rm.js +1 -0
- package/clis/quark/save.js +1 -0
- package/clis/quark/share-tree.js +1 -0
- package/clis/quark/utils.js +13 -0
- package/clis/quora/create-answer.js +22 -0
- package/clis/quora/create-question.js +24 -0
- package/clis/quora/shared.js +43 -0
- package/clis/quora/whoami.js +1 -0
- package/clis/qwen/ask.js +1 -0
- package/clis/qwen/auth.js +17 -0
- package/clis/qwen/detail.js +1 -0
- package/clis/qwen/history.js +1 -0
- package/clis/qwen/image.js +31 -0
- package/clis/qwen/new.js +1 -0
- package/clis/qwen/read.js +1 -0
- package/clis/qwen/send.js +1 -0
- package/clis/qwen/status.js +1 -0
- package/clis/qwen/utils.js +185 -0
- package/clis/reddit/auth.js +17 -0
- package/clis/reddit/comment.js +36 -0
- package/clis/reddit/frontpage.js +40 -0
- package/clis/reddit/home.js +32 -0
- package/clis/reddit/hot.js +46 -0
- package/clis/reddit/popular.js +46 -0
- package/clis/reddit/read.js +398 -0
- package/clis/reddit/reply.js +56 -0
- package/clis/reddit/save.js +30 -0
- package/clis/reddit/saved.js +24 -0
- package/clis/reddit/search.js +51 -0
- package/clis/reddit/submit.js +42 -0
- package/clis/reddit/subreddit-info.js +29 -0
- package/clis/reddit/subreddit.js +52 -0
- package/clis/reddit/subscribe.js +29 -0
- package/clis/reddit/subscribed.js +68 -0
- package/clis/reddit/upvote.js +43 -0
- package/clis/reddit/upvoted.js +24 -0
- package/clis/reddit/user-comments.js +20 -0
- package/clis/reddit/user-posts.js +17 -0
- package/clis/reddit/user.js +20 -0
- package/clis/reddit/whoami.js +19 -0
- package/clis/rednote/auth.js +19 -0
- package/clis/rednote/comments.js +1 -0
- package/clis/rednote/download.js +1 -0
- package/clis/rednote/feed.js +1 -0
- package/clis/rednote/note.js +1 -0
- package/clis/rednote/notifications.js +67 -0
- package/clis/rednote/search.js +32 -0
- package/clis/rednote/user.js +1 -0
- package/clis/rest-countries/country.js +1 -0
- package/clis/rest-countries/region.js +1 -0
- package/clis/rest-countries/utils.js +1 -0
- package/clis/reuters/article-detail.js +1 -0
- package/clis/reuters/auth.js +39 -0
- package/clis/reuters/search.js +1 -0
- package/clis/reuters/utils.js +50 -0
- package/clis/rfc/rfc.js +1 -0
- package/clis/rfc/utils.js +1 -0
- package/clis/rubygems/gem.js +1 -0
- package/clis/rubygems/search.js +1 -0
- package/clis/rubygems/utils.js +1 -0
- package/clis/segmentfault/_signed-request.js +43 -0
- package/clis/segmentfault/article.js +3 -0
- package/clis/segmentfault/channels.js +1 -0
- package/clis/segmentfault/login.js +1 -0
- package/clis/segmentfault/stats.js +82 -0
- package/clis/segmentfault/tags.js +1 -0
- package/clis/segmentfault/whoami.js +1 -0
- package/clis/semanticscholar/citations.js +1 -0
- package/clis/semanticscholar/paper.js +1 -0
- package/clis/semanticscholar/recommendations.js +1 -0
- package/clis/semanticscholar/search.js +1 -0
- package/clis/semanticscholar/utils.js +1 -0
- package/clis/sinablog/article.js +1 -0
- package/clis/sinablog/hot.js +1 -0
- package/clis/sinablog/search.js +1 -0
- package/clis/sinablog/user.js +1 -0
- package/clis/sinablog/utils.js +153 -0
- package/clis/sinafinance/news.js +1 -0
- package/clis/sinafinance/rolling-news.js +20 -0
- package/clis/sinafinance/stock-rank.js +41 -0
- package/clis/sinafinance/stock.js +1 -0
- package/clis/slock/attachment-download.js +1 -0
- package/clis/slock/attachment-upload.js +34 -0
- package/clis/slock/attachment-url.js +1 -0
- package/clis/slock/auth-verify.js +1 -0
- package/clis/slock/bookmark-add.js +11 -0
- package/clis/slock/bookmark-list.js +10 -0
- package/clis/slock/bookmark-remove.js +7 -0
- package/clis/slock/channel-action.js +1 -0
- package/clis/slock/channel-archive.js +1 -0
- package/clis/slock/channel-create.js +1 -0
- package/clis/slock/channel-files.js +1 -0
- package/clis/slock/channel-info.js +1 -0
- package/clis/slock/channel-join.js +1 -0
- package/clis/slock/channel-leave.js +1 -0
- package/clis/slock/channel-list.js +1 -0
- package/clis/slock/channel-mark.js +1 -0
- package/clis/slock/channel-members.js +1 -0
- package/clis/slock/channel-unarchive.js +1 -0
- package/clis/slock/dm-list.js +1 -0
- package/clis/slock/errors.js +1 -0
- package/clis/slock/in-page.js +113 -0
- package/clis/slock/inbox-done.js +9 -0
- package/clis/slock/inbox-read-all.js +1 -0
- package/clis/slock/inbox.js +1 -0
- package/clis/slock/login.js +1 -0
- package/clis/slock/message-read.js +61 -0
- package/clis/slock/message-search.js +24 -0
- package/clis/slock/message-send.js +55 -0
- package/clis/slock/reaction-add.js +1 -0
- package/clis/slock/reaction-remove.js +1 -0
- package/clis/slock/resolve.js +1 -0
- package/clis/slock/server-list.js +9 -0
- package/clis/slock/server-use.js +18 -0
- package/clis/slock/shared.js +1 -0
- package/clis/slock/task-claim.js +14 -0
- package/clis/slock/task-convert.js +35 -0
- package/clis/slock/task-create.js +24 -0
- package/clis/slock/task-delete.js +9 -0
- package/clis/slock/task-get.js +11 -0
- package/clis/slock/task-list-server.js +12 -0
- package/clis/slock/task-list.js +14 -0
- package/clis/slock/task-status.js +19 -0
- package/clis/slock/task-unclaim.js +13 -0
- package/clis/slock/thread-done.js +1 -0
- package/clis/slock/thread-follow.js +1 -0
- package/clis/slock/thread-list.js +1 -0
- package/clis/slock/thread-state.js +1 -0
- package/clis/slock/thread-undone.js +1 -0
- package/clis/slock/thread-unfollow.js +1 -0
- package/clis/slock/unread-summary.js +18 -0
- package/clis/slock/whoami.js +1 -0
- package/clis/smzdm/search.js +71 -0
- package/clis/sohu/article.js +1 -0
- package/clis/sohu/attributes.js +1 -0
- package/clis/sohu/categories.js +1 -0
- package/clis/sohu/channels.js +1 -0
- package/clis/sohu/columns.js +1 -0
- package/clis/sohu/login.js +1 -0
- package/clis/sohu/mpbp.js +1 -0
- package/clis/sohu/stats.js +95 -0
- package/clis/sohu/topics.js +1 -0
- package/clis/sohu/whoami.js +1 -0
- package/clis/spotify/spotify.js +1 -0
- package/clis/spotify/utils.js +8 -0
- package/clis/stackoverflow/bounties.js +1 -0
- package/clis/stackoverflow/hot.js +1 -0
- package/clis/stackoverflow/read.js +13 -0
- package/clis/stackoverflow/related.js +1 -0
- package/clis/stackoverflow/search.js +1 -0
- package/clis/stackoverflow/tag.js +1 -0
- package/clis/stackoverflow/unanswered.js +1 -0
- package/clis/stackoverflow/user.js +1 -0
- package/clis/stackoverflow/utils.js +1 -0
- package/clis/steam/app.js +1 -0
- package/clis/steam/search.js +1 -0
- package/clis/steam/top-sellers.js +1 -0
- package/clis/steam/utils.js +1 -0
- package/clis/substack/auth.js +11 -0
- package/clis/substack/feed.js +1 -0
- package/clis/substack/post-utils.js +2 -0
- package/clis/substack/publication.js +1 -0
- package/clis/substack/publish.js +10 -0
- package/clis/substack/search.js +1 -0
- package/clis/substack/utils.js +108 -0
- package/clis/suno/auth.js +21 -0
- package/clis/suno/download.js +17 -0
- package/clis/suno/generate.js +4 -0
- package/clis/suno/list.js +14 -0
- package/clis/suno/status.js +1 -0
- package/clis/suno/utils.js +102 -0
- package/clis/taobao/add-cart.js +93 -0
- package/clis/taobao/auth.js +8 -0
- package/clis/taobao/cart.js +68 -0
- package/clis/taobao/detail.js +48 -0
- package/clis/taobao/reviews.js +52 -0
- package/clis/taobao/search.js +64 -0
- package/clis/tdx/hot-rank.js +25 -0
- package/clis/telegram/send.js +18 -0
- package/clis/telegram/shared.js +21 -0
- package/clis/telegram/whoami.js +1 -0
- package/clis/test-utils.js +1 -0
- package/clis/threads/post.js +152 -0
- package/clis/threads/shared.js +27 -0
- package/clis/threads/whoami.js +1 -0
- package/clis/ths/hot-rank.js +27 -0
- package/clis/tieba/hot.js +16 -0
- package/clis/tieba/posts.js +1 -0
- package/clis/tieba/read.js +84 -0
- package/clis/tieba/search.js +54 -0
- package/clis/tieba/utils.js +1 -0
- package/clis/tiktok/auth.js +30 -0
- package/clis/tiktok/comment.js +69 -0
- package/clis/tiktok/creator-videos.js +45 -0
- package/clis/tiktok/explore.js +76 -0
- package/clis/tiktok/follow.js +49 -0
- package/clis/tiktok/following.js +103 -0
- package/clis/tiktok/friends.js +79 -0
- package/clis/tiktok/like.js +19 -0
- package/clis/tiktok/live.js +79 -0
- package/clis/tiktok/notifications.js +77 -0
- package/clis/tiktok/profile.js +26 -0
- package/clis/tiktok/publish.js +82 -0
- package/clis/tiktok/save.js +15 -0
- package/clis/tiktok/search.js +24 -0
- package/clis/tiktok/unfollow.js +59 -0
- package/clis/tiktok/unlike.js +19 -0
- package/clis/tiktok/unsave.js +17 -0
- package/clis/tiktok/user.js +143 -0
- package/clis/tiktok/utils.js +272 -0
- package/clis/toutiao/article.js +1 -0
- package/clis/toutiao/articles.js +6 -0
- package/clis/toutiao/auth.js +50 -0
- package/clis/toutiao/hot.js +1 -0
- package/clis/toutiao/utils.js +2 -0
- package/clis/trae-cn/activity.js +1 -0
- package/clis/trae-cn/approve.js +1 -0
- package/clis/trae-cn/ask.js +1 -0
- package/clis/trae-cn/dump.js +1 -0
- package/clis/trae-cn/export.js +3 -0
- package/clis/trae-cn/model.js +1 -0
- package/clis/trae-cn/new.js +1 -0
- package/clis/trae-cn/read.js +1 -0
- package/clis/trae-cn/screenshot.js +1 -0
- package/clis/trae-cn/select-model.js +1 -0
- package/clis/trae-cn/send.js +1 -0
- package/clis/trae-cn/setup.js +1 -0
- package/clis/trae-cn/status.js +1 -0
- package/clis/trae-cn/targets.js +1 -0
- package/clis/trae-cn/utils.js +456 -0
- package/clis/trae-cn/watch.js +3 -0
- package/clis/trae-solo/_actions.js +41 -0
- package/clis/trae-solo/_fs.js +6 -0
- package/clis/trae-solo/_state.js +2 -0
- package/clis/trae-solo/automation.js +43 -0
- package/clis/trae-solo/history.js +15 -0
- package/clis/trae-solo/mode.js +31 -0
- package/clis/trae-solo/model.js +50 -0
- package/clis/trae-solo/renderer-storage.js +11 -0
- package/clis/trae-solo/settings.js +1 -0
- package/clis/trae-solo/skill-fs.js +1 -0
- package/clis/trae-solo/skill.js +81 -0
- package/clis/trae-solo/state-fs.js +2 -0
- package/clis/trae-solo/status.js +1 -0
- package/clis/trae-solo/task-fs.js +5 -0
- package/clis/trae-solo/user-rules.js +1 -0
- package/clis/trae-solo/workspaces-fs.js +1 -0
- package/clis/tumblr/auth.js +24 -0
- package/clis/tumblr/publish.js +14 -0
- package/clis/tvmaze/search.js +1 -0
- package/clis/tvmaze/show.js +1 -0
- package/clis/tvmaze/utils.js +1 -0
- package/clis/twitter/accept.js +116 -0
- package/clis/twitter/article.js +116 -0
- package/clis/twitter/auth.js +4 -0
- package/clis/twitter/block.js +62 -0
- package/clis/twitter/bookmark-folder.js +4 -0
- package/clis/twitter/bookmark-folders.js +4 -0
- package/clis/twitter/bookmark.js +44 -0
- package/clis/twitter/bookmarks.js +27 -0
- package/clis/twitter/delete.js +36 -0
- package/clis/twitter/device-follow.js +13 -0
- 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 +38 -0
- package/clis/twitter/follow-batch.js +43 -0
- package/clis/twitter/follow.js +39 -0
- package/clis/twitter/followers.js +59 -0
- package/clis/twitter/following.js +4 -0
- package/clis/twitter/hide-reply.js +57 -0
- package/clis/twitter/like.js +48 -0
- package/clis/twitter/likes.js +14 -0
- package/clis/twitter/list-add-batch.js +1 -0
- package/clis/twitter/list-add-core.js +35 -0
- package/clis/twitter/list-add.js +1 -0
- package/clis/twitter/list-batch-utils.js +1 -0
- package/clis/twitter/list-create.js +12 -0
- package/clis/twitter/list-delete.js +36 -0
- package/clis/twitter/list-remove-batch.js +1 -0
- package/clis/twitter/list-remove-core.js +127 -0
- package/clis/twitter/list-remove.js +1 -0
- package/clis/twitter/list-tweets.js +27 -0
- package/clis/twitter/lists.js +27 -0
- package/clis/twitter/notifications.js +4 -0
- package/clis/twitter/post.js +158 -0
- package/clis/twitter/profile.js +66 -0
- package/clis/twitter/quote.js +123 -0
- package/clis/twitter/reply-dm.js +112 -0
- package/clis/twitter/reply.js +97 -0
- package/clis/twitter/retweet.js +62 -0
- package/clis/twitter/schedule.js +96 -0
- package/clis/twitter/scheduled-delete.js +60 -0
- package/clis/twitter/scheduled-list.js +15 -0
- package/clis/twitter/scheduled-utils.js +18 -0
- package/clis/twitter/search.js +12 -0
- package/clis/twitter/shared.js +76 -0
- package/clis/twitter/thread.js +4 -0
- package/clis/twitter/timeline.js +4 -0
- package/clis/twitter/trending.js +18 -0
- package/clis/twitter/tweets.js +12 -0
- package/clis/twitter/unblock.js +45 -0
- package/clis/twitter/unbookmark.js +41 -0
- package/clis/twitter/unfollow.js +45 -0
- package/clis/twitter/unlike.js +48 -0
- package/clis/twitter/unretweet.js +62 -0
- package/clis/twitter/utils.js +55 -0
- package/clis/uisdc/news.js +25 -0
- package/clis/uiverse/_shared.js +257 -0
- package/clis/uiverse/code.js +1 -0
- package/clis/uiverse/preview.js +1 -0
- package/clis/upwork/auth.js +19 -0
- package/clis/upwork/detail.js +22 -0
- package/clis/upwork/feed.js +21 -0
- package/clis/upwork/search.js +21 -0
- package/clis/upwork/utils.js +1 -0
- package/clis/v2ex/auth.js +10 -0
- package/clis/v2ex/daily.js +41 -0
- package/clis/v2ex/hot.js +1 -0
- package/clis/v2ex/latest.js +1 -0
- package/clis/v2ex/me.js +58 -0
- package/clis/v2ex/member.js +1 -0
- package/clis/v2ex/node.js +1 -0
- package/clis/v2ex/nodes.js +1 -0
- package/clis/v2ex/notifications.js +40 -0
- package/clis/v2ex/replies.js +1 -0
- package/clis/v2ex/topic.js +1 -0
- package/clis/v2ex/user.js +1 -0
- package/clis/vk/post.js +1 -0
- package/clis/vk/shared.js +8 -0
- package/clis/vk/whoami.js +1 -0
- package/clis/wanfang/search.js +42 -0
- package/clis/web/read.js +260 -0
- package/clis/wechat-channels/auth.js +31 -0
- package/clis/wechat-channels/publish.js +298 -0
- package/clis/weibo/article.js +1 -0
- package/clis/weibo/auth.js +17 -0
- package/clis/weibo/comments.js +28 -0
- package/clis/weibo/delete.js +84 -0
- package/clis/weibo/favorites.js +27 -0
- package/clis/weibo/feed.js +33 -0
- package/clis/weibo/hot.js +17 -0
- package/clis/weibo/me.js +51 -0
- package/clis/weibo/post.js +46 -0
- package/clis/weibo/publish.js +98 -0
- package/clis/weibo/search.js +47 -0
- package/clis/weibo/user-posts.js +92 -0
- package/clis/weibo/user.js +37 -0
- package/clis/weibo/utils.js +16 -0
- package/clis/weixin/article.js +1 -0
- package/clis/weixin/create-draft.js +152 -0
- package/clis/weixin/download.js +100 -0
- package/clis/weixin/drafts.js +27 -0
- package/clis/weixin/login.js +1 -0
- package/clis/weixin/search.js +44 -0
- package/clis/weixin/stats.js +43 -0
- package/clis/weixin/whoami.js +1 -0
- package/clis/weread/ai-outline.js +2 -0
- package/clis/weread/auth.js +24 -0
- package/clis/weread/book-search.js +2 -0
- package/clis/weread/book.js +3 -0
- package/clis/weread/highlights.js +1 -0
- package/clis/weread/notebooks.js +1 -0
- package/clis/weread/notes.js +1 -0
- package/clis/weread/ranking.js +1 -0
- package/clis/weread/search.js +1 -0
- package/clis/weread/shelf.js +1 -0
- package/clis/weread/utils.js +67 -0
- package/clis/weread-official/book.js +1 -0
- package/clis/weread-official/discover.js +1 -0
- package/clis/weread-official/list-apis.js +1 -0
- package/clis/weread-official/notes.js +1 -0
- package/clis/weread-official/readdata.js +1 -0
- package/clis/weread-official/review.js +1 -0
- package/clis/weread-official/search.js +1 -0
- package/clis/weread-official/shelf.js +1 -0
- package/clis/weread-official/utils.js +1 -0
- package/clis/wikidata/entity.js +1 -0
- package/clis/wikidata/search.js +1 -0
- package/clis/wikidata/utils.js +1 -0
- package/clis/wikipedia/page.js +3 -0
- package/clis/wikipedia/random.js +1 -0
- package/clis/wikipedia/search.js +1 -0
- package/clis/wikipedia/summary.js +1 -0
- package/clis/wikipedia/trending.js +1 -0
- package/clis/wikipedia/utils.js +1 -0
- package/clis/wordpress/login.js +1 -0
- package/clis/wordpress/publish.js +1 -0
- package/clis/wordpress/shared.js +54 -0
- package/clis/wordpress/whoami.js +1 -0
- package/clis/woshipm/article.js +1 -0
- package/clis/woshipm/login.js +1 -0
- package/clis/woshipm/stats.js +52 -0
- package/clis/woshipm/whoami.js +1 -0
- package/clis/wttr/current.js +1 -0
- package/clis/wttr/forecast.js +1 -0
- package/clis/wttr/utils.js +1 -0
- package/clis/xianyu/auth.js +11 -0
- package/clis/xianyu/chat.js +1 -0
- package/clis/xianyu/im.js +240 -0
- package/clis/xianyu/inbox.js +1 -0
- package/clis/xianyu/item.js +97 -0
- package/clis/xianyu/messages.js +1 -0
- package/clis/xianyu/publish.js +245 -0
- package/clis/xianyu/reply.js +1 -0
- package/clis/xianyu/search.js +141 -0
- package/clis/xianyu/utils.js +1 -0
- package/clis/xiaoe/auth.js +10 -0
- package/clis/xiaoe/catalog.js +134 -0
- package/clis/xiaoe/content.js +16 -0
- package/clis/xiaoe/courses.js +43 -0
- package/clis/xiaoe/detail.js +19 -0
- package/clis/xiaoe/play-url.js +97 -0
- package/clis/xiaohongshu/ask.js +130 -0
- package/clis/xiaohongshu/auth.js +13 -0
- package/clis/xiaohongshu/collection-helpers.js +64 -0
- package/clis/xiaohongshu/comments.js +89 -0
- package/clis/xiaohongshu/creator-note-detail.js +80 -0
- package/clis/xiaohongshu/creator-notes-summary.js +1 -0
- package/clis/xiaohongshu/creator-notes.js +107 -0
- package/clis/xiaohongshu/creator-profile.js +13 -0
- package/clis/xiaohongshu/creator-stats.js +13 -0
- package/clis/xiaohongshu/delete-note.js +69 -0
- package/clis/xiaohongshu/download.js +200 -0
- package/clis/xiaohongshu/draft-clear.js +44 -0
- package/clis/xiaohongshu/draft-delete.js +37 -0
- package/clis/xiaohongshu/draft-open.js +1 -0
- package/clis/xiaohongshu/draft-utils.js +36 -0
- package/clis/xiaohongshu/drafts.js +1 -0
- package/clis/xiaohongshu/feed.js +38 -0
- package/clis/xiaohongshu/follow.js +75 -0
- package/clis/xiaohongshu/liked.js +1 -0
- package/clis/xiaohongshu/note-helpers.js +1 -0
- package/clis/xiaohongshu/note.js +32 -0
- package/clis/xiaohongshu/notifications.js +1 -0
- package/clis/xiaohongshu/publish-video.js +87 -0
- package/clis/xiaohongshu/publish.js +637 -0
- package/clis/xiaohongshu/saved.js +1 -0
- package/clis/xiaohongshu/search.js +194 -0
- package/clis/xiaohongshu/unfollow.js +98 -0
- package/clis/xiaohongshu/user-helpers.js +1 -0
- package/clis/xiaohongshu/user.js +30 -0
- package/clis/xiaoyuzhou/auth.js +3 -0
- package/clis/xiaoyuzhou/download.js +1 -0
- package/clis/xiaoyuzhou/episode.js +1 -0
- package/clis/xiaoyuzhou/podcast-episodes.js +1 -0
- package/clis/xiaoyuzhou/podcast.js +1 -0
- package/clis/xiaoyuzhou/transcript.js +1 -0
- package/clis/xiaoyuzhou/utils.js +1 -0
- package/clis/xueqiu/article.js +4 -0
- package/clis/xueqiu/auth.js +27 -0
- package/clis/xueqiu/comments.js +38 -0
- package/clis/xueqiu/danjuan-utils.js +84 -0
- package/clis/xueqiu/earnings-date.js +1 -0
- package/clis/xueqiu/events.js +17 -0
- package/clis/xueqiu/feed.js +1 -0
- package/clis/xueqiu/fund-holdings.js +1 -0
- package/clis/xueqiu/fund-snapshot.js +1 -0
- package/clis/xueqiu/groups.js +1 -0
- package/clis/xueqiu/hashtags.js +26 -0
- package/clis/xueqiu/hot-stock.js +1 -0
- package/clis/xueqiu/hot.js +1 -0
- package/clis/xueqiu/kline.js +1 -0
- package/clis/xueqiu/search.js +1 -0
- package/clis/xueqiu/stock.js +1 -0
- package/clis/xueqiu/stocks.js +13 -0
- package/clis/xueqiu/users.js +12 -0
- package/clis/xueqiu/utils.js +9 -0
- package/clis/xueqiu/watchlist.js +1 -0
- package/clis/yahoo/search.js +21 -0
- package/clis/yahoo-finance/quote.js +50 -0
- package/clis/yollomi/background.js +1 -0
- package/clis/yollomi/edit.js +1 -0
- package/clis/yollomi/face-swap.js +1 -0
- package/clis/yollomi/generate.js +1 -0
- package/clis/yollomi/models.js +1 -0
- package/clis/yollomi/object-remover.js +1 -0
- package/clis/yollomi/remove-bg.js +1 -0
- package/clis/yollomi/restore.js +1 -0
- package/clis/yollomi/try-on.js +1 -0
- package/clis/yollomi/upload.js +17 -0
- package/clis/yollomi/upscale.js +1 -0
- package/clis/yollomi/utils.js +16 -0
- package/clis/yollomi/video.js +1 -0
- package/clis/youdao/note.js +113 -0
- package/clis/youtube/auth.js +20 -0
- package/clis/youtube/channel.js +118 -0
- package/clis/youtube/comments.js +64 -0
- package/clis/youtube/feed.js +89 -0
- package/clis/youtube/history.js +87 -0
- package/clis/youtube/like.js +33 -0
- package/clis/youtube/playlist.js +47 -0
- package/clis/youtube/publish.js +56 -0
- package/clis/youtube/search.js +39 -0
- package/clis/youtube/subscribe.js +42 -0
- package/clis/youtube/subscriptions.js +26 -0
- package/clis/youtube/transcript-group.js +2 -0
- package/clis/youtube/transcript.js +417 -0
- package/clis/youtube/unlike.js +33 -0
- package/clis/youtube/unsubscribe.js +42 -0
- package/clis/youtube/utils.js +34 -0
- package/clis/youtube/video.js +96 -0
- package/clis/youtube/watch-later.js +41 -0
- package/clis/yuanbao/ask.js +145 -0
- package/clis/yuanbao/auth.js +23 -0
- package/clis/yuanbao/detail.js +1 -0
- package/clis/yuanbao/history.js +1 -0
- package/clis/yuanbao/new.js +16 -0
- package/clis/yuanbao/read.js +1 -0
- package/clis/yuanbao/send.js +1 -0
- package/clis/yuanbao/shared.js +127 -0
- package/clis/yuanbao/status.js +1 -0
- package/clis/yuque/article.js +1 -0
- package/clis/yuque/whoami.js +1 -0
- package/clis/zhihu/answer-comments.js +11 -0
- package/clis/zhihu/answer-detail.js +11 -0
- package/clis/zhihu/answer.js +15 -0
- package/clis/zhihu/article-transform.js +1 -0
- package/clis/zhihu/article.js +7 -0
- package/clis/zhihu/auth.js +11 -0
- package/clis/zhihu/collection.js +7 -0
- package/clis/zhihu/collections.js +7 -0
- package/clis/zhihu/comment.js +17 -0
- package/clis/zhihu/download.js +39 -0
- package/clis/zhihu/favorite.js +39 -0
- package/clis/zhihu/follow.js +19 -0
- package/clis/zhihu/followers.js +1 -0
- package/clis/zhihu/following.js +1 -0
- package/clis/zhihu/hot.js +21 -0
- package/clis/zhihu/like.js +16 -0
- package/clis/zhihu/paginate.js +11 -0
- package/clis/zhihu/pin.js +24 -0
- package/clis/zhihu/pins.js +1 -0
- package/clis/zhihu/question.js +7 -0
- package/clis/zhihu/recommend.js +7 -0
- package/clis/zhihu/search.js +11 -0
- package/clis/zhihu/stats.js +41 -0
- package/clis/zhihu/target.js +1 -0
- package/clis/zhihu/text.js +6 -0
- package/clis/zhihu/user-answers.js +1 -0
- package/clis/zhihu/user-arg.js +1 -0
- package/clis/zhihu/user-articles.js +1 -0
- package/clis/zhihu/user.js +11 -0
- package/clis/zhihu/write-shared.js +71 -0
- package/clis/zlibrary/info.js +1 -0
- package/clis/zlibrary/search.js +1 -0
- package/clis/zlibrary/utils.js +48 -0
- package/clis/zsxq/auth.js +33 -0
- package/clis/zsxq/dynamics.js +1 -0
- package/clis/zsxq/groups.js +1 -0
- package/clis/zsxq/search.js +1 -0
- package/clis/zsxq/topic.js +1 -0
- package/clis/zsxq/topics.js +1 -0
- package/clis/zsxq/utils.js +72 -0
- package/dist/src/adapter-shadow.d.ts +11 -0
- package/dist/src/adapter-shadow.js +2 -0
- package/dist/src/adapter-shadow.test.d.ts +1 -0
- package/dist/src/adapter-source.d.ts +11 -0
- package/dist/src/adapter-source.js +1 -0
- package/dist/src/adapter-source.test.d.ts +1 -0
- package/dist/src/browser/analyze.d.ts +118 -0
- package/dist/src/browser/analyze.js +1 -0
- package/dist/src/browser/analyze.test.d.ts +1 -0
- package/dist/src/browser/article-extract.d.ts +57 -0
- package/dist/src/browser/article-extract.e2e.test.d.ts +1 -0
- package/dist/src/browser/article-extract.js +2 -0
- package/dist/src/browser/article-extract.test.d.ts +1 -0
- package/dist/src/browser/ax-snapshot.d.ts +37 -0
- package/dist/src/browser/ax-snapshot.js +2 -0
- package/dist/src/browser/ax-snapshot.test.d.ts +1 -0
- package/dist/src/browser/base-page.d.ts +151 -0
- package/dist/src/browser/base-page.js +225 -0
- package/dist/src/browser/base-page.test.d.ts +1 -0
- package/dist/src/browser/bridge-readiness.d.ts +14 -0
- package/dist/src/browser/bridge-readiness.js +1 -0
- package/dist/src/browser/bridge-readiness.test.d.ts +1 -0
- package/dist/src/browser/bridge.d.ts +26 -0
- package/dist/src/browser/bridge.js +1 -0
- package/dist/src/browser/cdp-click-fixture.test.d.ts +1 -0
- package/dist/src/browser/cdp.d.ts +51 -0
- package/dist/src/browser/cdp.js +1 -0
- package/dist/src/browser/cdp.test.d.ts +1 -0
- package/dist/src/browser/compound.d.ts +59 -0
- package/dist/src/browser/compound.js +82 -0
- package/dist/src/browser/compound.test.d.ts +1 -0
- package/dist/src/browser/config.d.ts +2 -0
- package/dist/src/browser/config.js +1 -0
- package/dist/src/browser/daemon-client.d.ts +79 -0
- package/dist/src/browser/daemon-client.js +1 -0
- package/dist/src/browser/daemon-client.test.d.ts +1 -0
- package/dist/src/browser/daemon-lifecycle.d.ts +37 -0
- package/dist/src/browser/daemon-lifecycle.js +12 -0
- package/dist/src/browser/daemon-transport.d.ts +55 -0
- package/dist/src/browser/daemon-transport.js +1 -0
- package/dist/src/browser/daemon-version.d.ts +4 -0
- package/dist/src/browser/daemon-version.js +2 -0
- package/dist/src/browser/dom-helpers.d.ts +41 -0
- package/dist/src/browser/dom-helpers.js +166 -0
- package/dist/src/browser/dom-helpers.test.d.ts +1 -0
- package/dist/src/browser/dom-snapshot.d.ts +93 -0
- package/dist/src/browser/dom-snapshot.js +809 -0
- package/dist/src/browser/dom-snapshot.test.d.ts +11 -0
- package/dist/src/browser/errors.d.ts +38 -0
- package/dist/src/browser/errors.js +5 -0
- package/dist/src/browser/errors.test.d.ts +1 -0
- package/dist/src/browser/extract.d.ts +69 -0
- package/dist/src/browser/extract.js +42 -0
- package/dist/src/browser/extract.test.d.ts +1 -0
- package/dist/src/browser/find.d.ts +84 -0
- package/dist/src/browser/find.js +328 -0
- package/dist/src/browser/find.test.d.ts +1 -0
- package/dist/src/browser/fingerprint.d.ts +44 -0
- package/dist/src/browser/fingerprint.js +82 -0
- package/dist/src/browser/html-tree.d.ts +75 -0
- package/dist/src/browser/html-tree.js +61 -0
- package/dist/src/browser/html-tree.test.d.ts +1 -0
- package/dist/src/browser/index.d.ts +14 -0
- package/dist/src/browser/index.js +1 -0
- 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.d.ts +49 -0
- package/dist/src/browser/network-cache.js +1 -0
- package/dist/src/browser/network-cache.test.d.ts +1 -0
- package/dist/src/browser/network-key.d.ts +22 -0
- package/dist/src/browser/network-key.js +1 -0
- package/dist/src/browser/network-key.test.d.ts +1 -0
- package/dist/src/browser/page.d.ts +83 -0
- package/dist/src/browser/page.js +15 -0
- package/dist/src/browser/page.test.d.ts +1 -0
- package/dist/src/browser/profile.d.ts +96 -0
- package/dist/src/browser/profile.js +2 -0
- 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.d.ts +52 -0
- package/dist/src/browser/shape-filter.js +1 -0
- package/dist/src/browser/shape-filter.test.d.ts +1 -0
- package/dist/src/browser/shape.d.ts +23 -0
- package/dist/src/browser/shape.js +1 -0
- package/dist/src/browser/shape.test.d.ts +1 -0
- package/dist/src/browser/stealth.d.ts +18 -0
- package/dist/src/browser/stealth.js +391 -0
- package/dist/src/browser/stealth.test.d.ts +1 -0
- package/dist/src/browser/tabs.d.ts +13 -0
- package/dist/src/browser/tabs.js +2 -0
- package/dist/src/browser/target-errors.d.ts +39 -0
- package/dist/src/browser/target-errors.js +1 -0
- package/dist/src/browser/target-errors.test.d.ts +1 -0
- package/dist/src/browser/target-resolver.d.ts +158 -0
- package/dist/src/browser/target-resolver.js +423 -0
- package/dist/src/browser/target-resolver.test.d.ts +1 -0
- package/dist/src/browser/trace.d.ts +21 -0
- package/dist/src/browser/trace.js +2 -0
- package/dist/src/browser/utils.d.ts +20 -0
- package/dist/src/browser/utils.js +1 -0
- package/dist/src/browser/utils.test.d.ts +1 -0
- package/dist/src/browser/verify-fixture.d.ts +65 -0
- package/dist/src/browser/verify-fixture.js +2 -0
- package/dist/src/browser/verify-fixture.test.d.ts +1 -0
- package/dist/src/browser/visual-refs.d.ts +11 -0
- package/dist/src/browser/visual-refs.js +94 -0
- 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/browser.test.d.ts +1 -0
- package/dist/src/build-manifest.d.ts +103 -0
- package/dist/src/build-manifest.js +16 -0
- package/dist/src/build-manifest.test.d.ts +1 -0
- package/dist/src/capabilityRouting.d.ts +19 -0
- package/dist/src/capabilityRouting.js +1 -0
- package/dist/src/capabilityRouting.test.d.ts +1 -0
- package/dist/src/cli-argv-preprocess.d.ts +63 -0
- package/dist/src/cli-argv-preprocess.js +1 -0
- package/dist/src/cli-argv-preprocess.test.d.ts +1 -0
- package/dist/src/cli.d.ts +79 -0
- package/dist/src/cli.js +132 -0
- package/dist/src/cli.test.d.ts +1 -0
- package/dist/src/commanderAdapter.d.ts +21 -0
- package/dist/src/commanderAdapter.js +3 -0
- package/dist/src/commanderAdapter.test.d.ts +1 -0
- package/dist/src/commands/auth.d.ts +40 -0
- package/dist/src/commands/auth.js +2 -0
- package/dist/src/commands/auth.test.d.ts +1 -0
- package/dist/src/commands/daemon.d.ts +25 -0
- package/dist/src/commands/daemon.js +1 -0
- package/dist/src/commands/daemon.test.d.ts +1 -0
- package/dist/src/completion-fast.d.ts +22 -0
- package/dist/src/completion-fast.js +1 -0
- package/dist/src/completion-shared.d.ts +13 -0
- package/dist/src/completion-shared.js +30 -0
- package/dist/src/completion.d.ts +21 -0
- package/dist/src/completion.js +1 -0
- package/dist/src/completion.test.d.ts +1 -0
- package/dist/src/constants.d.ts +22 -0
- package/dist/src/constants.js +1 -0
- package/dist/src/convention-audit.d.ts +50 -0
- package/dist/src/convention-audit.js +2 -0
- package/dist/src/convention-audit.test.d.ts +1 -0
- package/dist/src/daemon-utils.d.ts +18 -0
- package/dist/src/daemon-utils.js +1 -0
- package/dist/src/daemon.d.ts +22 -0
- package/dist/src/daemon.js +1 -0
- package/dist/src/daemon.test.d.ts +1 -0
- package/dist/src/discovery.d.ts +43 -0
- package/dist/src/discovery.js +2 -0
- package/dist/src/doctor.d.ts +38 -0
- package/dist/src/doctor.js +13 -0
- package/dist/src/doctor.test.d.ts +1 -0
- package/dist/src/download/article-download.d.ts +72 -0
- package/dist/src/download/article-download.js +21 -0
- package/dist/src/download/article-download.test.d.ts +1 -0
- package/dist/src/download/index.d.ts +71 -0
- package/dist/src/download/index.js +7 -0
- package/dist/src/download/index.test.d.ts +1 -0
- package/dist/src/download/media-download.d.ts +49 -0
- package/dist/src/download/media-download.js +1 -0
- package/dist/src/download/media-download.test.d.ts +1 -0
- package/dist/src/download/progress.d.ts +36 -0
- package/dist/src/download/progress.js +5 -0
- package/dist/src/download/progress.test.d.ts +1 -0
- package/dist/src/electron-apps.d.ts +31 -0
- package/dist/src/electron-apps.js +1 -0
- package/dist/src/electron-apps.test.d.ts +1 -0
- package/dist/src/engine.test.d.ts +1 -0
- package/dist/src/errors.d.ts +117 -0
- package/dist/src/errors.js +2 -0
- package/dist/src/errors.test.d.ts +1 -0
- package/dist/src/execution.d.ts +24 -0
- package/dist/src/execution.js +2 -0
- package/dist/src/execution.test.d.ts +1 -0
- package/dist/src/extension-manifest-regression.test.d.ts +1 -0
- package/dist/src/external-clis.yaml +109 -0
- package/dist/src/external.d.ts +49 -0
- package/dist/src/external.js +1 -0
- package/dist/src/external.test.d.ts +1 -0
- package/dist/src/help.d.ts +88 -0
- package/dist/src/help.js +8 -0
- package/dist/src/help.test.d.ts +1 -0
- package/dist/src/hooks.d.ts +46 -0
- package/dist/src/hooks.js +1 -0
- package/dist/src/hooks.test.d.ts +4 -0
- package/dist/src/interceptor.d.ts +44 -0
- package/dist/src/interceptor.js +123 -0
- package/dist/src/interceptor.test.d.ts +4 -0
- package/dist/src/launcher.d.ts +41 -0
- package/dist/src/launcher.js +7 -0
- package/dist/src/launcher.test.d.ts +1 -0
- package/dist/src/logger.d.ts +26 -0
- package/dist/src/logger.js +9 -0
- package/dist/src/main.d.ts +5 -0
- package/dist/src/main.js +10 -0
- package/dist/src/manifest-types.d.ts +43 -0
- package/dist/src/manifest-types.js +1 -0
- package/dist/src/node-network.d.ts +10 -0
- package/dist/src/node-network.js +1 -0
- package/dist/src/node-network.test.d.ts +1 -0
- package/dist/src/observation/artifact.d.ts +16 -0
- package/dist/src/observation/artifact.js +8 -0
- package/dist/src/observation/artifact.test.d.ts +1 -0
- package/dist/src/observation/events.d.ts +89 -0
- package/dist/src/observation/events.js +1 -0
- package/dist/src/observation/index.d.ts +7 -0
- package/dist/src/observation/index.js +1 -0
- package/dist/src/observation/manager.d.ts +9 -0
- package/dist/src/observation/manager.js +1 -0
- package/dist/src/observation/manager.test.d.ts +1 -0
- package/dist/src/observation/redaction.d.ts +11 -0
- package/dist/src/observation/redaction.js +2 -0
- package/dist/src/observation/redaction.test.d.ts +1 -0
- package/dist/src/observation/retention.d.ts +32 -0
- package/dist/src/observation/retention.js +1 -0
- package/dist/src/observation/retention.test.d.ts +1 -0
- package/dist/src/observation/ring-buffer.d.ts +22 -0
- package/dist/src/observation/ring-buffer.js +1 -0
- package/dist/src/observation/ring-buffer.test.d.ts +1 -0
- package/dist/src/observation/session.d.ts +25 -0
- package/dist/src/observation/session.js +1 -0
- package/dist/src/output.d.ts +14 -0
- package/dist/src/output.js +2 -0
- package/dist/src/output.test.d.ts +1 -0
- package/dist/src/package-exports.test.d.ts +1 -0
- package/dist/src/package-paths.d.ts +8 -0
- package/dist/src/package-paths.js +1 -0
- package/dist/src/pipeline/executor.d.ts +11 -0
- package/dist/src/pipeline/executor.js +1 -0
- package/dist/src/pipeline/executor.test.d.ts +4 -0
- package/dist/src/pipeline/index.d.ts +5 -0
- package/dist/src/pipeline/index.js +1 -0
- package/dist/src/pipeline/registry.d.ts +28 -0
- package/dist/src/pipeline/registry.js +1 -0
- package/dist/src/pipeline/steps/browser.d.ts +13 -0
- package/dist/src/pipeline/steps/browser.js +1 -0
- package/dist/src/pipeline/steps/download.d.ts +18 -0
- package/dist/src/pipeline/steps/download.js +1 -0
- package/dist/src/pipeline/steps/download.test.d.ts +1 -0
- package/dist/src/pipeline/steps/fetch.d.ts +5 -0
- package/dist/src/pipeline/steps/fetch.js +31 -0
- package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
- package/dist/src/pipeline/steps/intercept.d.ts +5 -0
- package/dist/src/pipeline/steps/intercept.js +1 -0
- package/dist/src/pipeline/steps/tap.d.ts +12 -0
- package/dist/src/pipeline/steps/tap.js +53 -0
- package/dist/src/pipeline/steps/transform.d.ts +9 -0
- package/dist/src/pipeline/steps/transform.js +1 -0
- package/dist/src/pipeline/template.d.ts +17 -0
- package/dist/src/pipeline/template.js +1 -0
- package/dist/src/pipeline/template.test.d.ts +4 -0
- package/dist/src/pipeline/transform.test.d.ts +4 -0
- package/dist/src/plugin-manifest.d.ts +70 -0
- package/dist/src/plugin-manifest.js +1 -0
- package/dist/src/plugin-manifest.test.d.ts +4 -0
- package/dist/src/plugin-scaffold.d.ts +28 -0
- package/dist/src/plugin-scaffold.js +75 -0
- package/dist/src/plugin-scaffold.test.d.ts +4 -0
- package/dist/src/plugin.d.ts +145 -0
- package/dist/src/plugin.js +20 -0
- package/dist/src/plugin.test.d.ts +4 -0
- package/dist/src/rate-limit.d.ts +15 -0
- package/dist/src/rate-limit.js +2 -0
- package/dist/src/rate-limit.test.d.ts +1 -0
- package/dist/src/registry-api.d.ts +13 -0
- package/dist/src/registry-api.js +1 -0
- package/dist/src/registry.d.ts +130 -0
- package/dist/src/registry.js +1 -0
- package/dist/src/registry.test.d.ts +4 -0
- package/dist/src/runtime-detect.d.ts +31 -0
- package/dist/src/runtime-detect.js +1 -0
- package/dist/src/runtime-detect.test.d.ts +1 -0
- package/dist/src/runtime.d.ts +57 -0
- package/dist/src/runtime.js +1 -0
- package/dist/src/scripts/framework.d.ts +7 -0
- package/dist/src/scripts/framework.js +1 -0
- package/dist/src/scripts/interact.d.ts +4 -0
- package/dist/src/scripts/interact.js +1 -0
- package/dist/src/scripts/store.d.ts +13 -0
- package/dist/src/scripts/store.js +1 -0
- package/dist/src/serialization.d.ts +42 -0
- package/dist/src/serialization.js +4 -0
- package/dist/src/serialization.test.d.ts +1 -0
- package/dist/src/skills.d.ts +14 -0
- package/dist/src/skills.js +6 -0
- package/dist/src/skills.test.d.ts +1 -0
- package/dist/src/snapshotFormatter.d.ts +11 -0
- package/dist/src/snapshotFormatter.js +3 -0
- package/dist/src/snapshotFormatter.test.d.ts +7 -0
- package/dist/src/tui.d.ts +28 -0
- package/dist/src/tui.js +16 -0
- package/dist/src/tui.test.d.ts +1 -0
- package/dist/src/types.d.ts +236 -0
- package/dist/src/types.js +1 -0
- package/dist/src/utils.d.ts +57 -0
- package/dist/src/utils.js +38 -0
- package/dist/src/utils.test.d.ts +1 -0
- package/dist/src/validate.d.ts +21 -0
- package/dist/src/validate.js +3 -0
- package/dist/src/validate.test.d.ts +9 -0
- package/dist/src/verify.d.ts +27 -0
- package/dist/src/verify.js +2 -0
- package/dist/src/verify.test.d.ts +8 -0
- package/dist/src/version.d.ts +4 -0
- package/dist/src/version.js +1 -0
- package/dist/src/weixin-download.test.d.ts +1 -0
- package/docs/guide/browser-bridge.md +94 -0
- package/docs/guide/electron-app-cli.md +199 -0
- package/docs/guide/exit-codes.md +24 -0
- package/docs/guide/extending-opencli.md +134 -0
- package/docs/guide/getting-started.md +81 -0
- package/docs/guide/installation.md +52 -0
- package/docs/guide/plugins.md +226 -0
- package/docs/guide/remote-orchestration.md +116 -0
- package/docs/guide/troubleshooting.md +69 -0
- package/package.json +116 -0
- package/scripts/check-doc-coverage.sh +81 -0
- package/scripts/check-listing-id-pairing.mjs +193 -0
- package/scripts/check-silent-column-drop.mjs +105 -0
- package/scripts/check-typed-error-lint.mjs +118 -0
- package/scripts/clean-dist.cjs +13 -0
- package/scripts/copy-yaml.cjs +12 -0
- package/scripts/fetch-adapters.js +293 -0
- package/scripts/minify-release.mjs +115 -0
- package/scripts/postinstall.js +174 -0
- package/scripts/silent-column-drop-baseline.json +910 -0
- package/scripts/typed-error-lint-baseline.json +1098 -0
- package/skills/opencli-adapter-author/SKILL.md +256 -0
- package/skills/opencli-adapter-author/references/adapter-template.md +471 -0
- package/skills/opencli-adapter-author/references/api-discovery.md +295 -0
- package/skills/opencli-adapter-author/references/coverage-matrix.md +81 -0
- package/skills/opencli-adapter-author/references/field-conventions.md +172 -0
- package/skills/opencli-adapter-author/references/field-decode-playbook.md +181 -0
- package/skills/opencli-adapter-author/references/jsdom-fixture-pattern.md +196 -0
- package/skills/opencli-adapter-author/references/output-design.md +149 -0
- package/skills/opencli-adapter-author/references/site-memory/bilibili.md +70 -0
- package/skills/opencli-adapter-author/references/site-memory/eastmoney.md +70 -0
- package/skills/opencli-adapter-author/references/site-memory/tonghuashun.md +51 -0
- package/skills/opencli-adapter-author/references/site-memory/xueqiu.md +58 -0
- package/skills/opencli-adapter-author/references/site-memory.md +231 -0
- package/skills/opencli-adapter-author/references/site-recon.md +134 -0
- package/skills/opencli-adapter-author/references/strategy-selection.md +169 -0
- package/skills/opencli-adapter-author/references/success-rate-pitfalls.md +162 -0
- package/skills/opencli-adapter-author/references/typed-errors.md +234 -0
- package/skills/opencli-autofix/SKILL.md +297 -0
- package/skills/opencli-browser/SKILL.md +468 -0
- package/skills/opencli-browser-sitemap/SKILL.md +96 -0
- package/skills/opencli-sitemap-author/SKILL.md +161 -0
- package/skills/opencli-sitemap-author/references/sitemap-schema.md +660 -0
- package/skills/opencli-usage/SKILL.md +168 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import{ArgumentError as z,AuthRequiredError as Y,CliError as W}from"@jackwener/opencli/errors";const J="wx.zsxq.com",Z="https://wx.zsxq.com";function $(B){return B&&typeof B==="object"&&!Array.isArray(B)?B:null}function X(...B){for(const G of B)if(Array.isArray(G))return G;return[]}export async function ensureZsxqPage(B){await B.goto(Z)}export async function ensureZsxqAuth(B){try{if(!await B.evaluate(`
|
|
2
|
+
(async () => {
|
|
3
|
+
try {
|
|
4
|
+
const r = await new Promise((resolve, reject) => {
|
|
5
|
+
const xhr = new XMLHttpRequest();
|
|
6
|
+
xhr.open('GET', 'https://api.zsxq.com/v2/groups', true);
|
|
7
|
+
xhr.withCredentials = true;
|
|
8
|
+
xhr.setRequestHeader('accept', 'application/json');
|
|
9
|
+
xhr.onload = () => {
|
|
10
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
11
|
+
try { resolve(JSON.parse(xhr.responseText)); }
|
|
12
|
+
catch { resolve(null); }
|
|
13
|
+
} else { resolve(null); }
|
|
14
|
+
};
|
|
15
|
+
xhr.onerror = () => resolve(null);
|
|
16
|
+
xhr.send();
|
|
17
|
+
});
|
|
18
|
+
return r !== null;
|
|
19
|
+
} catch { return false; }
|
|
20
|
+
})()
|
|
21
|
+
`))throw new Y("zsxq.com")}catch(G){if(G instanceof Y)throw G;throw new Y("zsxq.com")}}export async function getCookieValue(B,G){return(await B.getCookies({domain:J})).find((K)=>K.name===G)?.value}export async function getActiveGroupId(B){const G=await B.evaluate(`
|
|
22
|
+
(() => {
|
|
23
|
+
const target = localStorage.getItem('target_group');
|
|
24
|
+
if (target) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(target);
|
|
27
|
+
if (parsed.group_id) return String(parsed.group_id);
|
|
28
|
+
} catch {}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
})()
|
|
32
|
+
`);if(G)return G;throw new z("Cannot determine active group_id","Pass --group_id <id> or open the target 知识星球 page in Chrome first")}export async function browserJsonRequest(B,G){return await B.evaluate(`
|
|
33
|
+
(async () => {
|
|
34
|
+
const path = ${JSON.stringify(G)};
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
return await new Promise((resolve) => {
|
|
38
|
+
const xhr = new XMLHttpRequest();
|
|
39
|
+
xhr.open('GET', path, true);
|
|
40
|
+
xhr.withCredentials = true;
|
|
41
|
+
xhr.setRequestHeader('accept', 'application/json, text/plain, */*');
|
|
42
|
+
xhr.onload = () => {
|
|
43
|
+
let parsed = null;
|
|
44
|
+
if (xhr.responseText) {
|
|
45
|
+
try { parsed = JSON.parse(xhr.responseText); }
|
|
46
|
+
catch {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
resolve({
|
|
50
|
+
ok: xhr.status >= 200 && xhr.status < 300,
|
|
51
|
+
url: path,
|
|
52
|
+
status: xhr.status,
|
|
53
|
+
data: parsed,
|
|
54
|
+
error: xhr.status >= 200 && xhr.status < 300 ? undefined : 'HTTP ' + xhr.status,
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
xhr.onerror = () => resolve({
|
|
58
|
+
ok: false,
|
|
59
|
+
url: path,
|
|
60
|
+
error: 'Network error',
|
|
61
|
+
});
|
|
62
|
+
xhr.send();
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
url: path,
|
|
68
|
+
error: error instanceof Error ? error.message : String(error),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
})()
|
|
72
|
+
`)}export async function fetchFirstJson(B,G){let H=null;for(const K of G){const Q=await browserJsonRequest(B,K);if(Q.ok)return Q;H=Q}if(!H)throw new W("FETCH_ERROR","No candidate endpoint returned JSON",`Checked endpoints: ${G.join(", ")}`);throw new W("FETCH_ERROR",H.error||"Failed to fetch ZSXQ API",`Checked endpoints: ${G.join(", ")}`)}export function unwrapRespData(B){const G=$(B);if(!G)throw new W("PARSE_ERROR","Invalid ZSXQ API response");if(G.succeeded===!1){const H=typeof G.code==="number"?String(G.code):"API_ERROR",K=typeof G.info==="string"?G.info:typeof G.error==="string"?G.error:"ZSXQ API returned an error";throw new W(H,K)}return G.resp_data??G.data??B}export function getTopicsFromResponse(B){const G=unwrapRespData(B);if(Array.isArray(G))return G;return X(G.topics,G.list,G.records,G.items,G.search_result)}export function getCommentsFromResponse(B){const G=unwrapRespData(B);if(Array.isArray(G))return G;return X(G.comments,G.list,G.items)}export function getGroupsFromResponse(B){const G=unwrapRespData(B);if(Array.isArray(G))return G;return X(G.groups,G.list,G.items)}export function getTopicFromResponse(B){const G=unwrapRespData(B);if(Array.isArray(G))return G[0]??null;if(typeof G.topic_id==="number"||typeof G.topic_id==="string")return G;const H=$(G);if(!H)return null;const K=H.topic;return K&&typeof K==="object"?K:null}export function getTopicAuthor(B){return B.owner?.name||B.talk?.owner?.name||B.question?.owner?.name||B.answer?.owner?.name||B.task?.owner?.name||B.solution?.owner?.name||""}export function getTopicText(B){return(B.title||"").replace(/\s+/g," ").trim()||getTopicContent(B)}export function getTopicContent(B){return([B.talk?.text,B.question?.text,B.answer?.text,B.task?.text,B.solution?.text].find((H)=>typeof H==="string"&&H.trim())||"").replace(/\s+/g," ").trim()}export function getTopicUrl(B){return B?`${Z}/topic/${B}`:Z}export function summarizeComments(B,G=3){return B.slice(0,G).map((H)=>{const K=H.owner?.name||"匿名",Q=H.repliee?.name?` -> ${H.repliee.name}`:"",j=(H.text||"").replace(/\s+/g," ").trim();return`${K}${Q}: ${j}`}).join(" | ")}export function toTopicRow(B){const G=B.topic_id??"",H=X(B.show_comments,B.comments);return{topic_id:G,type:B.type||"",group:B.group?.name||"",author:getTopicAuthor(B),title:getTopicText(B),content:getTopicContent(B),comments:B.comments_count??H.length??0,likes:B.likes_count??0,readers:B.readers_count??B.reading_count??0,time:B.create_time||"",comment_preview:summarizeComments(H),url:getTopicUrl(G)}}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type AdapterShadow = {
|
|
2
|
+
name: string;
|
|
3
|
+
userPath: string;
|
|
4
|
+
builtinPath: string;
|
|
5
|
+
};
|
|
6
|
+
export type AdapterShadowOptions = {
|
|
7
|
+
userClisDir?: string;
|
|
8
|
+
builtinClisDir?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function findShadowedUserAdapters(opts?: AdapterShadowOptions): AdapterShadow[];
|
|
11
|
+
export declare function formatAdapterShadowIssue(shadows: AdapterShadow[]): string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as d from"node:fs";import*as y from"node:os";import*as o from"node:path";import{fileURLToPath as j}from"node:url";import{findPackageRoot as w,getCliManifestPath as S}from"./package-paths.js";function g(){return o.join(w(j(import.meta.url)),"clis")}function f(e){try{return d.readdirSync(e,{withFileTypes:!0})}catch{return[]}}function C(e){try{const n=d.readFileSync(S(e),"utf-8"),t=JSON.parse(n),i=new Set;for(const s of t){const r=s.sourceFile??s.modulePath;if(r)i.add(o.resolve(e,r))}return i}catch{return new Set}}export function findShadowedUserAdapters(e={}){const n=e.userClisDir??o.join(y.homedir(),".opencli","clis"),t=e.builtinClisDir??g(),i=C(t),s=[];for(const r of f(n)){if(!r.isDirectory())continue;const a=r.name,l=o.join(n,a),m=o.join(t,a);for(const c of f(l)){if(!c.isFile()||!c.name.endsWith(".js"))continue;const p=o.join(l,c.name),u=o.join(m,c.name),h=o.resolve(u);if(!i.has(h))continue;s.push({name:`${a}/${c.name.replace(/\.js$/,"")}`,userPath:p,builtinPath:u})}}return s.sort((r,a)=>r.name.localeCompare(a.name))}export function formatAdapterShadowIssue(e){const n=e.slice(0,10),t=["Local adapter overrides shadow packaged adapters:"];for(const i of n)t.push(` ${i.name}: ${i.userPath} overrides ${i.builtinPath}`);if(e.length>n.length)t.push(` ... and ${e.length-n.length} more`);t.push("Remove the local ~/.opencli/clis copy, or run opencli adapter reset <site>, when you want packaged updates.");return t.join(`
|
|
2
|
+
`)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { InternalCliCommand } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the editable source file path for an adapter.
|
|
4
|
+
*
|
|
5
|
+
* Priority:
|
|
6
|
+
* 1. cmd.source (set for FS-scanned JS and manifest lazy-loaded JS)
|
|
7
|
+
* 2. cmd._modulePath (set for manifest lazy-loaded JS)
|
|
8
|
+
*
|
|
9
|
+
* Skip manifest: prefixed pseudo-paths (YAML commands inlined in manifest).
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveAdapterSourcePath(cmd: InternalCliCommand): string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as w from"node:fs";export function resolveAdapterSourcePath(g){const j=[];if(g.source&&!g.source.startsWith("manifest:"))j.push(g.source);if(g._modulePath)j.push(g._modulePath);for(const q of j)if(w.existsSync(q))return q;return j[0]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `browser analyze <url>` — turn site-recon guesswork into deterministic CLI output.
|
|
3
|
+
*
|
|
4
|
+
* When an agent starts a new adapter, the first question is "which pattern am
|
|
5
|
+
* I looking at?" (A/B/C/D/E from site-recon docs) and "will Node-side fetch
|
|
6
|
+
* work, or will anti-bot middleware block me?". Today the agent has to open
|
|
7
|
+
* the page, poke `network`, try cURL, fail, guess again. This module condenses
|
|
8
|
+
* that into one call that returns a classification + evidence.
|
|
9
|
+
*
|
|
10
|
+
* Kept pure (no page imports) so the bulk is unit-testable; the CLI wrapper
|
|
11
|
+
* drives a real page, feeds the resulting signals here, and prints the verdict.
|
|
12
|
+
*/
|
|
13
|
+
import type { CliCommand } from '../registry.js';
|
|
14
|
+
export interface PageSignals {
|
|
15
|
+
/** URL we navigated to (may redirect; both fields help agents notice that). */
|
|
16
|
+
requestedUrl: string;
|
|
17
|
+
finalUrl: string;
|
|
18
|
+
/** document.cookie split into names; value not needed for detection. */
|
|
19
|
+
cookieNames: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Response bodies captured during the navigation + first few seconds.
|
|
22
|
+
* We only need enough body text to spot WAF markers; the CLI truncates
|
|
23
|
+
* per-entry before feeding us.
|
|
24
|
+
*/
|
|
25
|
+
networkEntries: Array<{
|
|
26
|
+
url: string;
|
|
27
|
+
status: number;
|
|
28
|
+
contentType: string;
|
|
29
|
+
/** First N chars of body; null when not available. */
|
|
30
|
+
bodyPreview: string | null;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Which globals the page exposes on `window`. We don't care about the values,
|
|
34
|
+
* just presence — distinguishes Pattern B (SSR state) from Pattern A.
|
|
35
|
+
*/
|
|
36
|
+
initialState: {
|
|
37
|
+
__INITIAL_STATE__: boolean;
|
|
38
|
+
__NUXT__: boolean;
|
|
39
|
+
__NEXT_DATA__: boolean;
|
|
40
|
+
__APOLLO_STATE__: boolean;
|
|
41
|
+
};
|
|
42
|
+
/** Document title — only for the human-debug `summary` field. */
|
|
43
|
+
title: string;
|
|
44
|
+
}
|
|
45
|
+
export type EndpointEvidenceVerdict = 'likely_data' | 'maybe_data' | 'noise' | 'blocked';
|
|
46
|
+
export interface EndpointEvidence {
|
|
47
|
+
url: string;
|
|
48
|
+
status: number;
|
|
49
|
+
contentType: string;
|
|
50
|
+
real_data_score: number;
|
|
51
|
+
verdict: EndpointEvidenceVerdict;
|
|
52
|
+
reasons: string[];
|
|
53
|
+
sample_paths: string[];
|
|
54
|
+
}
|
|
55
|
+
export type AntiBotVendor = 'aliyun_waf' | 'cloudflare' | 'akamai' | 'geetest' | 'unknown';
|
|
56
|
+
export interface AntiBotVerdict {
|
|
57
|
+
detected: boolean;
|
|
58
|
+
vendor: AntiBotVendor | null;
|
|
59
|
+
evidence: string[];
|
|
60
|
+
/** One-line imperative instruction for the agent. */
|
|
61
|
+
implication: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function detectAntiBot(signals: PageSignals): AntiBotVerdict;
|
|
64
|
+
export type Pattern = 'A' | 'B' | 'C' | 'D' | 'E' | 'unknown';
|
|
65
|
+
export interface PatternVerdict {
|
|
66
|
+
pattern: Pattern;
|
|
67
|
+
reason: string;
|
|
68
|
+
/** How many JSON XHR/fetch responses we saw during navigation. */
|
|
69
|
+
json_responses: number;
|
|
70
|
+
/** How many observed responses look like real business data, not telemetry. */
|
|
71
|
+
real_data_candidates: number;
|
|
72
|
+
/** Count of non-2xx API responses — hint for token-gated (Pattern D). */
|
|
73
|
+
auth_failures: number;
|
|
74
|
+
}
|
|
75
|
+
export declare function scoreEndpointEvidence(entry: PageSignals['networkEntries'][number]): EndpointEvidence;
|
|
76
|
+
export declare function scoreNetworkEvidence(signals: PageSignals): EndpointEvidence[];
|
|
77
|
+
/**
|
|
78
|
+
* Apply the decision tree from `site-recon.md` mechanically.
|
|
79
|
+
*
|
|
80
|
+
* B beats A when initial-state globals are present: even if the page fetches
|
|
81
|
+
* more data via XHR afterwards, the SSR payload is the highest-leverage source.
|
|
82
|
+
* D (token-gated) dominates when we see 401/403 on what looks like API
|
|
83
|
+
* endpoints — without that, an authenticated route looks identical to A.
|
|
84
|
+
*/
|
|
85
|
+
export declare function classifyPattern(signals: PageSignals): PatternVerdict;
|
|
86
|
+
export interface NearestAdapter {
|
|
87
|
+
site: string;
|
|
88
|
+
example_commands: string[];
|
|
89
|
+
reason: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Find existing adapters that target the same site.
|
|
93
|
+
*
|
|
94
|
+
* Keep the hostname match simple — agents extend naming conventions
|
|
95
|
+
* differently per site, so we match on the registered `domain` field and fall
|
|
96
|
+
* back to site-name containment. Returning `null` is fine; agents can always
|
|
97
|
+
* read site-memory docs.
|
|
98
|
+
*/
|
|
99
|
+
export declare function findNearestAdapter(finalUrl: string, registry: Map<string, CliCommand>): NearestAdapter | null;
|
|
100
|
+
export interface AnalyzeReport {
|
|
101
|
+
requested_url: string;
|
|
102
|
+
final_url: string;
|
|
103
|
+
title: string;
|
|
104
|
+
pattern: PatternVerdict;
|
|
105
|
+
anti_bot: AntiBotVerdict;
|
|
106
|
+
initial_state: PageSignals['initialState'];
|
|
107
|
+
api_candidates: EndpointEvidence[];
|
|
108
|
+
nearest_adapter: NearestAdapter | null;
|
|
109
|
+
recommended_next_step: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Synthesize the verdict from collected signals + registry.
|
|
113
|
+
*
|
|
114
|
+
* The `recommended_next_step` is deliberately a single imperative
|
|
115
|
+
* sentence — agents act on it directly instead of re-deriving advice from
|
|
116
|
+
* the structured fields.
|
|
117
|
+
*/
|
|
118
|
+
export declare function analyzeSite(signals: PageSignals, registry: Map<string, CliCommand>): AnalyzeReport;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const H=[{vendor:"aliyun_waf",cookiePatterns:[/^acw_sc__v2$/,/^acw_tc$/,/^ssxmod_itna/],bodyPatterns:[/arg1\s*=\s*['"][0-9A-F]{30,}/,/\/ntc_captcha\//i],implication:"Direct Node-side fetch/curl will return the slider HTML. Validate the endpoint in browser context first; HTML COOKIE adapters still finish with Node-side fetch + page.getCookies."},{vendor:"cloudflare",cookiePatterns:[/^__cf_bm$/,/^cf_clearance$/,/^__cfduid$/],bodyPatterns:[/Cloudflare Ray ID/i,/Checking your browser before accessing/i,/cf-chl-/i],implication:"Cloudflare bot check. Start from a real browser session; probe in browser context first. HTML COOKIE adapters still finish with Node-side fetch + page.getCookies."},{vendor:"akamai",cookiePatterns:[/^_abck$/,/^bm_sz$/,/^bm_sv$/],bodyPatterns:[/akamai/i],implication:"Akamai Bot Manager. Probe in browser context first; keep final HTML COOKIE adapters on Node-side fetch + page.getCookies."},{vendor:"geetest",cookiePatterns:[],bodyPatterns:[/geetest/i,/gt_captcha/i],implication:"Geetest slider/puzzle captcha. Agent cannot bypass programmatically — requires UI strategy or human-in-loop."}];export function detectAntiBot(q){const M=[];let Q=null;for(const V of H){const Z=[];for(const $ of V.cookiePatterns){const X=q.cookieNames.find((O)=>$.test(O));if(X)Z.push(`cookie:${X}`)}for(const $ of V.bodyPatterns)for(const X of q.networkEntries)if(X.bodyPreview&&$.test(X.bodyPreview)){Z.push(`body:${X.url}`);break}if(Z.length>0&&!Q){Q=V;M.push(...Z)}}if(!Q)return{detected:!1,vendor:null,evidence:[],implication:"No known anti-bot signatures. Try Node-side COOKIE fetch first; if endpoint validation is blocked, retry from browser context."};return{detected:!0,vendor:Q.vendor,evidence:M,implication:Q.implication}}const I=/(?:analytics|beacon|collect|telemetry|tracking|sentry|doubleclick|google-analytics|googletagmanager|adservice|\/ads?(?:[/?#]|$)|metrics?|pixel|personalization|experiment|\/events?(?:[/?#]|$))/i,U=/^(?:data|items?|results?|records?|list|rows?|edges?|nodes?|timeline|users?|title|name|text|content|body|price|amount|id|url|avatar|nickname|desc|comments?|likes?|shares?|total|page|cursor|next|rank|score|date|time|author)$/i,B=/^(?:event|events|trace|traceid|sessionid|clientid|visitorid|experiment|abtest|beacon|analytics|metrics?|pixel|log|logs)$/i;function P(q){return Math.max(0,Math.min(1,Math.round(q*100)/100))}function R(q){if(!q)return null;const M=q.trim();if(!M)return null;try{return JSON.parse(M)}catch{return M}}function Y(q,M="$",Q=[],V=0){if(V>4||Q.length>=24)return Q;if(Array.isArray(q)){Q.push(`${M}:array(${q.length})`);if(q.length>0)Y(q[0],`${M}[0]`,Q,V+1);return Q}if(!q||typeof q!=="object"){Q.push(`${M}:${typeof q}`);return Q}const Z=Object.entries(q).slice(0,12);for(const[$,X]of Z){Q.push(`${M}.${$}`);if(Array.isArray(X))Q.push(`${M}.${$}:array(${X.length})`);else if(X&&typeof X==="object")Y(X,`${M}.${$}`,Q,V+1);else Q.push(`${M}.${$}:${typeof X}`)}return Q}function G(q,M,Q=0){if(Q>4||!q||typeof q!=="object")return 0;if(Array.isArray(q))return q.slice(0,3).reduce((V,Z)=>V+G(Z,M,Q+1),0);return Object.entries(q).reduce((V,[Z,$])=>V+(M(Z)?1:0)+G($,M,Q+1),0)}function T(q,M=0){if(M>4||!q||typeof q!=="object")return!1;if(Array.isArray(q))return q.length>0;return Object.values(q).some((Q)=>T(Q,M+1))}export function scoreEndpointEvidence(q){const M=[],Q=R(q.bodyPreview);let V=0;if(q.status>=200&&q.status<300){V+=0.15;M.push("2xx status")}else if(q.status===401||q.status===403)return{url:q.url,status:q.status,contentType:q.contentType,real_data_score:0.05,verdict:"blocked",reasons:["auth-blocked status"],sample_paths:[]};else M.push(`non-2xx status ${q.status}`);if(/json/i.test(q.contentType)){V+=0.2;M.push("json content-type")}else if(/html/i.test(q.contentType)){V-=0.25;M.push("html content-type")}else if(/javascript|text/i.test(q.contentType)){V+=0.05;M.push("text/script content-type")}if(I.test(q.url)){V-=0.3;M.push("telemetry-like url")}const Z=Y(Q).slice(0,8);if(typeof Q==="string"){if(/^\s*</.test(Q)||/<!doctype html|<html/i.test(Q)){V-=0.25;M.push("html body")}else if(Q.trim().length>20){V+=0.05;M.push("non-empty text body")}}else if(Array.isArray(Q))if(Q.length>0){V+=0.3;M.push("non-empty top-level array")}else{V-=0.15;M.push("empty array")}else if(Q&&typeof Q==="object"){if(Object.keys(Q).length===0){V-=0.15;M.push("empty object")}else{V+=0.12;M.push("json object body")}const L=G(Q,(W)=>U.test(W));if(L>0){V+=Math.min(0.3,L*0.05);M.push(`${L} business-like key${L===1?"":"s"}`)}if(T(Q)){V+=0.2;M.push("nested non-empty array")}const z=G(Q,(W)=>B.test(W));if(z>0&&L===0){V-=Math.min(0.25,z*0.08);M.push(`${z} tracking-like key${z===1?"":"s"} without business keys`)}}const $=P(V),X=$>=0.65?"likely_data":$>=0.35?"maybe_data":"noise";return{url:q.url,status:q.status,contentType:q.contentType,real_data_score:$,verdict:X,reasons:M,sample_paths:Z}}export function scoreNetworkEvidence(q){return q.networkEntries.map(scoreEndpointEvidence).filter((M)=>M.verdict!=="noise"||M.real_data_score>0).sort((M,Q)=>Q.real_data_score-M.real_data_score).slice(0,8)}export function classifyPattern(q){const M=q.networkEntries.filter((X)=>/json/i.test(X.contentType)),V=scoreNetworkEvidence(q).filter((X)=>X.verdict==="likely_data"||X.verdict==="maybe_data").length,Z=q.networkEntries.filter((X)=>X.status===401||X.status===403).length,$=q.initialState.__INITIAL_STATE__||q.initialState.__NUXT__||q.initialState.__NEXT_DATA__||q.initialState.__APOLLO_STATE__;if(Z>=2&&M.length>=1)return{pattern:"D",reason:`${Z} auth-failing API responses seen — endpoint is token-gated`,json_responses:M.length,real_data_candidates:V,auth_failures:Z};if($)return{pattern:"B",reason:`SSR state global present: ${Object.entries(q.initialState).filter(([,O])=>O).map(([O])=>O).join(", ")}`,json_responses:M.length,real_data_candidates:V,auth_failures:Z};if(V>=1)return{pattern:"A",reason:`${V} captured response${V===1?"":"s"} look like real data — inspect api_candidates before choosing a strategy`,json_responses:M.length,real_data_candidates:V,auth_failures:Z};return{pattern:"C",reason:M.length>0?`${M.length} JSON response${M.length===1?"":"s"} observed, but none look like target data — likely telemetry/side-channel; treat as HTML/DOM until an endpoint validates`:"No JSON XHR and no SSR state — HTML scrape (Pattern C); escalate to E manually if WebSocket traffic appears",json_responses:M.length,real_data_candidates:V,auth_failures:Z}}export function findNearestAdapter(q,M){let Q;try{Q=new URL(q).hostname}catch{return null}const V=Q.replace(/^www\./,""),Z=V.split("."),$=Z.slice(-2).join("."),X=Z.length>1?Z[Z.length-2]:V,O=new Map;for(const z of M.values()){const W=z.domain?.toLowerCase();if(W&&(V.endsWith(W)||W.endsWith($))||z.site.toLowerCase()===X?.toLowerCase()||V.includes(z.site.toLowerCase())){const J=O.get(z.site)??[];J.push(z);O.set(z.site,J)}}if(O.size===0)return null;let L=null;for(const z of O)if(!L||z[1].length>L[1].length)L=z;if(!L)return null;return{site:L[0],example_commands:L[1].slice(0,5).map((z)=>`${z.site} ${z.name}`),reason:`${L[1].length} existing adapter${L[1].length===1?"":"s"} target this site — reuse strategy/cookie config`}}export function analyzeSite(q,M){const Q=classifyPattern(q),V=detectAntiBot(q),Z=scoreNetworkEvidence(q),$=findNearestAdapter(q.finalUrl,M);let X;if(V.detected)X=V.implication;else if(Q.pattern==="A")X="Inspect `api_candidates`, then replay the best endpoint and record the status/content-type/sample shape in your strategy note; do not choose API strategy from XHR count alone.";else if(Q.pattern==="B")X='Read the SSR global via `opencli browser eval "JSON.stringify(window.__INITIAL_STATE__ ?? window.__NUXT__ ?? window.__NEXT_DATA__ ?? window.__APOLLO_STATE__)"` — no API needed.';else if(Q.pattern==="C")X="No API visible — use SSR HTML scrape (e.g. `opencli browser extract`) against the rendered page.";else if(Q.pattern==="D")X="Endpoints need auth. Re-open the page from a signed-in session, then retry analyze; see `field-decode-playbook` §4 for token tracing.";else if(Q.pattern==="E")X="WebSocket stream detected — find the underlying HTTP poll/long-poll endpoint; raw WS is not supported.";else X="No strong signal. Manually inspect `opencli browser network --all` and pick a pattern.";return{requested_url:q.requestedUrl,final_url:q.finalUrl,title:q.title,pattern:Q,anti_bot:V,initial_state:q.initialState,api_candidates:Z,nearest_adapter:$,recommended_next_step:X}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Article extraction via Readability — generic `page → article HTML` pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Complements `src/browser/extract.ts`: that one takes a caller-supplied
|
|
5
|
+
* selector. This one works with zero configuration on arbitrary article pages
|
|
6
|
+
* (blogs, news, docs) by running `@mozilla/readability` inside the page
|
|
7
|
+
* context via CDP evaluate.
|
|
8
|
+
*
|
|
9
|
+
* Pipeline:
|
|
10
|
+
* 1. Short-circuit non-HTML documents (`text/plain`, JSON, XML) — a page
|
|
11
|
+
* renderer wrapping a plain-text file would pollute the DOM pipeline.
|
|
12
|
+
* 2. Short-circuit the "body is a single <pre>" case, which browsers use
|
|
13
|
+
* when loading *.txt / *.md over file:// or raw.githubusercontent.com.
|
|
14
|
+
* 3. Deep-clone the document, apply caller-supplied `cleanSelectors` to the
|
|
15
|
+
* clone (preserves live page state for subsequent snapshot/click).
|
|
16
|
+
* 4. Inject Readability + isProbablyReaderable sources into the page,
|
|
17
|
+
* parse on the clone. `isProbablyReaderable` gates the parse unless
|
|
18
|
+
* `force: true`.
|
|
19
|
+
* 5. On Readability miss, walk a fallback selector chain
|
|
20
|
+
* (main → [role="main"] → #main-content → … → body) and return the
|
|
21
|
+
* first root with >80 characters of text.
|
|
22
|
+
*
|
|
23
|
+
* Readability runs in the page's own window because it needs real DOM APIs
|
|
24
|
+
* (getComputedStyle, treeWalker). Running it Node-side would require jsdom —
|
|
25
|
+
* a heavy dep the rest of OpenCLI doesn't need.
|
|
26
|
+
*/
|
|
27
|
+
export interface ExtractArticleOptions {
|
|
28
|
+
/** CSS selectors removed from the cloned document before Readability runs. */
|
|
29
|
+
cleanSelectors?: string[];
|
|
30
|
+
/** Fallback chain when Readability fails. Defaults to the common structural ids. */
|
|
31
|
+
fallbackSelectors?: string[];
|
|
32
|
+
/** Bypass `isProbablyReaderable` and always attempt a parse. */
|
|
33
|
+
force?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export type ExtractSource = 'readability' | 'fallback' | 'raw-text' | 'pre';
|
|
36
|
+
export interface ExtractedArticle {
|
|
37
|
+
html: string;
|
|
38
|
+
title: string;
|
|
39
|
+
byline?: string;
|
|
40
|
+
publishedTime?: string;
|
|
41
|
+
siteName?: string;
|
|
42
|
+
source: ExtractSource;
|
|
43
|
+
}
|
|
44
|
+
export declare const DEFAULT_FALLBACK_SELECTORS: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Build the JS expression evaluated in-page to extract the article. Exported
|
|
47
|
+
* for testability — callers on the host side should use `extractArticle`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildExtractArticleJs(options?: ExtractArticleOptions): string;
|
|
50
|
+
export interface PageLike {
|
|
51
|
+
evaluate(js: string): Promise<unknown>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Run the extract pipeline on the given page. Returns `null` when no usable
|
|
55
|
+
* content is found (Readability miss + empty fallback chain).
|
|
56
|
+
*/
|
|
57
|
+
export declare function extractArticle(page: PageLike, options?: ExtractArticleOptions): Promise<ExtractedArticle | null>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as j from"node:fs";import{createRequire as O}from"node:module";const v=O(import.meta.url);let Y=null;function U(){if(Y)return Y;const Q=v.resolve("@mozilla/readability/Readability.js"),V=v.resolve("@mozilla/readability/Readability-readerable.js");Y={readability:j.readFileSync(Q,"utf8"),readerable:j.readFileSync(V,"utf8")};return Y}export const DEFAULT_FALLBACK_SELECTORS=["main",'[role="main"]',"#main-content","#main","#content",".content","article","body"];const X=80;export function buildExtractArticleJs(Q={}){const{readability:V,readerable:Z}=U(),W=Q.cleanSelectors??[],z=Q.fallbackSelectors??DEFAULT_FALLBACK_SELECTORS,$=!!Q.force,D=JSON.stringify(V),G=JSON.stringify(Z),I=JSON.stringify(W),J=JSON.stringify(z),M=JSON.stringify($);return["(() => {"," const cleanSelectors = "+I+";"," const fallbackSelectors = "+J+";"," const force = "+M+";"," const minFallbackText = "+X+";"," const readabilitySrc = "+D+";"," const readerableSrc = "+G+";",""," function escapeHtml(s) {",' return String(s).replace(/[&<>]/g, c => ({ "&": "&", "<": "<", ">": ">" }[c]));'," }",""," // Short-circuit 1: non-HTML document",' const ct = document.contentType || "";',' if (ct && ct !== "text/html" && ct !== "application/xhtml+xml") {',' const body = document.body ? (document.body.textContent || "") : "";',' return { source: "raw-text", html: "<pre>" + escapeHtml(body) + "</pre>", title: document.title || "" };'," }",""," // Short-circuit 2: body is a single <pre>"," if (document.body) {"," const kids = document.body.children;",' if (kids.length === 1 && kids[0] && kids[0].tagName === "PRE") {',' return { source: "pre", html: document.body.outerHTML, title: document.title || "" };'," }"," }",""," // Deep-clone + adapter-supplied dirty-node removal"," const cloneDoc = document.cloneNode(true);"," for (const sel of cleanSelectors) {"," try { for (const n of cloneDoc.querySelectorAll(sel)) n.remove(); }"," catch (e) { /* ignore invalid selector */ }"," }",""," // Inject Readability into an isolated Function scope and extract the"," // constructors we need. Library sources use their own module.exports",' // guard (if typeof module === "object"), which is falsy here.'," const libs = (new Function(",' readabilitySrc + "\\n" + readerableSrc + "\\nreturn {" +',' " Readability: typeof Readability !== \\"undefined\\" ? Readability : null," +',' " isProbablyReaderable: typeof isProbablyReaderable !== \\"undefined\\" ? isProbablyReaderable : null" +',' " };"'," ))();"," const Readability = libs.Readability;"," const isProbablyReaderable = libs.isProbablyReaderable;","",' const readerableOk = force || (typeof isProbablyReaderable === "function" ? isProbablyReaderable(cloneDoc) : true);'," let article = null;",' if (readerableOk && typeof Readability === "function") {'," try { article = new Readability(cloneDoc).parse(); } catch (e) { article = null; }"," }"," if (article && article.content) {"," return {",' source: "readability",'," html: article.content,",' title: article.title || document.title || "",'," byline: article.byline || undefined,"," publishedTime: article.publishedTime || undefined,"," siteName: article.siteName || undefined,"," };"," }",""," // Fallback chain"," for (const sel of fallbackSelectors) {"," let el = null;"," try { el = cloneDoc.querySelector(sel); } catch (e) { continue; }"," if (!el) continue;",' const text = (el.textContent || "").trim();'," if (text.length < minFallbackText) continue;",' return { source: "fallback", html: el.outerHTML, title: document.title || "" };'," }",""," return null;","})()"].join(`
|
|
2
|
+
`)}export async function extractArticle(Q,V={}){const Z=buildExtractArticleJs(V),W=await Q.evaluate(Z);if(W==null||typeof W!=="object")return null;const z=W;if(typeof z.html!=="string"||typeof z.source!=="string")return null;const $=z.source;return{html:z.html,title:typeof z.title==="string"?z.title:"",...z.byline&&{byline:z.byline},...z.publishedTime&&{publishedTime:z.publishedTime},...z.siteName&&{siteName:z.siteName},source:$}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AX-backed browser snapshot prototype.
|
|
3
|
+
*
|
|
4
|
+
* This is intentionally additive to the current DOM snapshot. It learns from
|
|
5
|
+
* agent-browser's accessibility-tree refs without changing default `state`
|
|
6
|
+
* output until the AX path proves itself on fixtures and real SaaS workflows.
|
|
7
|
+
*/
|
|
8
|
+
export interface BrowserRef {
|
|
9
|
+
ref: string;
|
|
10
|
+
backendNodeId?: number;
|
|
11
|
+
role: string;
|
|
12
|
+
name: string;
|
|
13
|
+
nth?: number;
|
|
14
|
+
frame?: {
|
|
15
|
+
frameId?: string;
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
targetUrl?: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface AxSnapshotTree {
|
|
22
|
+
tree: unknown;
|
|
23
|
+
frame?: BrowserRef['frame'];
|
|
24
|
+
}
|
|
25
|
+
export interface AxSnapshotBuildResult {
|
|
26
|
+
text: string;
|
|
27
|
+
refs: Map<string, BrowserRef>;
|
|
28
|
+
}
|
|
29
|
+
export declare function buildAxSnapshot(axTree: unknown, opts?: {
|
|
30
|
+
maxDepth?: number;
|
|
31
|
+
interactiveOnly?: boolean;
|
|
32
|
+
}): AxSnapshotBuildResult;
|
|
33
|
+
export declare function buildAxSnapshotFromTrees(trees: AxSnapshotTree[], opts?: {
|
|
34
|
+
maxDepth?: number;
|
|
35
|
+
interactiveOnly?: boolean;
|
|
36
|
+
}): AxSnapshotBuildResult;
|
|
37
|
+
export declare function findAxRefReplacement(axTree: unknown, ref: BrowserRef): BrowserRef | null;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const _=new Set(["button","link","textbox","searchbox","checkbox","radio","combobox","listbox","menuitem","menuitemcheckbox","menuitemradio","option","slider","spinbutton","switch","tab","treeitem"]),T=new Set(["article","cell","columnheader","gridcell","heading","listitem","main","navigation","region","rowheader"]),j=new Set(["generic","group","list","none","presentation","RootWebArea","WebArea"]);export function buildAxSnapshot(n,e={}){return buildAxSnapshotFromTrees([{tree:n}],e)}export function buildAxSnapshotFromTrees(n,e={}){const r=["source: ax","---"],i=new Map;let o=1;for(const[s,a]of n.entries()){if(s>0){const d=a.frame?.url?JSON.stringify(a.frame.url):JSON.stringify(a.frame?.frameId??`frame:${s}`);r.push(`frame ${d}:`)}o=U(a.tree,r,i,o,{...e,frame:a.frame,baseDepth:s>0?1:0})}r.push("---");r.push(`interactive: ${i.size}`);return{text:r.join(`
|
|
2
|
+
`),refs:i}}function U(n,e,r,i,o){const a=(Array.isArray(n?.nodes)?n.nodes:[]).filter((t)=>t&&!t.ignored),d=new Map,S=new Set;for(const t of a){if(typeof t.nodeId==="string")d.set(t.nodeId,t);for(const f of t.childIds??[])S.add(f)}const J=a.filter((t)=>{if(!t.nodeId)return!1;const f=c(t.role);return!S.has(t.nodeId)||f==="RootWebArea"||f==="WebArea"})[0]??a[0],L=Math.max(1,Math.min(Number(o.maxDepth)||50,200)),W=X(a),N=new Map;function I(t,f){if(!t||f>L)return!1;const h=c(t.role)||"generic",u=b(c(t.name)),m=b(c(t.value)||p(t,"value")),V=p(t,"disabled"),w=p(t,"checked"),k=p(t,"expanded"),A=p(t,"selected"),O=E(h,u,t.backendDOMNodeId),$=O||!!u||!!m||T.has(h)||!o.interactiveOnly&&!j.has(h),M=e.length;let R=!1;for(const g of t.childIds??[])if(I(d.get(g),f+1))R=!0;if(!$&&!R){e.length=M;return!1}if($){const g=" ".repeat(f),l=[];let v="";if(O){const x=String(i++);v=`[${x}]`;const y=C(h,u),D=N.get(y)??0;N.set(y,D+1);r.set(x,{ref:x,backendNodeId:t.backendDOMNodeId,role:h,name:u,...W.get(y)>1?{nth:D}:{},...o.frame?{frame:o.frame}:{}})}if(u)l.push(JSON.stringify(u));if(m&&m!==u)l.push(`value=${JSON.stringify(m)}`);if(w)l.push(`checked=${w}`);if(k)l.push(`expanded=${k}`);if(A)l.push(`selected=${A}`);if(V==="true")l.push("disabled");e.splice(M,0,`${g}${v}${h}${l.length?` ${l.join(" ")}`:""}`)}return!0}I(J,o.baseDepth);return i}export function findAxRefReplacement(n,e){const r=Array.isArray(n?.nodes)?n.nodes:[],i=e.nth??0;let o=0;for(const s of r){if(!s||s.ignored)continue;const a=c(s.role),d=b(c(s.name));if(a!==e.role||d!==e.name)continue;if(o===i){if(typeof s.backendDOMNodeId!=="number")return null;return{...e,backendNodeId:s.backendDOMNodeId}}o++}return null}function E(n,e,r){if(typeof r!=="number")return!1;if(_.has(n))return!0;return T.has(n)&&!!e}function X(n){const e=new Map;for(const r of n){if(!r||r.ignored)continue;const i=c(r.role),o=b(c(r.name));if(!E(i,o,r.backendDOMNodeId))continue;const s=C(i,o);e.set(s,(e.get(s)??0)+1)}return e}function C(n,e){return`${n}\x00${e}`}function c(n){const e=n?.value;if(typeof e==="string")return e;if(typeof e==="number"||typeof e==="boolean")return String(e);return""}function p(n,e){const r=n.properties?.find((i)=>i.name===e);return c(r?.value)}function b(n){return n.replace(/\s+/g," ").trim().slice(0,160)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BasePage — shared IPage method implementations for DOM helpers.
|
|
3
|
+
*
|
|
4
|
+
* Both Page (daemon-backed) and CDPPage (direct CDP) execute JS the same way
|
|
5
|
+
* for DOM operations. This base class deduplicates ~200 lines of identical
|
|
6
|
+
* click/type/scroll/wait/snapshot/interceptor methods.
|
|
7
|
+
*
|
|
8
|
+
* Subclasses implement the transport-specific methods: goto, evaluate,
|
|
9
|
+
* getCookies, screenshot, tabs, etc.
|
|
10
|
+
*/
|
|
11
|
+
import type { BrowserCookie, BrowserEvaluateFunction, FetchJsonOptions, IPage, ScreenshotOptions, SnapshotOptions, WaitOptions } from '../types.js';
|
|
12
|
+
import { type ResolveOptions, type TargetMatchLevel } from './target-resolver.js';
|
|
13
|
+
export interface ResolveSuccess {
|
|
14
|
+
matches_n: number;
|
|
15
|
+
/**
|
|
16
|
+
* Cascading stale-ref tier the resolver traversed. Callers surface this to
|
|
17
|
+
* agents so `stable` / `reidentified` hits are visibly distinct from a
|
|
18
|
+
* clean `exact` match — the page changed, the action still succeeded.
|
|
19
|
+
*/
|
|
20
|
+
match_level: TargetMatchLevel;
|
|
21
|
+
}
|
|
22
|
+
export interface FillTextResult extends ResolveSuccess {
|
|
23
|
+
filled: boolean;
|
|
24
|
+
verified: boolean;
|
|
25
|
+
expected: string;
|
|
26
|
+
actual: string;
|
|
27
|
+
length: number;
|
|
28
|
+
mode?: 'input' | 'textarea' | 'contenteditable';
|
|
29
|
+
}
|
|
30
|
+
export interface SetCheckedResult extends ResolveSuccess {
|
|
31
|
+
checked: boolean;
|
|
32
|
+
changed: boolean;
|
|
33
|
+
kind?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface UploadFilesResult extends ResolveSuccess {
|
|
36
|
+
uploaded: boolean;
|
|
37
|
+
files: number;
|
|
38
|
+
file_names: string[];
|
|
39
|
+
target: string;
|
|
40
|
+
multiple?: boolean;
|
|
41
|
+
accept?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface DragResult {
|
|
44
|
+
dragged: boolean;
|
|
45
|
+
source: string;
|
|
46
|
+
target: string;
|
|
47
|
+
source_matches_n: number;
|
|
48
|
+
target_matches_n: number;
|
|
49
|
+
source_match_level: TargetMatchLevel;
|
|
50
|
+
target_match_level: TargetMatchLevel;
|
|
51
|
+
}
|
|
52
|
+
export declare abstract class BasePage implements IPage {
|
|
53
|
+
protected _lastUrl: string | null;
|
|
54
|
+
/** Cached previous snapshot hashes for incremental diff marking */
|
|
55
|
+
private _prevSnapshotHashes;
|
|
56
|
+
private _cdpTargetMarkerSeq;
|
|
57
|
+
private _axRefs;
|
|
58
|
+
abstract goto(url: string, options?: {
|
|
59
|
+
waitUntil?: 'load' | 'none';
|
|
60
|
+
settleMs?: number;
|
|
61
|
+
allowBoundNavigation?: boolean;
|
|
62
|
+
}): Promise<void>;
|
|
63
|
+
abstract evaluate<T = unknown>(js: string): Promise<T>;
|
|
64
|
+
abstract evaluate<Args extends unknown[], T>(fn: BrowserEvaluateFunction<Args, T>, ...args: Args): Promise<Awaited<T>>;
|
|
65
|
+
/**
|
|
66
|
+
* Safely evaluate JS with pre-serialized arguments.
|
|
67
|
+
* Each key in `args` becomes a `const` declaration with JSON-serialized value,
|
|
68
|
+
* wrapped in a lexical block to avoid polluting the global execution context.
|
|
69
|
+
*
|
|
70
|
+
* Why a block: Chrome's Runtime.evaluate shares a single global context per page.
|
|
71
|
+
* Top-level `const` declarations persist across calls, so re-declaring the same
|
|
72
|
+
* variable name (e.g. `markerAttr` in both click resolution and file upload)
|
|
73
|
+
* throws "SyntaxError: Identifier has already been declared". A block keeps
|
|
74
|
+
* the args scoped without forcing callers to pass expression-only code.
|
|
75
|
+
*
|
|
76
|
+
* Usage:
|
|
77
|
+
* page.evaluateWithArgs(`(async () => { return sym; })()`, { sym: userInput })
|
|
78
|
+
*/
|
|
79
|
+
evaluateWithArgs(js: string, args: Record<string, unknown>): Promise<unknown>;
|
|
80
|
+
fetchJson(url: string, opts?: FetchJsonOptions): Promise<unknown>;
|
|
81
|
+
abstract getCookies(opts?: {
|
|
82
|
+
domain?: string;
|
|
83
|
+
url?: string;
|
|
84
|
+
}): Promise<BrowserCookie[]>;
|
|
85
|
+
abstract screenshot(options?: ScreenshotOptions): Promise<string>;
|
|
86
|
+
annotatedScreenshot(options?: ScreenshotOptions): Promise<string>;
|
|
87
|
+
abstract tabs(): Promise<unknown[]>;
|
|
88
|
+
abstract selectTab(target: number | string): Promise<void>;
|
|
89
|
+
click(ref: string, opts?: ResolveOptions): Promise<ResolveSuccess>;
|
|
90
|
+
/** Uses native CDP click support when the concrete page exposes it. */
|
|
91
|
+
protected tryNativeClick(x: number, y: number): Promise<boolean>;
|
|
92
|
+
protected tryNativeMouseMove(x: number, y: number): Promise<boolean>;
|
|
93
|
+
protected tryNativeDoubleClick(x: number, y: number): Promise<boolean>;
|
|
94
|
+
protected tryNativeDrag(from: {
|
|
95
|
+
x: number;
|
|
96
|
+
y: number;
|
|
97
|
+
}, to: {
|
|
98
|
+
x: number;
|
|
99
|
+
y: number;
|
|
100
|
+
}): Promise<boolean>;
|
|
101
|
+
protected tryClickAxRef(ref: string): Promise<ResolveSuccess | null>;
|
|
102
|
+
private resolveAxRefPoint;
|
|
103
|
+
private axBoxCenter;
|
|
104
|
+
/** Uses native CDP text insertion when the concrete page exposes it. */
|
|
105
|
+
protected tryNativeType(text: string): Promise<boolean>;
|
|
106
|
+
/** Uses native CDP key events when the concrete page exposes them. */
|
|
107
|
+
protected tryNativeKeyPress(key: string, modifiers: string[]): Promise<boolean>;
|
|
108
|
+
protected isResolvedFocused(): Promise<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* Run a DOM-domain CDP command against `window.__resolved`.
|
|
111
|
+
*
|
|
112
|
+
* CDP DOM.focus / DOM.scrollIntoViewIfNeeded need a nodeId, while our
|
|
113
|
+
* resolver stores the live Element in page JS. Bridge the two worlds with a
|
|
114
|
+
* short-lived marker attribute, then query it through CDP.
|
|
115
|
+
*/
|
|
116
|
+
protected tryCdpOnResolvedElement(method: 'DOM.focus' | 'DOM.scrollIntoViewIfNeeded'): Promise<boolean>;
|
|
117
|
+
typeText(ref: string, text: string, opts?: ResolveOptions): Promise<ResolveSuccess>;
|
|
118
|
+
hover(ref: string, opts?: ResolveOptions): Promise<ResolveSuccess>;
|
|
119
|
+
focus(ref: string, opts?: ResolveOptions): Promise<ResolveSuccess & {
|
|
120
|
+
focused: boolean;
|
|
121
|
+
}>;
|
|
122
|
+
dblClick(ref: string, opts?: ResolveOptions): Promise<ResolveSuccess>;
|
|
123
|
+
private readCheckableState;
|
|
124
|
+
setChecked(ref: string, checked: boolean, opts?: ResolveOptions): Promise<SetCheckedResult>;
|
|
125
|
+
private setFileInputBySelector;
|
|
126
|
+
uploadFiles(ref: string, files: string[], opts?: ResolveOptions): Promise<UploadFilesResult>;
|
|
127
|
+
drag(source: string, target: string, opts?: {
|
|
128
|
+
from?: ResolveOptions;
|
|
129
|
+
to?: ResolveOptions;
|
|
130
|
+
}): Promise<DragResult>;
|
|
131
|
+
fillText(ref: string, text: string, opts?: ResolveOptions): Promise<FillTextResult>;
|
|
132
|
+
pressKey(key: string): Promise<void>;
|
|
133
|
+
scrollTo(ref: string, opts?: ResolveOptions): Promise<unknown>;
|
|
134
|
+
getFormState(): Promise<Record<string, unknown>>;
|
|
135
|
+
scroll(direction?: string, amount?: number): Promise<void>;
|
|
136
|
+
autoScroll(options?: {
|
|
137
|
+
times?: number;
|
|
138
|
+
delayMs?: number;
|
|
139
|
+
}): Promise<void>;
|
|
140
|
+
networkRequests(includeStatic?: boolean): Promise<unknown[]>;
|
|
141
|
+
consoleMessages(_level?: string): Promise<unknown[]>;
|
|
142
|
+
wait(options: number | WaitOptions): Promise<void>;
|
|
143
|
+
snapshot(opts?: SnapshotOptions): Promise<unknown>;
|
|
144
|
+
private collectAxSnapshotTrees;
|
|
145
|
+
getCurrentUrl(): Promise<string | null>;
|
|
146
|
+
installInterceptor(pattern: string): Promise<void>;
|
|
147
|
+
getInterceptedRequests(): Promise<unknown[]>;
|
|
148
|
+
waitForCapture(timeout?: number): Promise<void>;
|
|
149
|
+
/** Fallback basic snapshot */
|
|
150
|
+
protected _basicSnapshot(opts?: Pick<SnapshotOptions, 'interactive' | 'compact' | 'maxDepth' | 'raw'>): Promise<unknown>;
|
|
151
|
+
}
|