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,50 @@
|
|
|
1
|
+
import{cli as Z,Strategy as $}from"@jackwener/opencli/registry";import{CommandExecutionError as H}from"@jackwener/opencli/errors";import{DEEPSEEK_DOMAIN as h,MESSAGE_SELECTOR as F,TEXTAREA_SELECTOR as V,parseDeepSeekConversationId as G}from"./utils.js";export const sendCommand=Z({site:"deepseek",name:"send",access:"write",description:"Send a prompt to a specific DeepSeek conversation by ID, without waiting for a response",domain:h,strategy:$.COOKIE,browser:!0,siteSession:"persistent",navigateBefore:!1,args:[{name:"id",required:!0,positional:!0,help:"Conversation ID (UUID) or full /a/chat/s/<id> URL"},{name:"prompt",required:!0,positional:!0,help:"Prompt to send"},{name:"timeout",type:"int",required:!1,default:60,help:"Max seconds for the overall command (default: 60)"}],columns:["Status","InjectedText"],func:async(q,z)=>{const B=G(z.id),Q=z.prompt;await q.goto(`https://chat.deepseek.com/a/chat/s/${B}`);await J(q);if(!await q.evaluate(`(() => {
|
|
2
|
+
const box = document.querySelector('${V}');
|
|
3
|
+
if (!box) return false;
|
|
4
|
+
box.focus();
|
|
5
|
+
return document.activeElement === box;
|
|
6
|
+
})()`))throw new H("Could not focus DeepSeek textarea before native input");if(typeof q.nativeType!=="function")throw new H("Native CDP input is not available on this page object","deepseek send relies on Input.insertText; ensure the daemon and extension are up to date.");await q.nativeType(Q);await q.wait(0.6);const Y=JSON.stringify(Q),W=await q.evaluate(`(async () => {
|
|
7
|
+
const TEXTAREA = '${V}';
|
|
8
|
+
const MESSAGE = '${F}';
|
|
9
|
+
const expected = ${Y};
|
|
10
|
+
const isUser = (m) => m.className.split(/\\s+/).length > 2;
|
|
11
|
+
const box = document.querySelector(TEXTAREA);
|
|
12
|
+
if (!box) return { ok: false, reason: 'textarea not found' };
|
|
13
|
+
if ((box.value || '').trim() !== expected.trim()) {
|
|
14
|
+
return { ok: false, reason: 'native input did not populate textarea (got ' + JSON.stringify(box.value) + ')' };
|
|
15
|
+
}
|
|
16
|
+
let container = box.parentElement;
|
|
17
|
+
while (container && !container.querySelector('div[role="button"]')) {
|
|
18
|
+
container = container.parentElement;
|
|
19
|
+
}
|
|
20
|
+
const btns = container ? container.querySelectorAll('div[role="button"]:not(.ds-toggle-button)') : [];
|
|
21
|
+
const sendBtn = btns[btns.length - 1];
|
|
22
|
+
if (!sendBtn || sendBtn.querySelectorAll('svg').length === 0) {
|
|
23
|
+
return { ok: false, reason: 'send button not found' };
|
|
24
|
+
}
|
|
25
|
+
if (sendBtn.getAttribute('aria-disabled') !== 'false') {
|
|
26
|
+
return { ok: false, reason: 'send button stayed disabled after native input' };
|
|
27
|
+
}
|
|
28
|
+
sendBtn.click();
|
|
29
|
+
// Verify the prompt rendered as a user-class bubble that includes
|
|
30
|
+
// the expected text. Counting bubbles is unreliable under DeepSeek
|
|
31
|
+
// virtualization (the visible message list is windowed); a text
|
|
32
|
+
// match on any user bubble is the authoritative signal.
|
|
33
|
+
const matchesPrompt = (m) => isUser(m) && (m.innerText || '').trim().includes(expected);
|
|
34
|
+
const findUserBubble = () => Array.from(document.querySelectorAll(MESSAGE)).reverse().find(matchesPrompt);
|
|
35
|
+
let appeared = false;
|
|
36
|
+
for (let i = 0; i < 20 && !appeared; i++) {
|
|
37
|
+
await new Promise(r => setTimeout(r, 500));
|
|
38
|
+
if (findUserBubble()) appeared = true;
|
|
39
|
+
}
|
|
40
|
+
if (!appeared) return { ok: false, reason: 'prompt never rendered as a user bubble within 10s' };
|
|
41
|
+
// Settle: must still be present after 3s; an optimistic render
|
|
42
|
+
// that gets rolled back fails this check.
|
|
43
|
+
for (let i = 0; i < 3; i++) {
|
|
44
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
45
|
+
if (!findUserBubble()) {
|
|
46
|
+
return { ok: false, reason: 'prompt rendered then disappeared during the 3s settle window' };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { ok: true };
|
|
50
|
+
})()`).catch((U)=>{if(String(U?.message||U).includes("Promise was collected"))return{ok:!0};throw U});if(!W?.ok)throw new H(W?.reason||"Failed to send message");return[{Status:"Success",InjectedText:Q}]}});async function J(q){const z=`(() => !!document.querySelector('${V}'))()`;for(let B=0;B<10;B++){if(await q.evaluate(z))return;await q.wait(1)}throw new H("DeepSeek textarea did not mount within 10s; the conversation page may not have loaded")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as a,Strategy as s}from"@jackwener/opencli/registry";import{DEEPSEEK_DOMAIN as n,ensureOnDeepSeek as r,getPageState as o}from"./utils.js";export const statusCommand=a({site:"deepseek",name:"status",access:"read",description:"Check DeepSeek page availability and login state",domain:n,strategy:s.COOKIE,browser:!0,siteSession:"persistent",navigateBefore:!1,args:[],columns:["Status","Login","Url"],func:async(t)=>{await r(t);const e=await o(t);return[{Status:e.hasTextarea?"Connected":"Page not ready",Login:e.isLoggedIn?"Yes":"No",Url:e.url}]}});
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import{ArgumentError as F}from"@jackwener/opencli/errors";export const DEEPSEEK_DOMAIN="chat.deepseek.com",DEEPSEEK_URL="https://chat.deepseek.com/",TEXTAREA_SELECTOR='textarea[placeholder*="DeepSeek"]',MESSAGE_SELECTOR=".ds-message";const I=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;export function parseDeepSeekConversationId(q){const z=String(q??"").trim();if(!z)throw new F("id","must be a non-empty conversation ID or URL");const B=z.match(/\/a\/chat\/s\/([a-f0-9-]+)/i),Q=B?B[1]:z;if(!I.test(Q))throw new F("id",`not a valid DeepSeek conversation ID (got "${q}"); expected a UUID like "749e6bbd-6a45-4440-beaa-ae5238bf06d8" or a full /a/chat/s/<id> URL`);return Q.toLowerCase()}export async function isOnDeepSeek(q){const z=await q.evaluate("window.location.href").catch(()=>"");if(typeof z!=="string"||!z)return!1;try{const B=new URL(z).hostname;return B==="deepseek.com"||B.endsWith(".deepseek.com")}catch{return!1}}export async function ensureOnDeepSeek(q){if(await isOnDeepSeek(q))return!1;await q.goto(DEEPSEEK_URL);try{await q.wait({selector:TEXTAREA_SELECTOR,timeout:8})}catch{}return!0}export async function getPageState(q){return q.evaluate(`(() => {
|
|
2
|
+
const url = window.location.href;
|
|
3
|
+
const title = document.title;
|
|
4
|
+
const textarea = document.querySelector('${TEXTAREA_SELECTOR}');
|
|
5
|
+
const avatar = document.querySelector('img[src*="user-avatar"]');
|
|
6
|
+
return {
|
|
7
|
+
url,
|
|
8
|
+
title,
|
|
9
|
+
hasTextarea: !!textarea,
|
|
10
|
+
isLoggedIn: !!avatar,
|
|
11
|
+
};
|
|
12
|
+
})()`)}export async function selectModel(q,z){return q.evaluate(`(() => {
|
|
13
|
+
var radios = document.querySelectorAll('div[role="radio"]');
|
|
14
|
+
if (radios.length === 0) return { ok: false };
|
|
15
|
+
var name = '${z}'.toLowerCase();
|
|
16
|
+
var index = name === 'instant' ? 0 : name === 'expert' ? 1 : name === 'vision' ? 2 : -1;
|
|
17
|
+
if (index < 0 || index >= radios.length) return { ok: false };
|
|
18
|
+
var target = radios[index];
|
|
19
|
+
var alreadySelected = target.getAttribute('aria-checked') === 'true';
|
|
20
|
+
if (!alreadySelected) target.click();
|
|
21
|
+
return { ok: true, toggled: !alreadySelected };
|
|
22
|
+
})()`)}export async function setFeature(q,z,B){var Q=z==="DeepThink"?0:1;return q.evaluate(`(() => {
|
|
23
|
+
var toggles = Array.from(document.querySelectorAll('.ds-toggle-button'));
|
|
24
|
+
var btn = toggles[${Q}];
|
|
25
|
+
if (!btn) return { ok: false };
|
|
26
|
+
var isActive = btn.classList.contains('ds-toggle-button--selected');
|
|
27
|
+
if (${B} !== isActive) btn.click();
|
|
28
|
+
return { ok: true, toggled: ${B} !== isActive };
|
|
29
|
+
})()`)}export async function sendMessage(q,z){const B=JSON.stringify(z);return q.evaluate(`(async () => {
|
|
30
|
+
const box = document.querySelector('${TEXTAREA_SELECTOR}');
|
|
31
|
+
if (!box) return { ok: false, reason: 'textarea not found' };
|
|
32
|
+
|
|
33
|
+
box.focus();
|
|
34
|
+
box.value = '';
|
|
35
|
+
document.execCommand('selectAll');
|
|
36
|
+
document.execCommand('insertText', false, ${B});
|
|
37
|
+
await new Promise(r => setTimeout(r, 800));
|
|
38
|
+
|
|
39
|
+
// Find the send button: last non-toggle button in the textarea's container
|
|
40
|
+
var container = box.parentElement;
|
|
41
|
+
while (container && !container.querySelector('div[role="button"]')) {
|
|
42
|
+
container = container.parentElement;
|
|
43
|
+
}
|
|
44
|
+
if (container) {
|
|
45
|
+
var btns = container.querySelectorAll('div[role="button"]:not(.ds-toggle-button)');
|
|
46
|
+
var sendBtn = btns[btns.length - 1];
|
|
47
|
+
if (sendBtn && sendBtn.getAttribute('aria-disabled') === 'false'
|
|
48
|
+
&& sendBtn.querySelectorAll('svg').length > 0) {
|
|
49
|
+
sendBtn.click();
|
|
50
|
+
return { ok: true };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
box.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter', keyCode: 13, bubbles: true }));
|
|
55
|
+
return { ok: true, method: 'enter' };
|
|
56
|
+
})()`)}export async function getBubbleCount(q){return await q.evaluate(`(() => {
|
|
57
|
+
return document.querySelectorAll('${MESSAGE_SELECTOR}').length;
|
|
58
|
+
})()`)||0}export function parseThinkingResponse(q){if(!q)return null;const z=q.match(/^(Thought for ([\d.]+) seconds?|已思考(用时 ([\d.]+) 秒))\s*/);if(!z)return{response:q,thinking:null,thinking_time:null};const B=z[2]||z[3];return{response:"",thinking:q.slice(z[0].length).trim(),thinking_time:B}}export async function waitForResponse(q,z,B,Q,Z=!1){const Y=Date.now();let $="",J=0;while(Date.now()-Y<Q){await q.wait(3);let W;try{W=await q.evaluate(`(() => {
|
|
59
|
+
const bubbles = document.querySelectorAll('${MESSAGE_SELECTOR}');
|
|
60
|
+
const texts = Array.from(bubbles).map(b => (b.innerText || '').trim()).filter(Boolean);
|
|
61
|
+
var last = texts[texts.length - 1] || '';
|
|
62
|
+
|
|
63
|
+
// DOM-level thinking/response separation.
|
|
64
|
+
// DeepSeek renders thinking in a collapsible container with a
|
|
65
|
+
// distinct class (e.g. .ds-markdown--think or similar) and the
|
|
66
|
+
// final answer in the main .ds-markdown region. By querying
|
|
67
|
+
// these separately we avoid any text-heuristic split.
|
|
68
|
+
var thinkEl = null, answerEl = null, thinkTime = null;
|
|
69
|
+
if (${Z} && bubbles.length > 0) {
|
|
70
|
+
var lastBubble = bubbles[bubbles.length - 1];
|
|
71
|
+
// Thinking container — DeepSeek uses various class names;
|
|
72
|
+
// try common selectors.
|
|
73
|
+
thinkEl = lastBubble.querySelector('.ds-markdown--think')
|
|
74
|
+
|| lastBubble.querySelector('[class*="think"]');
|
|
75
|
+
// Final answer container — the main markdown block that is
|
|
76
|
+
// NOT the thinking section.
|
|
77
|
+
var markdownEls = lastBubble.querySelectorAll('.ds-markdown');
|
|
78
|
+
for (var i = 0; i < markdownEls.length; i++) {
|
|
79
|
+
if (markdownEls[i] !== thinkEl
|
|
80
|
+
&& !(thinkEl && thinkEl.contains(markdownEls[i]))
|
|
81
|
+
&& !markdownEls[i].classList.contains('ds-markdown--think')) {
|
|
82
|
+
answerEl = markdownEls[i];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Thinking time from the toggle/header element
|
|
86
|
+
var timeEl = lastBubble.querySelector('[class*="think"] ~ *')
|
|
87
|
+
|| lastBubble.querySelector('.ds-thinking-header');
|
|
88
|
+
if (!timeEl) {
|
|
89
|
+
// Fallback: parse from raw text header
|
|
90
|
+
var m = last.match(/^(?:Thought for ([\\d.]+) seconds?|已思考(用时 ([\\d.]+) 秒))/);
|
|
91
|
+
if (m) thinkTime = m[1] || m[2];
|
|
92
|
+
} else {
|
|
93
|
+
var tm = (timeEl.textContent || '').match(/([\\d.]+)/);
|
|
94
|
+
if (tm) thinkTime = tm[1];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
count: texts.length,
|
|
100
|
+
last: last,
|
|
101
|
+
// DOM-separated fields (null when not available)
|
|
102
|
+
thinkText: thinkEl ? (thinkEl.innerText || '').trim() : null,
|
|
103
|
+
answerText: answerEl ? (answerEl.innerText || '').trim() : null,
|
|
104
|
+
thinkTime: thinkTime,
|
|
105
|
+
};
|
|
106
|
+
})()`)}catch{continue}if(!W)continue;const j=W.last;if(j&&W.count>z&&j!==B.trim()){if(j===$){J++;if(J>=3){if(Z){if(W.thinkText!=null||W.answerText!=null)return{thinking:W.thinkText||"",response:W.answerText||"",thinking_time:W.thinkTime||null};return parseThinkingResponse(j)}return j}}else J=0;$=j}}if(Z&&$)return parseThinkingResponse($);return $||null}export async function getVisibleMessages(q){const z=await q.evaluate(`(() => {
|
|
107
|
+
const msgs = document.querySelectorAll('${MESSAGE_SELECTOR}');
|
|
108
|
+
return Array.from(msgs).map(m => {
|
|
109
|
+
// User messages carry an extra hash-class alongside ds-message
|
|
110
|
+
const isUser = m.className.split(/\\s+/).length > 2;
|
|
111
|
+
return {
|
|
112
|
+
Role: isUser ? 'user' : 'assistant',
|
|
113
|
+
Text: (m.innerText || '').trim(),
|
|
114
|
+
};
|
|
115
|
+
}).filter(m => m.Text);
|
|
116
|
+
})()`);return Array.isArray(z)?z:[]}export async function getConversationList(q){await ensureOnDeepSeek(q);await q.evaluate(`(() => {
|
|
117
|
+
if (document.querySelectorAll('a[href*="/a/chat/s/"]').length === 0) {
|
|
118
|
+
const btn = document.querySelector('div[tabindex="0"][role="button"]');
|
|
119
|
+
if (btn) btn.click();
|
|
120
|
+
}
|
|
121
|
+
})()`);for(let z=0;z<5;z++){await q.wait(2);const B=await q.evaluate(`(() => {
|
|
122
|
+
const items = [];
|
|
123
|
+
const links = document.querySelectorAll('a[href*="/a/chat/s/"]');
|
|
124
|
+
links.forEach((link, i) => {
|
|
125
|
+
const title = (link.innerText || '').trim().split('\\n')[0].trim();
|
|
126
|
+
const href = link.getAttribute('href') || '';
|
|
127
|
+
const idMatch = href.match(/\\/s\\/([a-f0-9-]+)/);
|
|
128
|
+
items.push({
|
|
129
|
+
Index: i + 1,
|
|
130
|
+
Id: idMatch ? idMatch[1] : href,
|
|
131
|
+
Title: title || '(untitled)',
|
|
132
|
+
Url: 'https://chat.deepseek.com' + href,
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
return items;
|
|
136
|
+
})()`);if(Array.isArray(B)&&B.length>0)return B}return[]}export async function pickResumeUrl(q){await q.evaluate(`(() => {
|
|
137
|
+
if (document.querySelectorAll('a[href*="/a/chat/s/"]').length === 0) {
|
|
138
|
+
const btn = document.querySelector('div[tabindex="0"][role="button"]');
|
|
139
|
+
if (btn) btn.click();
|
|
140
|
+
}
|
|
141
|
+
})()`);for(let z=0;z<5;z++){await q.wait(2);const B=await q.evaluate(`(() => {
|
|
142
|
+
const links = document.querySelectorAll('a[href*="/a/chat/s/"]');
|
|
143
|
+
if (links.length === 0) return null;
|
|
144
|
+
const PINNED_HEADER = /^\\s*(置\\s*顶|Pinned)\\s*$/i;
|
|
145
|
+
const isPinned = (link) => {
|
|
146
|
+
const section = link.parentElement;
|
|
147
|
+
const header = section && section.firstElementChild;
|
|
148
|
+
if (!header || header === link) return false;
|
|
149
|
+
return PINNED_HEADER.test((header.innerText || header.textContent || '').trim());
|
|
150
|
+
};
|
|
151
|
+
const target = Array.from(links).find((l) => !isPinned(l)) || links[0];
|
|
152
|
+
const href = target.getAttribute('href') || '';
|
|
153
|
+
return href ? 'https://chat.deepseek.com' + href : null;
|
|
154
|
+
})()`);if(B)return B}return null}async function G(q,z){for(let B=0;B<8;B++){await q.wait(2);if(await q.evaluate(`(() => {
|
|
155
|
+
var name = ${JSON.stringify(z)};
|
|
156
|
+
var hasFileName = Array.from(document.querySelectorAll('div'))
|
|
157
|
+
.some(function(el) { return el.children.length === 0 && (el.textContent || '').trim() === name; });
|
|
158
|
+
if (hasFileName) return true;
|
|
159
|
+
// Vision mode shows an image thumbnail, not filename text. Require
|
|
160
|
+
// a preview-like node here; send-button readiness is checked later.
|
|
161
|
+
var box = document.querySelector('${TEXTAREA_SELECTOR}');
|
|
162
|
+
if (!box) return false;
|
|
163
|
+
var c = box.parentElement;
|
|
164
|
+
while (c && !c.querySelector('div[role="button"]')) c = c.parentElement;
|
|
165
|
+
if (!c) return false;
|
|
166
|
+
return !!c.querySelector('img[src], canvas, video, [style*="background-image"], [class*="preview"], [class*="upload"]');
|
|
167
|
+
})()`))return!0}return!1}export async function sendWithFile(q,z,B){const Q=await import("node:fs"),Z=await import("node:path"),Y=Z.default.resolve(z);if(!Q.default.existsSync(Y))return{ok:!1,reason:`File not found: ${Y}`};const $=Q.default.statSync(Y);if($.size>104857600)return{ok:!1,reason:`File too large (${($.size/1024/1024).toFixed(1)} MB). Max: 100 MB`};const J=Z.default.basename(Y);await q.evaluate(`(() => {
|
|
168
|
+
if (document.querySelectorAll('a[href*="/a/chat/s/"]').length > 0) {
|
|
169
|
+
const btn = document.querySelector('div[tabindex="0"][role="button"]');
|
|
170
|
+
if (btn) btn.click();
|
|
171
|
+
}
|
|
172
|
+
})()`);await q.wait(0.5);let W=!1;if(q.setFileInput)try{await q.setFileInput([Y],'input[type="file"]');W=!0}catch(y){const K=String(y?.message||y);if(!K.includes("Unknown action")&&!K.includes("not supported")&&!K.includes("Not allowed"))throw y}if(!W){const K=Q.default.readFileSync(Y).toString("base64"),U=await q.evaluate(`(async () => {
|
|
173
|
+
var binary = atob('${K}');
|
|
174
|
+
var bytes = new Uint8Array(binary.length);
|
|
175
|
+
for (var i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
176
|
+
|
|
177
|
+
var file = new File([bytes], ${JSON.stringify(J)});
|
|
178
|
+
var dt = new DataTransfer();
|
|
179
|
+
dt.items.add(file);
|
|
180
|
+
|
|
181
|
+
var inp = document.querySelector('input[type="file"]');
|
|
182
|
+
if (!inp) return { ok: false, reason: 'file input not found' };
|
|
183
|
+
|
|
184
|
+
var propsKey = Object.keys(inp).find(function(k) { return k.startsWith('__reactProps$'); });
|
|
185
|
+
if (!propsKey || typeof inp[propsKey].onChange !== 'function') {
|
|
186
|
+
return { ok: false, reason: 'React onChange not found' };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
inp.files = dt.files;
|
|
190
|
+
// Use inp.files, not dt.files; assignment transfers ownership
|
|
191
|
+
inp[propsKey].onChange({ target: { files: inp.files } });
|
|
192
|
+
return { ok: true };
|
|
193
|
+
})()`);if(U&&!U.ok)return U}if(!await G(q,J))return{ok:!1,reason:"file preview did not appear"};let V=!1;for(let y=0;y<15;y++){if(await q.evaluate(`(() => {
|
|
194
|
+
var box = document.querySelector('${TEXTAREA_SELECTOR}');
|
|
195
|
+
if (!box) return false;
|
|
196
|
+
var c = box.parentElement;
|
|
197
|
+
while (c && !c.querySelector('div[role="button"]')) c = c.parentElement;
|
|
198
|
+
if (!c) return false;
|
|
199
|
+
var btns = c.querySelectorAll('div[role="button"]:not(.ds-toggle-button)');
|
|
200
|
+
var last = btns[btns.length - 1];
|
|
201
|
+
return !!(last && last.getAttribute('aria-disabled') === 'false');
|
|
202
|
+
})()`)){V=!0;break}await q.wait(1)}if(!V)return{ok:!1,reason:"send button did not enable after upload"};return sendMessage(q,B)}export async function withRetry(q,z=2){for(let B=0;B<=z;B++)try{return await q()}catch(Q){const Z=String(Q?.message||Q);if(B<z&&Z.includes("Promise was collected")){await new Promise((Y)=>setTimeout(Y,2000));continue}throw Q}}export function parseBoolFlag(q){if(typeof q==="boolean")return q;return String(q??"").trim().toLowerCase()==="true"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as b,Strategy as f}from"@jackwener/opencli/registry";import{EmptyResultError as q}from"@jackwener/opencli/errors";import{LLAMA_BASE as U,llamaFetch as V,requireSlug as R,unixToDate as W}from"./utils.js";b({site:"defillama",name:"protocol",access:"read",description:"Single DefiLlama protocol details (current TVL, mcap, chains, twitter, github, description)",domain:"defillama.com",strategy:f.PUBLIC,browser:!1,args:[{name:"slug",positional:!0,type:"string",required:!0,help:'DefiLlama protocol slug (e.g. "aave", "lido")'}],columns:["slug","name","category","isParent","tvl","tvlAt","mcap","chains","twitter","github","audits","listedAt","description","website","url"],func:async(X)=>{const G=R(X.slug,"slug"),z=await V(`${U}/protocol/${encodeURIComponent(G)}`,`defillama protocol ${G}`);if(!z||!z.name)throw new q("defillama protocol",`DefiLlama returned no metadata for "${G}".`);const J=Array.isArray(z.tvl)?z.tvl:[],I=J.length?J[J.length-1]:null,Y=I&&Number.isFinite(Number(I.totalLiquidityUSD))?Number(I.totalLiquidityUSD):null,Z=I?W(I.date):null,O=z.isParentProtocol===!0;let Q="";const K=new Set(Array.isArray(z.chains)?z.chains:[]),N=await V(`${U}/protocols`,`defillama protocol ${G} list lookup`);if(Array.isArray(N)){if(!O){const C=N.find((H)=>H&&H.slug===G);if(C&&typeof C.category==="string")Q=C.category;if(C&&Array.isArray(C.chains))for(const H of C.chains)K.add(H)}else for(const C of N)if(C&&C.parentProtocol===z.id&&Array.isArray(C.chains))for(const H of C.chains)K.add(H)}const $=Array.isArray(z.github)?z.github:[];return[{slug:G,name:String(z.name).trim(),category:Q,isParent:O,tvl:Y,tvlAt:Z,mcap:z.mcap==null?null:Number(z.mcap),chains:[...K].join(", "),twitter:String(z.twitter??"").trim(),github:$.join(", "),audits:String(z.audits??"").trim(),listedAt:W(z.listedAt),description:String(z.description??"").trim(),website:String(z.url??"").trim(),url:`https://defillama.com/protocol/${G}`}]}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as s,Strategy as c}from"@jackwener/opencli/registry";import{EmptyResultError as l}from"@jackwener/opencli/errors";import{LLAMA_BASE as m,llamaFetch as u,requireBoundedInt as d,unixToDate as g}from"./utils.js";s({site:"defillama",name:"protocols",access:"read",description:"Top DeFi protocols on DefiLlama by current TVL (slug, name, category, TVL, mcap, change_1d/7d, chains)",domain:"defillama.com",strategy:c.PUBLIC,browser:!1,args:[{name:"limit",type:"int",default:30,help:"Number of rows to return (1-500)"}],columns:["rank","slug","name","category","tvl","mcap","change_1d","change_7d","chains","listedAt","url"],func:async(n)=>{const i=d(n.limit,30,500,"limit"),t=await u(`${m}/protocols`,"defillama protocols");if(!Array.isArray(t)||t.length===0)throw new l("defillama protocols","DefiLlama returned no protocol entries.");const o=t.filter((e)=>e&&(e.slug||e.name)&&Number.isFinite(Number(e.tvl))).sort((e,r)=>Number(r.tvl)-Number(e.tvl)).slice(0,i);if(o.length===0)throw new l("defillama protocols","DefiLlama returned no protocols with numeric TVL.");return o.map((e,r)=>{const a=String(e.slug??"").trim();return{rank:r+1,slug:a,name:String(e.name??"").trim(),category:String(e.category??"").trim(),tvl:Number(e.tvl),mcap:e.mcap==null?null:Number(e.mcap),change_1d:e.change_1d==null?null:Number(e.change_1d),change_7d:e.change_7d==null?null:Number(e.change_7d),chains:Array.isArray(e.chains)?e.chains.join(", "):"",listedAt:g(e.listedAt),url:a?`https://defillama.com/protocol/${a}`:""}})}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ArgumentError as H,CommandExecutionError as I,EmptyResultError as K}from"@jackwener/opencli/errors";export const LLAMA_BASE="https://api.llama.fi";const M="opencli-defillama-adapter (+https://github.com/jackwener/opencli)",N=/^[a-z0-9][a-z0-9._-]{0,99}$/;export function requireString(B,q){const z=String(B??"").trim();if(!z)throw new H(`defillama ${q} cannot be empty`);return z}export function requireSlug(B,q="slug"){const z=String(B??"").trim();if(!z)throw new H(`defillama ${q} is required (e.g. "aave", "lido")`,"Use the protocol slug as it appears on https://defillama.com/protocol/<slug>.");if(!N.test(z))throw new H(`defillama ${q} "${B}" is not a valid DefiLlama slug`,'Slugs are lowercase ASCII (letters / digits / "._-"), e.g. "aave", "lido", "pancakeswap-amm".');return z}export function requireBoundedInt(B,q,z,F="limit"){const D=B??q,J=typeof D==="number"?D:Number(D);if(!Number.isInteger(J)||J<=0)throw new H(`defillama ${F} must be a positive integer`);if(J>z)throw new H(`defillama ${F} must be <= ${z}`);return J}export async function llamaFetch(B,q){let z;try{z=await fetch(B,{headers:{"user-agent":M,accept:"application/json"}})}catch(D){throw new I(`${q} request failed: ${D?.message??D}`,"Check that api.llama.fi is reachable from this network.")}if(z.status===404)throw new K(q,`DefiLlama returned 404 for ${B}.`);if(z.status===400){const D=await z.text().catch(()=>"");if(/not\s*found/i.test(D))throw new K(q,`DefiLlama: ${D.trim()||"not found"}.`);throw new I(`${q} returned HTTP 400: ${D.slice(0,200)}`)}if(z.status===429)throw new I(`${q} returned HTTP 429 (rate limited)`,"DefiLlama throttles unauthenticated traffic; wait a few seconds and retry.");if(!z.ok)throw new I(`${q} returned HTTP ${z.status}`);let F;try{F=await z.json()}catch(D){throw new I(`${q} returned malformed JSON: ${D?.message??D}`)}return F}export function unixToDate(B){if(B==null)return null;const q=typeof B==="number"?B:Number(B);if(!Number.isFinite(q)||q<=0)return null;const z=q>1000000000000?q:q*1000,F=new Date(z);if(Number.isNaN(F.getTime()))return null;return F.toISOString().slice(0,10)}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{AuthRequiredError as B}from"@jackwener/opencli/errors";import{registerSiteAuthCommands as J}from"../_shared/site-auth.js";const F="https://dev.to";async function G(x){return(await x.getCookies({url:F})).some((z)=>z.name==="remember_user_token"&&z.value)}async function I(x){await x.goto(F);const f=await x.evaluate(`(() => {
|
|
2
|
+
try {
|
|
3
|
+
var du = document.body && document.body.getAttribute('data-user');
|
|
4
|
+
if (!du) return { ok: false, reason: 'no data-user' };
|
|
5
|
+
var u = JSON.parse(du);
|
|
6
|
+
if (!u || u.id == null) return { ok: false, reason: 'anonymous' };
|
|
7
|
+
return { ok: true, id: String(u.id), username: String(u.username || ''), name: String(u.name || '') };
|
|
8
|
+
} catch (e) { return { ok: false, reason: String(e && e.message || e) }; }
|
|
9
|
+
})()`);if(!f||!f.ok)throw new B("dev.to",`Not logged in (${f?f.reason:"no probe"})`);return{user_id:f.id,username:f.username,name:f.name}}J({site:"devto",domain:"dev.to",loginUrl:"https://dev.to/enter",columns:["user_id","username","name"],loginDescription:"打开 dev.to 登录页并等待浏览器完成登录(供桌面客户端引导登录)。",quickCheck:G,verify:I,poll:async(x)=>{if(!await G(x))throw new B("dev.to","Waiting for dev.to session cookie");return I(x)}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as p,Strategy as m}from"@jackwener/opencli/registry";import{ArgumentError as c,CommandExecutionError as i,EmptyResultError as g}from"@jackwener/opencli/errors";function u(a,n,r){const s=a??n,e=typeof s==="number"?s:Number(s);if(!Number.isInteger(e)||e<=0)throw new c("devto limit must be a positive integer");if(e>r)throw new c(`devto limit must be <= ${r}`);return e}p({site:"devto",name:"latest",access:"read",description:"Newest dev.to articles (firehose, all tags)",domain:"dev.to",strategy:m.PUBLIC,browser:!1,args:[{name:"limit",type:"int",default:20,help:"Articles per page (1-100)"},{name:"page",type:"int",default:1,help:"Page number (1-based)"}],columns:["rank","id","title","author","tags","reactions","comments","published","url"],func:async(a)=>{const n=u(a.limit,20,100),r=u(a.page,1,1000),s=`https://dev.to/api/articles/latest?per_page=${n}&page=${r}`;let e;try{e=await fetch(s,{headers:{accept:"application/json"}})}catch(t){throw new i(`devto latest request failed: ${t?.message??t}`,"Check that dev.to is reachable from this network.")}if(!e.ok)throw new i(`devto latest returned HTTP ${e.status}`);let o;try{o=await e.json()}catch(t){throw new i(`devto latest returned malformed JSON: ${t?.message??t}`)}const l=Array.isArray(o)?o:[];if(!l.length)throw new g("devto latest",`dev.to /articles/latest returned no items at page ${r}.`);return l.map((t,d)=>({rank:(r-1)*n+d+1,id:t.id!=null?String(t.id):"",title:String(t.title??""),author:String(t?.user?.username??""),tags:String(t.tag_list??"").replace(/,\s*/g,", "),reactions:t.public_reactions_count!=null?Number(t.public_reactions_count):null,comments:t.comments_count!=null?Number(t.comments_count):null,published:String(t.published_at??"").slice(0,10),url:String(t.url??"")}))}});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import*as V from"node:fs";import{cli as q,Strategy as B}from"@jackwener/opencli/registry";import{ArgumentError as K,AuthRequiredError as U,CommandExecutionError as O}from"@jackwener/opencli/errors";import{assertLiteralContent as v}from"../_shared/content-guard.js";const W=4;export function resolveBody(z){if(z["body-file"]){const D=String(z["body-file"]);if(!V.statSync(D,{throwIfNoEntry:!1})?.isFile())throw new K(`--body-file not found: ${D}`);return V.readFileSync(D,"utf8")}if(z.body!==void 0&&z.body!==null){v(String(z.body),{fileFlag:"--body-file"});return String(z.body)}return}export function resolveTagList(z){if(z===void 0||z===null||z==="")return;const D=String(z).split(",").map((F)=>F.trim().toLowerCase()).filter(Boolean);if(D.length>W)throw new K(`Too many tags: ${D.length} (DEV.to max ${W})`);for(const F of D)if(!/^[a-z0-9]+$/.test(F))throw new K(`Invalid tag "${F}". DEV.to tags must be lowercase alphanumeric (no spaces/punctuation).`);return D.join(", ")}export function buildArticle(z,D,F){const H={};if(z.title!==void 0)H.title=String(z.title);if(D!==void 0)H.body_markdown=D;if(z.published!==void 0)H.published=!!z.published;if(F!==void 0)H.tag_list=F;if(z["cover-image"])H.main_image=String(z["cover-image"]);if(z["canonical-url"])H.canonical_url=String(z["canonical-url"]);if(z.series)H.series=String(z.series);if(z.description)H.description=String(z.description);return H}q({site:"devto",name:"publish",access:"write",description:"Publish or update a DEV.to article (markdown). Draft by default; pass --published to go live.",domain:"dev.to",strategy:B.COOKIE,browser:!0,args:[{name:"title",type:"string",required:!1,help:"Article title (required for new articles)"},{name:"body",type:"string",required:!1,help:"Article body in Markdown (or use --body-file)"},{name:"body-file",type:"string",required:!1,help:"Path to a Markdown file for the body"},{name:"published",type:"boolean",required:!1,default:!1,help:"Publish live now (default: save as draft)"},{name:"tags",type:"string",required:!1,help:"Comma-separated tags, max 4, lowercase alphanumeric"},{name:"cover-image",type:"string",required:!1,help:"Cover image URL (main_image)"},{name:"canonical-url",type:"string",required:!1,help:"Canonical URL (original source)"},{name:"series",type:"string",required:!1,help:"Series name to group articles"},{name:"description",type:"string",required:!1,help:"Social/SEO description"},{name:"id",type:"string",required:!1,help:"Existing article id to update (PUT instead of POST)"}],columns:["status","id","url","published","slug"],func:async(z,D)=>{if(!z)throw new O("Browser session required for devto publish");const F=D.id?String(D.id).trim():"",H=resolveBody(D),Y=resolveTagList(D.tags);if(!F&&!D.title)throw new K("--title is required when creating a new article");if(!F&&H===void 0)throw new K("--body or --body-file is required when creating a new article");const P=buildArticle(D,H,Y),Z=F?"PUT":"POST",$=F?`/articles/${encodeURIComponent(F)}`:"/articles";await z.goto("https://dev.to/");const I=await z.evaluate(`(async () => {
|
|
2
|
+
try {
|
|
3
|
+
var csrf = (document.querySelector('meta[name="csrf-token"]') || {}).content || window.csrfToken;
|
|
4
|
+
if (!csrf) return { kind: 'auth', detail: 'no csrf-token meta — not logged in?' };
|
|
5
|
+
var r = await fetch(${JSON.stringify($)}, {
|
|
6
|
+
method: ${JSON.stringify(Z)},
|
|
7
|
+
credentials: 'include',
|
|
8
|
+
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'X-CSRF-Token': csrf },
|
|
9
|
+
body: JSON.stringify({ article: ${JSON.stringify(P)} }),
|
|
10
|
+
});
|
|
11
|
+
var text = await r.text();
|
|
12
|
+
var data = null; try { data = JSON.parse(text); } catch (e) {}
|
|
13
|
+
if (r.status === 401 || r.status === 403) return { kind: 'auth', detail: 'HTTP ' + r.status };
|
|
14
|
+
if (!r.ok) return { kind: 'http', status: r.status, detail: text.slice(0, 300) };
|
|
15
|
+
return { kind: 'ok', data: data };
|
|
16
|
+
} catch (e) { return { kind: 'exception', detail: String(e && e.message || e) }; }
|
|
17
|
+
})()`);if(I?.kind==="auth")throw new U("dev.to",`Not logged in (${I.detail}). Run \`opencli devto login\`.`);if(I?.kind==="http")throw new O(`dev.to publish failed: HTTP ${I.status} ${I.detail}`);if(I?.kind==="exception")throw new O(`dev.to publish error: ${I.detail}`);if(I?.kind!=="ok"||!I.data)throw new O(`Unexpected dev.to response: ${JSON.stringify(I)}`);const J=I.data,Q=!!P.published;let N="";if(J.current_state_path)try{N=new URL(J.current_state_path,"https://dev.to").href}catch(G){N=String(J.current_state_path)}else if(J.url)N=String(J.url);return[{status:F?"updated":"created",id:J.id??"",url:Q?N:"",published:Q,slug:J.slug??""}]}});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{cli as Z,Strategy as $}from"@jackwener/opencli/registry";import{ArgumentError as U,CommandExecutionError as K,EmptyResultError as W}from"@jackwener/opencli/errors";const f="https://dev.to/api/articles";async function z(G){let H;try{H=await fetch(`${f}/${G}`)}catch(J){const F=J instanceof Error?J.message:String(J);throw new K(`DEV.to API request failed for article ${G}`,F)}if(H.status===404)throw new W(`devto/${G}`,"Article not found");if(!H.ok)throw new K(`DEV.to API HTTP ${H.status} for article ${G}`,"Check the article id");try{return await H.json()}catch{throw new K(`DEV.to API returned invalid JSON for article ${G}`,"Retry later or open the article URL directly")}}function D(G,H,J){const F=typeof G==="number"?G:Number(G);if(!Number.isInteger(F)||F<H)throw new U(`${J} must be an integer >= ${H}`);return F}function M(G,H){if(typeof G.body_markdown==="string"&&G.body_markdown.trim())return G.body_markdown;throw new K(`DEV.to article ${H} did not include body_markdown`,"DEV.to API response shape may have changed. Open the article URL directly or retry later.")}Z({site:"devto",name:"read",access:"read",description:"Read a DEV.to article body by id",domain:"dev.to",strategy:$.PUBLIC,browser:!1,args:[{name:"id",required:!0,positional:!0,help:"DEV.to article id (numeric, e.g. 3605688)"},{name:"max-length",type:"int",default:20000,help:"Max characters of body to return (min 100)"}],columns:["id","title","author","reactions","reading_time","tags","published_at","body","url"],func:async(G)=>{const H=String(G.id||"").trim();if(!/^\d+$/.test(H))throw new U(`Invalid DEV.to article id: ${G.id}`,"Pass a numeric id like 3605688");const J=D(G["max-length"]??20000,100,"devto read --max-length"),F=await z(H);if(!F||!F.id)throw new W(`devto/${H}`,"Article not found");const P=M(F,H),X=P.length>J?P.slice(0,J)+`
|
|
2
|
+
|
|
3
|
+
... [truncated]`:P,Q=F.tag_list??F.tags??"",Y=Array.isArray(Q)?Q.join(", "):String(Q);return[{id:F.id,title:F.title||"",author:F.user?.username||"[deleted]",reactions:F.public_reactions_count??0,reading_time:F.reading_time_minutes??0,tags:Y,published_at:F.published_at||"",body:X,url:F.url||""}]}});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{cli as C,Strategy as F}from"@jackwener/opencli/registry";import{EmptyResultError as G}from"@jackwener/opencli/errors";const I="https://dev.to/dashboard";C({site:"devto",name:"stats",access:"read",description:"dev.to 文章数据(每篇浏览/反应/评论等运营指标,含草稿)。首次调用要拉起浏览器会话、偏慢,客户端超时属正常,重试一次即可",domain:"dev.to",strategy:F.COOKIE,browser:!0,navigateBefore:!1,args:[{name:"limit",type:"number",default:20,help:"返回条数"}],columns:["id","type","title","url","published_at","views","likes","comments","collects","shares","tags","read_time","extra"],func:async(h,x)=>{const z=Math.max(1,Number(x.limit)||20);await h.goto(I);const f=await h.evaluate(`(async () => {
|
|
2
|
+
try {
|
|
3
|
+
if (!location.href.includes('dev.to')) {
|
|
4
|
+
return { error: '未登录 dev.to(页面被重定向到 ' + location.href + '),请先在 Chrome 里登录 dev.to' };
|
|
5
|
+
}
|
|
6
|
+
const limit = ${JSON.stringify(z)};
|
|
7
|
+
const items = [];
|
|
8
|
+
for (let pageNo = 1; items.length < limit && pageNo <= 50; pageNo++) {
|
|
9
|
+
const per = Math.min(100, limit - items.length + 1);
|
|
10
|
+
const resp = await fetch('/api/articles/me/all?per_page=' + per + '&page=' + pageNo, {
|
|
11
|
+
credentials: 'include',
|
|
12
|
+
headers: { accept: 'application/json' },
|
|
13
|
+
});
|
|
14
|
+
if (resp.status === 401) return { error: '未登录 dev.to:请先在 Chrome 里登录 dev.to 再运行 devto stats' };
|
|
15
|
+
if (!resp.ok) return { error: 'dev.to 接口 HTTP ' + resp.status + '(/api/articles/me/all 第 ' + pageNo + ' 页)' };
|
|
16
|
+
const batch = await resp.json();
|
|
17
|
+
if (!Array.isArray(batch) || batch.length === 0) break;
|
|
18
|
+
items.push(...batch);
|
|
19
|
+
if (batch.length < per) break;
|
|
20
|
+
}
|
|
21
|
+
// body_markdown 是全文、体积巨大,出页面前先剔掉
|
|
22
|
+
for (const it of items) { delete it.body_markdown; delete it.user; }
|
|
23
|
+
return { items: items.slice(0, limit) };
|
|
24
|
+
} catch (e) {
|
|
25
|
+
return { error: String((e && e.message) || e) };
|
|
26
|
+
}
|
|
27
|
+
})()`);if(!f||f.error)throw Error(f?.error||"devto stats:evaluate 无返回(浏览器会话异常)");const q=Array.isArray(f.items)?f.items:[];if(q.length===0)throw new G("devto stats","该 dev.to 账号没有任何文章(含草稿)。");return q.map((b)=>({id:String(b.id??""),type:"article",title:b.title||"",url:b.url||"",published_at:b.published_at||"",views:b.page_views_count??0,likes:b.public_reactions_count??0,comments:b.comments_count??0,collects:"",shares:"",tags:Array.isArray(b.tag_list)?b.tag_list.join("|"):String(b.tag_list||""),read_time:b.reading_time_minutes?`${b.reading_time_minutes}min`:"",extra:JSON.stringify({published:b.published??null,positive_reactions:b.positive_reactions_count??null,description:b.description||"",cover_image:b.cover_image||"",canonical_url:b.canonical_url||""})}))}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as t,Strategy as e}from"@jackwener/opencli/registry";t({site:"devto",name:"tag",access:"read",description:"Latest DEV.to articles for a specific tag",domain:"dev.to",strategy:e.PUBLIC,browser:!1,args:[{name:"tag",required:!0,positional:!0,help:"Tag name (e.g. javascript, python, webdev)"},{name:"limit",type:"int",default:20,help:"Number of articles"}],columns:["rank","id","title","author","reactions","comments","reading_time","published_at","tags","url"],pipeline:[{fetch:{url:"https://dev.to/api/articles?tag=${{ args.tag }}&per_page=${{ args.limit }}"}},{map:{rank:"${{ index + 1 }}",id:"${{ item.id }}",title:"${{ item.title }}",author:"${{ item.user.username }}",reactions:"${{ item.public_reactions_count }}",comments:"${{ item.comments_count }}",reading_time:"${{ item.reading_time_minutes }}",published_at:"${{ item.published_at }}",tags:"${{ item.tag_list | join(', ') }}",url:"${{ item.url }}"}},{limit:"${{ args.limit }}"}]});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as t,Strategy as e}from"@jackwener/opencli/registry";t({site:"devto",name:"top",access:"read",description:"Top DEV.to articles of the day",domain:"dev.to",strategy:e.PUBLIC,browser:!1,args:[{name:"limit",type:"int",default:20,help:"Number of articles"}],columns:["rank","id","title","author","reactions","comments","reading_time","published_at","tags","url"],pipeline:[{fetch:{url:"https://dev.to/api/articles?top=1&per_page=${{ args.limit }}"}},{map:{rank:"${{ index + 1 }}",id:"${{ item.id }}",title:"${{ item.title }}",author:"${{ item.user.username }}",reactions:"${{ item.public_reactions_count }}",comments:"${{ item.comments_count }}",reading_time:"${{ item.reading_time_minutes }}",published_at:"${{ item.published_at }}",tags:"${{ item.tag_list | join(', ') }}",url:"${{ item.url }}"}},{limit:"${{ args.limit }}"}]});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as e,Strategy as t}from"@jackwener/opencli/registry";e({site:"devto",name:"user",access:"read",description:"Recent DEV.to articles from a specific user",domain:"dev.to",strategy:t.PUBLIC,browser:!1,args:[{name:"username",required:!0,positional:!0,help:"DEV.to username (e.g. ben, thepracticaldev)"},{name:"limit",type:"int",default:20,help:"Number of articles"}],columns:["rank","id","title","reactions","comments","reading_time","published_at","tags","url"],pipeline:[{fetch:{url:"https://dev.to/api/articles?username=${{ args.username }}&per_page=${{ args.limit }}"}},{map:{rank:"${{ index + 1 }}",id:"${{ item.id }}",title:"${{ item.title }}",reactions:"${{ item.public_reactions_count }}",comments:"${{ item.comments_count }}",reading_time:"${{ item.reading_time_minutes }}",published_at:"${{ item.published_at }}",tags:"${{ item.tag_list | join(', ') }}",url:"${{ item.url }}"}},{limit:"${{ args.limit }}"}]});
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="trancy-und"><head>
|
|
2
|
+
<title>北京火锅相关搜索结果推荐-大众点评网</title>
|
|
3
|
+
</head>
|
|
4
|
+
<body>
|
|
5
|
+
<div class="section Fix J-shop-search">
|
|
6
|
+
<div class="content-wrap">
|
|
7
|
+
<div class="shop-wrap">
|
|
8
|
+
<div class="content">
|
|
9
|
+
<div class="shop-list J_shop-list shop-all-list" id="shop-all-list">
|
|
10
|
+
<ul>
|
|
11
|
+
<li class="">
|
|
12
|
+
<div class="pic">
|
|
13
|
+
<a href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu" data-shopid="H20FrTRI6kbXbgTu" title="">
|
|
14
|
+
<img title="芈重山老火锅(五道口店)" alt="芈重山老火锅(五道口店)" src="placeholder.png">
|
|
15
|
+
</a>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="txt">
|
|
18
|
+
<div class="tit">
|
|
19
|
+
<a data-shopid="H20FrTRI6kbXbgTu" title="芈重山老火锅(五道口店)" href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu">
|
|
20
|
+
<h4>芈重山老火锅(五道口店)</h4>
|
|
21
|
+
</a>
|
|
22
|
+
<div class="promo-icon J_promo_icon">
|
|
23
|
+
<a href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu#promo=0" title="" class="ipromote icon-only" data-shopid="H20FrTRI6kbXbgTu"></a>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="comment">
|
|
27
|
+
<div class="nebula_star">
|
|
28
|
+
<div class="star_icon">
|
|
29
|
+
<span class="star star_50 star_sml"></span>
|
|
30
|
+
<span class="star star_50 star_sml"></span>
|
|
31
|
+
<span class="star star_50 star_sml"></span>
|
|
32
|
+
<span class="star star_50 star_sml"></span>
|
|
33
|
+
<span class="star star_50 star_sml"></span>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<a href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu#comment" class="review-num" data-shopid="H20FrTRI6kbXbgTu">
|
|
37
|
+
<b>21231</b>
|
|
38
|
+
条评价</a>
|
|
39
|
+
<em class="sep">|</em>
|
|
40
|
+
<a href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu" class="mean-price" data-shopid="H20FrTRI6kbXbgTu">
|
|
41
|
+
人均
|
|
42
|
+
<b>¥109</b>
|
|
43
|
+
</a>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="tag-addr">
|
|
46
|
+
<a href="https://www.dianping.com/beijing/ch10/g32733" data-shopid="H20FrTRI6kbXbgTu"><span class="tag">重庆火锅</span></a>
|
|
47
|
+
<em class="sep">|</em>
|
|
48
|
+
<a href="https://www.dianping.com/beijing/ch0/r1489" data-shopid="H20FrTRI6kbXbgTu"><span class="tag">五道口</span></a>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="svr-info">
|
|
52
|
+
<a href="https://www.dianping.com/shop/H20FrTRI6kbXbgTu#promo=0" title="" data-shopid="H20FrTRI6kbXbgTu" class="tuan ">
|
|
53
|
+
<span class="tit">优惠:</span>此餐馆有优惠券
|
|
54
|
+
</a>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="operate J_operate Hide">
|
|
57
|
+
<a href="javascript:void(0);" title="" class="o-nearby J_o-nearby" data-shopid="H20FrTRI6kbXbgTu">附近</a>
|
|
58
|
+
</div>
|
|
59
|
+
</li>
|
|
60
|
+
<li class="">
|
|
61
|
+
<div class="pic">
|
|
62
|
+
<a href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa" data-shopid="H6uJDRHtNUreCoBa" title="">
|
|
63
|
+
<img title="百年前门铜锅涮肉(前门总店)" alt="百年前门铜锅涮肉(前门总店)" src="placeholder.png">
|
|
64
|
+
</a>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="txt">
|
|
67
|
+
<div class="tit">
|
|
68
|
+
<a data-shopid="H6uJDRHtNUreCoBa" title="百年前门铜锅涮肉(前门总店)" href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa">
|
|
69
|
+
<h4>百年前门铜锅涮肉(前门总店)</h4>
|
|
70
|
+
</a>
|
|
71
|
+
<div class="promo-icon J_promo_icon">
|
|
72
|
+
<a data-shopid="H6uJDRHtNUreCoBa" href="http://t.dianping.com/deal/671044080" title="百年前门铜锅涮肉!【春季新品】拔草必点超值 2-3人餐✨13店通用" class="igroup">
|
|
73
|
+
</a>
|
|
74
|
+
<a href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa#promo=0" title="" class="ipromote icon-only" data-shopid="H6uJDRHtNUreCoBa"></a>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="comment">
|
|
78
|
+
<div class="nebula_star">
|
|
79
|
+
<div class="star_icon">
|
|
80
|
+
<span class="star star_45 star_sml"></span>
|
|
81
|
+
<span class="star star_45 star_sml"></span>
|
|
82
|
+
<span class="star star_45 star_sml"></span>
|
|
83
|
+
<span class="star star_45 star_sml"></span>
|
|
84
|
+
<span class="star star_45 star_sml"></span>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
<a href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa#comment" class="review-num" data-shopid="H6uJDRHtNUreCoBa">
|
|
88
|
+
<b>15649</b>
|
|
89
|
+
条评价</a>
|
|
90
|
+
<em class="sep">|</em>
|
|
91
|
+
<a href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa" class="mean-price" data-shopid="H6uJDRHtNUreCoBa">
|
|
92
|
+
人均
|
|
93
|
+
<b>¥81</b>
|
|
94
|
+
</a>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="tag-addr">
|
|
97
|
+
<a href="https://www.dianping.com/beijing/ch10/g34277" data-shopid="H6uJDRHtNUreCoBa"><span class="tag">老北京火锅</span></a>
|
|
98
|
+
<em class="sep">|</em>
|
|
99
|
+
<a href="https://www.dianping.com/beijing/ch0/r1503" data-shopid="H6uJDRHtNUreCoBa"><span class="tag">前门/大栅栏</span></a>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="svr-info">
|
|
103
|
+
<a href="https://www.dianping.com/shop/H6uJDRHtNUreCoBa#promo=0" title="" data-shopid="H6uJDRHtNUreCoBa" class="tuan privilege">
|
|
104
|
+
<span class="tit">优惠:</span>此餐馆有优惠券
|
|
105
|
+
</a>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="operate J_operate Hide">
|
|
108
|
+
<a href="javascript:void(0);" title="" class="o-nearby J_o-nearby" data-shopid="H6uJDRHtNUreCoBa">附近</a>
|
|
109
|
+
</div>
|
|
110
|
+
</li>
|
|
111
|
+
<li class="">
|
|
112
|
+
<div class="pic">
|
|
113
|
+
<a href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs" data-shopid="H7gQoQ1L5p7CoUEs" title="">
|
|
114
|
+
<img title="东来顺饭庄(前门大街店)" alt="东来顺饭庄(前门大街店)" src="placeholder.png">
|
|
115
|
+
</a>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="txt">
|
|
118
|
+
<div class="tit">
|
|
119
|
+
<a data-shopid="H7gQoQ1L5p7CoUEs" title="东来顺饭庄(前门大街店)" href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs">
|
|
120
|
+
<h4>东来顺饭庄(前门大街店)</h4>
|
|
121
|
+
</a>
|
|
122
|
+
<div class="promo-icon J_promo_icon">
|
|
123
|
+
<a data-shopid="H7gQoQ1L5p7CoUEs" href="http://t.dianping.com/deal/788879631" title="东来顺饭庄!仅售95元!价值100元的代金券1张,全场通用,可叠加使用10张,可免费使用包间。" class="igroup">
|
|
124
|
+
</a>
|
|
125
|
+
<a href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs#promo=0" title="" class="ipromote icon-only" data-shopid="H7gQoQ1L5p7CoUEs"></a>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="comment">
|
|
129
|
+
<div class="nebula_star">
|
|
130
|
+
<div class="star_icon">
|
|
131
|
+
<span class="star star_50 star_sml"></span>
|
|
132
|
+
<span class="star star_50 star_sml"></span>
|
|
133
|
+
<span class="star star_50 star_sml"></span>
|
|
134
|
+
<span class="star star_50 star_sml"></span>
|
|
135
|
+
<span class="star star_50 star_sml"></span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<a href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs#comment" class="review-num" data-shopid="H7gQoQ1L5p7CoUEs">
|
|
139
|
+
<b>21537</b>
|
|
140
|
+
条评价</a>
|
|
141
|
+
<em class="sep">|</em>
|
|
142
|
+
<a href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs" class="mean-price" data-shopid="H7gQoQ1L5p7CoUEs">
|
|
143
|
+
人均
|
|
144
|
+
<b>¥124</b>
|
|
145
|
+
</a>
|
|
146
|
+
</div>
|
|
147
|
+
<div class="tag-addr">
|
|
148
|
+
<a href="https://www.dianping.com/beijing/ch10/g34277" data-shopid="H7gQoQ1L5p7CoUEs"><span class="tag">老北京火锅</span></a>
|
|
149
|
+
<em class="sep">|</em>
|
|
150
|
+
<a href="https://www.dianping.com/beijing/ch0/r1503" data-shopid="H7gQoQ1L5p7CoUEs"><span class="tag">前门/大栅栏</span></a>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="svr-info">
|
|
154
|
+
<a href="https://www.dianping.com/shop/H7gQoQ1L5p7CoUEs#promo=0" title="" data-shopid="H7gQoQ1L5p7CoUEs" class="tuan privilege">
|
|
155
|
+
<span class="tit">优惠:</span>此餐馆有优惠券
|
|
156
|
+
</a>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="operate J_operate Hide">
|
|
159
|
+
<a href="javascript:void(0);" title="" class="o-nearby J_o-nearby" data-shopid="H7gQoQ1L5p7CoUEs">附近</a>
|
|
160
|
+
</div>
|
|
161
|
+
</li>
|
|
162
|
+
</ul>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</body></html>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="trancy-und"><head>
|
|
2
|
+
<title>【芈重山老火锅(五道口店)】电话_地址_价格_营业时间_五道口重庆火锅团购 - [undefined] - 大众点评网</title>
|
|
3
|
+
</head>
|
|
4
|
+
<body>
|
|
5
|
+
<div id="cocktail-root" class="cocktail-root"><div id="shop-head" class="shop-head shop-head-pc wx-view"><div id="pc-shop-head" class="wx-view"><div class="pc-shopInfo wx-view"><div class="leftPanel wx-view"><span class="shopName wx-text">芈重山老火锅(五道口店)</span><div class="smallPanel iconPanelPc wx-view"><div class="component-star"><div class="star-container star-50 wx-view"><div class="light wx-view">★</div><div class="light wx-view">★</div><div class="light wx-view">★</div><div class="light wx-view">★</div><div class="light wx-view">★</div><div class="star-score score-50 wx-view">4.8</div></div></div><div class="smallPanel wx-view"><span class="reviews wx-text">21241条</span><span class="price wx-text">¥109/人</span></div></div><div class="bottomPanel wx-view"><div class="wx-view"><span class="region wx-text">五道口</span><span class="category wx-text">重庆火锅</span></div></div><div class="middlePanel no-float wx-view"><span class="scoreText wx-text">口味:4.8 环境:4.8 服务:4.8 食材:4.9 </span></div><div class="rankPanel wx-view"><div class="rank-left wx-view"><img src="placeholder.png" class="rank-icon"><div class="rank-text wx-view">海淀区重庆火锅口味榜 · 第1名</div></div><div class="rank-right wx-view"><div class="rank-entry wx-view"></div></div></div><div class="shop-info wx-view"><div class="shopinfo wx-view"><div class="shopinf-wrap wx-view"><div class="key-services retina-boder-top wx-view"><div class="left-service wx-view"><div class="biz-title wx-view"><span class="biz-txt wx-text">营业中</span><span class="biz-time wx-text">11:00-次日02:00</span></div><div class="shop-tag-title wx-view"><div class="shop-feature wx-view"><span class="feature-txt wx-text">有包厢</span></div><div class="shop-feature wx-view"><span class="feature-txt wx-text">有大桌</span></div><div class="shop-feature wx-view"><span class="feature-txt wx-text">付费停车</span></div></div></div><div class="wx-view"><div class="entry wx-view"></div></div></div></div></div></div><div class="wx-view"><div id="shop-map" class="shopmap wx-view"><div class="shopmap-wrap wx-view"><div class="desc-content wx-view"><div class="desc-left wx-view"><div class="desc-info wx-view"><div class="iconAddress wx-view"></div><span class="addressText wx-text"> 成府路35号东源大厦2层东侧</span></div><div class="desc-addr wx-view"><span class="desc-addr-txt wx-text">距地铁13号线五道口站A北口步行90m</span></div></div><div class="desc-right wx-view"><div class="desc-car wx-view"><span class="tips wx-text">到店</span></div><div class="desc-phone wx-view"></div></div></div></div></div></div></div><div class="rightPanel wx-view"><img src="placeholder.png" class="shopPic fetchImgStart fecthImgEnd"><div class="picCount wx-view">7万+</div></div></div></div></div><div class="component-review-list-v2" id="review-list-new-pc"><div class="review-list-container wx-view"><div class="component-review-header"><div class="review-header wx-view"><div class="review-title wx-view"><span class="count-text wx-text">评价(21241)</span><span class="tip-text wx-text">1小时前有新增评价</span></div></div></div></div></div></div>
|
|
6
|
+
</body></html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{AuthRequiredError as F,CommandExecutionError as K}from"@jackwener/opencli/errors";import{registerSiteAuthCommands as L}from"../_shared/site-auth.js";async function H(z){return(await z.getCookies({url:"https://www.dianping.com"})).some((B)=>B.name==="dper"&&B.value)}async function J(z){if(!await H(z))throw new F("dianping.com","Dianping dper cookie missing");await z.goto("https://www.dianping.com/citylist");await z.wait(2);const G=await z.evaluate("location.href");if(/account\.dianping\.com\/(pc)?login/.test(String(G||"")))throw new F("dianping.com",`Dianping page redirected to login: ${G}`);const B=await z.evaluate(`
|
|
2
|
+
(() => {
|
|
3
|
+
const trigger = document.querySelector('.userinfo-container .J-user-trigger, .userinfo-container a.username');
|
|
4
|
+
if (!trigger) return { loggedOut: true };
|
|
5
|
+
const nickname = (trigger.textContent || '').trim();
|
|
6
|
+
const href = trigger.getAttribute('href') || '';
|
|
7
|
+
const uid = (String(href).match(/\\/member\\/(\\d+)/) || [])[1] || '';
|
|
8
|
+
return { user_id: uid, nickname };
|
|
9
|
+
})()
|
|
10
|
+
`);if(B?.loggedOut)throw new F("dianping.com","Dianping session anonymous — no logged-in user trigger in top nav");if(!B?.user_id)throw new K("Dianping user trigger found but no /member/<id> href — layout drift");return{user_id:String(B.user_id),nickname:String(B.nickname||"")}}L({site:"dianping",domain:"dianping.com",loginUrl:"https://account.dianping.com/pclogin",columns:["user_id","nickname"],quickCheck:H,verify:J,poll:async(z)=>{if(!await H(z))throw new F("dianping.com","Waiting for Dianping dper cookie");return J(z)}});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{ArgumentError as B,CommandExecutionError as J}from"@jackwener/opencli/errors";import{CITY_ID as b,resolveCityId as j}from"./utils.js";const $=/^[一-龥]+$/,F=/^[a-z]+$/,Z=new Map;export function clearCityResolverCache(){Z.clear()}export async function resolveCityIdAsync(z,G){if(G==null||G==="")return null;const q=String(G).trim();if(!q)return null;if(/^\d+$/.test(q))return Number(q);const W=q.toLowerCase();try{const Q=j(q);if(Q!=null)return Q}catch(Q){if(Q?.code!=="ARGUMENT")throw Q}if(Z.has(W))return Z.get(W);if(Z.has(q))return Z.get(q);let K=null;if(F.test(W))K=W;else if($.test(q)){K=await T(z,q);if(!K){const Q=Object.keys(b).filter((X)=>/^[a-z]+$/.test(X)).join(", ");throw new B("city",`unknown city '${G}'. pass a numeric cityId, a pinyin slug (e.g. shantou), a Chinese name listed on dianping.com/citylist, or one of: ${Q}`)}}else{const Q=Object.keys(b).filter((X)=>/^[a-z]+$/.test(X)).join(", ");throw new B("city",`unknown city '${G}'. pass a numeric cityId, a pinyin slug (e.g. shantou), a Chinese name listed on dianping.com/citylist, or one of: ${Q}`)}const U=await v(z,K);if(!U)throw new J(`dianping could not resolve cityId for '${G}' (pinyin=${K}); the city page rendered without a /search/keyword/{id}/ link`);Z.set(W,U);Z.set(K,U);if($.test(q))Z.set(q,U);return U}export async function resolveDefaultCityId(z){await z.goto("https://www.dianping.com/");await z.wait(1);const G=await z.evaluate(`(() => {
|
|
2
|
+
const el = document.querySelector('.city-select-text, .city-select-content');
|
|
3
|
+
return el ? (el.textContent || '').trim() : '';
|
|
4
|
+
})()`);if(!G||!$.test(G))return null;return resolveCityIdAsync(z,G)}async function T(z,G){await z.goto("https://www.dianping.com/citylist");const q=await z.evaluate(`(${buildCitylistMap.toString()})()`);if(!q||typeof q!=="object"||Object.keys(q).length===0)throw new J("dianping citylist did not render any city anchors; cannot resolve Chinese city names");if(q&&typeof q==="object"&&q[G])return String(q[G]).toLowerCase();return null}export function buildCitylistMap(){const z={};document.querySelectorAll("a").forEach((q)=>{const W=q.getAttribute("href")||"",K=(q.textContent||"").trim();if(!K||!/^[一-龥]+$/.test(K))return;const U=W.replace(/^https?:/,""),Q=U.match(/^\/\/(?:www\.)?dianping\.com\/([a-z]+)\/?$/)||U.match(/^\/([a-z]+)\/?$/);if(!Q)return;const X=Q[1].toLowerCase();if(X==="citylist"||X==="promo"||X==="events")return;if(!z[K])z[K]=X});return z}async function v(z,G){await z.goto(`https://www.dianping.com/${G}`);const q=await z.evaluate(`(${extractCityIdFromPage.toString()})()`);return Number.isInteger(q)&&q>0?q:null}export function extractCityIdFromPage(){const z=typeof location<"u"&&location.href||"https://www.dianping.com/",G=document.querySelectorAll("a[href]");for(const q of G){const W=q.getAttribute("href")||"";let K;try{K=new URL(W,z)}catch{continue}if(K.protocol!=="https:")continue;if(K.hostname!=="www.dianping.com"&&K.hostname!=="dianping.com")continue;const U=K.pathname.match(/^\/search\/keyword\/(\d+)(?:\/|$)/);if(!U)continue;const Q=Number(U[1]);if(Number.isInteger(Q)&&Q>0)return Q}return null}
|