publishport-opencli 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/clis/12306/me.js +2 -2
- package/clis/12306/orders.js +3 -3
- package/clis/12306/passengers.js +3 -3
- package/clis/12306/price.js +1 -1
- package/clis/12306/stations.js +1 -1
- package/clis/12306/train.js +1 -1
- package/clis/12306/trains.js +1 -1
- package/clis/12306/utils.js +1 -1
- package/clis/1688/download.js +1 -1
- package/clis/1688/item.js +4 -4
- package/clis/1688/search.js +4 -4
- package/clis/1688/store.js +4 -4
- package/clis/1point3acres/forum.js +1 -1
- package/clis/1point3acres/forums.js +1 -1
- package/clis/1point3acres/notifications.js +1 -1
- package/clis/1point3acres/search.js +1 -1
- package/clis/1point3acres/thread.js +2 -2
- package/clis/1point3acres/user.js +1 -1
- package/clis/1point3acres/utils.js +2 -2
- package/clis/36kr/article.js +2 -2
- package/clis/36kr/hot.js +2 -2
- package/clis/36kr/news.js +1 -1
- package/clis/36kr/search.js +2 -2
- package/clis/51job/company.js +2 -2
- package/clis/51job/detail.js +2 -2
- package/clis/51job/hot.js +1 -1
- package/clis/51job/search.js +1 -1
- package/clis/51job/utils.js +7 -7
- package/clis/_atlassian/shared.js +9 -9
- package/clis/_shared/article/auth.js +4 -4
- package/clis/_shared/article/douban-md2draft.js +4 -4
- package/clis/_shared/article/format.js +1 -1
- package/clis/_shared/article/images.js +7 -7
- package/clis/_shared/article/login.js +1 -1
- package/clis/_shared/article/publish.js +11 -11
- package/clis/_shared/common.js +1 -1
- package/clis/_shared/content-guard.js +1 -1
- package/clis/_shared/desktop-commands.js +1 -1
- package/clis/_shared/file-inject.js +12 -12
- package/clis/_shared/self-hosted-sites.js +2 -2
- package/clis/_shared/site-auth.js +1 -1
- package/clis/_shared/token-auth.js +2 -2
- package/clis/_shared/video-publish.js +9 -9
- package/clis/amazon/offer.js +3 -3
- package/clis/amazon/product.js +5 -5
- package/clis/amazon/shared.js +6 -6
- package/clis/antigravity/_actions.js +13 -13
- package/clis/antigravity/audit-extras.js +10 -10
- package/clis/antigravity/delete.js +1 -1
- package/clis/antigravity/model.js +6 -6
- package/clis/antigravity/new.js +2 -2
- package/clis/antigravity/read.js +2 -2
- package/clis/antigravity/rename.js +1 -1
- package/clis/antigravity/send.js +3 -3
- package/clis/antigravity/serve.js +17 -17
- package/clis/antigravity/storage.js +6 -6
- package/clis/antigravity/watch.js +2 -2
- package/clis/apple-podcasts/episodes.js +1 -1
- package/clis/apple-podcasts/top.js +1 -1
- package/clis/apple-podcasts/utils.js +1 -1
- package/clis/archive/item.js +1 -1
- package/clis/archive/search.js +1 -1
- package/clis/archive/snapshots.js +1 -1
- package/clis/archive/wayback.js +1 -1
- package/clis/arxiv/author.js +1 -1
- package/clis/arxiv/utils.js +1 -1
- package/clis/autohome/brand.js +1 -1
- package/clis/autohome/score.js +1 -1
- package/clis/autohome/utils.js +1 -1
- package/clis/baijiahao/article.js +1 -1
- package/clis/baijiahao/lists.js +1 -1
- package/clis/baijiahao/login.js +1 -1
- package/clis/baijiahao/publish.js +9 -9
- package/clis/baijiahao/stats.js +1 -1
- package/clis/baijiahao/whoami.js +1 -1
- package/clis/band/bands.js +2 -2
- package/clis/band/mentions.js +2 -2
- package/clis/band/post.js +4 -4
- package/clis/band/posts.js +3 -3
- package/clis/barchart/flow.js +3 -3
- package/clis/barchart/greeks.js +2 -2
- package/clis/barchart/quote.js +3 -3
- package/clis/bbc/news.js +1 -1
- package/clis/bbc/topic.js +1 -1
- package/clis/bbc/utils.js +1 -1
- package/clis/bilibili/article.js +1 -1
- package/clis/bilibili/categories.js +1 -1
- package/clis/bilibili/coin.js +1 -1
- package/clis/bilibili/comment-del.js +1 -1
- package/clis/bilibili/comment-like.js +1 -1
- package/clis/bilibili/comment.js +1 -1
- package/clis/bilibili/comments.js +1 -1
- package/clis/bilibili/dm-list.js +1 -1
- package/clis/bilibili/dm-read.js +1 -1
- package/clis/bilibili/dm-send.js +1 -1
- package/clis/bilibili/download.js +2 -2
- package/clis/bilibili/drafts.js +1 -1
- package/clis/bilibili/dynamic-post.js +3 -3
- package/clis/bilibili/favorite-add.js +1 -1
- package/clis/bilibili/favorite.js +1 -1
- package/clis/bilibili/feed.js +2 -2
- package/clis/bilibili/follow.js +1 -1
- package/clis/bilibili/following.js +1 -1
- package/clis/bilibili/like.js +1 -1
- package/clis/bilibili/partitions.js +1 -1
- package/clis/bilibili/stats.js +1 -1
- package/clis/bilibili/subtitle.js +3 -3
- package/clis/bilibili/summary.js +1 -1
- package/clis/bilibili/topics.js +1 -1
- package/clis/bilibili/unfollow.js +1 -1
- package/clis/bilibili/upload.js +1 -1
- package/clis/bilibili/utils.js +10 -10
- package/clis/bilibili/video-drafts.js +1 -1
- package/clis/bilibili/video.js +1 -1
- package/clis/bloomberg/businessweek.js +4 -4
- package/clis/bloomberg/news.js +2 -2
- package/clis/bloomberg/utils.js +13 -13
- package/clis/bluesky/post.js +1 -1
- package/clis/bluesky/shared.js +11 -11
- package/clis/bluesky/whoami.js +1 -1
- package/clis/booking/search.js +2 -2
- package/clis/boss/accept.js +1 -1
- package/clis/boss/applied.js +1 -1
- package/clis/boss/auth.js +1 -1
- package/clis/boss/batchgreet.js +1 -1
- package/clis/boss/bossinfo.js +1 -1
- package/clis/boss/chatlist.js +1 -1
- package/clis/boss/chatmsg.js +1 -1
- package/clis/boss/cities.js +1 -1
- package/clis/boss/detail.js +1 -1
- package/clis/boss/exchange.js +1 -1
- package/clis/boss/greet.js +1 -1
- package/clis/boss/interviews.js +1 -1
- package/clis/boss/invite.js +1 -1
- package/clis/boss/joblist.js +1 -1
- package/clis/boss/mark.js +1 -1
- package/clis/boss/me.js +2 -2
- package/clis/boss/recommend.js +1 -1
- package/clis/boss/resumedelete.js +1 -1
- package/clis/boss/resumelist.js +1 -1
- package/clis/boss/resumeupload.js +11 -11
- package/clis/boss/search.js +1 -1
- package/clis/boss/send.js +1 -1
- package/clis/boss/sendresume.js +1 -1
- package/clis/boss/stats.js +1 -1
- package/clis/boss/unread.js +1 -1
- package/clis/boss/utils.js +13 -13
- package/clis/chaoxing/assignments.js +1 -1
- package/clis/chaoxing/exams.js +1 -1
- package/clis/chaoxing/utils.js +9 -9
- package/clis/chatgpt/ask.js +1 -1
- package/clis/chatgpt/auth.js +2 -2
- package/clis/chatgpt/detail.js +1 -1
- package/clis/chatgpt/image.js +1 -1
- package/clis/chatgpt/read.js +1 -1
- package/clis/chatgpt/send.js +1 -1
- package/clis/chatgpt/utils.js +59 -59
- package/clis/chatgpt-app/ask.js +1 -1
- package/clis/chatgpt-app/send.js +1 -1
- package/clis/chatwise/model.js +6 -6
- package/clis/chess/analyze.js +1 -1
- package/clis/chess/game.js +1 -1
- package/clis/chess/games.js +1 -1
- package/clis/chess/stats.js +1 -1
- package/clis/chess/utils.js +1 -1
- package/clis/claude/ask.js +2 -2
- package/clis/claude/detail.js +1 -1
- package/clis/claude/new.js +1 -1
- package/clis/claude/read.js +1 -1
- package/clis/claude/send.js +1 -1
- package/clis/claude/utils.js +23 -23
- package/clis/cnblogs/article.js +1 -1
- package/clis/cnblogs/login.js +1 -1
- package/clis/cnblogs/stats.js +7 -7
- package/clis/cnblogs/whoami.js +1 -1
- package/clis/codex/_actions.js +3 -3
- package/clis/codex/archive.js +1 -1
- package/clis/codex/ask.js +6 -6
- package/clis/codex/model.js +8 -8
- package/clis/codex/pin.js +1 -1
- package/clis/codex/rename.js +4 -4
- package/clis/codex/send.js +3 -3
- package/clis/codex/sidebar.js +1 -1
- package/clis/coingecko/categories.js +1 -1
- package/clis/coingecko/coin.js +1 -1
- package/clis/coingecko/derivatives.js +1 -1
- package/clis/coingecko/exchanges.js +1 -1
- package/clis/coingecko/global.js +1 -1
- package/clis/coingecko/trending.js +1 -1
- package/clis/confluence/search.js +1 -1
- package/clis/coupang/product.js +3 -3
- package/clis/coupang/utils.js +1 -1
- package/clis/crates/crate.js +1 -1
- package/clis/crates/search.js +1 -1
- package/clis/crates/utils.js +1 -1
- package/clis/csdn/article.js +13 -13
- package/clis/csdn/columns.js +1 -1
- package/clis/csdn/login.js +1 -1
- package/clis/csdn/stats.js +4 -4
- package/clis/csdn/whoami.js +1 -1
- package/clis/cto51/article.js +1 -1
- package/clis/cto51/whoami.js +1 -1
- package/clis/ctrip/flight.js +2 -2
- package/clis/ctrip/hotel-search.js +3 -3
- package/clis/ctrip/hotel-suggest.js +1 -1
- package/clis/ctrip/search.js +1 -1
- package/clis/ctrip/utils.js +6 -6
- package/clis/cursor/ask.js +5 -5
- package/clis/cursor/composer.js +2 -2
- package/clis/cursor/model.js +4 -4
- package/clis/cursor/send.js +2 -2
- package/clis/dblp/author.js +1 -1
- package/clis/dblp/paper.js +1 -1
- package/clis/dblp/search.js +1 -1
- package/clis/dblp/utils.js +1 -1
- package/clis/dblp/venue.js +1 -1
- package/clis/deepseek/ask.js +1 -1
- package/clis/deepseek/auth.js +2 -2
- package/clis/deepseek/detail.js +1 -1
- package/clis/deepseek/new.js +1 -1
- package/clis/deepseek/read.js +1 -1
- package/clis/deepseek/send.js +7 -7
- package/clis/deepseek/utils.js +25 -25
- package/clis/defillama/protocol.js +1 -1
- package/clis/defillama/protocols.js +1 -1
- package/clis/defillama/utils.js +1 -1
- package/clis/devto/auth.js +2 -2
- package/clis/devto/latest.js +1 -1
- package/clis/devto/publish.js +5 -5
- package/clis/devto/read.js +2 -2
- package/clis/devto/stats.js +3 -3
- package/clis/dianping/auth.js +2 -2
- package/clis/dianping/cityResolver.js +2 -2
- package/clis/dianping/search.js +1 -1
- package/clis/dianping/shop.js +1 -1
- package/clis/dianping/utils.js +1 -1
- package/clis/discord-app/delete.js +3 -3
- package/clis/discord-app/read.js +1 -1
- package/clis/discord-app/thread-read.js +1 -1
- package/clis/discord-web/auth.js +2 -2
- package/clis/discord-web/send.js +5 -5
- package/clis/dockerhub/image.js +1 -1
- package/clis/dockerhub/search.js +1 -1
- package/clis/dockerhub/utils.js +1 -1
- package/clis/dongchedi/koubei.js +1 -1
- package/clis/dongchedi/models.js +1 -1
- package/clis/dongchedi/score.js +1 -1
- package/clis/dongchedi/search.js +1 -1
- package/clis/dongchedi/series.js +1 -1
- package/clis/dongchedi/specs.js +1 -1
- package/clis/dongchedi/utils.js +1 -1
- package/clis/douban/article.js +3 -3
- package/clis/douban/auth.js +2 -2
- package/clis/douban/download.js +1 -1
- package/clis/douban/utils.js +23 -23
- package/clis/doubao/auth.js +3 -3
- package/clis/doubao/utils.js +39 -39
- package/clis/doubao-app/ask.js +1 -1
- package/clis/doubao-app/utils.js +4 -4
- package/clis/douyin/_shared/browser-fetch.js +7 -7
- package/clis/douyin/_shared/draft-cache.js +1 -1
- package/clis/douyin/_shared/imagex-upload.js +1 -1
- package/clis/douyin/_shared/sts2.js +1 -1
- package/clis/douyin/_shared/text-extra.js +1 -1
- package/clis/douyin/_shared/tos-upload.js +4 -4
- package/clis/douyin/_shared/transcode.js +1 -1
- package/clis/douyin/_shared/vod-upload.js +4 -4
- package/clis/douyin/draft.js +18 -18
- package/clis/douyin/drafts.js +1 -1
- package/clis/douyin/publish-image.js +12 -12
- package/clis/douyin/publish.js +9 -9
- package/clis/douyin/search.js +3 -3
- package/clis/douyin/videos.js +1 -1
- package/clis/eastmoney/_secid.js +1 -1
- package/clis/eastmoney/announcement.js +1 -1
- package/clis/eastmoney/article.js +1 -1
- package/clis/eastmoney/convertible.js +1 -1
- package/clis/eastmoney/etf.js +1 -1
- package/clis/eastmoney/holders.js +1 -1
- package/clis/eastmoney/index-board.js +1 -1
- package/clis/eastmoney/kline.js +1 -1
- package/clis/eastmoney/kuaixun.js +1 -1
- package/clis/eastmoney/longhu.js +1 -1
- package/clis/eastmoney/money-flow.js +1 -1
- package/clis/eastmoney/northbound.js +1 -1
- package/clis/eastmoney/quote.js +1 -1
- package/clis/eastmoney/rank.js +1 -1
- package/clis/eastmoney/sectors.js +1 -1
- package/clis/endoflife/product.js +1 -1
- package/clis/endoflife/utils.js +1 -1
- package/clis/facebook/comment.js +8 -8
- package/clis/facebook/feed.js +4 -4
- package/clis/facebook/like.js +5 -5
- package/clis/facebook/notifications.js +3 -3
- package/clis/facebook/post.js +11 -11
- package/clis/facebook/search.js +3 -3
- package/clis/flathub/app.js +1 -1
- package/clis/flathub/search.js +1 -1
- package/clis/flathub/utils.js +1 -1
- package/clis/flomo/memos.js +1 -1
- package/clis/gemini/deep-research-result.js +4 -4
- package/clis/gemini/deep-research.js +1 -1
- package/clis/gemini/detail.js +1 -1
- package/clis/gemini/history.js +1 -1
- package/clis/gemini/image.js +2 -2
- package/clis/gemini/status.js +1 -1
- package/clis/gemini/utils.js +43 -43
- package/clis/geogebra/hexagon.js +1 -1
- package/clis/geogebra/info.js +3 -3
- package/clis/geogebra/triangle.js +1 -1
- package/clis/geogebra/utils.js +11 -11
- package/clis/ghost/login.js +1 -1
- package/clis/ghost/shared.js +2 -2
- package/clis/gitee/auth.js +2 -2
- package/clis/github-trending/repos.js +1 -1
- package/clis/google/news.js +1 -1
- package/clis/google/search.js +2 -2
- package/clis/google/suggest.js +1 -1
- package/clis/google/trends.js +1 -1
- package/clis/google/utils.js +1 -1
- package/clis/goproxy/module.js +1 -1
- package/clis/goproxy/utils.js +1 -1
- package/clis/goproxy/versions.js +1 -1
- package/clis/gov-policy/recent.js +2 -2
- package/clis/gov-policy/search.js +2 -2
- package/clis/grok/ask.js +1 -1
- package/clis/grok/detail.js +1 -1
- package/clis/grok/image.js +8 -8
- package/clis/grok/pin.js +1 -1
- package/clis/grok/send.js +1 -1
- package/clis/grok/status.js +1 -1
- package/clis/grok/utils.js +21 -21
- package/clis/guazi/browse.js +1 -1
- package/clis/guazi/car.js +1 -1
- package/clis/guazi/utils.js +1 -1
- package/clis/hackernews/auth.js +2 -2
- package/clis/hackernews/comment.js +8 -8
- package/clis/hackernews/read.js +7 -7
- package/clis/hackernews/submit.js +7 -7
- package/clis/hashnode/auth.js +3 -3
- package/clis/hashnode/publish.js +14 -14
- package/clis/hf/auth.js +2 -2
- package/clis/hf/models.js +1 -1
- package/clis/hf/paper.js +1 -1
- package/clis/hf/spaces.js +1 -1
- package/clis/hf/top.js +1 -1
- package/clis/homebrew/cask.js +1 -1
- package/clis/homebrew/formula.js +1 -1
- package/clis/homebrew/popular.js +1 -1
- package/clis/homebrew/utils.js +1 -1
- package/clis/huodongxing/events.js +1 -1
- package/clis/hupu/detail.js +4 -4
- package/clis/hupu/hot.js +3 -3
- package/clis/hupu/reply.js +1 -1
- package/clis/hupu/search.js +1 -1
- package/clis/hupu/unlike.js +1 -1
- package/clis/hupu/utils.js +10 -10
- package/clis/imdb/person.js +2 -2
- package/clis/imdb/reviews.js +3 -3
- package/clis/imdb/search.js +2 -2
- package/clis/imdb/title.js +1 -1
- package/clis/imdb/top.js +1 -1
- package/clis/imdb/trending.js +1 -1
- package/clis/imdb/utils.js +13 -13
- package/clis/imooc/article.js +6 -6
- package/clis/imooc/login.js +1 -1
- package/clis/imooc/whoami.js +1 -1
- package/clis/indeed/job.js +2 -2
- package/clis/indeed/search.js +2 -2
- package/clis/indeed/utils.js +1 -1
- package/clis/infoq/article.js +2 -2
- package/clis/infoq/login.js +1 -1
- package/clis/infoq/whoami.js +1 -1
- package/clis/instagram/_shared/private-publish.js +4 -4
- package/clis/instagram/_shared/protocol-capture.js +9 -9
- package/clis/instagram/detail.js +3 -3
- package/clis/instagram/post.js +25 -25
- package/clis/instagram/reel.js +18 -18
- package/clis/instagram/story.js +4 -4
- package/clis/instagram/user.js +2 -2
- package/clis/jd/item.js +65 -65
- package/clis/jianshu/article.js +1 -1
- package/clis/jianshu/login.js +1 -1
- package/clis/jianshu/notebooks.js +1 -1
- package/clis/jianshu/whoami.js +1 -1
- package/clis/jianyu/search.js +6 -6
- package/clis/jianyu/shared/procurement-contract.js +1 -1
- package/clis/jike/api.js +6 -6
- package/clis/jike/auth.js +3 -3
- package/clis/jike/comment.js +1 -1
- package/clis/jike/create.js +6 -6
- package/clis/jike/feed.js +3 -3
- package/clis/jike/like.js +1 -1
- package/clis/jike/notifications.js +3 -3
- package/clis/jike/repost.js +13 -13
- package/clis/jike/search.js +3 -3
- package/clis/jimeng/auth.js +2 -2
- package/clis/jimeng/generate.js +10 -10
- package/clis/jira/shared.js +1 -1
- package/clis/juejin/article.js +4 -4
- package/clis/juejin/categories.js +1 -1
- package/clis/juejin/hot.js +1 -1
- package/clis/juejin/login.js +1 -1
- package/clis/juejin/recommend.js +1 -1
- package/clis/juejin/stats.js +3 -3
- package/clis/juejin/tags.js +1 -1
- package/clis/juejin/utils.js +1 -1
- package/clis/juejin/whoami.js +1 -1
- package/clis/ke/utils.js +4 -4
- package/clis/kimi/_utils.js +7 -7
- package/clis/kimi/audit-extras.js +14 -14
- package/clis/kimi/auth.js +3 -3
- package/clis/kimi/chat.js +15 -15
- package/clis/kimi/storage.js +5 -5
- package/clis/kimi/ui.js +13 -13
- package/clis/kimi/usage.js +3 -3
- package/clis/kuaishou/auth.js +1 -1
- package/clis/kuaishou/publish.js +6 -6
- package/clis/lesswrong/_helpers.js +5 -5
- package/clis/lesswrong/comments.js +5 -5
- package/clis/lichess/top.js +1 -1
- package/clis/lichess/user.js +1 -1
- package/clis/lichess/utils.js +1 -1
- package/clis/linkedin/comment.js +1 -1
- package/clis/linkedin/connect.js +11 -11
- package/clis/linkedin/create.js +5 -5
- package/clis/linkedin/follow.js +1 -1
- package/clis/linkedin/inbox.js +1 -1
- package/clis/linkedin/job-detail.js +3 -3
- package/clis/linkedin/like.js +1 -1
- package/clis/linkedin/notifications.js +1 -1
- package/clis/linkedin/people-search.js +1 -1
- package/clis/linkedin/post-comments.js +1 -1
- package/clis/linkedin/post-detail.js +1 -1
- package/clis/linkedin/profile-analytics.js +1 -1
- package/clis/linkedin/profile-api.js +13 -13
- package/clis/linkedin/profile-experience.js +1 -1
- package/clis/linkedin/profile-projects.js +1 -1
- package/clis/linkedin/profile-read.js +3 -3
- package/clis/linkedin/reply.js +1 -1
- package/clis/linkedin/repost.js +1 -1
- package/clis/linkedin/safe-send.js +8 -8
- package/clis/linkedin/salesnav-inbox.js +5 -5
- package/clis/linkedin/salesnav-message.js +3 -3
- package/clis/linkedin/salesnav-search.js +4 -4
- package/clis/linkedin/salesnav-thread.js +1 -1
- package/clis/linkedin/search-api.js +3 -3
- package/clis/linkedin/search.js +8 -8
- package/clis/linkedin/social-api.js +31 -31
- package/clis/linkedin/timeline.js +3 -3
- package/clis/linkedin-learning/search.js +2 -2
- package/clis/linkedin-learning/trending.js +2 -2
- package/clis/linux-do/feed.js +4 -4
- package/clis/linux-do/topic-content.js +8 -8
- package/clis/lobsters/domain.js +1 -1
- package/clis/lobsters/read.js +7 -7
- package/clis/maimai/auth.js +2 -2
- package/clis/maimai/search-talents.js +4 -4
- package/clis/manus/_utils.js +1 -1
- package/clis/mastodon/login.js +1 -1
- package/clis/mastodon/post.js +1 -1
- package/clis/mastodon/shared.js +12 -12
- package/clis/mastodon/whoami.js +1 -1
- package/clis/maven/artifact.js +1 -1
- package/clis/maven/search.js +1 -1
- package/clis/maven/utils.js +1 -1
- package/clis/mdn/search.js +1 -1
- package/clis/medium/article.js +5 -5
- package/clis/medium/login.js +1 -1
- package/clis/medium/stats.js +3 -3
- package/clis/medium/tag.js +1 -1
- package/clis/medium/whoami.js +1 -1
- package/clis/mubu/notes.js +1 -1
- package/clis/mubu/utils.js +15 -15
- package/clis/note/auth.js +2 -2
- package/clis/note/note-utils.js +2 -2
- package/clis/note/publish.js +8 -8
- package/clis/notebooklm/add-source.js +8 -8
- package/clis/notebooklm/create.js +1 -1
- package/clis/notebooklm/generate-slides.js +1 -1
- package/clis/notebooklm/notes-get.js +1 -1
- package/clis/notebooklm/rpc.js +8 -8
- package/clis/notebooklm/source-fulltext.js +1 -1
- package/clis/notebooklm/utils.js +10 -10
- package/clis/nowcoder/auth.js +2 -2
- package/clis/nowcoder/comment.js +1 -1
- package/clis/nowcoder/comments.js +1 -1
- package/clis/nowcoder/dm-list.js +1 -1
- package/clis/nowcoder/dm-read.js +1 -1
- package/clis/nowcoder/dm-send.js +1 -1
- package/clis/nowcoder/drafts.js +1 -1
- package/clis/nowcoder/inbox.js +1 -1
- package/clis/nowcoder/like.js +1 -1
- package/clis/nowcoder/my.js +1 -1
- package/clis/nowcoder/post.js +1 -1
- package/clis/nowcoder/utils.js +13 -13
- package/clis/npm/downloads.js +1 -1
- package/clis/npm/package.js +1 -1
- package/clis/npm/search.js +1 -1
- package/clis/npm/utils.js +1 -1
- package/clis/nuget/package.js +1 -1
- package/clis/nuget/search.js +1 -1
- package/clis/nuget/utils.js +1 -1
- package/clis/nvd/cve.js +1 -1
- package/clis/oeis/search.js +1 -1
- package/clis/oeis/sequence.js +1 -1
- package/clis/oeis/utils.js +1 -1
- package/clis/ones/common.js +6 -6
- package/clis/ones/enrich-tasks.js +1 -1
- package/clis/ones/my-tasks.js +1 -1
- package/clis/ones/resolve-labels.js +1 -1
- package/clis/ones/task-helpers.js +1 -1
- package/clis/ones/task.js +1 -1
- package/clis/ones/worklog.js +7 -7
- package/clis/openalex/search.js +1 -1
- package/clis/openalex/utils.js +1 -1
- package/clis/openalex/work.js +1 -1
- package/clis/openfda/drug-label.js +1 -1
- package/clis/openfda/food-recall.js +1 -1
- package/clis/openfda/utils.js +1 -1
- package/clis/openreview/author.js +1 -1
- package/clis/openreview/paper.js +1 -1
- package/clis/openreview/reviews.js +3 -3
- package/clis/openreview/search.js +1 -1
- package/clis/openreview/utils.js +1 -1
- package/clis/openreview/venue.js +1 -1
- package/clis/oschina/article.js +1 -1
- package/clis/oschina/catalogs.js +1 -1
- package/clis/oschina/login.js +1 -1
- package/clis/oschina/stats.js +6 -6
- package/clis/oschina/whoami.js +1 -1
- package/clis/osv/query.js +1 -1
- package/clis/osv/utils.js +1 -1
- package/clis/osv/vulnerability.js +1 -1
- package/clis/packagist/package.js +1 -1
- package/clis/packagist/search.js +1 -1
- package/clis/packagist/utils.js +1 -1
- package/clis/pinterest/api.js +1 -1
- package/clis/pinterest/auth.js +1 -1
- package/clis/pinterest/boards.js +1 -1
- package/clis/pinterest/client.js +6 -6
- package/clis/pinterest/publish.js +5 -5
- package/clis/pixiv/auth.js +2 -2
- package/clis/pixiv/download.js +1 -1
- package/clis/pixiv/illusts.js +1 -1
- package/clis/pixiv/search.js +1 -1
- package/clis/pixiv/utils.js +3 -3
- package/clis/powerchina/auth.js +2 -2
- package/clis/powerchina/search.js +1 -1
- package/clis/producthunt/browse.js +2 -2
- package/clis/producthunt/hot.js +2 -2
- package/clis/producthunt/posts.js +1 -1
- package/clis/producthunt/today.js +1 -1
- package/clis/producthunt/utils.js +1 -1
- package/clis/pypi/downloads.js +1 -1
- package/clis/pypi/package.js +1 -1
- package/clis/pypi/utils.js +1 -1
- package/clis/qiita/auth.js +1 -1
- package/clis/qiita/gql.js +6 -6
- package/clis/qiita/publish.js +4 -4
- package/clis/qiita/stats.js +4 -4
- package/clis/qoder/_utils.js +16 -16
- package/clis/qoder/composer.js +1 -1
- package/clis/qoder/quest.js +1 -1
- package/clis/qoder/ui.js +14 -14
- package/clis/quark/auth.js +2 -2
- package/clis/quark/utils.js +2 -2
- package/clis/quora/answer-comments.js +3 -3
- package/clis/quora/create-answer.js +4 -4
- package/clis/quora/create-question.js +3 -3
- package/clis/quora/shared.js +17 -17
- package/clis/quora/whoami.js +1 -1
- package/clis/qwen/ask.js +1 -1
- package/clis/qwen/auth.js +3 -3
- package/clis/qwen/detail.js +1 -1
- package/clis/qwen/image.js +5 -5
- package/clis/qwen/status.js +1 -1
- package/clis/qwen/utils.js +16 -16
- package/clis/reddit/home.js +3 -3
- package/clis/reddit/read.js +10 -10
- package/clis/reddit/reply.js +4 -4
- package/clis/reddit/submit.js +11 -11
- package/clis/reddit/subreddit-info.js +3 -3
- package/clis/reddit/subscribed.js +4 -4
- package/clis/reddit/whoami.js +2 -2
- package/clis/rednote/comments.js +1 -1
- package/clis/rednote/download.js +1 -1
- package/clis/rednote/feed.js +1 -1
- package/clis/rednote/note.js +1 -1
- package/clis/rednote/notifications.js +2 -2
- package/clis/rednote/search.js +2 -2
- package/clis/rest-countries/country.js +1 -1
- package/clis/rest-countries/region.js +1 -1
- package/clis/rest-countries/utils.js +1 -1
- package/clis/reuters/article-detail.js +1 -1
- package/clis/reuters/auth.js +3 -3
- package/clis/reuters/search.js +1 -1
- package/clis/reuters/utils.js +4 -4
- package/clis/rfc/rfc.js +1 -1
- package/clis/rfc/utils.js +1 -1
- package/clis/rubygems/gem.js +1 -1
- package/clis/rubygems/search.js +1 -1
- package/clis/rubygems/utils.js +1 -1
- package/clis/segmentfault/article.js +3 -3
- package/clis/segmentfault/channels.js +1 -1
- package/clis/segmentfault/login.js +1 -1
- package/clis/segmentfault/stats.js +4 -4
- package/clis/segmentfault/tags.js +1 -1
- package/clis/segmentfault/whoami.js +1 -1
- package/clis/semanticscholar/citations.js +1 -1
- package/clis/semanticscholar/paper.js +1 -1
- package/clis/semanticscholar/recommendations.js +1 -1
- package/clis/semanticscholar/search.js +1 -1
- package/clis/semanticscholar/utils.js +1 -1
- package/clis/sinafinance/news.js +1 -1
- package/clis/sinafinance/stock-rank.js +1 -1
- package/clis/sinafinance/stock.js +1 -1
- package/clis/slock/attachment-download.js +1 -1
- package/clis/slock/attachment-upload.js +7 -7
- package/clis/slock/attachment-url.js +1 -1
- package/clis/slock/auth-verify.js +1 -1
- package/clis/slock/bookmark-add.js +1 -1
- package/clis/slock/bookmark-remove.js +1 -1
- package/clis/slock/channel-action.js +1 -1
- package/clis/slock/channel-create.js +1 -1
- package/clis/slock/channel-files.js +1 -1
- package/clis/slock/channel-list.js +1 -1
- package/clis/slock/channel-mark.js +1 -1
- package/clis/slock/channel-members.js +1 -1
- package/clis/slock/channel-unarchive.js +1 -1
- package/clis/slock/dm-list.js +1 -1
- package/clis/slock/errors.js +1 -1
- package/clis/slock/in-page.js +28 -28
- package/clis/slock/inbox-done.js +5 -5
- package/clis/slock/inbox.js +1 -1
- package/clis/slock/message-read.js +22 -22
- package/clis/slock/message-search.js +10 -10
- package/clis/slock/message-send.js +25 -25
- package/clis/slock/reaction-add.js +1 -1
- package/clis/slock/reaction-remove.js +1 -1
- package/clis/slock/resolve.js +1 -1
- package/clis/slock/server-list.js +2 -2
- package/clis/slock/task-claim.js +4 -4
- package/clis/slock/task-convert.js +13 -13
- package/clis/slock/task-create.js +1 -1
- package/clis/slock/task-delete.js +5 -5
- package/clis/slock/task-get.js +5 -5
- package/clis/slock/task-list-server.js +4 -4
- package/clis/slock/task-list.js +5 -5
- package/clis/slock/task-status.js +3 -3
- package/clis/slock/task-unclaim.js +3 -3
- package/clis/slock/thread-follow.js +1 -1
- package/clis/slock/thread-state.js +1 -1
- package/clis/slock/unread-summary.js +5 -5
- package/clis/slock/whoami.js +1 -1
- package/clis/smzdm/search.js +3 -3
- package/clis/sohu/article.js +1 -1
- package/clis/sohu/attributes.js +1 -1
- package/clis/sohu/categories.js +1 -1
- package/clis/sohu/channels.js +1 -1
- package/clis/sohu/columns.js +1 -1
- package/clis/sohu/login.js +1 -1
- package/clis/sohu/stats.js +3 -3
- package/clis/sohu/topics.js +1 -1
- package/clis/sohu/whoami.js +1 -1
- package/clis/spotify/spotify.js +1 -1
- package/clis/stackoverflow/read.js +6 -6
- package/clis/stackoverflow/related.js +1 -1
- package/clis/stackoverflow/tag.js +1 -1
- package/clis/stackoverflow/user.js +1 -1
- package/clis/stackoverflow/utils.js +1 -1
- package/clis/steam/app.js +1 -1
- package/clis/steam/search.js +1 -1
- package/clis/steam/utils.js +1 -1
- package/clis/substack/auth.js +2 -2
- package/clis/substack/post-utils.js +2 -2
- package/clis/substack/publish.js +5 -5
- package/clis/suno/auth.js +2 -2
- package/clis/suno/download.js +5 -5
- package/clis/suno/generate.js +3 -3
- package/clis/suno/list.js +1 -1
- package/clis/suno/status.js +1 -1
- package/clis/suno/utils.js +29 -29
- package/clis/telegram/send.js +7 -7
- package/clis/telegram/shared.js +2 -2
- package/clis/telegram/whoami.js +1 -1
- package/clis/test-utils.js +1 -1
- package/clis/threads/post.js +23 -23
- package/clis/threads/shared.js +3 -3
- package/clis/threads/whoami.js +1 -1
- package/clis/tieba/hot.js +3 -3
- package/clis/tieba/posts.js +1 -1
- package/clis/tieba/read.js +2 -2
- package/clis/tieba/search.js +3 -3
- package/clis/tieba/utils.js +1 -1
- package/clis/tiktok/comment.js +2 -2
- package/clis/tiktok/creator-videos.js +3 -3
- package/clis/tiktok/explore.js +3 -3
- package/clis/tiktok/follow.js +8 -8
- package/clis/tiktok/following.js +4 -4
- package/clis/tiktok/friends.js +7 -7
- package/clis/tiktok/live.js +3 -3
- package/clis/tiktok/notifications.js +6 -6
- package/clis/tiktok/publish.js +17 -17
- package/clis/tiktok/unfollow.js +4 -4
- package/clis/tiktok/user.js +2 -2
- package/clis/tiktok/utils.js +1 -1
- package/clis/toutiao/article.js +1 -1
- package/clis/toutiao/articles.js +2 -2
- package/clis/toutiao/auth.js +2 -2
- package/clis/toutiao/hot.js +1 -1
- package/clis/toutiao/recommend.js +1 -1
- package/clis/toutiao/utils.js +2 -2
- package/clis/trae-solo/_actions.js +4 -4
- package/clis/trae-solo/_fs.js +5 -5
- package/clis/trae-solo/_state.js +2 -2
- package/clis/trae-solo/automation.js +4 -4
- package/clis/trae-solo/mode.js +4 -4
- package/clis/trae-solo/model.js +4 -4
- package/clis/trae-solo/renderer-storage.js +4 -4
- package/clis/trae-solo/settings.js +1 -1
- package/clis/trae-solo/skill-fs.js +1 -1
- package/clis/trae-solo/skill.js +12 -12
- package/clis/trae-solo/state-fs.js +2 -2
- package/clis/trae-solo/task-fs.js +5 -5
- package/clis/trae-solo/workspaces-fs.js +1 -1
- package/clis/tumblr/auth.js +2 -2
- package/clis/tumblr/publish.js +3 -3
- package/clis/tvmaze/search.js +1 -1
- package/clis/tvmaze/show.js +1 -1
- package/clis/tvmaze/utils.js +1 -1
- package/clis/twitter/accept.js +7 -7
- package/clis/twitter/article.js +7 -7
- package/clis/twitter/bookmark-folder.js +3 -3
- package/clis/twitter/bookmark-folders.js +3 -3
- package/clis/twitter/bookmarks.js +4 -4
- package/clis/twitter/delete.js +5 -5
- package/clis/twitter/device-follow.js +3 -3
- package/clis/twitter/dm-list.js +1 -1
- package/clis/twitter/dm-read.js +1 -1
- package/clis/twitter/dm-send.js +5 -5
- package/clis/twitter/dm-shared.js +3 -3
- package/clis/twitter/download.js +6 -6
- package/clis/twitter/followers.js +5 -5
- package/clis/twitter/following.js +2 -2
- package/clis/twitter/like.js +3 -3
- package/clis/twitter/likes.js +8 -8
- package/clis/twitter/list-add-core.js +9 -9
- package/clis/twitter/list-create.js +5 -5
- package/clis/twitter/list-remove-core.js +9 -9
- package/clis/twitter/list-tweets.js +7 -7
- package/clis/twitter/lists.js +6 -6
- package/clis/twitter/notifications.js +2 -2
- package/clis/twitter/post.js +24 -24
- package/clis/twitter/profile.js +7 -7
- package/clis/twitter/quote.js +7 -7
- package/clis/twitter/reply-dm.js +7 -7
- package/clis/twitter/reply.js +12 -12
- package/clis/twitter/retweet.js +3 -3
- package/clis/twitter/scheduled-delete.js +3 -3
- package/clis/twitter/scheduled-list.js +2 -2
- package/clis/twitter/scheduled-utils.js +3 -3
- package/clis/twitter/search.js +5 -5
- package/clis/twitter/shared.js +6 -6
- package/clis/twitter/thread.js +4 -4
- package/clis/twitter/timeline.js +3 -3
- package/clis/twitter/trending.js +2 -2
- package/clis/twitter/tweets.js +11 -11
- package/clis/twitter/unlike.js +3 -3
- package/clis/twitter/unretweet.js +3 -3
- package/clis/twitter/utils.js +6 -6
- package/clis/upwork/detail.js +2 -2
- package/clis/upwork/feed.js +2 -2
- package/clis/upwork/search.js +2 -2
- package/clis/upwork/utils.js +1 -1
- package/clis/v2ex/auth.js +2 -2
- package/clis/v2ex/daily.js +3 -3
- package/clis/v2ex/me.js +2 -2
- package/clis/v2ex/notifications.js +2 -2
- package/clis/vk/post.js +1 -1
- package/clis/vk/shared.js +2 -2
- package/clis/vk/whoami.js +1 -1
- package/clis/web/read.js +8 -8
- package/clis/wechat-channels/auth.js +2 -2
- package/clis/wechat-channels/publish.js +30 -30
- package/clis/weibo/article.js +1 -1
- package/clis/weibo/auth.js +3 -3
- package/clis/weibo/comments.js +1 -1
- package/clis/weibo/delete.js +2 -2
- package/clis/weibo/feed.js +3 -3
- package/clis/weibo/hot.js +1 -1
- package/clis/weibo/publish.js +10 -10
- package/clis/weibo/search.js +2 -2
- package/clis/weibo/user-posts.js +3 -3
- package/clis/weibo/user.js +2 -2
- package/clis/weibo/utils.js +3 -3
- package/clis/weixin/article.js +1 -1
- package/clis/weixin/create-draft.js +26 -26
- package/clis/weixin/download.js +2 -2
- package/clis/weixin/login.js +1 -1
- package/clis/weixin/search.js +2 -2
- package/clis/weixin/stats.js +3 -3
- package/clis/weixin/whoami.js +1 -1
- package/clis/weread/ai-outline.js +2 -2
- package/clis/weread/book-search.js +2 -2
- package/clis/weread/book.js +2 -2
- package/clis/weread/notebooks.js +1 -1
- package/clis/weread/search.js +1 -1
- package/clis/weread/shelf.js +1 -1
- package/clis/weread/utils.js +6 -6
- package/clis/weread-official/book.js +1 -1
- package/clis/weread-official/discover.js +1 -1
- package/clis/weread-official/list-apis.js +1 -1
- package/clis/weread-official/notes.js +1 -1
- package/clis/weread-official/readdata.js +1 -1
- package/clis/weread-official/review.js +1 -1
- package/clis/weread-official/search.js +1 -1
- package/clis/weread-official/shelf.js +1 -1
- package/clis/weread-official/utils.js +1 -1
- package/clis/wikidata/entity.js +1 -1
- package/clis/wikidata/search.js +1 -1
- package/clis/wikidata/utils.js +1 -1
- package/clis/wikipedia/page.js +1 -1
- package/clis/wikipedia/trending.js +1 -1
- package/clis/wikipedia/utils.js +1 -1
- package/clis/wordpress/login.js +1 -1
- package/clis/wordpress/publish.js +1 -1
- package/clis/wordpress/shared.js +3 -3
- package/clis/wordpress/whoami.js +1 -1
- package/clis/woshipm/article.js +1 -1
- package/clis/woshipm/login.js +1 -1
- package/clis/woshipm/stats.js +4 -4
- package/clis/woshipm/whoami.js +1 -1
- package/clis/wttr/current.js +1 -1
- package/clis/wttr/forecast.js +1 -1
- package/clis/wttr/utils.js +1 -1
- package/clis/xianyu/collect.js +1 -1
- package/clis/xianyu/inbox.js +1 -1
- package/clis/xianyu/item-stats.js +2 -2
- package/clis/xianyu/location.js +1 -1
- package/clis/xianyu/manage.js +1 -1
- package/clis/xianyu/messages.js +1 -1
- package/clis/xianyu/mtop.js +5 -5
- package/clis/xianyu/order.js +1 -1
- package/clis/xianyu/promote-stats.js +2 -2
- package/clis/xianyu/publish.js +17 -17
- package/clis/xianyu/rate.js +1 -1
- package/clis/xianyu/reply.js +1 -1
- package/clis/xianyu/search.js +8 -8
- package/clis/xianyu/seller-data.js +1 -1
- package/clis/xianyu/seller-list.js +1 -1
- package/clis/xianyu/user.js +1 -1
- package/clis/xiaoe/catalog.js +2 -2
- package/clis/xiaoe/content.js +2 -2
- package/clis/xiaoe/courses.js +2 -2
- package/clis/xiaohongshu/ask.js +6 -6
- package/clis/xiaohongshu/comments.js +6 -6
- package/clis/xiaohongshu/creator-note-detail.js +7 -7
- package/clis/xiaohongshu/creator-notes-summary.js +1 -1
- package/clis/xiaohongshu/creator-notes.js +13 -13
- package/clis/xiaohongshu/creator-profile.js +2 -2
- package/clis/xiaohongshu/creator-stats.js +2 -2
- package/clis/xiaohongshu/delete-note.js +7 -7
- package/clis/xiaohongshu/download.js +4 -4
- package/clis/xiaohongshu/feed.js +2 -2
- package/clis/xiaohongshu/follow.js +3 -3
- package/clis/xiaohongshu/human.js +3 -3
- package/clis/xiaohongshu/note-helpers.js +1 -1
- package/clis/xiaohongshu/note.js +2 -2
- package/clis/xiaohongshu/notifications.js +1 -1
- package/clis/xiaohongshu/publish-video.js +8 -8
- package/clis/xiaohongshu/publish.js +59 -59
- package/clis/xiaohongshu/search.js +8 -8
- package/clis/xiaohongshu/unfollow.js +4 -4
- package/clis/xiaohongshu/user-helpers.js +1 -1
- package/clis/xiaohongshu/user.js +2 -2
- package/clis/xiaoyuzhou/auth.js +3 -3
- package/clis/xiaoyuzhou/download.js +1 -1
- package/clis/xiaoyuzhou/utils.js +1 -1
- package/clis/xueqiu/article.js +4 -4
- package/clis/xueqiu/comments.js +4 -4
- package/clis/xueqiu/danjuan-utils.js +4 -4
- package/clis/xueqiu/earnings-date.js +1 -1
- package/clis/xueqiu/events.js +3 -3
- package/clis/xueqiu/hashtags.js +3 -3
- package/clis/xueqiu/stocks.js +3 -3
- package/clis/xueqiu/users.js +3 -3
- package/clis/xueqiu/utils.js +3 -3
- package/clis/yahoo-finance/quote.js +1 -1
- package/clis/yollomi/background.js +1 -1
- package/clis/yollomi/edit.js +1 -1
- package/clis/yollomi/face-swap.js +1 -1
- package/clis/yollomi/generate.js +1 -1
- package/clis/yollomi/object-remover.js +1 -1
- package/clis/yollomi/remove-bg.js +1 -1
- package/clis/yollomi/restore.js +1 -1
- package/clis/yollomi/try-on.js +1 -1
- package/clis/yollomi/upload.js +4 -4
- package/clis/yollomi/upscale.js +1 -1
- package/clis/yollomi/utils.js +4 -4
- package/clis/yollomi/video.js +1 -1
- package/clis/youtube/channel.js +4 -4
- package/clis/youtube/feed.js +2 -2
- package/clis/youtube/like.js +5 -5
- package/clis/youtube/playlist.js +7 -7
- package/clis/youtube/publish.js +11 -11
- package/clis/youtube/search.js +3 -3
- package/clis/youtube/subscribe.js +7 -7
- package/clis/youtube/subscriptions.js +1 -1
- package/clis/youtube/transcript-group.js +2 -2
- package/clis/youtube/transcript.js +13 -13
- package/clis/youtube/unlike.js +5 -5
- package/clis/youtube/unsubscribe.js +7 -7
- package/clis/youtube/utils.js +3 -3
- package/clis/youtube/video.js +4 -4
- package/clis/youtube/watch-later.js +2 -2
- package/clis/yuanbao/ask.js +18 -18
- package/clis/yuanbao/detail.js +1 -1
- package/clis/yuanbao/read.js +1 -1
- package/clis/yuanbao/shared.js +9 -9
- package/clis/yuanbao/status.js +1 -1
- package/clis/yuque/article.js +1 -1
- package/clis/yuque/whoami.js +1 -1
- package/clis/zhihu/answer-comments.js +2 -2
- package/clis/zhihu/answer-detail.js +3 -3
- package/clis/zhihu/answer.js +1 -1
- package/clis/zhihu/article-transform.js +1 -1
- package/clis/zhihu/article.js +1 -1
- package/clis/zhihu/auth.js +2 -2
- package/clis/zhihu/collection.js +3 -3
- package/clis/zhihu/collections.js +3 -3
- package/clis/zhihu/download.js +2 -2
- package/clis/zhihu/image-profile.js +6 -6
- package/clis/zhihu/paginate.js +3 -3
- package/clis/zhihu/pin.js +4 -4
- package/clis/zhihu/question.js +3 -3
- package/clis/zhihu/recommend.js +3 -3
- package/clis/zhihu/search.js +3 -3
- package/clis/zhihu/stats.js +3 -3
- package/clis/zhihu/user-arg.js +1 -1
- package/clis/zhihu/write-shared.js +7 -7
- package/clis/zlibrary/utils.js +6 -6
- package/clis/zsxq/auth.js +3 -3
- package/clis/zsxq/search.js +1 -1
- package/clis/zsxq/topic.js +1 -1
- package/clis/zsxq/utils.js +5 -5
- package/dist/src/adapter-source.js +1 -1
- package/dist/src/browser/analyze.js +1 -1
- package/dist/src/browser/article-extract.js +2 -2
- package/dist/src/browser/ax-snapshot.js +2 -2
- package/dist/src/browser/base-page.js +25 -25
- package/dist/src/browser/bridge.js +1 -1
- package/dist/src/browser/cdp.js +1 -1
- package/dist/src/browser/daemon-client.js +1 -1
- package/dist/src/browser/daemon-lifecycle.js +7 -7
- package/dist/src/browser/dom-helpers.js +35 -35
- package/dist/src/browser/dom-snapshot.js +19 -19
- package/dist/src/browser/errors.js +3 -3
- package/dist/src/browser/extract.js +5 -5
- package/dist/src/browser/find.js +13 -13
- package/dist/src/browser/fingerprint.js +2 -2
- package/dist/src/browser/html-tree.js +6 -6
- package/dist/src/browser/managed-chrome.js +1 -1
- package/dist/src/browser/network-cache.js +1 -1
- package/dist/src/browser/network-key.js +1 -1
- package/dist/src/browser/page.js +7 -7
- package/dist/src/browser/profile.js +2 -2
- package/dist/src/browser/proxy-test.js +8 -8
- package/dist/src/browser/shape-filter.js +1 -1
- package/dist/src/browser/shape.js +1 -1
- package/dist/src/browser/stealth.js +3 -3
- package/dist/src/browser/tabs.js +2 -2
- package/dist/src/browser/target-errors.js +1 -1
- package/dist/src/browser/target-resolver.js +23 -23
- package/dist/src/browser/trace.js +2 -2
- package/dist/src/browser/utils.js +1 -1
- package/dist/src/browser/verify-fixture.js +2 -2
- package/dist/src/browser-session-lock.js +1 -1
- package/dist/src/build-manifest.js +11 -11
- package/dist/src/capabilityRouting.js +1 -1
- package/dist/src/cli-argv-preprocess.js +1 -1
- package/dist/src/cli.js +32 -32
- package/dist/src/commanderAdapter.js +3 -3
- package/dist/src/commands/auth.js +3 -3
- package/dist/src/commands/daemon.js +1 -1
- package/dist/src/completion-fast.js +1 -1
- package/dist/src/completion.js +1 -1
- package/dist/src/constants.js +1 -1
- package/dist/src/convention-audit.js +2 -2
- package/dist/src/daemon-utils.js +1 -1
- package/dist/src/daemon.js +1 -1
- package/dist/src/discovery.js +2 -2
- package/dist/src/doctor.js +9 -9
- package/dist/src/download/article-download.js +15 -15
- package/dist/src/download/index.js +4 -4
- package/dist/src/download/media-download.js +1 -1
- package/dist/src/download/progress.js +3 -3
- package/dist/src/electron-apps.js +1 -1
- package/dist/src/errors.js +2 -2
- package/dist/src/execution.js +2 -2
- package/dist/src/external.js +1 -1
- package/dist/src/help.js +8 -8
- package/dist/src/hooks.js +1 -1
- package/dist/src/interceptor.js +21 -21
- package/dist/src/launcher.js +7 -7
- package/dist/src/logger.js +8 -8
- package/dist/src/main.js +7 -7
- package/dist/src/observation/artifact.js +5 -5
- package/dist/src/observation/retention.js +1 -1
- package/dist/src/output.js +2 -2
- package/dist/src/package-paths.js +1 -1
- package/dist/src/pipeline/executor.js +1 -1
- package/dist/src/pipeline/registry.js +1 -1
- package/dist/src/pipeline/steps/browser.js +1 -1
- package/dist/src/pipeline/steps/download.js +1 -1
- package/dist/src/pipeline/steps/fetch.js +6 -6
- package/dist/src/pipeline/steps/intercept.js +1 -1
- package/dist/src/pipeline/steps/tap.js +17 -17
- package/dist/src/pipeline/steps/transform.js +1 -1
- package/dist/src/pipeline/template.js +1 -1
- package/dist/src/plugin-manifest.js +1 -1
- package/dist/src/plugin-scaffold.js +19 -19
- package/dist/src/plugin.js +12 -12
- package/dist/src/rate-limit.js +1 -1
- package/dist/src/registry.js +1 -1
- package/dist/src/runtime-detect.js +1 -1
- package/dist/src/runtime.js +1 -1
- package/dist/src/scripts/framework.js +1 -1
- package/dist/src/scripts/interact.js +1 -1
- package/dist/src/scripts/store.js +1 -1
- package/dist/src/serialization.js +2 -2
- package/dist/src/session-lease.js +1 -1
- package/dist/src/snapshotFormatter.js +2 -2
- package/dist/src/tui.js +12 -12
- package/dist/src/user-runtime.js +1 -1
- package/dist/src/utils.d.ts +12 -0
- package/dist/src/utils.js +4 -4
- package/dist/src/validate.js +2 -2
- package/dist/src/verify.js +2 -2
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{readFile as
|
|
2
|
-
const selfLabelTokens = ${JSON.stringify(
|
|
3
|
-
const explicitIdentityMetaTokenGroups = ${
|
|
4
|
-
const navScopeSelector = ${JSON.stringify(
|
|
5
|
-
const profileLinkSelector = ${JSON.stringify(
|
|
6
|
-
const avatarSelector = ${JSON.stringify(
|
|
1
|
+
import{readFile as b,stat as _}from"node:fs/promises";import{CliError as i}from"@jackwener/opencli/errors";const L=new Set(["status","outcome","message","target_type","target"]),s='header, nav, [role="banner"], [role="navigation"]',c='a[href^="/people/"]',u='img, [class*="Avatar"], [data-testid*="avatar" i], [aria-label*="头像"]',f=["我","我的","个人主页"],d=[["self"],["current","user"],["account","profile"],["my","profile"],["my","account"]],w=JSON.stringify(d);function T(){return{readFile:b,stat:(t)=>_(t),decodeUtf8:(t)=>new TextDecoder("utf-8",{fatal:!0}).decode(t)}}function E(t){const e=t.toLowerCase();return f.some((r)=>t.includes(r))||e.includes("my profile")||e.includes("my account")}function N(t){return t.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function x(t){const e=new Set(N(t));return d.some((r)=>r.every((o)=>e.has(o)))}function v(t){return typeof t==="object"&&t!==null&&"querySelectorAll"in t&&typeof t.querySelectorAll==="function"}function F(t){return typeof t==="object"&&t!==null&&"getAttribute"in t&&"querySelector"in t&&typeof t.getAttribute==="function"&&typeof t.querySelector==="function"}function O(t){const e=t?.topstory?.me?.slug||t?.me?.slug||t?.initialState?.me?.slug;return typeof e==="string"&&e?e:null}function k(t,e){const o=(t.getAttribute("href")||"").match(/^\/people\/([A-Za-z0-9_-]+)/);if(!o)return null;const n=t.getAttribute("aria-label")||"",l=t.getAttribute("title")||"",a=t.getAttribute("data-testid")||"",g=t.getAttribute("class")||"",m=t.getAttribute("rel")||"",S=`${n} ${l} ${t.textContent||""}`,I=`${a} ${g} ${m}`,p=Boolean(t.querySelector(u)),A=E(S),h=x(I);if(A||h)return o[1];if(e&&p)return o[1];return null}function y(t,e){for(const r of t)for(const o of Array.from(r.querySelectorAll(c)).filter(F)){const n=k(o,e);if(n)return n}return null}export function resolveCurrentUserSlugFromDom(t,e){const r=O(t);if(r)return r;const o=Array.from(e.querySelectorAll(s)).filter(v);return y(o,!0)||y([e],!1)}export function requireExecute(t){if(!t.execute)throw new i("INVALID_INPUT","此知乎写命令需要 --execute 才会真正执行。注意:本报错仅表示缺少 --execute,并未校验其余参数,不能当 dry-run 预览用")}export async function resolvePayload(t,e=T()){const r=typeof t.text==="string"?t.text:void 0,o=typeof t.file==="string"?t.file:void 0;if(r&&o)throw new i("INVALID_INPUT","Use either <text> or --file, not both");let n=r??"";if(o){let l;try{l=await e.stat(o)}catch{throw new i("INVALID_INPUT",`File not found: ${o}`)}if(!l.isFile())throw new i("INVALID_INPUT",`File must be a readable text file: ${o}`);let a;try{a=await e.readFile(o)}catch{throw new i("INVALID_INPUT",`File could not be read: ${o}`)}try{n=e.decodeUtf8(a)}catch{throw new i("INVALID_INPUT",`File could not be decoded as UTF-8 text: ${o}`)}}if(!n.trim())throw new i("INVALID_INPUT","Payload cannot be empty or whitespace only");return n}function C(){return`(() => {
|
|
2
|
+
const selfLabelTokens = ${JSON.stringify(f)};
|
|
3
|
+
const explicitIdentityMetaTokenGroups = ${w};
|
|
4
|
+
const navScopeSelector = ${JSON.stringify(s)};
|
|
5
|
+
const profileLinkSelector = ${JSON.stringify(c)};
|
|
6
|
+
const avatarSelector = ${JSON.stringify(u)};
|
|
7
7
|
|
|
8
8
|
const hasExplicitIdentityLabel = (text) => {
|
|
9
9
|
const normalized = String(text || '').toLowerCase();
|
|
@@ -68,4 +68,4 @@ import{readFile as h,stat as A}from"node:fs/promises";import{CliError as Q}from"
|
|
|
68
68
|
if (altMatch) return { slug: altMatch[1] };
|
|
69
69
|
}
|
|
70
70
|
return null;
|
|
71
|
-
})()`}export async function resolveCurrentUserIdentity(
|
|
71
|
+
})()`}export async function resolveCurrentUserIdentity(t){let e=null;for(let r=0;r<30;r++){e=await t.evaluate(C());if(e?.slug)break;await t.wait({time:0.5})}if(!e?.slug)throw new i("ACTION_NOT_AVAILABLE","Could not resolve the logged-in Zhihu user identity before write");return e.slug}export function buildResultRow(t,e,r,o,n={}){for(const l of Object.keys(n))if(L.has(l))throw new i("INVALID_INPUT",`Result extra field cannot overwrite reserved key: ${l}`);return[{status:"success",outcome:o,message:t,target_type:e,target:r,...n}]}export const __test__={requireExecute,resolvePayload,resolveCurrentUserIdentity,resolveCurrentUserSlugFromDom,buildResultRow};
|
package/clis/zlibrary/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{ArgumentError as
|
|
1
|
+
import{ArgumentError as o}from"@jackwener/opencli/errors";const ZLIBRARY_DOMAIN="z-library.im",ZLIBRARY_ORIGIN=`https://${ZLIBRARY_DOMAIN}`,n=new Set([ZLIBRARY_DOMAIN,`www.${ZLIBRARY_DOMAIN}`]);export function normalizeZlibraryBookUrl(t){const e=String(t||"").trim();let r;try{r=new URL(e)}catch{throw new o("Z-Library book URL must be a valid http(s) URL",`Example: ${ZLIBRARY_ORIGIN}/book/...`)}if(!["http:","https:"].includes(r.protocol)||!n.has(r.hostname))throw new o(`Unsupported Z-Library URL host: ${r.hostname}`,`Pass a book URL under ${ZLIBRARY_DOMAIN}, for example ${ZLIBRARY_ORIGIN}/book/...`);return r.toString()}export function buildSearchUrl(t){const e=String(t||"").trim();if(!e)throw new o("zlibrary search query cannot be empty");return`${ZLIBRARY_ORIGIN}/s/${encodeURIComponent(e)}`}export async function extractBookTitle(t){const e=await t.evaluate(`
|
|
2
2
|
(() => {
|
|
3
3
|
const card = document.querySelector('z-bookcard');
|
|
4
4
|
if (card && card.shadowRoot) {
|
|
@@ -7,14 +7,14 @@ import{ArgumentError as K}from"@jackwener/opencli/errors";const ZLIBRARY_DOMAIN=
|
|
|
7
7
|
}
|
|
8
8
|
return document.title.replace(/\\s*[-|].*$/, '').trim();
|
|
9
9
|
})()
|
|
10
|
-
`);return String(
|
|
10
|
+
`);return String(e||"").trim()}export async function extractFormats(t){await t.evaluate(`
|
|
11
11
|
(() => {
|
|
12
12
|
const btn = document.querySelector(
|
|
13
13
|
'button[aria-label*="more" i], [class*="dots" i], [class*="more" i]'
|
|
14
14
|
);
|
|
15
15
|
if (btn) btn.click();
|
|
16
16
|
})()
|
|
17
|
-
`);await
|
|
17
|
+
`);await t.wait({time:3});const e=await t.evaluate(`
|
|
18
18
|
JSON.stringify((() => {
|
|
19
19
|
const res = { pdf: '', epub: '' };
|
|
20
20
|
document.querySelectorAll('a[href]').forEach(a => {
|
|
@@ -25,10 +25,10 @@ import{ArgumentError as K}from"@jackwener/opencli/errors";const ZLIBRARY_DOMAIN=
|
|
|
25
25
|
});
|
|
26
26
|
return res;
|
|
27
27
|
})())
|
|
28
|
-
`);return JSON.parse(
|
|
28
|
+
`);return JSON.parse(e)}export async function extractSearchResults(t,e){const r=await t.evaluate(`
|
|
29
29
|
JSON.stringify(
|
|
30
30
|
Array.from(document.querySelectorAll('z-bookcard'))
|
|
31
|
-
.slice(0, ${
|
|
31
|
+
.slice(0, ${e})
|
|
32
32
|
.map((card, index) => {
|
|
33
33
|
const text = card.textContent.trim();
|
|
34
34
|
const lines = text.split('\\n').map(l => l.trim()).filter(Boolean);
|
|
@@ -45,4 +45,4 @@ import{ArgumentError as K}from"@jackwener/opencli/errors";const ZLIBRARY_DOMAIN=
|
|
|
45
45
|
})
|
|
46
46
|
.filter(item => item.url && item.title)
|
|
47
47
|
)
|
|
48
|
-
`);try{return JSON.parse(
|
|
48
|
+
`);try{return JSON.parse(r)}catch{return[]}}export{ZLIBRARY_DOMAIN,ZLIBRARY_ORIGIN};
|
package/clis/zsxq/auth.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{AuthRequiredError as
|
|
1
|
+
import{AuthRequiredError as s,CommandExecutionError as r}from"@jackwener/opencli/errors";import{registerSiteAuthCommands as n}from"../_shared/site-auth.js";async function i(t){await t.goto("https://wx.zsxq.com/");await t.wait(2);const e=await t.evaluate(`
|
|
2
2
|
(async () => {
|
|
3
3
|
const url = location.href;
|
|
4
4
|
if (/\\/login(\\b|$)/.test(url)) {
|
|
@@ -23,11 +23,11 @@ import{AuthRequiredError as D,CommandExecutionError as F}from"@jackwener/opencli
|
|
|
23
23
|
return { kind: 'exception', detail: String(e && e.message || e) };
|
|
24
24
|
}
|
|
25
25
|
})()
|
|
26
|
-
`);if(
|
|
26
|
+
`);if(e?.kind==="auth")throw new s("zsxq.com",e.detail);if(e?.kind==="http")throw new r(`HTTP ${e.httpStatus} from zsxq /v2/users/self`);if(e?.kind==="exception")throw new r(`zsxq whoami failed: ${e.detail}`);if(!e?.ok)throw new r(`Unexpected zsxq probe: ${JSON.stringify(e)}`);if(!e.user_id)throw new s("zsxq.com","zsxq /v2/users/self 200 but user_id missing — incomplete session");return{user_id:e.user_id,name:e.name}}n({site:"zsxq",domain:"zsxq.com",loginUrl:"https://wx.zsxq.com/login",columns:["user_id","name"],verify:i,poll:async(t)=>{if(!await t.evaluate(`(async () => {
|
|
27
27
|
try {
|
|
28
28
|
const r = await fetch('https://api.zsxq.com/v2/users/self', { credentials: 'include', headers: { Accept: 'application/json' } });
|
|
29
29
|
if (!r.ok) return false;
|
|
30
30
|
const d = await r.json();
|
|
31
31
|
return !!(d?.resp_data?.user);
|
|
32
32
|
} catch { return false; }
|
|
33
|
-
})()`))throw new
|
|
33
|
+
})()`))throw new s("zsxq.com","Waiting for zsxq login");return i(t)}});
|
package/clis/zsxq/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cli as
|
|
1
|
+
import{cli as d,Strategy as g}from"@jackwener/opencli/registry";import{getActiveGroupId as l,ensureZsxqAuth as h,ensureZsxqPage as w,fetchFirstJson as n,getGroupsFromResponse as y,getTopicsFromResponse as f,toTopicRow as q}from"./utils.js";d({site:"zsxq",name:"search",access:"read",description:"搜索星球内容",domain:"wx.zsxq.com",strategy:g.COOKIE,browser:!0,args:[{name:"keyword",required:!0,positional:!0,help:"Search keyword"},{name:"limit",type:"int",default:20,help:"Number of results to return"},{name:"group_id",help:"Optional group id; defaults to the active group in Chrome"}],columns:["topic_id","group","author","title","comments","likes","time","url"],func:async(t,o)=>{await w(t);await h(t);const u=String(o.keyword||"").trim(),i=Math.max(1,Number(o.limit)||20),e=String(o.group_id||await l(t)),c=encodeURIComponent(u);let s=e;try{const{data:r}=await n(t,["https://api.zsxq.com/v2/groups"]),a=y(r).find((m)=>String(m.group_id)===e);if(a?.name)s=a.name}catch{}const{data:p}=await n(t,[`https://api.zsxq.com/v2/search/groups/${e}/topics?keyword=${c}&count=${i}`]);return f(p).slice(0,i).map((r)=>({...q(r),group:s}))}});
|
package/clis/zsxq/topic.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cli as u,Strategy as d}from"@jackwener/opencli/registry";import{CliError as s}from"@jackwener/opencli/errors";import{getActiveGroupId as l,browserJsonRequest as h,ensureZsxqAuth as w,ensureZsxqPage as f,fetchFirstJson as _,getCommentsFromResponse as g,getTopicFromResponse as R,getTopicUrl as T,summarizeComments as
|
|
1
|
+
import{cli as u,Strategy as d}from"@jackwener/opencli/registry";import{CliError as s}from"@jackwener/opencli/errors";import{getActiveGroupId as l,browserJsonRequest as h,ensureZsxqAuth as w,ensureZsxqPage as f,fetchFirstJson as _,getCommentsFromResponse as g,getTopicFromResponse as R,getTopicUrl as T,summarizeComments as q,toTopicRow as x}from"./utils.js";u({site:"zsxq",name:"topic",access:"read",description:"获取单个话题详情和评论",domain:"wx.zsxq.com",strategy:d.COOKIE,browser:!0,args:[{name:"id",required:!0,positional:!0,help:"Topic ID"},{name:"group_id",help:"Group ID (optional; defaults to active group in Chrome)"},{name:"comment_limit",type:"int",default:20,help:"Number of comments to fetch"}],columns:["topic_id","type","author","title","comments","likes","comment_preview","url"],func:async(o,n)=>{await f(o);await w(o);const t=String(n.id),c=String(n.group_id||await l(o)),p=Math.max(1,Number(n.comment_limit)||20),m=`https://api.zsxq.com/v2/groups/${c}/topics/${t}`,e=await h(o,m);if(e.status===404)throw new s("NOT_FOUND",`Topic ${t} not found`);if(!e.ok)throw new s("FETCH_ERROR",e.error||`Failed to fetch topic ${t}`,`Checked endpoint: ${m}`);const a=await _(o,[`https://api.zsxq.com/v2/groups/${c}/topics/${t}/comments?sort=asc&count=${p}`]),i=R(e.data);if(!i)throw new s("NOT_FOUND",`Topic ${t} not found`);const r=g(a.data);return[{...x({...i,comments:r,comments_count:i.comments_count??r.length}),comment_preview:q(r,5),url:T(i.topic_id??t)}]}});
|
package/clis/zsxq/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{ArgumentError as
|
|
1
|
+
import{ArgumentError as l,AuthRequiredError as i,CliError as s}from"@jackwener/opencli/errors";const f="wx.zsxq.com",u="https://wx.zsxq.com";function c(r){return r&&typeof r==="object"&&!Array.isArray(r)?r:null}function a(...r){for(const e of r)if(Array.isArray(e))return e;return[]}export async function ensureZsxqPage(r){await r.goto(u)}export async function ensureZsxqAuth(r){try{if(!await r.evaluate(`
|
|
2
2
|
(async () => {
|
|
3
3
|
try {
|
|
4
4
|
const r = await new Promise((resolve, reject) => {
|
|
@@ -18,7 +18,7 @@ import{ArgumentError as z,AuthRequiredError as Y,CliError as W}from"@jackwener/o
|
|
|
18
18
|
return r !== null;
|
|
19
19
|
} catch { return false; }
|
|
20
20
|
})()
|
|
21
|
-
`))throw new
|
|
21
|
+
`))throw new i("zsxq.com")}catch(e){if(e instanceof i)throw e;throw new i("zsxq.com")}}export async function getCookieValue(r,e){return(await r.getCookies({domain:f})).find((n)=>n.name===e)?.value}export async function getActiveGroupId(r){const e=await r.evaluate(`
|
|
22
22
|
(() => {
|
|
23
23
|
const target = localStorage.getItem('target_group');
|
|
24
24
|
if (target) {
|
|
@@ -29,9 +29,9 @@ import{ArgumentError as z,AuthRequiredError as Y,CliError as W}from"@jackwener/o
|
|
|
29
29
|
}
|
|
30
30
|
return null;
|
|
31
31
|
})()
|
|
32
|
-
`);if(
|
|
32
|
+
`);if(e)return e;throw new l("Cannot determine active group_id","Pass --group_id <id> or open the target 知识星球 page in Chrome first")}export async function browserJsonRequest(r,e){return await r.evaluate(`
|
|
33
33
|
(async () => {
|
|
34
|
-
const path = ${JSON.stringify(
|
|
34
|
+
const path = ${JSON.stringify(e)};
|
|
35
35
|
|
|
36
36
|
try {
|
|
37
37
|
return await new Promise((resolve) => {
|
|
@@ -69,4 +69,4 @@ import{ArgumentError as z,AuthRequiredError as Y,CliError as W}from"@jackwener/o
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
})()
|
|
72
|
-
`)}export async function fetchFirstJson(
|
|
72
|
+
`)}export async function fetchFirstJson(r,e){let t=null;for(const n of e){const o=await browserJsonRequest(r,n);if(o.ok)return o;t=o}if(!t)throw new s("FETCH_ERROR","No candidate endpoint returned JSON",`Checked endpoints: ${e.join(", ")}`);throw new s("FETCH_ERROR",t.error||"Failed to fetch ZSXQ API",`Checked endpoints: ${e.join(", ")}`)}export function unwrapRespData(r){const e=c(r);if(!e)throw new s("PARSE_ERROR","Invalid ZSXQ API response");if(e.succeeded===!1){const t=typeof e.code==="number"?String(e.code):"API_ERROR",n=typeof e.info==="string"?e.info:typeof e.error==="string"?e.error:"ZSXQ API returned an error";throw new s(t,n)}return e.resp_data??e.data??r}export function getTopicsFromResponse(r){const e=unwrapRespData(r);if(Array.isArray(e))return e;return a(e.topics,e.list,e.records,e.items,e.search_result)}export function getCommentsFromResponse(r){const e=unwrapRespData(r);if(Array.isArray(e))return e;return a(e.comments,e.list,e.items)}export function getGroupsFromResponse(r){const e=unwrapRespData(r);if(Array.isArray(e))return e;return a(e.groups,e.list,e.items)}export function getTopicFromResponse(r){const e=unwrapRespData(r);if(Array.isArray(e))return e[0]??null;if(typeof e.topic_id==="number"||typeof e.topic_id==="string")return e;const t=c(e);if(!t)return null;const n=t.topic;return n&&typeof n==="object"?n:null}export function getTopicAuthor(r){return r.owner?.name||r.talk?.owner?.name||r.question?.owner?.name||r.answer?.owner?.name||r.task?.owner?.name||r.solution?.owner?.name||""}export function getTopicText(r){return(r.title||"").replace(/\s+/g," ").trim()||getTopicContent(r)}export function getTopicContent(r){return([r.talk?.text,r.question?.text,r.answer?.text,r.task?.text,r.solution?.text].find((t)=>typeof t==="string"&&t.trim())||"").replace(/\s+/g," ").trim()}export function getTopicUrl(r){return r?`${u}/topic/${r}`:u}export function summarizeComments(r,e=3){return r.slice(0,e).map((t)=>{const n=t.owner?.name||"匿名",o=t.repliee?.name?` -> ${t.repliee.name}`:"",p=(t.text||"").replace(/\s+/g," ").trim();return`${n}${o}: ${p}`}).join(" | ")}export function toTopicRow(r){const e=r.topic_id??"",t=a(r.show_comments,r.comments);return{topic_id:e,type:r.type||"",group:r.group?.name||"",author:getTopicAuthor(r),title:getTopicText(r),content:getTopicContent(r),comments:r.comments_count??t.length??0,likes:r.likes_count??0,readers:r.readers_count??r.reading_count??0,time:r.create_time||"",comment_preview:summarizeComments(t),url:getTopicUrl(e)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as o from"node:fs";export function resolveAdapterSourcePath(t){const e=[];if(t.source&&!t.source.startsWith("manifest:"))e.push(t.source);if(t._modulePath)e.push(t._modulePath);for(const s of e)if(o.existsSync(s))return s;return e[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _=[{vendor:"aliyun_waf",cookiePatterns:[/^acw_sc__v2$/,/^acw_tc$/,/^ssxmod_itna/],bodyPatterns:[/arg1\s*=\s*['"][0-9A-F]{30,}/,/\/ntc_captcha\//i],implication:"Direct Node-side fetch/curl will return the slider HTML. Validate the endpoint in browser context first; HTML COOKIE adapters still finish with Node-side fetch + page.getCookies."},{vendor:"cloudflare",cookiePatterns:[/^__cf_bm$/,/^cf_clearance$/,/^__cfduid$/],bodyPatterns:[/Cloudflare Ray ID/i,/Checking your browser before accessing/i,/cf-chl-/i],implication:"Cloudflare bot check. Start from a real browser session; probe in browser context first. HTML COOKIE adapters still finish with Node-side fetch + page.getCookies."},{vendor:"akamai",cookiePatterns:[/^_abck$/,/^bm_sz$/,/^bm_sv$/],bodyPatterns:[/akamai/i],implication:"Akamai Bot Manager. Probe in browser context first; keep final HTML COOKIE adapters on Node-side fetch + page.getCookies."},{vendor:"geetest",cookiePatterns:[],bodyPatterns:[/geetest/i,/gt_captcha/i],implication:"Geetest slider/puzzle captcha. Agent cannot bypass programmatically — requires UI strategy or human-in-loop."}];export function detectAntiBot(e){const t=[];let n=null;for(const s of _){const i=[];for(const r of s.cookiePatterns){const a=e.cookieNames.find((l)=>r.test(l));if(a)i.push(`cookie:${a}`)}for(const r of s.bodyPatterns)for(const a of e.networkEntries)if(a.bodyPreview&&r.test(a.bodyPreview)){i.push(`body:${a.url}`);break}if(i.length>0&&!n){n=s;t.push(...i)}}if(!n)return{detected:!1,vendor:null,evidence:[],implication:"No known anti-bot signatures. Try Node-side COOKIE fetch first; if endpoint validation is blocked, retry from browser context."};return{detected:!0,vendor:n.vendor,evidence:t,implication:n.implication}}const y=/(?:analytics|beacon|collect|telemetry|tracking|sentry|doubleclick|google-analytics|googletagmanager|adservice|\/ads?(?:[/?#]|$)|metrics?|pixel|personalization|experiment|\/events?(?:[/?#]|$))/i,m=/^(?:data|items?|results?|records?|list|rows?|edges?|nodes?|timeline|users?|title|name|text|content|body|price|amount|id|url|avatar|nickname|desc|comments?|likes?|shares?|total|page|cursor|next|rank|score|date|time|author)$/i,b=/^(?:event|events|trace|traceid|sessionid|clientid|visitorid|experiment|abtest|beacon|analytics|metrics?|pixel|log|logs)$/i;function g(e){return Math.max(0,Math.min(1,Math.round(e*100)/100))}function k(e){if(!e)return null;const t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function u(e,t="$",n=[],s=0){if(s>4||n.length>=24)return n;if(Array.isArray(e)){n.push(`${t}:array(${e.length})`);if(e.length>0)u(e[0],`${t}[0]`,n,s+1);return n}if(!e||typeof e!=="object"){n.push(`${t}:${typeof e}`);return n}const i=Object.entries(e).slice(0,12);for(const[r,a]of i){n.push(`${t}.${r}`);if(Array.isArray(a))n.push(`${t}.${r}:array(${a.length})`);else if(a&&typeof a==="object")u(a,`${t}.${r}`,n,s+1);else n.push(`${t}.${r}:${typeof a}`)}return n}function p(e,t,n=0){if(n>4||!e||typeof e!=="object")return 0;if(Array.isArray(e))return e.slice(0,3).reduce((s,i)=>s+p(i,t,n+1),0);return Object.entries(e).reduce((s,[i,r])=>s+(t(i)?1:0)+p(r,t,n+1),0)}function h(e,t=0){if(t>4||!e||typeof e!=="object")return!1;if(Array.isArray(e))return e.length>0;return Object.values(e).some((n)=>h(n,t+1))}export function scoreEndpointEvidence(e){const t=[],n=k(e.bodyPreview);let s=0;if(e.status>=200&&e.status<300){s+=0.15;t.push("2xx status")}else if(e.status===401||e.status===403)return{url:e.url,status:e.status,contentType:e.contentType,real_data_score:0.05,verdict:"blocked",reasons:["auth-blocked status"],sample_paths:[]};else t.push(`non-2xx status ${e.status}`);if(/json/i.test(e.contentType)){s+=0.2;t.push("json content-type")}else if(/html/i.test(e.contentType)){s-=0.25;t.push("html content-type")}else if(/javascript|text/i.test(e.contentType)){s+=0.05;t.push("text/script content-type")}if(y.test(e.url)){s-=0.3;t.push("telemetry-like url")}const i=u(n).slice(0,8);if(typeof n==="string"){if(/^\s*</.test(n)||/<!doctype html|<html/i.test(n)){s-=0.25;t.push("html body")}else if(n.trim().length>20){s+=0.05;t.push("non-empty text body")}}else if(Array.isArray(n))if(n.length>0){s+=0.3;t.push("non-empty top-level array")}else{s-=0.15;t.push("empty array")}else if(n&&typeof n==="object"){if(Object.keys(n).length===0){s-=0.15;t.push("empty object")}else{s+=0.12;t.push("json object body")}const c=p(n,(d)=>m.test(d));if(c>0){s+=Math.min(0.3,c*0.05);t.push(`${c} business-like key${c===1?"":"s"}`)}if(h(n)){s+=0.2;t.push("nested non-empty array")}const o=p(n,(d)=>b.test(d));if(o>0&&c===0){s-=Math.min(0.25,o*0.08);t.push(`${o} tracking-like key${o===1?"":"s"} without business keys`)}}const r=g(s),a=r>=0.65?"likely_data":r>=0.35?"maybe_data":"noise";return{url:e.url,status:e.status,contentType:e.contentType,real_data_score:r,verdict:a,reasons:t,sample_paths:i}}export function scoreNetworkEvidence(e){return e.networkEntries.map(scoreEndpointEvidence).filter((t)=>t.verdict!=="noise"||t.real_data_score>0).sort((t,n)=>n.real_data_score-t.real_data_score).slice(0,8)}export function classifyPattern(e){const t=e.networkEntries.filter((a)=>/json/i.test(a.contentType)),s=scoreNetworkEvidence(e).filter((a)=>a.verdict==="likely_data"||a.verdict==="maybe_data").length,i=e.networkEntries.filter((a)=>a.status===401||a.status===403).length,r=e.initialState.__INITIAL_STATE__||e.initialState.__NUXT__||e.initialState.__NEXT_DATA__||e.initialState.__APOLLO_STATE__;if(i>=2&&t.length>=1)return{pattern:"D",reason:`${i} auth-failing API responses seen — endpoint is token-gated`,json_responses:t.length,real_data_candidates:s,auth_failures:i};if(r)return{pattern:"B",reason:`SSR state global present: ${Object.entries(e.initialState).filter(([,l])=>l).map(([l])=>l).join(", ")}`,json_responses:t.length,real_data_candidates:s,auth_failures:i};if(s>=1)return{pattern:"A",reason:`${s} captured response${s===1?"":"s"} look like real data — inspect api_candidates before choosing a strategy`,json_responses:t.length,real_data_candidates:s,auth_failures:i};return{pattern:"C",reason:t.length>0?`${t.length} JSON response${t.length===1?"":"s"} observed, but none look like target data — likely telemetry/side-channel; treat as HTML/DOM until an endpoint validates`:"No JSON XHR and no SSR state — HTML scrape (Pattern C); escalate to E manually if WebSocket traffic appears",json_responses:t.length,real_data_candidates:s,auth_failures:i}}export function findNearestAdapter(e,t){let n;try{n=new URL(e).hostname}catch{return null}const s=n.replace(/^www\./,""),i=s.split("."),r=i.slice(-2).join("."),a=i.length>1?i[i.length-2]:s,l=new Map;for(const o of t.values()){const d=o.domain?.toLowerCase();if(d&&(s.endsWith(d)||d.endsWith(r))||o.site.toLowerCase()===a?.toLowerCase()||s.includes(o.site.toLowerCase())){const f=l.get(o.site)??[];f.push(o);l.set(o.site,f)}}if(l.size===0)return null;let c=null;for(const o of l)if(!c||o[1].length>c[1].length)c=o;if(!c)return null;return{site:c[0],example_commands:c[1].slice(0,5).map((o)=>`${o.site} ${o.name}`),reason:`${c[1].length} existing adapter${c[1].length===1?"":"s"} target this site — reuse strategy/cookie config`}}export function analyzeSite(e,t){const n=classifyPattern(e),s=detectAntiBot(e),i=scoreNetworkEvidence(e),r=findNearestAdapter(e.finalUrl,t);let a;if(s.detected)a=s.implication;else if(n.pattern==="A")a="Inspect `api_candidates`, then replay the best endpoint and record the status/content-type/sample shape in your strategy note; do not choose API strategy from XHR count alone.";else if(n.pattern==="B")a='Read the SSR global via `ppcli browser eval "JSON.stringify(window.__INITIAL_STATE__ ?? window.__NUXT__ ?? window.__NEXT_DATA__ ?? window.__APOLLO_STATE__)"` — no API needed.';else if(n.pattern==="C")a="No API visible — use SSR HTML scrape (e.g. `ppcli browser extract`) against the rendered page.";else if(n.pattern==="D")a="Endpoints need auth. Re-open the page from a signed-in session, then retry analyze; see `field-decode-playbook` §4 for token tracing.";else if(n.pattern==="E")a="WebSocket stream detected — find the underlying HTTP poll/long-poll endpoint; raw WS is not supported.";else a="No strong signal. Manually inspect `ppcli browser network --all` and pick a pattern.";return{requested_url:e.requestedUrl,final_url:e.finalUrl,title:e.title,pattern:n,anti_bot:s,initial_state:e.initialState,api_candidates:i,nearest_adapter:r,recommended_next_step:a}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as
|
|
2
|
-
`)}export async function extractArticle(
|
|
1
|
+
import*as o from"node:fs";import{createRequire as f}from"node:module";const a=f(import.meta.url);let r=null;function m(){if(r)return r;const t=a.resolve("@mozilla/readability/Readability.js"),l=a.resolve("@mozilla/readability/Readability-readerable.js");r={readability:o.readFileSync(t,"utf8"),readerable:o.readFileSync(l,"utf8")};return r}export const DEFAULT_FALLBACK_SELECTORS=["main",'[role="main"]',"#main-content","#main","#content",".content","article","body"];const p=80;export function buildExtractArticleJs(t={}){const{readability:l,readerable:n}=m(),i=t.cleanSelectors??[],e=t.fallbackSelectors??DEFAULT_FALLBACK_SELECTORS,c=!!t.force,s=JSON.stringify(l),d=JSON.stringify(n),u=JSON.stringify(i),b=JSON.stringify(e),y=JSON.stringify(c);return["(() => {"," const cleanSelectors = "+u+";"," const fallbackSelectors = "+b+";"," const force = "+y+";"," const minFallbackText = "+p+";"," const readabilitySrc = "+s+";"," const readerableSrc = "+d+";",""," function escapeHtml(s) {",' return String(s).replace(/[&<>]/g, c => ({ "&": "&", "<": "<", ">": ">" }[c]));'," }",""," // Short-circuit 1: non-HTML document",' const ct = document.contentType || "";',' if (ct && ct !== "text/html" && ct !== "application/xhtml+xml") {',' const body = document.body ? (document.body.textContent || "") : "";',' return { source: "raw-text", html: "<pre>" + escapeHtml(body) + "</pre>", title: document.title || "" };'," }",""," // Short-circuit 2: body is a single <pre>"," if (document.body) {"," const kids = document.body.children;",' if (kids.length === 1 && kids[0] && kids[0].tagName === "PRE") {',' return { source: "pre", html: document.body.outerHTML, title: document.title || "" };'," }"," }",""," // Deep-clone + adapter-supplied dirty-node removal"," const cloneDoc = document.cloneNode(true);"," for (const sel of cleanSelectors) {"," try { for (const n of cloneDoc.querySelectorAll(sel)) n.remove(); }"," catch (e) { /* ignore invalid selector */ }"," }",""," // Inject Readability into an isolated Function scope and extract the"," // constructors we need. Library sources use their own module.exports",' // guard (if typeof module === "object"), which is falsy here.'," const libs = (new Function(",' readabilitySrc + "\\n" + readerableSrc + "\\nreturn {" +',' " Readability: typeof Readability !== \\"undefined\\" ? Readability : null," +',' " isProbablyReaderable: typeof isProbablyReaderable !== \\"undefined\\" ? isProbablyReaderable : null" +',' " };"'," ))();"," const Readability = libs.Readability;"," const isProbablyReaderable = libs.isProbablyReaderable;","",' const readerableOk = force || (typeof isProbablyReaderable === "function" ? isProbablyReaderable(cloneDoc) : true);'," let article = null;",' if (readerableOk && typeof Readability === "function") {'," try { article = new Readability(cloneDoc).parse(); } catch (e) { article = null; }"," }"," if (article && article.content) {"," return {",' source: "readability",'," html: article.content,",' title: article.title || document.title || "",'," byline: article.byline || undefined,"," publishedTime: article.publishedTime || undefined,"," siteName: article.siteName || undefined,"," };"," }",""," // Fallback chain"," for (const sel of fallbackSelectors) {"," let el = null;"," try { el = cloneDoc.querySelector(sel); } catch (e) { continue; }"," if (!el) continue;",' const text = (el.textContent || "").trim();'," if (text.length < minFallbackText) continue;",' return { source: "fallback", html: el.outerHTML, title: document.title || "" };'," }",""," return null;","})()"].join(`
|
|
2
|
+
`)}export async function extractArticle(t,l={}){const n=buildExtractArticleJs(l),i=await t.evaluate(n);if(i==null||typeof i!=="object")return null;const e=i;if(typeof e.html!=="string"||typeof e.source!=="string")return null;const c=e.source;return{html:e.html,title:typeof e.title==="string"?e.title:"",...e.byline&&{byline:e.byline},...e.publishedTime&&{publishedTime:e.publishedTime},...e.siteName&&{siteName:e.siteName},source:c}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
2
|
-
`),refs:i}}function
|
|
1
|
+
const j=new Set(["button","link","textbox","searchbox","checkbox","radio","combobox","listbox","menuitem","menuitemcheckbox","menuitemradio","option","slider","spinbutton","switch","tab","treeitem"]),T=new Set(["article","cell","columnheader","gridcell","heading","listitem","main","navigation","region","rowheader"]),U=new Set(["generic","group","list","none","presentation","RootWebArea","WebArea"]);export function buildAxSnapshot(t,e={}){return buildAxSnapshotFromTrees([{tree:t}],e)}export function buildAxSnapshotFromTrees(t,e={}){const r=["source: ax","---"],i=new Map;let o=1;for(const[s,c]of t.entries()){if(s>0){const d=c.frame?.url?JSON.stringify(c.frame.url):JSON.stringify(c.frame?.frameId??`frame:${s}`);r.push(`frame ${d}:`)}o=z(c.tree,r,i,o,{...e,frame:c.frame,baseDepth:s>0?1:0})}r.push("---");r.push(`interactive: ${i.size}`);return{text:r.join(`
|
|
2
|
+
`),refs:i}}function z(t,e,r,i,o){const c=(Array.isArray(t?.nodes)?t.nodes:[]).filter((n)=>n&&!n.ignored),d=new Map,y=new Set;for(const n of c){if(typeof n.nodeId==="string")d.set(n.nodeId,n);for(const f of n.childIds??[])y.add(f)}const L=c.filter((n)=>{if(!n.nodeId)return!1;const f=a(n.role);return!y.has(n.nodeId)||f==="RootWebArea"||f==="WebArea"})[0]??c[0],W=Math.max(1,Math.min(Number(o.maxDepth)||50,200)),V=F(c),S=new Map;function I(n,f){if(!n||f>W)return!1;const h=a(n.role)||"generic",l=b(a(n.name)),p=b(a(n.value)||m(n,"value")),_=m(n,"disabled"),k=m(n,"checked"),w=m(n,"expanded"),A=m(n,"selected"),O=C(h,l,n.backendDOMNodeId),R=O||!!l||!!p||T.has(h)||!o.interactiveOnly&&!U.has(h),M=e.length;let v=!1;for(const g of n.childIds??[])if(I(d.get(g),f+1))v=!0;if(!R&&!v){e.length=M;return!1}if(R){const g=" ".repeat(f),u=[];let D="";if(O){const x=String(i++);D=`[${x}]`;const N=J(h,l),E=S.get(N)??0;S.set(N,E+1);r.set(x,{ref:x,backendNodeId:n.backendDOMNodeId,role:h,name:l,...V.get(N)>1?{nth:E}:{},...o.frame?{frame:o.frame}:{}})}if(l)u.push(JSON.stringify(l));if(p&&p!==l)u.push(`value=${JSON.stringify(p)}`);if(k)u.push(`checked=${k}`);if(w)u.push(`expanded=${w}`);if(A)u.push(`selected=${A}`);if(_==="true")u.push("disabled");e.splice(M,0,`${g}${D}${h}${u.length?` ${u.join(" ")}`:""}`)}return!0}I(L,o.baseDepth);return i}export function findAxRefReplacement(t,e){const r=Array.isArray(t?.nodes)?t.nodes:[],i=e.nth??0;let o=0;for(const s of r){if(!s||s.ignored)continue;const c=a(s.role),d=b(a(s.name));if(c!==e.role||d!==e.name)continue;if(o===i){if(typeof s.backendDOMNodeId!=="number")return null;return{...e,backendNodeId:s.backendDOMNodeId}}o++}return null}function C(t,e,r){if(typeof r!=="number")return!1;if(j.has(t))return!0;return T.has(t)&&!!e}function F(t){const e=new Map;for(const r of t){if(!r||r.ignored)continue;const i=a(r.role),o=b(a(r.name));if(!C(i,o,r.backendDOMNodeId))continue;const s=J(i,o);e.set(s,(e.get(s)??0)+1)}return e}function J(t,e){return`${t}\x00${e}`}function a(t){const e=t?.value;if(typeof e==="string")return e;if(typeof e==="number"||typeof e==="boolean")return String(e);return""}function m(t,e){const r=t.properties?.find((i)=>i.name===e);return a(r?.value)}function b(t){return t.replace(/\s+/g," ").trim().slice(0,160)}
|