publishport-opencli 1.0.19 → 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/cli-manifest.json +35 -0
- 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 +16 -16
- 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
package/clis/doubao/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{CommandExecutionError as
|
|
1
|
+
import{CommandExecutionError as p}from"@jackwener/opencli/errors";export const DOUBAO_DOMAIN="www.doubao.com",DOUBAO_CHAT_URL="https://www.doubao.com/chat",DOUBAO_NEW_CHAT_URL="https://www.doubao.com/chat/new-thread/create-by-msg";const _=['textarea[data-testid="chat_input_input"]','[data-testid="chat_input"] textarea',".chat-input textarea",'.chat-input [contenteditable="true"]',".chat-editor textarea",'.chat-editor [contenteditable="true"]','textarea[placeholder*="发消息"]','textarea[placeholder*="Message"]','[contenteditable="true"][placeholder*="发消息"]','[contenteditable="true"][placeholder*="Message"]','[contenteditable="true"][aria-label*="发消息"]','[contenteditable="true"][aria-label*="Message"]',"textarea",'[contenteditable="true"]'];function f(){return`
|
|
2
2
|
const isVisible = (el) => {
|
|
3
3
|
if (!(el instanceof HTMLElement)) return false;
|
|
4
4
|
const style = window.getComputedStyle(el);
|
|
@@ -7,7 +7,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
7
7
|
return rect.width > 0 && rect.height > 0;
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
const composerSelectors = ${JSON.stringify(
|
|
10
|
+
const composerSelectors = ${JSON.stringify(_)};
|
|
11
11
|
const findComposer = () => {
|
|
12
12
|
for (const selector of composerSelectors) {
|
|
13
13
|
const node = Array.from(document.querySelectorAll(selector)).find(isVisible);
|
|
@@ -15,7 +15,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
15
15
|
}
|
|
16
16
|
return null;
|
|
17
17
|
};
|
|
18
|
-
`}function
|
|
18
|
+
`}function x(){return`
|
|
19
19
|
(() => {
|
|
20
20
|
const clean = (value) => (value || '')
|
|
21
21
|
.replace(/\\u00a0/g, ' ')
|
|
@@ -78,7 +78,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
78
78
|
&& !stopLines.has(line)
|
|
79
79
|
&& !noisyPatterns.some((pattern) => pattern.test(line)));
|
|
80
80
|
})()
|
|
81
|
-
`}function
|
|
81
|
+
`}function k(){return`
|
|
82
82
|
(() => {
|
|
83
83
|
const routerData = window._ROUTER_DATA?.loaderData?.chat_layout;
|
|
84
84
|
const placeholderNode = document.querySelector(
|
|
@@ -96,7 +96,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
96
96
|
|| '',
|
|
97
97
|
};
|
|
98
98
|
})()
|
|
99
|
-
`}function
|
|
99
|
+
`}function w(){return`
|
|
100
100
|
(() => {
|
|
101
101
|
const clean = (value) => (value || '')
|
|
102
102
|
.replace(/\\u00a0/g, ' ')
|
|
@@ -264,9 +264,9 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
264
264
|
if (deduped.length > 0) return deduped;
|
|
265
265
|
return [];
|
|
266
266
|
})()
|
|
267
|
-
`}function
|
|
267
|
+
`}function L(){return`
|
|
268
268
|
(() => {
|
|
269
|
-
${
|
|
269
|
+
${f()}
|
|
270
270
|
const composer = findComposer();
|
|
271
271
|
|
|
272
272
|
if (
|
|
@@ -299,9 +299,9 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
299
299
|
|
|
300
300
|
return { ok: true };
|
|
301
301
|
})()
|
|
302
|
-
`}function
|
|
302
|
+
`}function v(){return`
|
|
303
303
|
(() => {
|
|
304
|
-
${
|
|
304
|
+
${f()}
|
|
305
305
|
const composer = findComposer();
|
|
306
306
|
|
|
307
307
|
if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
|
|
@@ -318,9 +318,9 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
318
318
|
|
|
319
319
|
return { hasText: false, text: '' };
|
|
320
320
|
})()
|
|
321
|
-
`}function
|
|
321
|
+
`}function M(){return`
|
|
322
322
|
(() => {
|
|
323
|
-
${
|
|
323
|
+
${f()}
|
|
324
324
|
const composer = findComposer();
|
|
325
325
|
|
|
326
326
|
if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
|
|
@@ -341,9 +341,9 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
341
341
|
|
|
342
342
|
return { hasText: false, text: '' };
|
|
343
343
|
})()
|
|
344
|
-
`}function
|
|
344
|
+
`}function D(e){return`
|
|
345
345
|
((inputText) => {
|
|
346
|
-
${
|
|
346
|
+
${f()}
|
|
347
347
|
const composer = findComposer();
|
|
348
348
|
|
|
349
349
|
if (!composer) throw new Error('Could not find Doubao input element');
|
|
@@ -382,8 +382,8 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
throw new Error('Unsupported Doubao input element');
|
|
385
|
-
})(${JSON.stringify(
|
|
386
|
-
`}function
|
|
385
|
+
})(${JSON.stringify(e)})
|
|
386
|
+
`}function y(){return`
|
|
387
387
|
(() => {
|
|
388
388
|
const isVisible = (el) => {
|
|
389
389
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -423,9 +423,9 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
423
423
|
reason: match ? ((match.innerText || match.textContent || '').trim().slice(0, 80) || 'challenge-ui') : '',
|
|
424
424
|
};
|
|
425
425
|
})()
|
|
426
|
-
`}function
|
|
426
|
+
`}function C(){return`
|
|
427
427
|
(() => {
|
|
428
|
-
${
|
|
428
|
+
${f()}
|
|
429
429
|
const directSendButton = document.querySelector('button#flow-end-msg-send');
|
|
430
430
|
if (directSendButton instanceof HTMLElement && isVisible(directSendButton)) {
|
|
431
431
|
const disabled = directSendButton.getAttribute('disabled') !== null
|
|
@@ -514,7 +514,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
514
514
|
|
|
515
515
|
return false;
|
|
516
516
|
})()
|
|
517
|
-
`}function
|
|
517
|
+
`}function R(){return`
|
|
518
518
|
(() => {
|
|
519
519
|
const isVisible = (el) => {
|
|
520
520
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -541,10 +541,10 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
541
541
|
|
|
542
542
|
return '';
|
|
543
543
|
})()
|
|
544
|
-
`}function
|
|
545
|
-
`).trim(),
|
|
546
|
-
`).filter(Boolean);return
|
|
547
|
-
`)}function
|
|
544
|
+
`}function q(e){return e.map((t,n)=>{const r=t||{};return{index:typeof r.index==="number"?r.index:n,url:typeof r.url==="string"?r.url:"",title:typeof r.title==="string"?r.title:"",active:r.active===!0}}).filter((t)=>t.url.includes("doubao.com/chat"))}async function N(e){const t=await e.tabs().catch(()=>[]);if(!Array.isArray(t)||t.length===0)return!1;const n=q(t);if(n.length===0)return!1;const r=[...n].sort((a,o)=>{const s=(c)=>{let l=c.index;if(/https:\/\/www\.doubao\.com\/chat\/[A-Za-z0-9_-]+/.test(c.url))l+=1000;else if(c.url.startsWith(DOUBAO_CHAT_URL))l+=100;if(c.active)l+=25;return l};return s(o)-s(a)})[0];if(!r)return!1;await e.selectTab(r.index);await e.wait(0.8);return!0}export async function ensureDoubaoChatPage(e){let t=await e.evaluate("window.location.href").catch(()=>"");if(typeof t==="string"&&t.includes("doubao.com/chat")){await e.wait(1);return}if(await N(e)){t=await e.evaluate("window.location.href").catch(()=>"");if(typeof t==="string"&&t.includes("doubao.com/chat")){await e.wait(1);return}}await e.goto(DOUBAO_CHAT_URL,{waitUntil:"load",settleMs:2500});await e.wait(1.5)}export async function getDoubaoPageState(e){await ensureDoubaoChatPage(e);return await e.evaluate(k())}export async function getDoubaoTurns(e){await ensureDoubaoChatPage(e);const t=await e.evaluate(w());if(t.length>0)return t;return(await e.evaluate(x())).map((r)=>({Role:"System",Text:r}))}export async function getDoubaoVisibleTurns(e){await ensureDoubaoChatPage(e);return await e.evaluate(w())}export async function getDoubaoTranscriptLines(e){await ensureDoubaoChatPage(e);return await e.evaluate(x())}export async function sendDoubaoMessage(e,t){await ensureDoubaoChatPage(e);const n=(u)=>u.replace(/\r\n/g,`
|
|
545
|
+
`).trim(),r=n(t),a=await e.evaluate(L());if(!a?.ok)throw new p(a?.reason||"Could not find Doubao input element");let o=!1;if(e.nativeType)try{await e.nativeType(t);await e.wait(0.2);await e.evaluate(M());const u=await e.evaluate(v());o=!!u?.hasText&&n(u?.text||"")===r}catch{}if(!o){const u=await e.evaluate(D(t));o=!!u?.hasText&&n(u?.text||"")===r}if(!o)throw new p("Failed to insert text into Doubao composer");let s="enter";if(await e.evaluate(C()))s="button";else if(e.nativeKeyPress)try{await e.nativeKeyPress("Enter")}catch{await e.pressKey("Enter")}else await e.pressKey("Enter");await e.wait(0.8);const l=await e.evaluate(y());if(l?.detected)throw new p("Doubao blocked the request with a verification challenge",l.reason?`Detected challenge signal: ${l.reason}`:"Please complete the challenge in the browser and try again.");return s}export async function waitForDoubaoResponse(e,t,n,r,a){const o=new Set(n.filter((i)=>i.Role==="Assistant").map((i)=>`${i.Role}::${i.Text}`)),s=(i)=>i.replace(r,"").replace(/内容由豆包 AI 生成/g,"").replace(/在此处拖放文件/g,"").replace(/文件数量:.*$/g,"").replace(/\{"namedChunks".*$/g,"").replace(/window\\._SSR_DATA.*$/g,"").trim(),c=async()=>{const i=await e.evaluate(y());if(i?.detected)throw new p("Doubao blocked the request with a verification challenge",i.reason?`Detected challenge signal: ${i.reason}`:"Please complete the challenge in the browser and try again.");const T=[...await getDoubaoVisibleTurns(e)].reverse().find((m)=>m.Role==="Assistant"&&!o.has(`${m.Role}::${m.Text}`)),S=T?s(T.Text):"";if(S)return S;const E=await getDoubaoTranscriptLines(e),g=collectDoubaoTranscriptAdditions(t,E,r,s).split(`
|
|
546
|
+
`).filter(Boolean);return g.find((m)=>m.length<=120)||g[g.length-1]||""},l=2,u=Math.max(1,Math.ceil(a/l));let b="",h=0;for(let i=0;i<u;i+=1){await e.wait(i===0?1.5:l);const d=await c();if(!d)continue;if(d===b)h+=1;else{b=d;h=1}if(h>=2||i===u-1)return d}return b}export function isLikelyDoubaoUiNoise(e){const t=e.replace(/\s+/g,"");if(!t)return!1;return new Set(["快速视频生成深入研究图像生成帮我写作音乐生成更多"]).has(t)}function I(e){const t=e.replace(/\s+/g,"");if(!t)return!1;return new Set(["AI创作云盘更多历史对话"]).has(t)}function H(e,t,n){const r=(c)=>c.replace(/\s+/g," ").trim(),a=r(e),o=r(n);if(!o||!a.startsWith(o))return!1;const s=a.slice(o.length).trim();if(!s)return!0;return isLikelyDoubaoUiNoise(s)||isLikelyDoubaoUiNoise(t)}export function collectDoubaoTranscriptAdditions(e,t,n,r=(a)=>a.trim()){const a=new Set(e.map((o)=>r(o)).filter(Boolean));return t.filter((o)=>!e.includes(o)).map((o)=>({raw:o,sanitized:r(o)})).filter(({raw:o,sanitized:s})=>s&&s!==n&&!a.has(s)&&!I(s)&&!H(o,s,n)).map(({sanitized:o})=>o).join(`
|
|
547
|
+
`)}function B(){return`
|
|
548
548
|
(() => {
|
|
549
549
|
const sidebar = document.querySelector('[data-testid="flow_chat_sidebar"]');
|
|
550
550
|
if (!sidebar) return [];
|
|
@@ -567,7 +567,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
567
567
|
})
|
|
568
568
|
.filter(Boolean);
|
|
569
569
|
})()
|
|
570
|
-
`}export async function getDoubaoConversationList(
|
|
570
|
+
`}export async function getDoubaoConversationList(e){await ensureDoubaoChatPage(e);const t=await e.evaluate(B());if(!Array.isArray(t))return[];return t.map((n)=>({Id:n.id,Title:n.title,Url:`${DOUBAO_CHAT_URL}/${n.id}`}))}export function parseDoubaoConversationId(e){const t=e.match(/(\d{10,})/);return t?t[1]:e}function P(){return`
|
|
571
571
|
(() => {
|
|
572
572
|
const clean = (v) => (v || '').replace(/\\u00a0/g, ' ').replace(/\\n{3,}/g, '\\n\\n').trim();
|
|
573
573
|
|
|
@@ -600,14 +600,14 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
600
600
|
|
|
601
601
|
return { messages, meeting };
|
|
602
602
|
})()
|
|
603
|
-
`}export async function navigateToConversation(
|
|
603
|
+
`}export async function navigateToConversation(e,t){const n=`${DOUBAO_CHAT_URL}/${t}`,r=await e.evaluate("window.location.href").catch(()=>"");if(typeof r==="string"&&r.includes(`/chat/${t}`)){await e.wait(1);return}await e.goto(n,{waitUntil:"load",settleMs:3000});await e.wait(2)}export async function getConversationDetail(e,t){await navigateToConversation(e,t);const n=await e.evaluate(P());return{messages:(n.messages||[]).map((a)=>({Role:a.role,Text:a.text,HasMeetingCard:a.hasMeetingCard})),meeting:n.meeting}}function O(){return`
|
|
604
604
|
(() => {
|
|
605
605
|
const card = document.querySelector('[data-testid="meeting-minutes-card"]');
|
|
606
606
|
if (!card) return false;
|
|
607
607
|
card.click();
|
|
608
608
|
return true;
|
|
609
609
|
})()
|
|
610
|
-
`}function
|
|
610
|
+
`}function U(){return`
|
|
611
611
|
(() => {
|
|
612
612
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
613
613
|
if (!panel) return { error: 'no panel' };
|
|
@@ -619,7 +619,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
619
619
|
|
|
620
620
|
return { summary: summaryText };
|
|
621
621
|
})()
|
|
622
|
-
`}function
|
|
622
|
+
`}function V(){return`
|
|
623
623
|
(() => {
|
|
624
624
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
625
625
|
if (!panel) return false;
|
|
@@ -632,7 +632,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
632
632
|
}
|
|
633
633
|
return false;
|
|
634
634
|
})()
|
|
635
|
-
`}function
|
|
635
|
+
`}function j(){return`
|
|
636
636
|
(() => {
|
|
637
637
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
638
638
|
if (!panel) return '';
|
|
@@ -640,13 +640,13 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
640
640
|
if (!textNotes) return '';
|
|
641
641
|
return (textNotes.innerText || textNotes.textContent || '').trim();
|
|
642
642
|
})()
|
|
643
|
-
`}function
|
|
644
|
-
`).map((
|
|
645
|
-
`);if(
|
|
646
|
-
`);if(
|
|
647
|
-
`);const
|
|
648
|
-
`)}return[...
|
|
649
|
-
`)}function
|
|
643
|
+
`}function A(e){return e.split(`
|
|
644
|
+
`).map((t)=>t.trim()).filter(Boolean)}function W(e,t){if(t.length===0)return!0;if(t.length>e.length)return!1;for(let n=0;n<=e.length-t.length;n+=1){let r=!0;for(let a=0;a<t.length;a+=1)if(e[n+a]!==t[a]){r=!1;break}if(r)return!0}return!1}export function mergeTranscriptSnapshots(e,t){const n=A(e),r=A(t);if(r.length===0)return n.join(`
|
|
645
|
+
`);if(n.length===0)return r.join(`
|
|
646
|
+
`);if(W(n,r))return n.join(`
|
|
647
|
+
`);const a=Math.min(n.length,r.length);for(let o=a;o>0;o-=1){let s=!0;for(let c=0;c<o;c+=1)if(n[n.length-o+c]!==r[c]){s=!1;break}if(s)return[...n,...r.slice(o)].join(`
|
|
648
|
+
`)}return[...n,...r].join(`
|
|
649
|
+
`)}function z(){return`
|
|
650
650
|
(() => {
|
|
651
651
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
652
652
|
if (!panel) return false;
|
|
@@ -659,7 +659,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
659
659
|
}
|
|
660
660
|
return false;
|
|
661
661
|
})()
|
|
662
|
-
`}function
|
|
662
|
+
`}function K(){return`
|
|
663
663
|
(() => {
|
|
664
664
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
665
665
|
if (!panel) return '';
|
|
@@ -667,7 +667,7 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
667
667
|
if (!chapter) return '';
|
|
668
668
|
return (chapter.innerText || chapter.textContent || '').trim();
|
|
669
669
|
})()
|
|
670
|
-
`}function
|
|
670
|
+
`}function F(){return`
|
|
671
671
|
(() => {
|
|
672
672
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
673
673
|
if (!panel) return { error: 'no panel' };
|
|
@@ -678,14 +678,14 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
678
678
|
downloadIcon.click();
|
|
679
679
|
return { clicked: 'icon' };
|
|
680
680
|
})()
|
|
681
|
-
`}function
|
|
681
|
+
`}function J(){return`
|
|
682
682
|
(() => {
|
|
683
683
|
const btn = document.querySelector('[data-testid="minutes-download-text-btn"]');
|
|
684
684
|
if (!btn) return { error: 'no download text btn' };
|
|
685
685
|
btn.click();
|
|
686
686
|
return { clicked: 'transcript' };
|
|
687
687
|
})()
|
|
688
|
-
`}export async function openMeetingPanel(
|
|
688
|
+
`}export async function openMeetingPanel(e,t){await navigateToConversation(e,t);if(!await e.evaluate(O()))return!1;await e.wait(2);return!0}export async function getMeetingSummary(e){return(await e.evaluate(U())).summary||""}export async function getMeetingChapters(e){await e.evaluate(z());await e.wait(1.5);return await e.evaluate(K())}function G(){return`
|
|
689
689
|
(() => {
|
|
690
690
|
const panel = document.querySelector('[data-testid="canvas_panel_container"]');
|
|
691
691
|
if (!panel) return 0;
|
|
@@ -701,4 +701,4 @@ import{CommandExecutionError as N}from"@jackwener/opencli/errors";export const D
|
|
|
701
701
|
}
|
|
702
702
|
return maxScroll;
|
|
703
703
|
})()
|
|
704
|
-
`}export async function getMeetingTranscript(
|
|
704
|
+
`}export async function getMeetingTranscript(e){await e.evaluate(V());await e.wait(2);let t="",n=0;for(let r=0;r<10;r++){await e.evaluate(G());await e.wait(1);const a=await e.evaluate(j()),o=mergeTranscriptSnapshots(t,a);if(o===t&&a.length>0){n+=1;if(n>=2)break}else{n=0;t=o}}return t}export async function triggerTranscriptDownload(e){if((await e.evaluate(F())).error)return!1;await e.wait(1);return!(await e.evaluate(J())).error}export const __test__={clickSendButtonScript:C,composerStateScript:v,detectDoubaoVerificationScript:y,getTurnsScript:w,getTranscriptLinesScript:x};export async function startNewDoubaoChat(e){await ensureDoubaoChatPage(e);const t=await e.evaluate(R());if(t){await e.wait(1.5);return t}await e.goto(DOUBAO_NEW_CHAT_URL,{waitUntil:"load",settleMs:2000});await e.wait(1.5);return"navigate"}
|
package/clis/doubao-app/ask.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cli as
|
|
1
|
+
import{cli as u,Strategy as p}from"@jackwener/opencli/registry";import{SEL as d,injectTextScript as m,clickSendScript as f,pollResponseScript as w}from"./utils.js";export const askCommand=u({site:"doubao-app",name:"ask",access:"write",description:"Send a message to Doubao desktop app and wait for the AI response",domain:"doubao-app",strategy:p.UI,browser:!0,args:[{name:"text",fromFile:!0,required:!0,positional:!0,help:"Prompt to send"},{name:"timeout",type:"int",default:30,help:"Max seconds to wait for response"}],columns:["Role","Text"],func:async(t,i)=>{const o=i.text,n=i.timeout||30,c=await t.evaluate(`document.querySelectorAll('${d.MESSAGE}').length`);if(!(await t.evaluate(m(o)))?.ok)throw Error("Could not find chat input.");await t.wait(0.5);if(!await t.evaluate(f()))await t.pressKey("Enter");const r=1,l=Math.ceil(n/r);let a="";for(let s=0;s<l;s++){await t.wait(r);const e=await t.evaluate(w(c));if(!e)continue;if(e.phase==="done"&&e.text){a=e.text;break}}if(!a)return[{Role:"User",Text:o},{Role:"System",Text:`No response received within ${n}s.`}];return[{Role:"User",Text:o},{Role:"Assistant",Text:a}]}});
|
package/clis/doubao-app/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const SEL={INPUT:'[data-testid="chat_input_input"]',SEND_BTN:'[data-testid="chat_input_send_button"]',MESSAGE:'[data-testid="message_content"]',MESSAGE_TEXT:'[data-testid="message_text_content"]',INDICATOR:'[data-testid="indicator"]',NEW_CHAT:'[data-testid="new_chat_button"]',NEW_CHAT_SIDEBAR:'[data-testid="app-open-newChat"]'};export function injectTextScript(
|
|
1
|
+
export const SEL={INPUT:'[data-testid="chat_input_input"]',SEND_BTN:'[data-testid="chat_input_send_button"]',MESSAGE:'[data-testid="message_content"]',MESSAGE_TEXT:'[data-testid="message_text_content"]',INDICATOR:'[data-testid="indicator"]',NEW_CHAT:'[data-testid="new_chat_button"]',NEW_CHAT_SIDEBAR:'[data-testid="app-open-newChat"]'};export function injectTextScript(t){return`(function(t) {
|
|
2
2
|
const textarea = document.querySelector('${SEL.INPUT}');
|
|
3
3
|
if (!textarea) return { ok: false, error: 'No textarea found' };
|
|
4
4
|
textarea.focus();
|
|
@@ -10,7 +10,7 @@ export const SEL={INPUT:'[data-testid="chat_input_input"]',SEND_BTN:'[data-testi
|
|
|
10
10
|
textarea.dispatchEvent(new Event('input', { bubbles: true }));
|
|
11
11
|
textarea.dispatchEvent(new Event('change', { bubbles: true }));
|
|
12
12
|
return { ok: true };
|
|
13
|
-
})(${JSON.stringify(
|
|
13
|
+
})(${JSON.stringify(t)})`}export function clickSendScript(){return`(function() {
|
|
14
14
|
const btn = document.querySelector('${SEL.SEND_BTN}');
|
|
15
15
|
if (!btn) return false;
|
|
16
16
|
btn.click();
|
|
@@ -42,7 +42,7 @@ export const SEL={INPUT:'[data-testid="chat_input_input"]',SEND_BTN:'[data-testi
|
|
|
42
42
|
btn = document.querySelector('${SEL.NEW_CHAT_SIDEBAR}');
|
|
43
43
|
if (btn) { btn.click(); return true; }
|
|
44
44
|
return false;
|
|
45
|
-
})()`}export function pollResponseScript(
|
|
45
|
+
})()`}export function pollResponseScript(t){return`(function(prevCount) {
|
|
46
46
|
const msgs = document.querySelectorAll('${SEL.MESSAGE}');
|
|
47
47
|
if (msgs.length <= prevCount) return { phase: 'waiting', text: null };
|
|
48
48
|
const lastMsg = msgs[msgs.length - 1];
|
|
@@ -61,4 +61,4 @@ export const SEL={INPUT:'[data-testid="chat_input_input"]',SEND_BTN:'[data-testi
|
|
|
61
61
|
text = textEl.innerText?.trim() || textEl.textContent?.trim() || '';
|
|
62
62
|
}
|
|
63
63
|
return { phase: 'done', text };
|
|
64
|
-
})(${
|
|
64
|
+
})(${t})`}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{AuthRequiredError as
|
|
1
|
+
import{AuthRequiredError as u,CommandExecutionError as i}from"@jackwener/opencli/errors";import{unwrapEvaluateResult as y}from"./evaluate-result.js";function f(s,t){const e=String(t??"");return s===401||s===403||/login|cookie|auth|captcha|verify|forbidden|permission|登录|登陆|权限|验证|验证码/i.test(e)}export async function browserFetch(s,t,e,n={}){const c=`
|
|
2
2
|
(async () => {
|
|
3
3
|
const controller = new AbortController();
|
|
4
|
-
const timer = setTimeout(() => controller.abort(), ${Number(
|
|
4
|
+
const timer = setTimeout(() => controller.abort(), ${Number(n.timeoutMs??30000)});
|
|
5
5
|
try {
|
|
6
|
-
const res = await fetch(${JSON.stringify(
|
|
7
|
-
method: ${JSON.stringify(
|
|
6
|
+
const res = await fetch(${JSON.stringify(e)}, {
|
|
7
|
+
method: ${JSON.stringify(t)},
|
|
8
8
|
credentials: 'include',
|
|
9
9
|
signal: controller.signal,
|
|
10
10
|
headers: {
|
|
11
11
|
'Content-Type': 'application/json',
|
|
12
|
-
...${JSON.stringify(
|
|
12
|
+
...${JSON.stringify(n.headers??{})}
|
|
13
13
|
},
|
|
14
|
-
${
|
|
14
|
+
${n.body?`body: JSON.stringify(${JSON.stringify(n.body)}),`:""}
|
|
15
15
|
});
|
|
16
16
|
const text = await res.text();
|
|
17
17
|
try {
|
|
@@ -25,4 +25,4 @@ import{AuthRequiredError as M,CommandExecutionError as I}from"@jackwener/opencli
|
|
|
25
25
|
clearTimeout(timer);
|
|
26
26
|
}
|
|
27
27
|
})()
|
|
28
|
-
`;let
|
|
28
|
+
`;let r;try{r=y(await s.evaluate(c))}catch(o){throw new i(`Douyin API request failed (${t} ${e}): ${o instanceof Error?o.message:String(o)}`)}if(r==null)throw new i(`Empty response from Douyin API (${t} ${e})`);if(Array.isArray(r)||typeof r!=="object")throw new i(`Malformed response from Douyin API (${t} ${e})`);if(r&&typeof r==="object"&&"status_code"in r){const o=r.status_code;if(o!==0){const a=r.status_msg??r.message??"unknown error";if(f(o,a))throw new u("creator.douyin.com",`Douyin API auth/permission error ${o} at ${t} ${e}: ${a}`);throw new i(`Douyin API error ${o} at ${t} ${e}: ${a}`)}}return r}
|
|
@@ -10,4 +10,4 @@ export const IMAGE_DRAFT_KEY_RE=/^publish_cache:\d+:image$/,READ_IMAGE_DRAFT_JS=
|
|
|
10
10
|
} catch (e) {}
|
|
11
11
|
return out;
|
|
12
12
|
})()
|
|
13
|
-
`;export function matchImageDraft(
|
|
13
|
+
`;export function matchImageDraft(c,o){const i=String(o?.title||"").replace(/\s+/g,""),n=String(o?.content||"").split("#")[0].replace(/\s+/g,"").slice(0,20);for(const e of c||[]){if(!e||!IMAGE_DRAFT_KEY_RE.test(e.key||""))continue;let t=null;try{t=JSON.parse(e.value||"")}catch{continue}if(!t)continue;const l=String(t.title||"").replace(/\s+/g,""),a=String(t.text||"").replace(/\s+/g,""),r=!!i&&l===i,s=!!n&&a.includes(n);if(r||s)return{hit:!0,key:e.key,title:t.title||""}}return{hit:!1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as r from"node:fs";import*as c from"node:path";import{CommandExecutionError as a}from"@jackwener/opencli/errors";function p(e){switch(c.extname(e).toLowerCase()){case".png":return"image/png";case".gif":return"image/gif";case".webp":return"image/webp";default:return"image/jpeg"}}export async function imagexUpload(e,t){if(!r.existsSync(e))throw new a(`Cover image file not found: ${e}`,"Ensure the file path is correct and accessible.");const o=r.readFileSync(e),i=p(e),n=await fetch(t.upload_url,{method:"PUT",headers:{"Content-Type":i,"Content-Length":String(o.byteLength)},body:o});if(!n.ok){const s=await n.text().catch(()=>"");throw new a(`ImageX upload failed with status ${n.status}: ${s}`,"Check that the upload URL is valid and has not expired.")}return t.store_uri}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AuthRequiredError as
|
|
1
|
+
import{AuthRequiredError as i}from"@jackwener/opencli/errors";const o="https://creator.douyin.com/aweme/mid/video/sts2/?scene=web&aid=1128&cookie_enabled=true&device_platform=web";export async function getSts2Credentials(n){const r=`fetch(${JSON.stringify(o)}, { credentials: 'include' }).then(r => r.json())`,e=await n.evaluate(r),t=typeof e==="object"&&e!==null&&"data"in e&&e.data?e.data:e;if(!t?.access_key_id)throw new i("creator.douyin.com","STS2 credentials missing");return t}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function parseTextExtra(
|
|
1
|
+
export function parseTextExtra(e,a){return a.map((t)=>({type:1,hashtag_id:t.id,hashtag_name:t.name,start:t.start,end:t.end,caption_start:0,caption_end:t.end-t.start}))}export function extractHashtagNames(e){return[...e.matchAll(/#([^\s#]+)/g)].map((a)=>a[1])}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as k from"node:crypto";import*as m from"node:fs";import*as D from"node:os";import*as T from"node:path";import{CommandExecutionError as g}from"@jackwener/opencli/errors";const PART_SIZE=5242880,RESUME_DIR=T.join(D.homedir(),".ppcli","douyin-resume");function getResumeFilePath(e){const t=k.createHash("sha256").update(e).digest("hex");return T.join(RESUME_DIR,`${t}.json`)}function loadResumeState(e,t){try{const a=m.readFileSync(e,"utf8"),n=JSON.parse(a);if(n.fileSize===t&&n.uploadId&&Array.isArray(n.parts))return n}catch{}return null}function saveResumeState(e,t){m.mkdirSync(T.dirname(e),{recursive:!0});m.writeFileSync(e,JSON.stringify(t,null,2),"utf8")}function deleteResumeState(e){try{m.unlinkSync(e)}catch{}}function x(e,t){return k.createHmac("sha256",e).update(t,"utf8").digest()}function P(e){const t=k.createHash("sha256");if(typeof e==="string")t.update(e,"utf8");else t.update(e);return t.digest("hex")}const v=new Uint32Array(256).map((e,t)=>{let a=t;for(let n=0;n<8;n+=1)a=a&1?3988292384^a>>>1:a>>>1;return a>>>0});function crc32Hex(e){let t=4294967295;for(const a of e)t=v[(t^a)&255]^t>>>8;return((t^4294967295)>>>0).toString(16).padStart(8,"0")}function gatewayBaseUrl(e){const t=new URL(e);return`https://${t.host}/upload/v1${t.pathname}`}function gatewayHeaders(e,t,a=""){return{Authorization:e,"X-Storage-U":encodeURIComponent(a),...t??{}}}function extractRegionFromHost(e){const t=e.match(/^tos-([^.]+)\./);if(t)return t[1];return"cn-north-1"}function computeAws4Headers(e){const{method:t,url:a,credentials:n,service:s,region:o,datetime:r}=e,l=r.slice(0,8),c=new URL(a),d=c.pathname||"/",i=[...c.searchParams.entries()].sort(([f],[w])=>f.localeCompare(w)).map(([f,w])=>`${encodeURIComponent(f)}=${encodeURIComponent(w)}`).join("&"),h=P(e.body),y={...e.headers,host:c.host,"x-amz-content-sha256":h,"x-amz-date":r,"x-amz-security-token":n.session_token},I=Object.keys(y).sort((f,w)=>f.toLowerCase().localeCompare(w.toLowerCase())),S=I.map((f)=>`${f.toLowerCase()}:${y[f].trim()}`).join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`,
|
|
4
|
-
`),
|
|
5
|
-
`),x
|
|
3
|
+
`,u=I.map((f)=>f.toLowerCase()).join(";"),_=[t.toUpperCase(),d,i,S,u,h].join(`
|
|
4
|
+
`),R=`${l}/${o}/${s}/aws4_request`,b=["AWS4-HMAC-SHA256",r,R,P(_)].join(`
|
|
5
|
+
`),H=x(`AWS4${n.secret_access_key}`,l),A=x(H,o),p=x(A,s),C=x(p,"aws4_request"),U=x(C,b).toString("hex"),O=`AWS4-HMAC-SHA256 Credential=${n.access_key_id}/${R}, SignedHeaders=${u}, Signature=${U}`;return{...y,Authorization:O}}async function z(e){const{method:t,url:a,headers:n,body:s}=e,o=s==null?null:typeof s==="string"?s:s,r=await fetch(a,{method:t,headers:n,body:o,signal:AbortSignal.timeout(60000)}),l=await r.text(),c={};r.headers.forEach((d,i)=>{c[i.toLowerCase()]=d});return{status:r.status,headers:c,body:l}}function F(){return new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z")}function extractUploadId(e){const t=e.match(/<UploadId>([^<]+)<\/UploadId>/i);if(t)return t[1];try{const a=JSON.parse(e);return a?.payload?.uploadID||a?.payload?.uploadId||a?.payload?.UploadID||a?.payload?.UploadId||a?.data?.uploadid||a?.data?.uploadID||a?.data?.uploadId||a?.data?.UploadID||a?.data?.UploadId||a?.UploadID||a?.UploadId||a?.uploadID||a?.uploadId||null}catch{return null}}async function M(e,t,a,n){const s=`${gatewayBaseUrl(e)}?uploadmode=part&phase=init`,o=await z({method:"POST",url:s,headers:gatewayHeaders(t,a,n)});if(o.status!==200)throw new g(`TOS init multipart upload failed with status ${o.status}: ${o.body}`,"Check that TOS upload authorization is valid and not expired.");const r=extractUploadId(o.body);if(!r)throw new g(`TOS init response missing UploadId: ${o.body}`);return r}async function N(e,t,a,n,s,o,r){const l=crc32Hex(n),c=`${gatewayBaseUrl(e)}?uploadid=${encodeURIComponent(a)}&part_number=${t}&phase=transfer`,d={...gatewayHeaders(s,o,r),"Content-CRC32":l,"Content-Type":"application/octet-stream","X-Use-Init-Upload-Optimize":"1","X-Use-Large-Local-Cache":"1"},i=await z({method:"POST",url:c,headers:d,body:n});let h;try{h=JSON.parse(i.body)}catch{h=null}if(i.status!==200||h?.code!==2000)throw new g(`TOS upload part ${t} failed with status ${i.status}: ${i.body}`,"Check that TOS upload authorization is valid and not expired.");return h?.data?.crc32||l}async function E(e,t,a,n,s,o){const r=`${gatewayBaseUrl(e)}?uploadmode=part&phase=finish&uploadid=${encodeURIComponent(t)}`,l=a.sort((i,h)=>i.partNumber-h.partNumber).map((i)=>`${i.partNumber}:${i.crc32}`).join(","),c=await z({method:"POST",url:r,headers:gatewayHeaders(n,s,o),body:l});let d;try{d=JSON.parse(c.body)}catch{d=null}if(c.status!==200||d?.code!==2000)throw new g(`TOS complete multipart upload failed with status ${c.status}: ${c.body}`,"Check that all parts were uploaded successfully.");return d?.data?.key||null}let L=null;export function setReadSyncOverride(e){L=e}export async function tosUpload(e){const{filePath:t,uploadInfo:a,credentials:n,onProgress:s}=e;if(!m.existsSync(t))throw new g(`Video file not found: ${t}`,"Ensure the file path is correct and accessible.");const{size:o}=m.statSync(t);if(o===0)throw new g(`Video file is empty: ${t}`);const{tos_upload_url:r,auth:l,upload_header:c,user_id:d}=a,i=new URL(r),h=extractRegionFromHost(i.host),y=getResumeFilePath(t);let I=loadResumeState(y,o),S,u;if(I){S=I.uploadId;u=I.parts}else{S=await M(r,l,c,d);u=[];saveResumeState(y,{uploadId:S,fileSize:o,parts:u})}const _=new Set(u.map((p)=>p.partNumber)),R=Math.ceil(o/PART_SIZE);let b=u.length*PART_SIZE;if(s)s(Math.min(b,o),o);const H=m.openSync(t,"r");try{for(let p=1;p<=R;p++){if(_.has(p))continue;const C=(p-1)*PART_SIZE,U=Math.min(PART_SIZE,o-C),O=Buffer.allocUnsafe(U),w=(L??m.readSync)(H,O,0,U,C);if(w!==U)throw new g(`Short read on part ${p}: expected ${U} bytes, got ${w}`);const j=await N(r,p,S,O,l,c,d);u.push({partNumber:p,crc32:j});saveResumeState(y,{uploadId:S,fileSize:o,parts:u});b=Math.min(C+U,o);if(s)s(b,o)}}finally{m.closeSync(H)}const A=await E(r,S,u,l,c,d);deleteResumeState(y);return A}export{PART_SIZE,RESUME_DIR,extractRegionFromHost,getResumeFilePath,loadResumeState,saveResumeState,deleteResumeState,computeAws4Headers,extractUploadId,crc32Hex,gatewayBaseUrl,gatewayHeaders};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{TimeoutError as
|
|
1
|
+
import{TimeoutError as d}from"@jackwener/opencli/errors";import{browserFetch as m}from"./browser-fetch.js";const w=3000,u=300000,T="https://creator.douyin.com/web/api/media/video/transend/";export async function pollTranscodeWithFetch(n,e,o,t=u){const c=`${T}?video_id=${encodeURIComponent(o)}&aid=1128`,r=Date.now()+t;while(Date.now()<r){const i=await n(e,"GET",c);if(i.encode===2)return i;const a=r-Date.now();if(a<=0)break;await new Promise((s)=>setTimeout(s,Math.min(w,a)))}throw new d(`Douyin transcode for video ${o}`,Math.round(t/1000))}export async function pollTranscode(n,e,o){return pollTranscodeWithFetch(m,n,e,o)}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import*as g from"node:crypto";import{AuthRequiredError as
|
|
1
|
+
import*as g from"node:crypto";import{AuthRequiredError as v,CommandExecutionError as d}from"@jackwener/opencli/errors";import{unwrapEvaluateResult as C}from"./evaluate-result.js";const b="https://creator.douyin.com/web/api/media/upload/auth/v5/",_="https://vod.bytedanceapi.com/",A="aweme";function l(s,e){return g.createHmac("sha256",s).update(e,"utf8").digest()}function U(s){const e=g.createHash("sha256");if(Buffer.isBuffer(s)||s instanceof Uint8Array)e.update(s);else e.update(s??"","utf8");return e.digest("hex")}function P(){return new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z")}function V(s){return[...s.searchParams.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}function O(s,e,t={}){const o=new URL(s),i=P(),u=i.slice(0,8),a=t.method??"GET",h=t.body??"",r=U(h),c={...t.headers??{},host:o.host,"x-amz-content-sha256":r,"x-amz-date":i,"x-amz-security-token":e.session_token},n=Object.keys(c).sort((m,J)=>m.localeCompare(J)),p=n.map((m)=>`${m}:${String(c[m]).trim()}`).join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`,S=n.join(";"),
|
|
4
|
-
`),y="vod",f="cn-north-1",w=`${u}/${f}/${y}/aws4_request`,
|
|
5
|
-
`),
|
|
3
|
+
`,S=n.join(";"),N=[a,o.pathname||"/",V(o),p,S,r].join(`
|
|
4
|
+
`),y="vod",f="cn-north-1",w=`${u}/${f}/${y}/aws4_request`,H=["AWS4-HMAC-SHA256",i,w,U(N)].join(`
|
|
5
|
+
`),T=l(`AWS4${e.secret_access_key}`,u),k=l(T,f),I=l(k,y),R=l(I,"aws4_request"),x=l(R,H).toString("hex");return{...c,Authorization:`AWS4-HMAC-SHA256 Credential=${e.access_key_id}/${w}, SignedHeaders=${S}, Signature=${x}`}}function K(s){try{const e=s.startsWith("STS2")?s.slice(4):s,t=JSON.parse(Buffer.from(e,"base64").toString("utf8")),i=JSON.parse(t.PolicyString||"{}")?.Statement?.[0]?.Condition;if(typeof i==="string")return JSON.parse(i).UserId||""}catch{return""}return""}export async function getUploadAuthV5Credentials(s){const e=C(await s.evaluate(`fetch(${JSON.stringify(b)}, { credentials: 'include' }).then(r => r.json())`));if(!e||Array.isArray(e)||typeof e!=="object")throw new d(`获取抖音上传授权失败: ${JSON.stringify(e)}`);if(e.status_code!==0){const o=e.status_msg??e.message??"unknown error";if(e.status_code===401||e.status_code===403||/login|cookie|auth|captcha|verify|forbidden|permission|登录|登陆|权限|验证|验证码/i.test(String(o)))throw new v("creator.douyin.com",`获取抖音上传授权失败: ${o}`);throw new d(`获取抖音上传授权失败: ${JSON.stringify(e)}`)}if(!e.auth)throw new d(`获取抖音上传授权失败: ${JSON.stringify(e)}`);let t;try{t=JSON.parse(e.auth)}catch(o){throw new d(`解析抖音上传授权失败: ${o instanceof Error?o.message:String(o)}`)}if(!t.AccessKeyID||!t.SecretAccessKey||!t.SessionToken)throw new d("抖音上传授权缺少 AccessKeyID/SecretAccessKey/SessionToken");return{access_key_id:t.AccessKeyID,secret_access_key:t.SecretAccessKey,session_token:t.SessionToken,user_id:K(t.SessionToken),expired_time:t.ExpiredTime,current_time:t.CurrentTime}}export async function applyVideoUploadInner(s,e){const t=new URLSearchParams({Action:"ApplyUploadInner",Version:"2020-11-19",SpaceName:A,FileType:"video",IsInner:"1",FileSize:String(s)}),o=`${_}?${t.toString()}`,i=await fetch(o,{headers:O(o,e),signal:AbortSignal.timeout(30000)}),u=await i.text();let a;try{a=JSON.parse(u)}catch{throw new d(`申请抖音上传地址失败,非 JSON 响应: HTTP ${i.status} ${u.slice(0,300)}`)}const h=a?.ResponseMetadata?.Error;if(!i.ok||h)throw new d(`申请抖音上传地址失败: HTTP ${i.status} ${JSON.stringify(h??a)}`);const r=a?.Result?.InnerUploadAddress?.UploadNodes?.[0],c=r?.StoreInfos?.[0],n=a?.Result?.Vid||r?.Vid,p=r?.SessionKey??c?.SessionKey??a?.Result?.SessionKey;if(!r?.UploadHost||!c?.StoreUri||!c?.Auth||!n||!p)throw new d(`申请抖音上传地址响应缺少必要字段: ${JSON.stringify(a).slice(0,500)}`);return{video_id:n,tos_upload_url:`https://${r.UploadHost}/${c.StoreUri}`,auth:c.Auth,session_key:p,upload_header:r.UploadHeader??{},user_id:e.user_id??""}}export async function commitVideoUploadInner(s,e){if(!s?.session_key)throw new d("抖音上传提交缺少 SessionKey");const t=new URLSearchParams({Action:"CommitUploadInner",Version:"2020-11-19",SpaceName:A}),o=`${_}?${t.toString()}`,i=JSON.stringify({SessionKey:s.session_key}),u=O(o,e,{method:"POST",body:i,headers:{"content-type":"application/json;charset=UTF-8"}}),a=await fetch(o,{method:"POST",headers:u,body:i,signal:AbortSignal.timeout(30000)}),h=await a.text();let r;try{r=JSON.parse(h)}catch{throw new d(`提交抖音上传失败,非 JSON 响应: HTTP ${a.status} ${h.slice(0,300)}`)}const c=r?.ResponseMetadata?.Error;if(!a.ok||c)throw new d(`提交抖音上传失败: HTTP ${a.status} ${JSON.stringify(c??r)}`);const n=r?.Result?.Results?.[0]??r?.Result??{},p=n.Vid??n.VideoId??n.VideoID??n.vid??s.video_id;if(!p)throw new d(`提交抖音上传响应缺少 video id: ${JSON.stringify(r).slice(0,500)}`);const S=n.Meta??n.VideoMeta??{};return{video_id:p,poster_uri:n.PosterUri??n.PosterURI??n.SnapshotUri??n.SnapshotURI??"",width:Number(S.Width??S.width??720)||720,height:Number(S.Height??S.height??1280)||1280,raw:n}}
|