@agentrhq/webcmd 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +183 -218
- package/cli-manifest.json +16247 -34913
- package/clis/_atlassian/shared.js +1 -1
- package/clis/booking/search.js +4 -4
- package/clis/chatgpt/ask.js +2 -2
- package/clis/chatgpt/utils.js +41 -42
- package/clis/chatgpt/utils.test.js +23 -23
- package/clis/chatgpt-app/ax.js +5 -5
- package/clis/chatgpt-app/ax.test.js +8 -8
- package/clis/chatgpt-app/new.js +2 -2
- package/clis/codex/sidebar.js +1 -1
- package/clis/codex/sidebar.test.js +12 -12
- package/clis/coingecko/top.js +3 -3
- package/clis/dblp/dblp.test.js +1 -1
- package/clis/discord-app/search.js +1 -1
- package/clis/discord-app/utils.js +6 -6
- package/clis/facebook/__fixtures__/notifications-page.html +6 -6
- package/clis/facebook/add-friend.js +2 -2
- package/clis/facebook/feed.js +18 -18
- package/clis/facebook/friends.js +4 -4
- package/clis/facebook/groups.js +3 -3
- package/clis/facebook/join-group.js +2 -2
- package/clis/facebook/marketplace-inbox.js +3 -3
- package/clis/facebook/marketplace-listings.js +1 -1
- package/clis/facebook/notifications.js +14 -15
- package/clis/facebook/notifications.test.js +28 -29
- package/clis/gemini/ask.test.js +12 -12
- package/clis/gemini/deep-research-result.js +2 -2
- package/clis/gemini/deep-research-result.test.js +2 -2
- package/clis/gemini/deep-research.js +2 -2
- package/clis/gemini/deep-research.test.js +1 -1
- package/clis/gemini/models.js +11 -11
- package/clis/gemini/models.test.js +1 -1
- package/clis/gemini/reply-state.test.js +89 -89
- package/clis/gemini/utils.js +41 -41
- package/clis/gemini/utils.test.js +30 -30
- package/clis/geogebra/utils.js +1 -1
- package/clis/google-scholar/search.js +3 -3
- package/clis/grok/delete.js +1 -1
- package/clis/grok/export-all.js +2 -2
- package/clis/grok/export.js +2 -2
- package/clis/grok/pin.js +3 -3
- package/clis/grok/utils.js +12 -12
- package/clis/grok/utils.test.js +2 -2
- package/clis/indeed/indeed.test.js +3 -3
- package/clis/indeed/utils.js +1 -1
- package/clis/instagram/post.js +19 -19
- package/clis/instagram/post.test.js +2 -2
- package/clis/instagram/reel.js +6 -6
- package/clis/linkedin/connect.js +3 -3
- package/clis/linkedin/people-search.js +4 -4
- package/clis/linkedin/profile-experience.js +6 -6
- package/clis/linkedin/profile-experience.test.js +10 -10
- package/clis/linkedin/profile-read.js +1 -1
- package/clis/linkedin/safe-send.js +1 -1
- package/clis/linkedin/search.js +1 -1
- package/clis/linkedin/shared.js +2 -2
- package/clis/linkedin/timeline.js +5 -5
- package/clis/manus/manus.test.js +2 -2
- package/clis/medium/feed.js +3 -3
- package/clis/medium/search.js +3 -3
- package/clis/medium/user.js +3 -3
- package/clis/notebooklm/auth.js +2 -2
- package/clis/notebooklm/note-list.test.js +4 -4
- package/clis/notebooklm/notes-get.test.js +8 -8
- package/clis/notebooklm/source-fulltext.test.js +11 -11
- package/clis/notebooklm/utils.js +28 -28
- package/clis/notebooklm/utils.test.js +10 -10
- package/clis/pixiv/search.test.js +3 -3
- package/clis/qoder/quest.js +2 -2
- package/clis/reddit/home.js +2 -2
- package/clis/reddit/hot.js +1 -1
- package/clis/reddit/read.js +2 -2
- package/clis/reddit/read.test.js +1 -1
- package/clis/reddit/reply.js +2 -2
- package/clis/reddit/whoami.js +2 -2
- package/clis/reuters/article-detail.js +1 -1
- package/clis/reuters/search.js +1 -1
- package/clis/slock/attachment-upload.test.js +1 -1
- package/clis/slock/task-convert.js +1 -1
- package/clis/substack/feed.js +3 -3
- package/clis/substack/publication.js +3 -3
- package/clis/substack/search.js +4 -4
- package/clis/tiktok/comment.js +2 -2
- package/clis/tiktok/follow.js +4 -4
- package/clis/tiktok/like.js +1 -1
- package/clis/tiktok/save.js +1 -1
- package/clis/tiktok/unfollow.js +4 -4
- package/clis/tiktok/unlike.js +1 -1
- package/clis/tiktok/unsave.js +2 -2
- package/clis/tiktok/write-refactor.test.js +5 -5
- package/clis/twitter/accept.js +3 -3
- package/clis/twitter/followers.js +1 -1
- package/clis/twitter/list-remove-core.js +2 -2
- package/clis/twitter/list-tweets.test.js +3 -3
- package/clis/twitter/lists.js +6 -6
- package/clis/twitter/lists.test.js +2 -2
- package/clis/twitter/reply-dm.js +1 -1
- package/clis/twitter/shared.test.js +4 -5
- package/clis/twitter/trending.js +1 -1
- package/clis/twitter/utils.js +1 -1
- package/clis/web/read.js +1 -1
- package/clis/web/read.test.js +2 -2
- package/clis/yahoo-finance/quote.js +1 -1
- package/clis/youtube/history.js +4 -4
- package/clis/youtube/transcript-group.js +1 -1
- package/clis/youtube/transcript-group.test.js +5 -5
- package/clis/youtube/transcript.js +5 -5
- package/clis/youtube/video.js +4 -4
- package/clis/youtube/video.test.js +6 -6
- package/dist/src/browser/analyze.test.js +13 -13
- package/dist/src/browser/bridge-readiness.d.ts +1 -1
- package/dist/src/browser/daemon-client.d.ts +1 -0
- package/dist/src/browser/daemon-client.js +102 -50
- package/dist/src/browser/daemon-client.test.js +104 -19
- package/dist/src/browser/errors.js +11 -0
- package/dist/src/browser/protocol.d.ts +2 -0
- package/dist/src/browser.test.js +2 -2
- package/dist/src/cli-argv-preprocess.d.ts +2 -2
- package/dist/src/cli-argv-preprocess.js +2 -2
- package/dist/src/cli-argv-preprocess.test.js +35 -35
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.test.js +57 -57
- package/dist/src/commanderAdapter.test.js +19 -19
- package/dist/src/convention-audit.js +1 -1
- package/dist/src/daemon/server.js +28 -23
- package/dist/src/daemon/server.test.js +52 -0
- package/dist/src/daemon-utils.d.ts +1 -0
- package/dist/src/daemon-utils.js +9 -0
- package/dist/src/daemon.test.js +10 -1
- package/dist/src/doctor.js +7 -1
- package/dist/src/doctor.test.js +8 -1
- package/dist/src/download/article-download.d.ts +3 -3
- package/dist/src/download/article-download.js +7 -7
- package/dist/src/download/article-download.test.js +6 -6
- package/dist/src/download/index.js +1 -1
- package/dist/src/download/index.test.js +1 -2
- package/dist/src/download/media-download.d.ts +1 -1
- package/dist/src/download/media-download.js +1 -1
- package/dist/src/electron-apps.js +0 -8
- package/dist/src/electron-apps.test.js +2 -11
- package/dist/src/errors.test.js +9 -9
- package/dist/src/execution.js +2 -0
- package/dist/src/execution.test.js +12 -0
- package/dist/src/external-clis.yaml +0 -37
- package/dist/src/external.d.ts +1 -1
- package/dist/src/external.test.js +2 -17
- package/dist/src/generate-release-notes-cli.test.js +140 -0
- package/dist/src/help.d.ts +3 -3
- package/dist/src/help.test.js +8 -8
- package/dist/src/main.js +1 -1
- package/dist/src/manifest-types.d.ts +1 -1
- package/dist/src/node-network.test.js +2 -2
- package/dist/src/output.js +1 -1
- package/dist/src/pipeline/steps/download.test.js +3 -3
- package/dist/src/registry.test.js +2 -2
- package/dist/src/release-notes.d.ts +38 -0
- package/dist/src/release-notes.js +99 -0
- package/dist/src/release-notes.test.js +61 -0
- package/dist/src/serialization.test.js +7 -7
- package/dist/src/snapshotFormatter.js +3 -5
- package/dist/src/snapshotFormatter.test.d.ts +1 -1
- package/dist/src/snapshotFormatter.test.js +50 -50
- package/dist/src/tui.js +1 -1
- package/package.json +4 -1
- package/scripts/generate-release-notes.ts +234 -0
- package/scripts/postinstall.js +1 -1
- package/scripts/silent-column-drop-baseline.json +0 -498
- package/scripts/typed-error-lint-baseline.json +0 -464
- package/skills/webcmd-adapter-author/SKILL.md +216 -213
- package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
- package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
- package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
- package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
- package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
- package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
- package/skills/webcmd-adapter-author/references/output-design.md +47 -125
- package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
- package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
- package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
- package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
- package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
- package/skills/webcmd-autofix/SKILL.md +136 -143
- package/skills/webcmd-sitemap-author/SKILL.md +58 -67
- package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
- package/skills/webcmd-usage/SKILL.md +106 -97
- package/clis/12306/auth.js +0 -59
- package/clis/12306/me.js +0 -73
- package/clis/12306/orders.js +0 -96
- package/clis/12306/passengers.js +0 -90
- package/clis/12306/price.js +0 -166
- package/clis/12306/stations.js +0 -66
- package/clis/12306/train.js +0 -91
- package/clis/12306/trains.js +0 -166
- package/clis/12306/utils.js +0 -272
- package/clis/12306/utils.test.js +0 -424
- package/clis/1688/assets.js +0 -205
- package/clis/1688/assets.test.js +0 -39
- package/clis/1688/auth.js +0 -46
- package/clis/1688/download.js +0 -77
- package/clis/1688/download.test.js +0 -31
- package/clis/1688/item.js +0 -188
- package/clis/1688/item.test.js +0 -67
- package/clis/1688/search.js +0 -310
- package/clis/1688/search.test.js +0 -75
- package/clis/1688/shared.js +0 -557
- package/clis/1688/shared.test.js +0 -57
- package/clis/1688/store.js +0 -227
- package/clis/1688/store.test.js +0 -62
- package/clis/1point3acres/auth.js +0 -52
- package/clis/1point3acres/digest.js +0 -35
- package/clis/1point3acres/forum.js +0 -51
- package/clis/1point3acres/forums.js +0 -44
- package/clis/1point3acres/hot.js +0 -35
- package/clis/1point3acres/latest.js +0 -35
- package/clis/1point3acres/notifications.js +0 -64
- package/clis/1point3acres/search.js +0 -71
- package/clis/1point3acres/thread.js +0 -117
- package/clis/1point3acres/user.js +0 -77
- package/clis/1point3acres/utils.js +0 -247
- package/clis/36kr/article.js +0 -66
- package/clis/36kr/article.test.js +0 -46
- package/clis/36kr/hot.js +0 -87
- package/clis/36kr/hot.test.js +0 -15
- package/clis/36kr/news.js +0 -52
- package/clis/36kr/news.test.js +0 -85
- package/clis/36kr/search.js +0 -79
- package/clis/51job/company.js +0 -126
- package/clis/51job/detail.js +0 -109
- package/clis/51job/hot.js +0 -56
- package/clis/51job/search.js +0 -80
- package/clis/51job/utils.js +0 -302
- package/clis/51job/utils.test.js +0 -69
- package/clis/aibase/news.js +0 -110
- package/clis/aibase/news.test.js +0 -59
- package/clis/autohome/__fixtures__/catalog.html +0 -11
- package/clis/autohome/__fixtures__/koubei.json +0 -116
- package/clis/autohome/autohome.test.js +0 -115
- package/clis/autohome/brand.js +0 -108
- package/clis/autohome/score.js +0 -103
- package/clis/autohome/utils.js +0 -157
- package/clis/baidu-scholar/search.js +0 -87
- package/clis/baidu-scholar/search.test.js +0 -23
- package/clis/bilibili/auth.js +0 -36
- package/clis/bilibili/comment.js +0 -107
- package/clis/bilibili/comment.test.js +0 -153
- package/clis/bilibili/comments.js +0 -136
- package/clis/bilibili/comments.test.js +0 -142
- package/clis/bilibili/download.js +0 -178
- package/clis/bilibili/download.test.js +0 -173
- package/clis/bilibili/dynamic.js +0 -34
- package/clis/bilibili/dynamic.test.js +0 -68
- package/clis/bilibili/favorite.js +0 -47
- package/clis/bilibili/feed.js +0 -220
- package/clis/bilibili/follow.js +0 -140
- package/clis/bilibili/follow.test.js +0 -203
- package/clis/bilibili/following.js +0 -44
- package/clis/bilibili/history.js +0 -45
- package/clis/bilibili/hot.js +0 -40
- package/clis/bilibili/hot.test.js +0 -17
- package/clis/bilibili/me.js +0 -13
- package/clis/bilibili/ranking.js +0 -25
- package/clis/bilibili/search.js +0 -24
- package/clis/bilibili/subtitle.js +0 -141
- package/clis/bilibili/subtitle.test.js +0 -240
- package/clis/bilibili/summary.js +0 -167
- package/clis/bilibili/summary.test.js +0 -210
- package/clis/bilibili/unfollow.js +0 -121
- package/clis/bilibili/user-videos.js +0 -39
- package/clis/bilibili/utils.js +0 -273
- package/clis/bilibili/utils.test.js +0 -97
- package/clis/bilibili/video.js +0 -155
- package/clis/bilibili/video.test.js +0 -308
- package/clis/boss/auth.js +0 -47
- package/clis/boss/batchgreet.js +0 -61
- package/clis/boss/chatlist.js +0 -116
- package/clis/boss/chatlist.test.js +0 -211
- package/clis/boss/chatmsg.js +0 -117
- package/clis/boss/chatmsg.test.js +0 -230
- package/clis/boss/detail.js +0 -63
- package/clis/boss/exchange.js +0 -46
- package/clis/boss/greet.js +0 -49
- package/clis/boss/invite.js +0 -64
- package/clis/boss/joblist.js +0 -31
- package/clis/boss/mark.js +0 -70
- package/clis/boss/recommend.js +0 -45
- package/clis/boss/resume.js +0 -150
- package/clis/boss/search.js +0 -197
- package/clis/boss/search.test.js +0 -78
- package/clis/boss/send.js +0 -44
- package/clis/boss/stats.js +0 -66
- package/clis/boss/utils.js +0 -468
- package/clis/boss/utils.test.js +0 -34
- package/clis/chaoxing/assignments.js +0 -76
- package/clis/chaoxing/auth.js +0 -54
- package/clis/chaoxing/exams.js +0 -75
- package/clis/chaoxing/utils.js +0 -223
- package/clis/chaoxing/utils.test.js +0 -45
- package/clis/cnki/search.js +0 -61
- package/clis/cnki/search.test.js +0 -18
- package/clis/ctrip/auth.js +0 -50
- package/clis/ctrip/ctrip.test.js +0 -719
- package/clis/ctrip/flight.js +0 -136
- package/clis/ctrip/hotel-search.js +0 -132
- package/clis/ctrip/hotel-suggest.js +0 -45
- package/clis/ctrip/search.js +0 -41
- package/clis/ctrip/utils.js +0 -473
- package/clis/deepseek/ask.js +0 -158
- package/clis/deepseek/ask.test.js +0 -399
- package/clis/deepseek/auth.js +0 -54
- package/clis/deepseek/detail.js +0 -46
- package/clis/deepseek/detail.test.js +0 -81
- package/clis/deepseek/history.js +0 -27
- package/clis/deepseek/new.js +0 -33
- package/clis/deepseek/read.js +0 -25
- package/clis/deepseek/send.js +0 -140
- package/clis/deepseek/send.test.js +0 -107
- package/clis/deepseek/status.js +0 -26
- package/clis/deepseek/utils.js +0 -487
- package/clis/deepseek/utils.test.js +0 -370
- package/clis/dianping/__fixtures__/search.html +0 -168
- package/clis/dianping/__fixtures__/shop.html +0 -6
- package/clis/dianping/auth.js +0 -49
- package/clis/dianping/cityResolver.js +0 -185
- package/clis/dianping/dianping.test.js +0 -578
- package/clis/dianping/search.js +0 -157
- package/clis/dianping/shop.js +0 -173
- package/clis/dianping/utils.js +0 -157
- package/clis/dongchedi/__fixtures__/search.json +0 -60
- package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
- package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
- package/clis/dongchedi/dongchedi.test.js +0 -191
- package/clis/dongchedi/koubei.js +0 -85
- package/clis/dongchedi/models.js +0 -91
- package/clis/dongchedi/score.js +0 -83
- package/clis/dongchedi/search.js +0 -83
- package/clis/dongchedi/series.js +0 -87
- package/clis/dongchedi/specs.js +0 -115
- package/clis/dongchedi/utils.js +0 -180
- package/clis/douban/auth.js +0 -50
- package/clis/douban/book-hot.js +0 -15
- package/clis/douban/download.js +0 -68
- package/clis/douban/download.test.js +0 -170
- package/clis/douban/marks.js +0 -116
- package/clis/douban/movie-hot.js +0 -15
- package/clis/douban/movie-hot.test.js +0 -14
- package/clis/douban/photos.js +0 -35
- package/clis/douban/reviews.js +0 -107
- package/clis/douban/search.js +0 -18
- package/clis/douban/search.test.js +0 -11
- package/clis/douban/subject.js +0 -46
- package/clis/douban/subject.test.js +0 -11
- package/clis/douban/top250.js +0 -68
- package/clis/douban/utils.js +0 -657
- package/clis/douban/utils.test.js +0 -488
- package/clis/doubao/ask.js +0 -40
- package/clis/doubao/auth.js +0 -66
- package/clis/doubao/detail.js +0 -35
- package/clis/doubao/detail.test.js +0 -42
- package/clis/doubao/history.js +0 -30
- package/clis/doubao/history.test.js +0 -37
- package/clis/doubao/meeting-summary.js +0 -41
- package/clis/doubao/meeting-transcript.js +0 -38
- package/clis/doubao/new.js +0 -22
- package/clis/doubao/read.js +0 -21
- package/clis/doubao/send.js +0 -24
- package/clis/doubao/status.js +0 -26
- package/clis/doubao/utils.js +0 -1156
- package/clis/doubao/utils.test.js +0 -396
- package/clis/doubao-app/ask.js +0 -54
- package/clis/doubao-app/dump.js +0 -25
- package/clis/doubao-app/new.js +0 -21
- package/clis/doubao-app/read.js +0 -19
- package/clis/doubao-app/screenshot.js +0 -19
- package/clis/doubao-app/send.js +0 -28
- package/clis/doubao-app/status.js +0 -17
- package/clis/doubao-app/utils.js +0 -110
- package/clis/douyin/_shared/browser-fetch.js +0 -66
- package/clis/douyin/_shared/browser-fetch.test.js +0 -64
- package/clis/douyin/_shared/creation-id.js +0 -5
- package/clis/douyin/_shared/creation-id.test.js +0 -22
- package/clis/douyin/_shared/evaluate-result.js +0 -16
- package/clis/douyin/_shared/imagex-upload.js +0 -53
- package/clis/douyin/_shared/imagex-upload.test.js +0 -87
- package/clis/douyin/_shared/public-api.js +0 -29
- package/clis/douyin/_shared/sts2.js +0 -21
- package/clis/douyin/_shared/sts2.test.js +0 -27
- package/clis/douyin/_shared/text-extra.js +0 -15
- package/clis/douyin/_shared/text-extra.test.js +0 -37
- package/clis/douyin/_shared/timing.js +0 -22
- package/clis/douyin/_shared/timing.test.js +0 -28
- package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
- package/clis/douyin/_shared/tos-upload.js +0 -331
- package/clis/douyin/_shared/tos-upload.test.js +0 -229
- package/clis/douyin/_shared/transcode.js +0 -45
- package/clis/douyin/_shared/transcode.test.js +0 -91
- package/clis/douyin/_shared/vod-upload.js +0 -212
- package/clis/douyin/_shared/vod-upload.test.js +0 -38
- package/clis/douyin/activities.js +0 -23
- package/clis/douyin/activities.test.js +0 -55
- package/clis/douyin/auth.js +0 -39
- package/clis/douyin/collections.js +0 -23
- package/clis/douyin/collections.test.js +0 -45
- package/clis/douyin/delete.js +0 -152
- package/clis/douyin/delete.test.js +0 -100
- package/clis/douyin/draft.js +0 -355
- package/clis/douyin/draft.test.js +0 -335
- package/clis/douyin/drafts.js +0 -24
- package/clis/douyin/drafts.test.js +0 -11
- package/clis/douyin/hashtag.js +0 -114
- package/clis/douyin/hashtag.test.js +0 -171
- package/clis/douyin/location.js +0 -25
- package/clis/douyin/location.test.js +0 -23
- package/clis/douyin/profile.js +0 -29
- package/clis/douyin/profile.test.js +0 -46
- package/clis/douyin/publish-upload-id.test.js +0 -206
- package/clis/douyin/publish.js +0 -341
- package/clis/douyin/publish.test.js +0 -38
- package/clis/douyin/search.js +0 -308
- package/clis/douyin/search.test.js +0 -307
- package/clis/douyin/stats.js +0 -28
- package/clis/douyin/stats.test.js +0 -22
- package/clis/douyin/update.js +0 -32
- package/clis/douyin/update.test.js +0 -11
- package/clis/douyin/user-videos.js +0 -82
- package/clis/douyin/user-videos.test.js +0 -151
- package/clis/douyin/videos.js +0 -52
- package/clis/douyin/videos.test.js +0 -54
- package/clis/eastmoney/_secid.js +0 -78
- package/clis/eastmoney/announcement.js +0 -53
- package/clis/eastmoney/convertible.js +0 -74
- package/clis/eastmoney/etf.js +0 -66
- package/clis/eastmoney/holders.js +0 -79
- package/clis/eastmoney/hot-rank.js +0 -51
- package/clis/eastmoney/hot-rank.test.js +0 -59
- package/clis/eastmoney/index-board.js +0 -97
- package/clis/eastmoney/kline.js +0 -88
- package/clis/eastmoney/kuaixun.js +0 -55
- package/clis/eastmoney/longhu.js +0 -68
- package/clis/eastmoney/money-flow.js +0 -79
- package/clis/eastmoney/northbound.js +0 -58
- package/clis/eastmoney/quote.js +0 -108
- package/clis/eastmoney/rank.js +0 -95
- package/clis/eastmoney/sectors.js +0 -77
- package/clis/flomo/auth.js +0 -55
- package/clis/flomo/memos.js +0 -228
- package/clis/flomo/memos.test.js +0 -144
- package/clis/gitee/auth.js +0 -41
- package/clis/gitee/index.js +0 -3
- package/clis/gitee/search.js +0 -137
- package/clis/gitee/search.test.js +0 -65
- package/clis/gitee/trending.js +0 -568
- package/clis/gitee/user.js +0 -200
- package/clis/gitee/user.test.js +0 -63
- package/clis/gov-law/commands.test.js +0 -39
- package/clis/gov-law/recent.js +0 -22
- package/clis/gov-law/search.js +0 -41
- package/clis/gov-law/shared.js +0 -51
- package/clis/gov-policy/__fixtures__/recent.html +0 -16
- package/clis/gov-policy/__fixtures__/search.html +0 -41
- package/clis/gov-policy/gov-policy.test.js +0 -224
- package/clis/gov-policy/recent.js +0 -90
- package/clis/gov-policy/search.js +0 -91
- package/clis/gov-policy/utils.js +0 -54
- package/clis/guazi/__fixtures__/detail.html +0 -7
- package/clis/guazi/__fixtures__/list.html +0 -5
- package/clis/guazi/browse.js +0 -95
- package/clis/guazi/car.js +0 -110
- package/clis/guazi/guazi.test.js +0 -126
- package/clis/guazi/utils.js +0 -133
- package/clis/huodongxing/events.js +0 -322
- package/clis/huodongxing/events.test.js +0 -296
- package/clis/hupu/__fixtures__/hot-home.html +0 -64
- package/clis/hupu/auth.js +0 -47
- package/clis/hupu/detail.js +0 -72
- package/clis/hupu/hot.js +0 -163
- package/clis/hupu/hot.test.js +0 -224
- package/clis/hupu/like.js +0 -76
- package/clis/hupu/mentions.js +0 -160
- package/clis/hupu/reply.js +0 -72
- package/clis/hupu/search.js +0 -60
- package/clis/hupu/unlike.js +0 -76
- package/clis/hupu/utils.js +0 -319
- package/clis/jd/add-cart.js +0 -72
- package/clis/jd/auth.js +0 -46
- package/clis/jd/cart.js +0 -80
- package/clis/jd/commands.test.js +0 -41
- package/clis/jd/detail.js +0 -63
- package/clis/jd/item.js +0 -730
- package/clis/jd/item.test.js +0 -354
- package/clis/jd/item.test.ts +0 -517
- package/clis/jd/reviews.js +0 -55
- package/clis/jd/search.js +0 -66
- package/clis/jianyu/auth.js +0 -62
- package/clis/jianyu/detail.js +0 -21
- package/clis/jianyu/search.js +0 -634
- package/clis/jianyu/search.test.js +0 -153
- package/clis/jianyu/shared/china-bid-search.js +0 -165
- package/clis/jianyu/shared/procurement-contract.js +0 -324
- package/clis/jianyu/shared/procurement-contract.test.js +0 -72
- package/clis/jianyu/shared/procurement-detail.js +0 -107
- package/clis/jianyu/shared/procurement-detail.test.js +0 -84
- package/clis/jike/auth.js +0 -48
- package/clis/jike/comment.js +0 -107
- package/clis/jike/create.js +0 -106
- package/clis/jike/feed.js +0 -68
- package/clis/jike/like.js +0 -61
- package/clis/jike/notifications.js +0 -169
- package/clis/jike/post.js +0 -72
- package/clis/jike/read.test.js +0 -86
- package/clis/jike/repost.js +0 -103
- package/clis/jike/search.js +0 -68
- package/clis/jike/topic.js +0 -65
- package/clis/jike/user.js +0 -65
- package/clis/jike/utils.js +0 -25
- package/clis/jimeng/auth.js +0 -46
- package/clis/jimeng/generate.js +0 -84
- package/clis/jimeng/history.js +0 -48
- package/clis/jimeng/new.js +0 -44
- package/clis/jimeng/workspaces.js +0 -42
- package/clis/juejin/hot.js +0 -37
- package/clis/juejin/juejin.test.js +0 -241
- package/clis/juejin/recommend.js +0 -61
- package/clis/juejin/utils.js +0 -199
- package/clis/ke/auth.js +0 -46
- package/clis/ke/chengjiao.js +0 -78
- package/clis/ke/ershoufang.js +0 -101
- package/clis/ke/utils.js +0 -104
- package/clis/ke/xiaoqu.js +0 -78
- package/clis/ke/zufang.js +0 -95
- package/clis/kimi/_utils.js +0 -110
- package/clis/kimi/audit-extras.js +0 -268
- package/clis/kimi/auth.js +0 -57
- package/clis/kimi/chat.js +0 -470
- package/clis/kimi/kimi.test.js +0 -187
- package/clis/kimi/storage.js +0 -169
- package/clis/kimi/ui.js +0 -314
- package/clis/kimi/usage.js +0 -144
- package/clis/linux-do/auth.js +0 -55
- package/clis/linux-do/categories.js +0 -50
- package/clis/linux-do/feed.js +0 -395
- package/clis/linux-do/feed.test.js +0 -153
- package/clis/linux-do/search.js +0 -29
- package/clis/linux-do/tags.js +0 -28
- package/clis/linux-do/topic-content.js +0 -155
- package/clis/linux-do/topic-content.test.js +0 -59
- package/clis/linux-do/topic.js +0 -53
- package/clis/linux-do/user-posts.js +0 -57
- package/clis/linux-do/user-topics.js +0 -37
- package/clis/maimai/auth.js +0 -47
- package/clis/maimai/search-talents.js +0 -192
- package/clis/maimai/search-talents.test.js +0 -29
- package/clis/mubu/doc.js +0 -41
- package/clis/mubu/docs.js +0 -44
- package/clis/mubu/notes.js +0 -245
- package/clis/mubu/recent.js +0 -28
- package/clis/mubu/search.js +0 -63
- package/clis/mubu/utils.js +0 -304
- package/clis/nowcoder/auth.js +0 -65
- package/clis/nowcoder/companies.js +0 -24
- package/clis/nowcoder/creators.js +0 -28
- package/clis/nowcoder/detail.js +0 -62
- package/clis/nowcoder/experience.js +0 -37
- package/clis/nowcoder/hot.js +0 -25
- package/clis/nowcoder/jobs.js +0 -22
- package/clis/nowcoder/notifications.js +0 -30
- package/clis/nowcoder/papers.js +0 -41
- package/clis/nowcoder/practice.js +0 -38
- package/clis/nowcoder/recommend.js +0 -31
- package/clis/nowcoder/referral.js +0 -40
- package/clis/nowcoder/salary.js +0 -41
- package/clis/nowcoder/search.js +0 -50
- package/clis/nowcoder/suggest.js +0 -34
- package/clis/nowcoder/topics.js +0 -28
- package/clis/nowcoder/trending.js +0 -26
- package/clis/ones/common.js +0 -144
- package/clis/ones/enrich-tasks.js +0 -37
- package/clis/ones/login.js +0 -81
- package/clis/ones/logout.js +0 -18
- package/clis/ones/me.js +0 -31
- package/clis/ones/my-tasks.js +0 -121
- package/clis/ones/resolve-labels.js +0 -64
- package/clis/ones/task-helpers.js +0 -212
- package/clis/ones/task-helpers.test.js +0 -12
- package/clis/ones/task.js +0 -67
- package/clis/ones/tasks.js +0 -80
- package/clis/ones/token-info.js +0 -43
- package/clis/ones/worklog.js +0 -268
- package/clis/ones/worklog.test.js +0 -20
- package/clis/powerchina/auth.js +0 -52
- package/clis/powerchina/search.js +0 -251
- package/clis/powerchina/search.test.js +0 -93
- package/clis/quark/auth.js +0 -47
- package/clis/quark/ls.js +0 -64
- package/clis/quark/mkdir.js +0 -37
- package/clis/quark/mv.js +0 -54
- package/clis/quark/rename.js +0 -27
- package/clis/quark/rm.js +0 -25
- package/clis/quark/save.js +0 -81
- package/clis/quark/share-tree.js +0 -46
- package/clis/quark/utils.js +0 -146
- package/clis/quark/utils.test.js +0 -58
- package/clis/qwen/ask.js +0 -104
- package/clis/qwen/ask.test.js +0 -36
- package/clis/qwen/auth.js +0 -56
- package/clis/qwen/detail.js +0 -62
- package/clis/qwen/history.js +0 -61
- package/clis/qwen/image.js +0 -179
- package/clis/qwen/new.js +0 -23
- package/clis/qwen/read.js +0 -41
- package/clis/qwen/send.js +0 -55
- package/clis/qwen/status.js +0 -37
- package/clis/qwen/utils.js +0 -461
- package/clis/qwen/utils.test.js +0 -128
- package/clis/rednote/auth.js +0 -52
- package/clis/rednote/comments.js +0 -85
- package/clis/rednote/download.js +0 -59
- package/clis/rednote/feed.js +0 -27
- package/clis/rednote/navigation.test.js +0 -26
- package/clis/rednote/note.js +0 -68
- package/clis/rednote/notifications.js +0 -139
- package/clis/rednote/rednote.test.js +0 -240
- package/clis/rednote/search.js +0 -107
- package/clis/rednote/user.js +0 -55
- package/clis/sinablog/article.js +0 -15
- package/clis/sinablog/hot.js +0 -15
- package/clis/sinablog/search.js +0 -52
- package/clis/sinablog/user.js +0 -16
- package/clis/sinablog/utils.js +0 -186
- package/clis/sinafinance/news.js +0 -62
- package/clis/sinafinance/rolling-news.js +0 -41
- package/clis/sinafinance/stock-rank.js +0 -66
- package/clis/sinafinance/stock.js +0 -121
- package/clis/sinafinance/stock.test.js +0 -59
- package/clis/smzdm/search.js +0 -149
- package/clis/smzdm/search.test.js +0 -114
- package/clis/taobao/add-cart.js +0 -150
- package/clis/taobao/auth.js +0 -58
- package/clis/taobao/cart.js +0 -96
- package/clis/taobao/commands.test.js +0 -41
- package/clis/taobao/detail.js +0 -71
- package/clis/taobao/reviews.js +0 -77
- package/clis/taobao/search.js +0 -97
- package/clis/tdx/hot-rank.js +0 -48
- package/clis/tdx/hot-rank.test.js +0 -59
- package/clis/ths/hot-rank.js +0 -50
- package/clis/ths/hot-rank.test.js +0 -64
- package/clis/tieba/commands.test.js +0 -79
- package/clis/tieba/hot.js +0 -48
- package/clis/tieba/posts.js +0 -86
- package/clis/tieba/read.js +0 -141
- package/clis/tieba/search.js +0 -109
- package/clis/tieba/utils.js +0 -240
- package/clis/tieba/utils.test.js +0 -290
- package/clis/toutiao/articles.js +0 -55
- package/clis/toutiao/auth.js +0 -70
- package/clis/toutiao/hot.js +0 -63
- package/clis/toutiao/toutiao.test.js +0 -378
- package/clis/toutiao/utils.js +0 -161
- package/clis/trae-cn/activity.js +0 -22
- package/clis/trae-cn/approve.js +0 -52
- package/clis/trae-cn/ask.js +0 -99
- package/clis/trae-cn/dump.js +0 -5
- package/clis/trae-cn/export.js +0 -40
- package/clis/trae-cn/model.js +0 -22
- package/clis/trae-cn/new.js +0 -63
- package/clis/trae-cn/read.js +0 -23
- package/clis/trae-cn/screenshot.js +0 -5
- package/clis/trae-cn/select-model.js +0 -25
- package/clis/trae-cn/send.js +0 -23
- package/clis/trae-cn/setup.js +0 -75
- package/clis/trae-cn/status.js +0 -27
- package/clis/trae-cn/targets.js +0 -96
- package/clis/trae-cn/trae-cn.test.js +0 -412
- package/clis/trae-cn/utils.js +0 -750
- package/clis/trae-cn/watch.js +0 -119
- package/clis/uisdc/news.js +0 -105
- package/clis/uisdc/news.test.js +0 -66
- package/clis/v2ex/auth.js +0 -44
- package/clis/v2ex/daily.js +0 -99
- package/clis/v2ex/hot.js +0 -26
- package/clis/v2ex/latest.js +0 -26
- package/clis/v2ex/me.js +0 -100
- package/clis/v2ex/member.js +0 -28
- package/clis/v2ex/node.js +0 -39
- package/clis/v2ex/nodes.js +0 -26
- package/clis/v2ex/notifications.js +0 -72
- package/clis/v2ex/replies.js +0 -27
- package/clis/v2ex/topic.js +0 -31
- package/clis/v2ex/user.js +0 -34
- package/clis/wanfang/search.js +0 -66
- package/clis/wanfang/search.test.js +0 -23
- package/clis/wechat-channels/auth.js +0 -62
- package/clis/wechat-channels/publish.js +0 -732
- package/clis/wechat-channels/publish.test.js +0 -144
- package/clis/weibo/auth.js +0 -53
- package/clis/weibo/comments.js +0 -53
- package/clis/weibo/delete.js +0 -172
- package/clis/weibo/delete.test.js +0 -94
- package/clis/weibo/envelope.test.js +0 -85
- package/clis/weibo/favorites.js +0 -170
- package/clis/weibo/favorites.test.js +0 -114
- package/clis/weibo/feed.js +0 -69
- package/clis/weibo/hot.js +0 -39
- package/clis/weibo/me.js +0 -75
- package/clis/weibo/post.js +0 -75
- package/clis/weibo/publish.js +0 -306
- package/clis/weibo/publish.test.js +0 -192
- package/clis/weibo/search.js +0 -80
- package/clis/weibo/user-posts.js +0 -234
- package/clis/weibo/user-posts.test.js +0 -92
- package/clis/weibo/user.js +0 -63
- package/clis/weibo/utils.js +0 -59
- package/clis/weibo/utils.test.js +0 -36
- package/clis/weixin/create-draft.js +0 -226
- package/clis/weixin/download.js +0 -371
- package/clis/weixin/download.test.js +0 -106
- package/clis/weixin/drafts.js +0 -66
- package/clis/weixin/drafts.test.js +0 -69
- package/clis/weixin/search.js +0 -157
- package/clis/weixin/search.test.js +0 -227
- package/clis/weread/ai-outline.js +0 -171
- package/clis/weread/ai-outline.test.js +0 -83
- package/clis/weread/auth.js +0 -59
- package/clis/weread/book-search.js +0 -438
- package/clis/weread/book-search.test.js +0 -242
- package/clis/weread/book.js +0 -233
- package/clis/weread/commands.test.js +0 -398
- package/clis/weread/highlights.js +0 -24
- package/clis/weread/notebooks.js +0 -22
- package/clis/weread/notes.js +0 -30
- package/clis/weread/private-api-regression.test.js +0 -369
- package/clis/weread/ranking.js +0 -29
- package/clis/weread/search-regression.test.js +0 -494
- package/clis/weread/search.js +0 -186
- package/clis/weread/shelf.js +0 -66
- package/clis/weread/utils.js +0 -321
- package/clis/weread/utils.test.js +0 -128
- package/clis/weread-official/book.js +0 -135
- package/clis/weread-official/commands.test.js +0 -385
- package/clis/weread-official/discover.js +0 -107
- package/clis/weread-official/list-apis.js +0 -95
- package/clis/weread-official/notes.js +0 -171
- package/clis/weread-official/readdata.js +0 -158
- package/clis/weread-official/review.js +0 -93
- package/clis/weread-official/search.js +0 -106
- package/clis/weread-official/shelf.js +0 -97
- package/clis/weread-official/utils.js +0 -293
- package/clis/weread-official/utils.test.js +0 -242
- package/clis/xianyu/auth.js +0 -68
- package/clis/xianyu/chat.js +0 -74
- package/clis/xianyu/chat.test.js +0 -84
- package/clis/xianyu/im.js +0 -322
- package/clis/xianyu/im.test.js +0 -253
- package/clis/xianyu/inbox.js +0 -96
- package/clis/xianyu/item.js +0 -153
- package/clis/xianyu/item.test.js +0 -56
- package/clis/xianyu/messages.js +0 -91
- package/clis/xianyu/publish.js +0 -485
- package/clis/xianyu/publish.test.js +0 -220
- package/clis/xianyu/reply.js +0 -82
- package/clis/xianyu/search.js +0 -262
- package/clis/xianyu/search.test.js +0 -104
- package/clis/xianyu/utils.js +0 -8
- package/clis/xiaoe/auth.js +0 -55
- package/clis/xiaoe/catalog.js +0 -227
- package/clis/xiaoe/content.js +0 -175
- package/clis/xiaoe/courses.js +0 -127
- package/clis/xiaoe/detail.js +0 -36
- package/clis/xiaoe/play-url.js +0 -121
- package/clis/xiaoe/xiaoe.test.js +0 -486
- package/clis/xiaohongshu/ask.js +0 -426
- package/clis/xiaohongshu/ask.test.js +0 -271
- package/clis/xiaohongshu/auth.js +0 -53
- package/clis/xiaohongshu/collection-helpers.js +0 -283
- package/clis/xiaohongshu/collection-helpers.test.js +0 -125
- package/clis/xiaohongshu/comments.js +0 -228
- package/clis/xiaohongshu/comments.test.js +0 -320
- package/clis/xiaohongshu/creator-note-detail.js +0 -482
- package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
- package/clis/xiaohongshu/creator-notes-summary.js +0 -98
- package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
- package/clis/xiaohongshu/creator-notes.js +0 -479
- package/clis/xiaohongshu/creator-notes.test.js +0 -281
- package/clis/xiaohongshu/creator-profile.js +0 -55
- package/clis/xiaohongshu/creator-stats.js +0 -76
- package/clis/xiaohongshu/creator-stats.test.js +0 -24
- package/clis/xiaohongshu/delete-note.js +0 -260
- package/clis/xiaohongshu/delete-note.test.js +0 -172
- package/clis/xiaohongshu/download.js +0 -249
- package/clis/xiaohongshu/download.test.js +0 -339
- package/clis/xiaohongshu/draft-clear.js +0 -91
- package/clis/xiaohongshu/draft-delete.js +0 -103
- package/clis/xiaohongshu/draft-open.js +0 -43
- package/clis/xiaohongshu/draft-utils.js +0 -142
- package/clis/xiaohongshu/drafts.js +0 -28
- package/clis/xiaohongshu/drafts.test.js +0 -172
- package/clis/xiaohongshu/feed.js +0 -163
- package/clis/xiaohongshu/feed.test.js +0 -126
- package/clis/xiaohongshu/follow.js +0 -226
- package/clis/xiaohongshu/follow.test.js +0 -211
- package/clis/xiaohongshu/liked.js +0 -29
- package/clis/xiaohongshu/liked.test.js +0 -82
- package/clis/xiaohongshu/navigation.test.js +0 -38
- package/clis/xiaohongshu/note-helpers.js +0 -69
- package/clis/xiaohongshu/note.js +0 -104
- package/clis/xiaohongshu/note.test.js +0 -249
- package/clis/xiaohongshu/notifications.js +0 -46
- package/clis/xiaohongshu/publish.js +0 -1423
- package/clis/xiaohongshu/publish.test.js +0 -1141
- package/clis/xiaohongshu/saved.js +0 -29
- package/clis/xiaohongshu/saved.test.js +0 -143
- package/clis/xiaohongshu/search.js +0 -330
- package/clis/xiaohongshu/search.test.js +0 -325
- package/clis/xiaohongshu/unfollow.js +0 -285
- package/clis/xiaohongshu/user-helpers.js +0 -78
- package/clis/xiaohongshu/user-helpers.test.js +0 -160
- package/clis/xiaohongshu/user.js +0 -140
- package/clis/xiaohongshu/user.test.js +0 -141
- package/clis/xiaoyuzhou/auth.js +0 -303
- package/clis/xiaoyuzhou/auth.test.js +0 -124
- package/clis/xiaoyuzhou/download.js +0 -54
- package/clis/xiaoyuzhou/download.test.js +0 -135
- package/clis/xiaoyuzhou/episode.js +0 -34
- package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
- package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
- package/clis/xiaoyuzhou/podcast.js +0 -33
- package/clis/xiaoyuzhou/transcript.js +0 -77
- package/clis/xiaoyuzhou/transcript.test.js +0 -195
- package/clis/xiaoyuzhou/utils.js +0 -15
- package/clis/xiaoyuzhou/utils.test.js +0 -39
- package/clis/xueqiu/auth.js +0 -63
- package/clis/xueqiu/comments.js +0 -355
- package/clis/xueqiu/comments.test.js +0 -696
- package/clis/xueqiu/danjuan-utils.js +0 -126
- package/clis/xueqiu/danjuan-utils.test.js +0 -41
- package/clis/xueqiu/earnings-date.js +0 -45
- package/clis/xueqiu/feed.js +0 -39
- package/clis/xueqiu/fund-holdings.js +0 -29
- package/clis/xueqiu/fund-snapshot.js +0 -26
- package/clis/xueqiu/groups.js +0 -23
- package/clis/xueqiu/hot-stock.js +0 -32
- package/clis/xueqiu/hot.js +0 -37
- package/clis/xueqiu/kline.js +0 -44
- package/clis/xueqiu/search.js +0 -37
- package/clis/xueqiu/stock.js +0 -65
- package/clis/xueqiu/utils.js +0 -48
- package/clis/xueqiu/utils.test.js +0 -26
- package/clis/xueqiu/watchlist.js +0 -37
- package/clis/youdao/note.js +0 -258
- package/clis/youdao/note.test.js +0 -99
- package/clis/yuanbao/ask.js +0 -362
- package/clis/yuanbao/ask.test.js +0 -124
- package/clis/yuanbao/auth.js +0 -59
- package/clis/yuanbao/detail.js +0 -65
- package/clis/yuanbao/history.js +0 -51
- package/clis/yuanbao/new.js +0 -72
- package/clis/yuanbao/new.test.js +0 -30
- package/clis/yuanbao/read.js +0 -38
- package/clis/yuanbao/send.js +0 -57
- package/clis/yuanbao/shared.js +0 -341
- package/clis/yuanbao/shared.test.js +0 -80
- package/clis/yuanbao/status.js +0 -44
- package/clis/zhihu/answer-comments.js +0 -280
- package/clis/zhihu/answer-comments.test.js +0 -287
- package/clis/zhihu/answer-detail.js +0 -216
- package/clis/zhihu/answer-detail.test.js +0 -338
- package/clis/zhihu/answer.js +0 -54
- package/clis/zhihu/answer.test.js +0 -54
- package/clis/zhihu/auth.js +0 -59
- package/clis/zhihu/collection.js +0 -199
- package/clis/zhihu/collection.test.js +0 -337
- package/clis/zhihu/collections.js +0 -128
- package/clis/zhihu/collections.test.js +0 -182
- package/clis/zhihu/comment.js +0 -55
- package/clis/zhihu/comment.test.js +0 -50
- package/clis/zhihu/download.js +0 -80
- package/clis/zhihu/download.test.js +0 -12
- package/clis/zhihu/favorite.js +0 -87
- package/clis/zhihu/favorite.test.js +0 -59
- package/clis/zhihu/follow.js +0 -50
- package/clis/zhihu/follow.test.js +0 -42
- package/clis/zhihu/followers.js +0 -40
- package/clis/zhihu/followers.test.js +0 -42
- package/clis/zhihu/following.js +0 -40
- package/clis/zhihu/following.test.js +0 -44
- package/clis/zhihu/hot.js +0 -44
- package/clis/zhihu/like.js +0 -47
- package/clis/zhihu/like.test.js +0 -41
- package/clis/zhihu/paginate.js +0 -128
- package/clis/zhihu/pins.js +0 -41
- package/clis/zhihu/pins.test.js +0 -44
- package/clis/zhihu/question.js +0 -113
- package/clis/zhihu/question.test.js +0 -251
- package/clis/zhihu/recommend.js +0 -103
- package/clis/zhihu/recommend.test.js +0 -143
- package/clis/zhihu/search.js +0 -206
- package/clis/zhihu/search.test.js +0 -198
- package/clis/zhihu/target.js +0 -91
- package/clis/zhihu/target.test.js +0 -77
- package/clis/zhihu/text.js +0 -29
- package/clis/zhihu/text.test.js +0 -24
- package/clis/zhihu/user-answers.js +0 -41
- package/clis/zhihu/user-answers.test.js +0 -69
- package/clis/zhihu/user-arg.js +0 -34
- package/clis/zhihu/user-articles.js +0 -40
- package/clis/zhihu/user-articles.test.js +0 -44
- package/clis/zhihu/user.js +0 -59
- package/clis/zhihu/user.test.js +0 -73
- package/clis/zhihu/write-shared.js +0 -228
- package/clis/zhihu/write-shared.test.js +0 -176
- package/clis/zsxq/auth.js +0 -68
- package/clis/zsxq/dynamics.js +0 -48
- package/clis/zsxq/groups.js +0 -33
- package/clis/zsxq/search.js +0 -44
- package/clis/zsxq/search.test.js +0 -24
- package/clis/zsxq/topic.js +0 -50
- package/clis/zsxq/topic.test.js +0 -30
- package/clis/zsxq/topics.js +0 -26
- package/clis/zsxq/topics.test.js +0 -24
- package/clis/zsxq/utils.js +0 -233
- package/clis/zsxq/utils.test.js +0 -31
- package/dist/src/weixin-download.test.js +0 -45
- package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
- package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
- package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
- package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
- /package/{clis/douyin/_shared/types.js → dist/src/generate-release-notes-cli.test.d.ts} +0 -0
- /package/dist/src/{weixin-download.test.d.ts → release-notes.test.d.ts} +0 -0
|
@@ -43,7 +43,7 @@ describe('notebooklm source-fulltext', () => {
|
|
|
43
43
|
{
|
|
44
44
|
id: 'src-1',
|
|
45
45
|
notebook_id: 'nb-demo',
|
|
46
|
-
title: '
|
|
46
|
+
title: 'Pasted text',
|
|
47
47
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
48
48
|
source: 'rpc',
|
|
49
49
|
type: 'pasted-text',
|
|
@@ -52,9 +52,9 @@ describe('notebooklm source-fulltext', () => {
|
|
|
52
52
|
mockGetNotebooklmSourceFulltextViaRpc.mockResolvedValue({
|
|
53
53
|
source_id: 'src-1',
|
|
54
54
|
notebook_id: 'nb-demo',
|
|
55
|
-
title: '
|
|
55
|
+
title: 'Pasted text',
|
|
56
56
|
kind: 'generated-text',
|
|
57
|
-
content: '
|
|
57
|
+
content: 'First paragraph\nSecond paragraph',
|
|
58
58
|
char_count: 7,
|
|
59
59
|
url: 'https://example.com/source',
|
|
60
60
|
source: 'rpc',
|
|
@@ -64,9 +64,9 @@ describe('notebooklm source-fulltext', () => {
|
|
|
64
64
|
{
|
|
65
65
|
source_id: 'src-1',
|
|
66
66
|
notebook_id: 'nb-demo',
|
|
67
|
-
title: '
|
|
67
|
+
title: 'Pasted text',
|
|
68
68
|
kind: 'generated-text',
|
|
69
|
-
content: '
|
|
69
|
+
content: 'First paragraph\nSecond paragraph',
|
|
70
70
|
char_count: 7,
|
|
71
71
|
url: 'https://example.com/source',
|
|
72
72
|
source: 'rpc',
|
|
@@ -79,7 +79,7 @@ describe('notebooklm source-fulltext', () => {
|
|
|
79
79
|
{
|
|
80
80
|
id: 'src-1',
|
|
81
81
|
notebook_id: 'nb-demo',
|
|
82
|
-
title: '
|
|
82
|
+
title: 'Pasted text',
|
|
83
83
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
84
84
|
source: 'current-page',
|
|
85
85
|
},
|
|
@@ -87,19 +87,19 @@ describe('notebooklm source-fulltext', () => {
|
|
|
87
87
|
mockGetNotebooklmSourceFulltextViaRpc.mockResolvedValue({
|
|
88
88
|
source_id: 'src-1',
|
|
89
89
|
notebook_id: 'nb-demo',
|
|
90
|
-
title: '
|
|
90
|
+
title: 'Pasted text',
|
|
91
91
|
kind: 'generated-text',
|
|
92
|
-
content: '
|
|
92
|
+
content: 'First paragraph\nSecond paragraph',
|
|
93
93
|
char_count: 7,
|
|
94
94
|
url: 'https://example.com/source',
|
|
95
95
|
source: 'rpc',
|
|
96
96
|
});
|
|
97
|
-
const result = await command.func({}, { source: '
|
|
97
|
+
const result = await command.func({}, { source: 'Pasted text' });
|
|
98
98
|
expect(result).toEqual([
|
|
99
99
|
expect.objectContaining({
|
|
100
100
|
source_id: 'src-1',
|
|
101
|
-
title: '
|
|
102
|
-
content: '
|
|
101
|
+
title: 'Pasted text',
|
|
102
|
+
content: 'First paragraph\nSecond paragraph',
|
|
103
103
|
}),
|
|
104
104
|
]);
|
|
105
105
|
});
|
package/clis/notebooklm/utils.js
CHANGED
|
@@ -623,8 +623,8 @@ export async function getNotebooklmPageState(page) {
|
|
|
623
623
|
const loginRequired = textNodes.some(text =>
|
|
624
624
|
text.includes('sign in') ||
|
|
625
625
|
text.includes('log in') ||
|
|
626
|
-
text.includes('
|
|
627
|
-
text.includes('
|
|
626
|
+
text.includes('Log in') ||
|
|
627
|
+
text.includes('Sign in')
|
|
628
628
|
);
|
|
629
629
|
|
|
630
630
|
const notebookCount = Array.from(document.querySelectorAll('a[href*="/notebook/"]'))
|
|
@@ -711,7 +711,7 @@ export async function listNotebooklmLinks(page) {
|
|
|
711
711
|
titleNode?.textContent ||
|
|
712
712
|
node.getAttribute('aria-label') ||
|
|
713
713
|
node.getAttribute('title') ||
|
|
714
|
-
parentLines.find((line) => !line.includes('
|
|
714
|
+
parentLines.find((line) => !line.includes('sources') && !line.includes('sources') && !line.includes('more_vert')) ||
|
|
715
715
|
node.textContent ||
|
|
716
716
|
''
|
|
717
717
|
).trim();
|
|
@@ -753,32 +753,32 @@ export async function listNotebooklmSourcesFromPage(page) {
|
|
|
753
753
|
if (!notebookId) return [];
|
|
754
754
|
|
|
755
755
|
const skip = new Set([
|
|
756
|
-
'
|
|
757
|
-
'
|
|
758
|
-
'
|
|
759
|
-
'
|
|
756
|
+
'Select all sources',
|
|
757
|
+
'Add source',
|
|
758
|
+
'Collapse source panel',
|
|
759
|
+
'More',
|
|
760
760
|
'Web',
|
|
761
761
|
'Fast Research',
|
|
762
|
-
'
|
|
763
|
-
'
|
|
764
|
-
'
|
|
765
|
-
'
|
|
766
|
-
'
|
|
767
|
-
'
|
|
768
|
-
'
|
|
769
|
-
'
|
|
770
|
-
'
|
|
771
|
-
'
|
|
772
|
-
'
|
|
773
|
-
'
|
|
774
|
-
'
|
|
775
|
-
'
|
|
776
|
-
'
|
|
777
|
-
'
|
|
778
|
-
'
|
|
779
|
-
'
|
|
780
|
-
'
|
|
781
|
-
'
|
|
762
|
+
'Submit',
|
|
763
|
+
'Create notebook',
|
|
764
|
+
'Share notebook',
|
|
765
|
+
'Settings',
|
|
766
|
+
'Conversation options',
|
|
767
|
+
'Configure notebook',
|
|
768
|
+
'Audio overview',
|
|
769
|
+
'Presentation',
|
|
770
|
+
'Video overview',
|
|
771
|
+
'Mind map',
|
|
772
|
+
'Report',
|
|
773
|
+
'Flashcards',
|
|
774
|
+
'Quiz',
|
|
775
|
+
'Infographic',
|
|
776
|
+
'Data table',
|
|
777
|
+
'Add note',
|
|
778
|
+
'Save to note',
|
|
779
|
+
'Copy summary',
|
|
780
|
+
'Good summary',
|
|
781
|
+
'Poor summary',
|
|
782
782
|
]);
|
|
783
783
|
|
|
784
784
|
const rows = [];
|
|
@@ -786,7 +786,7 @@ export async function listNotebooklmSourcesFromPage(page) {
|
|
|
786
786
|
for (const node of Array.from(document.querySelectorAll('button, [role="button"], input[type="checkbox"]'))) {
|
|
787
787
|
const text = (node.getAttribute?.('aria-label') || node.textContent || '').trim();
|
|
788
788
|
if (!text || skip.has(text) || seen.has(text)) continue;
|
|
789
|
-
if (text.includes('
|
|
789
|
+
if (text.includes('sources') || text.includes('sources') && text.length < 5) continue;
|
|
790
790
|
seen.add(text);
|
|
791
791
|
rows.push({
|
|
792
792
|
id: text,
|
|
@@ -301,15 +301,15 @@ describe('notebooklm utils', () => {
|
|
|
301
301
|
it('parses notebook notes from studio note rows', () => {
|
|
302
302
|
const rows = parseNotebooklmNoteListRawRows([
|
|
303
303
|
{
|
|
304
|
-
title: '
|
|
305
|
-
text: 'sticky_note_2
|
|
304
|
+
title: 'New note',
|
|
305
|
+
text: 'sticky_note_2 New note 6 minutes ago more_vert',
|
|
306
306
|
},
|
|
307
307
|
], 'nb-demo', 'https://notebooklm.google.com/notebook/nb-demo');
|
|
308
308
|
expect(rows).toEqual([
|
|
309
309
|
{
|
|
310
310
|
notebook_id: 'nb-demo',
|
|
311
|
-
title: '
|
|
312
|
-
created_at: '6
|
|
311
|
+
title: 'New note',
|
|
312
|
+
created_at: '6 minutes ago',
|
|
313
313
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
314
314
|
source: 'studio-list',
|
|
315
315
|
},
|
|
@@ -319,7 +319,7 @@ describe('notebooklm utils', () => {
|
|
|
319
319
|
const row = parseNotebooklmSourceFulltextResult([
|
|
320
320
|
[
|
|
321
321
|
[['src-1']],
|
|
322
|
-
'
|
|
322
|
+
'Pasted text',
|
|
323
323
|
[null, 359, [1774872183, 855096000], null, 8, null, 1, ['https://example.com/source']],
|
|
324
324
|
[null, 2],
|
|
325
325
|
],
|
|
@@ -328,8 +328,8 @@ describe('notebooklm utils', () => {
|
|
|
328
328
|
[
|
|
329
329
|
[
|
|
330
330
|
[
|
|
331
|
-
[0, 5, [[[0, 5, ['
|
|
332
|
-
[5, 10, [[[5, 10, ['
|
|
331
|
+
[0, 5, [[[0, 5, ['First paragraph']]]]],
|
|
332
|
+
[5, 10, [[[5, 10, ['Second paragraph']]]]],
|
|
333
333
|
],
|
|
334
334
|
],
|
|
335
335
|
],
|
|
@@ -337,10 +337,10 @@ describe('notebooklm utils', () => {
|
|
|
337
337
|
expect(row).toEqual({
|
|
338
338
|
source_id: 'src-1',
|
|
339
339
|
notebook_id: 'nb-demo',
|
|
340
|
-
title: '
|
|
340
|
+
title: 'Pasted text',
|
|
341
341
|
kind: 'pasted-text',
|
|
342
|
-
content: '
|
|
343
|
-
char_count:
|
|
342
|
+
content: 'First paragraph\nSecond paragraph',
|
|
343
|
+
char_count: 32,
|
|
344
344
|
url: 'https://example.com/source',
|
|
345
345
|
source: 'rpc',
|
|
346
346
|
});
|
|
@@ -11,7 +11,7 @@ beforeAll(() => {
|
|
|
11
11
|
describe('pixiv search', () => {
|
|
12
12
|
it('throws AuthRequiredError on 401', async () => {
|
|
13
13
|
const page = createPageMock([{ __httpError: 401 }]);
|
|
14
|
-
await expect(cmd.func(page, { query: '
|
|
14
|
+
await expect(cmd.func(page, { query: 'Mikuミク', limit: 5 })).rejects.toThrow(AuthRequiredError);
|
|
15
15
|
});
|
|
16
16
|
it('throws generic error on non-auth HTTP failure', async () => {
|
|
17
17
|
const page = createPageMock([{ __httpError: 500 }]);
|
|
@@ -30,7 +30,7 @@ describe('pixiv search', () => {
|
|
|
30
30
|
userId: '100',
|
|
31
31
|
pageCount: 3,
|
|
32
32
|
bookmarkCount: 500,
|
|
33
|
-
tags: ['
|
|
33
|
+
tags: ['Mikuミク', 'VOCALOID', 'ミク'],
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
id: '67890',
|
|
@@ -46,7 +46,7 @@ describe('pixiv search', () => {
|
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
48
|
]);
|
|
49
|
-
const result = (await cmd.func(page, { query: '
|
|
49
|
+
const result = (await cmd.func(page, { query: 'Mikuミク', limit: 10 }));
|
|
50
50
|
expect(result).toHaveLength(2);
|
|
51
51
|
expect(result[0]).toMatchObject({
|
|
52
52
|
rank: 1,
|
package/clis/qoder/quest.js
CHANGED
|
@@ -74,7 +74,7 @@ cli({
|
|
|
74
74
|
]));
|
|
75
75
|
if (!sendRes?.ok) {
|
|
76
76
|
// Fallback: try clickByText.
|
|
77
|
-
const textRes = await evaluateQoder(page, clickByTextScript(['Send message', 'Send', '
|
|
77
|
+
const textRes = await evaluateQoder(page, clickByTextScript(['Send message', 'Send', 'Send']));
|
|
78
78
|
if (!textRes?.ok) throw new CommandExecutionError('Send button not found', '');
|
|
79
79
|
}
|
|
80
80
|
const afterCount = await waitForMessageCountGrowth(page, beforeCount);
|
|
@@ -111,7 +111,7 @@ cli({
|
|
|
111
111
|
await page.wait(0.3);
|
|
112
112
|
const sendRes = await evaluateQoder(page, clickFirstScript(['button[aria-label="Send message"]', 'button[title="Send message"]']));
|
|
113
113
|
if (!sendRes?.ok) {
|
|
114
|
-
const textRes = await evaluateQoder(page, clickByTextScript(['Send message', 'Send', '
|
|
114
|
+
const textRes = await evaluateQoder(page, clickByTextScript(['Send message', 'Send', 'Send']));
|
|
115
115
|
if (!textRes?.ok) throw new CommandExecutionError('Send button not found', '');
|
|
116
116
|
}
|
|
117
117
|
|
package/clis/reddit/home.js
CHANGED
|
@@ -70,8 +70,8 @@ cli({
|
|
|
70
70
|
//
|
|
71
71
|
// Intermediate object keys avoid `rank`/`title`/`subreddit`/etc. to
|
|
72
72
|
// sidestep the silent-column-drop audit; we use `entries` for the
|
|
73
|
-
// raw payload. See PR #1329 sediment "
|
|
74
|
-
// columns
|
|
73
|
+
// raw payload. See PR #1329 sediment "intermediate parse object key must not overlap with
|
|
74
|
+
// columns any column".
|
|
75
75
|
const result = await page.evaluate(`(async () => {
|
|
76
76
|
try {
|
|
77
77
|
const meRes = await fetch('/api/me.json', { credentials: 'include' });
|
package/clis/reddit/hot.js
CHANGED
package/clis/reddit/read.js
CHANGED
|
@@ -140,8 +140,8 @@ cli({
|
|
|
140
140
|
const expandRounds = parseExpandRounds(kwargs['expand-rounds']);
|
|
141
141
|
const postId = normalizeRedditPostId(kwargs['post-id']);
|
|
142
142
|
|
|
143
|
-
//
|
|
144
|
-
//
|
|
143
|
+
// no longer explicitly navigate home:framework navigateBefore(domain=reddit.com)already brought the page to reddit origin,
|
|
144
|
+
// the relative fetch(/comments/<id>.json) works as usual.avoids redundant home navigation per comment command.
|
|
145
145
|
|
|
146
146
|
// The in-browser script returns a discriminated union so we can map
|
|
147
147
|
// each failure mode to its proper typed error on the Node side
|
package/clis/reddit/read.test.js
CHANGED
|
@@ -175,7 +175,7 @@ describe('reddit read adapter', () => {
|
|
|
175
175
|
expandMeta: { rounds: 0, fetched: 0, capped: false, errors: [] },
|
|
176
176
|
});
|
|
177
177
|
const result = await command.func(page, { 'post-id': 'abc123', limit: 5 });
|
|
178
|
-
// perf: read
|
|
178
|
+
// perf: read no longer explicitly navigate home——framework navigateBefore(domain=reddit.com)already brought the page to reddit origin
|
|
179
179
|
expect(page.goto).not.toHaveBeenCalledWith('https://www.reddit.com');
|
|
180
180
|
expect(result).toEqual([
|
|
181
181
|
{ type: 'POST', author: 'alice', score: 10, text: 'Title',
|
package/clis/reddit/reply.js
CHANGED
|
@@ -100,8 +100,8 @@ cli({
|
|
|
100
100
|
//
|
|
101
101
|
// Intermediate object keys deliberately avoid `status` / `message` to
|
|
102
102
|
// sidestep the silent-column-drop audit (columns are ['status',
|
|
103
|
-
// 'message']) — see PR #1329 sediment "
|
|
104
|
-
//
|
|
103
|
+
// 'message']) — see PR #1329 sediment "intermediate parse object key must not overlap with columns
|
|
104
|
+
// any column".
|
|
105
105
|
const result = await page.evaluate(`(async () => {
|
|
106
106
|
try {
|
|
107
107
|
const fullname = ${JSON.stringify(fullname)};
|
package/clis/reddit/whoami.js
CHANGED
|
@@ -20,8 +20,8 @@ cli({
|
|
|
20
20
|
//
|
|
21
21
|
// Intermediate object keys deliberately avoid `field` / `value` to
|
|
22
22
|
// sidestep the silent-column-drop audit (columns are ['field',
|
|
23
|
-
// 'value']) — see PR #1329 sediment "
|
|
24
|
-
//
|
|
23
|
+
// 'value']) — see PR #1329 sediment "intermediate parse object key must not overlap with columns
|
|
24
|
+
// any column".
|
|
25
25
|
const result = await page.evaluate(`(async () => {
|
|
26
26
|
try {
|
|
27
27
|
const res = await fetch('/api/me.json?raw_json=1', { credentials: 'include' });
|
|
@@ -14,7 +14,7 @@ cli({
|
|
|
14
14
|
site: 'reuters',
|
|
15
15
|
name: 'article-detail',
|
|
16
16
|
access: 'read',
|
|
17
|
-
description: 'Reuters
|
|
17
|
+
description: 'Reuters Reuters article detail:title/author/body text',
|
|
18
18
|
domain: 'www.reuters.com',
|
|
19
19
|
strategy: Strategy.COOKIE,
|
|
20
20
|
args: [
|
package/clis/reuters/search.js
CHANGED
|
@@ -79,7 +79,7 @@ describe('slock attachment-upload', () => {
|
|
|
79
79
|
// Endpoint stays put.
|
|
80
80
|
expect(snippet).toContain('/api/attachments/upload');
|
|
81
81
|
|
|
82
|
-
// --- The from-scratch `uploadHeaders` invariants (
|
|
82
|
+
// --- The from-scratch `uploadHeaders` invariants (Tovaz #1 fix-now). ---
|
|
83
83
|
//
|
|
84
84
|
// The whole point of building uploadHeaders from scratch is: forward auth,
|
|
85
85
|
// drop content-type so the browser sets its own multipart boundary. If a
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// Accepted inputs:
|
|
11
11
|
// - a full message UUID
|
|
12
12
|
// - "#channel:msgShortId" — short id is expanded via /api/messages/context,
|
|
13
|
-
// reading `targetMessageId` (NOT m.message.id — Phase 7.1 lesson /
|
|
13
|
+
// reading `targetMessageId` (NOT m.message.id — Phase 7.1 lesson / Tovaz
|
|
14
14
|
// gate ②). The fragment is inlined here for now (R3 backlog: consolidate
|
|
15
15
|
// into a shared shortIdResolveFragment).
|
|
16
16
|
|
package/clis/substack/feed.js
CHANGED
|
@@ -4,12 +4,12 @@ cli({
|
|
|
4
4
|
site: 'substack',
|
|
5
5
|
name: 'feed',
|
|
6
6
|
access: 'read',
|
|
7
|
-
description: 'Substack
|
|
7
|
+
description: 'Substack popular posts Feed',
|
|
8
8
|
domain: 'substack.com',
|
|
9
9
|
strategy: Strategy.COOKIE,
|
|
10
10
|
args: [
|
|
11
|
-
{ name: 'category', default: 'all', help: '
|
|
12
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
11
|
+
{ name: 'category', default: 'all', help: 'Post category: all, tech, business, culture, politics, science, health' },
|
|
12
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of posts to return' },
|
|
13
13
|
],
|
|
14
14
|
columns: ['rank', 'title', 'author', 'date', 'readTime', 'url'],
|
|
15
15
|
func: async (page, args) => loadSubstackFeed(page, buildSubstackBrowseUrl(args.category), Number(args.limit) || 20),
|
|
@@ -4,12 +4,12 @@ cli({
|
|
|
4
4
|
site: 'substack',
|
|
5
5
|
name: 'publication',
|
|
6
6
|
access: 'read',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'Get a specific Substack Newsletter latest posts',
|
|
8
8
|
domain: 'substack.com',
|
|
9
9
|
strategy: Strategy.COOKIE,
|
|
10
10
|
args: [
|
|
11
|
-
{ name: 'url', required: true, positional: true, help: 'Newsletter URL
|
|
12
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
11
|
+
{ name: 'url', required: true, positional: true, help: 'Newsletter URL(for example https://example.substack.com)' },
|
|
12
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of posts to return' },
|
|
13
13
|
],
|
|
14
14
|
columns: ['rank', 'title', 'date', 'description', 'url'],
|
|
15
15
|
func: async (page, args) => loadSubstackArchive(page, args.url.replace(/\/$/, ''), Number(args.limit) || 20),
|
package/clis/substack/search.js
CHANGED
|
@@ -60,14 +60,14 @@ cli({
|
|
|
60
60
|
site: 'substack',
|
|
61
61
|
name: 'search',
|
|
62
62
|
access: 'read',
|
|
63
|
-
description: '
|
|
63
|
+
description: 'Search Substack posts and newsletters',
|
|
64
64
|
domain: 'substack.com',
|
|
65
65
|
strategy: Strategy.PUBLIC,
|
|
66
66
|
browser: false,
|
|
67
67
|
args: [
|
|
68
|
-
{ name: 'keyword', required: true, positional: true, help: '
|
|
69
|
-
{ name: 'type', default: 'posts', choices: ['posts', 'publications'], help: '
|
|
70
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
68
|
+
{ name: 'keyword', required: true, positional: true, help: 'Search keyword' },
|
|
69
|
+
{ name: 'type', default: 'posts', choices: ['posts', 'publications'], help: 'Search type(posts=posts, publications=Newsletter)' },
|
|
70
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of results to return' },
|
|
71
71
|
],
|
|
72
72
|
columns: ['rank', 'title', 'author', 'date', 'description', 'url'],
|
|
73
73
|
func: async (args) => {
|
package/clis/tiktok/comment.js
CHANGED
|
@@ -69,7 +69,7 @@ function buildCommentScript(commentText) {
|
|
|
69
69
|
// Wait for the post button to become enabled — TikTok disables it
|
|
70
70
|
// until non-empty text is detected by their input handler.
|
|
71
71
|
const postReady = await waitFor(() => {
|
|
72
|
-
const candidate = findButtonByText(['Post', '
|
|
72
|
+
const candidate = findButtonByText(['Post', 'Post', 'Send']);
|
|
73
73
|
if (!candidate) return false;
|
|
74
74
|
const ariaDisabled = candidate.getAttribute && candidate.getAttribute('aria-disabled');
|
|
75
75
|
return !candidate.disabled && ariaDisabled !== 'true';
|
|
@@ -79,7 +79,7 @@ function buildCommentScript(commentText) {
|
|
|
79
79
|
throw new Error('BUTTON_NOT_FOUND: Post button never became enabled (text not registered or selectors changed)');
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
const postBtn = findButtonByText(['Post', '
|
|
82
|
+
const postBtn = findButtonByText(['Post', 'Post', 'Send']);
|
|
83
83
|
postBtn.click();
|
|
84
84
|
|
|
85
85
|
// State verification: a new comment-level-1 element should appear.
|
package/clis/tiktok/follow.js
CHANGED
|
@@ -36,9 +36,9 @@ function buildFollowScript(username) {
|
|
|
36
36
|
ensureLoggedInOrThrow();
|
|
37
37
|
ensureNoRateLimitOrThrow();
|
|
38
38
|
|
|
39
|
-
const FOLLOW_LABELS = ['Follow', '
|
|
40
|
-
const FOLLOWING_LABELS = ['Following', '
|
|
41
|
-
const FRIENDS_LABELS = ['Friends', '
|
|
39
|
+
const FOLLOW_LABELS = ['Follow', 'Follow', 'フォロー'];
|
|
40
|
+
const FOLLOWING_LABELS = ['Following', 'Following', 'フォローlocalized text'];
|
|
41
|
+
const FRIENDS_LABELS = ['Friends', 'Friends', 'フレンド'];
|
|
42
42
|
const ALREADY_LABELS = FOLLOWING_LABELS.concat(FRIENDS_LABELS);
|
|
43
43
|
|
|
44
44
|
// Idempotent fast path: already in target state.
|
|
@@ -57,7 +57,7 @@ function buildFollowScript(username) {
|
|
|
57
57
|
const target = followBtn.closest('button') || followBtn.closest('[role="button"]') || followBtn;
|
|
58
58
|
target.click();
|
|
59
59
|
|
|
60
|
-
// State verification: button text should flip to Following /
|
|
60
|
+
// State verification: button text should flip to Following / Following etc.
|
|
61
61
|
const flipped = await waitFor(() => buttonExists(ALREADY_LABELS), { timeoutMs: 5000 });
|
|
62
62
|
if (!flipped) {
|
|
63
63
|
ensureNoRateLimitOrThrow();
|
package/clis/tiktok/like.js
CHANGED
|
@@ -18,7 +18,7 @@ cli({
|
|
|
18
18
|
const container = btn.closest('button') || btn.closest('[role="button"]') || btn;
|
|
19
19
|
const aria = (container.getAttribute('aria-label') || '').toLowerCase();
|
|
20
20
|
const color = window.getComputedStyle(btn).color;
|
|
21
|
-
const isLiked = aria.includes('unlike') || aria.includes('
|
|
21
|
+
const isLiked = aria.includes('unlike') || aria.includes('Unlike') ||
|
|
22
22
|
(color && (color.includes('255, 65') || color.includes('fe2c55')));
|
|
23
23
|
if (isLiked) {
|
|
24
24
|
const count = document.querySelector('[data-e2e="like-count"]');
|
package/clis/tiktok/save.js
CHANGED
|
@@ -18,7 +18,7 @@ cli({
|
|
|
18
18
|
if (!btn) throw new Error('Favorites button not found - make sure you are logged in');
|
|
19
19
|
const container = btn.closest('button') || btn.closest('[role="button"]') || btn;
|
|
20
20
|
const aria = (container.getAttribute('aria-label') || '').toLowerCase();
|
|
21
|
-
if (aria.includes('remove from favorites') || aria.includes('
|
|
21
|
+
if (aria.includes('remove from favorites') || aria.includes('remove from favorites')) {
|
|
22
22
|
return [{ status: 'Already in Favorites', url: url }];
|
|
23
23
|
}
|
|
24
24
|
container.click();
|
package/clis/tiktok/unfollow.js
CHANGED
|
@@ -37,11 +37,11 @@ function buildUnfollowScript(username) {
|
|
|
37
37
|
ensureLoggedInOrThrow();
|
|
38
38
|
ensureNoRateLimitOrThrow();
|
|
39
39
|
|
|
40
|
-
const FOLLOW_LABELS = ['Follow', '
|
|
41
|
-
const FOLLOWING_LABELS = ['Following', '
|
|
42
|
-
const FRIENDS_LABELS = ['Friends', '
|
|
40
|
+
const FOLLOW_LABELS = ['Follow', 'Follow', 'フォロー'];
|
|
41
|
+
const FOLLOWING_LABELS = ['Following', 'Following', 'フォローlocalized text'];
|
|
42
|
+
const FRIENDS_LABELS = ['Friends', 'Friends', 'フレンド'];
|
|
43
43
|
const RELATION_LABELS = FOLLOWING_LABELS.concat(FRIENDS_LABELS);
|
|
44
|
-
const CONFIRM_LABELS = ['Unfollow', '
|
|
44
|
+
const CONFIRM_LABELS = ['Unfollow', 'Unfollow'];
|
|
45
45
|
|
|
46
46
|
// Idempotent fast path: not currently following.
|
|
47
47
|
if (!buttonExists(RELATION_LABELS) && buttonExists(FOLLOW_LABELS)) {
|
package/clis/tiktok/unlike.js
CHANGED
|
@@ -18,7 +18,7 @@ cli({
|
|
|
18
18
|
const container = btn.closest('button') || btn.closest('[role="button"]') || btn;
|
|
19
19
|
const aria = (container.getAttribute('aria-label') || '').toLowerCase();
|
|
20
20
|
const color = window.getComputedStyle(btn).color;
|
|
21
|
-
const isLiked = aria.includes('unlike') || aria.includes('
|
|
21
|
+
const isLiked = aria.includes('unlike') || aria.includes('Unlike') ||
|
|
22
22
|
(color && (color.includes('255, 65') || color.includes('fe2c55')));
|
|
23
23
|
if (!isLiked) {
|
|
24
24
|
const count = document.querySelector('[data-e2e="like-count"]');
|
package/clis/tiktok/unsave.js
CHANGED
|
@@ -18,8 +18,8 @@ cli({
|
|
|
18
18
|
if (!btn) throw new Error('Favorites button not found - make sure you are logged in');
|
|
19
19
|
const container = btn.closest('button') || btn.closest('[role="button"]') || btn;
|
|
20
20
|
const aria = (container.getAttribute('aria-label') || '').toLowerCase();
|
|
21
|
-
if (aria.includes('add to favorites') || aria.includes('
|
|
22
|
-
if (!aria.includes('remove') && !aria.includes('
|
|
21
|
+
if (aria.includes('add to favorites') || aria.includes('favorites')) {
|
|
22
|
+
if (!aria.includes('remove') && !aria.includes('Cancel')) {
|
|
23
23
|
return [{ status: 'Not in Favorites', url: url }];
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -231,7 +231,7 @@ describe('tiktok/comment (Route 1 button-walker refactor)', () => {
|
|
|
231
231
|
expect(script).toContain('BUTTON_NOT_FOUND');
|
|
232
232
|
expect(script).toContain('[data-e2e="comment-input"]');
|
|
233
233
|
expect(script).toContain('[data-e2e="comment-level-1"]');
|
|
234
|
-
expect(script).toContain("['Post', '
|
|
234
|
+
expect(script).toContain("['Post', 'Post', 'Send']");
|
|
235
235
|
});
|
|
236
236
|
});
|
|
237
237
|
|
|
@@ -292,9 +292,9 @@ describe('tiktok/follow (Route 1 button-walker refactor)', () => {
|
|
|
292
292
|
expect(script).toContain('const username = "creator";');
|
|
293
293
|
expect(script).toContain('ensureLoggedInOrThrow()');
|
|
294
294
|
expect(script).toContain('ensureNoRateLimitOrThrow()');
|
|
295
|
-
expect(script).toContain("'Follow', '
|
|
296
|
-
expect(script).toContain("'Following', '
|
|
297
|
-
expect(script).toContain("'Friends', '
|
|
295
|
+
expect(script).toContain("'Follow', 'Follow'");
|
|
296
|
+
expect(script).toContain("'Following', 'Following'");
|
|
297
|
+
expect(script).toContain("'Friends', 'Friends'");
|
|
298
298
|
expect(script).toContain("'already-following'");
|
|
299
299
|
expect(script).toContain("'already-friends'");
|
|
300
300
|
expect(script).toContain("result: 'followed'");
|
|
@@ -361,7 +361,7 @@ describe('tiktok/unfollow (Route 1 button-walker refactor)', () => {
|
|
|
361
361
|
expect(script).toContain('const username = "creator";');
|
|
362
362
|
expect(script).toContain('ensureLoggedInOrThrow()');
|
|
363
363
|
expect(script).toContain('ensureNoRateLimitOrThrow()');
|
|
364
|
-
expect(script).toContain("'Unfollow', '
|
|
364
|
+
expect(script).toContain("'Unfollow', 'Unfollow'");
|
|
365
365
|
expect(script).toContain("'already-not-following'");
|
|
366
366
|
expect(script).toContain("'unfollowed'");
|
|
367
367
|
expect(script).toContain('STATE_VERIFY_FAIL');
|
package/clis/twitter/accept.js
CHANGED
|
@@ -9,7 +9,7 @@ cli({
|
|
|
9
9
|
strategy: Strategy.UI,
|
|
10
10
|
browser: true,
|
|
11
11
|
args: [
|
|
12
|
-
{ name: 'query', type: 'string', required: true, positional: true, help: 'Keywords to match (comma-separated for OR, e.g. "
|
|
12
|
+
{ name: 'query', type: 'string', required: true, positional: true, help: 'Keywords to match (comma-separated for OR, e.g. "invoice,urgent")' },
|
|
13
13
|
{ name: 'max', type: 'int', required: false, default: 20, help: 'Maximum number of requests to accept (default: 20)' },
|
|
14
14
|
{ name: 'timeout', type: 'int', required: false, default: 600, help: 'Max seconds for the overall command (default: 600 — batch op)' },
|
|
15
15
|
],
|
|
@@ -146,7 +146,7 @@ cli({
|
|
|
146
146
|
const allBtns = Array.from(document.querySelectorAll('[role="button"]'));
|
|
147
147
|
const acceptBtn = allBtns.find(btn => {
|
|
148
148
|
const t = btn.innerText.trim().toLowerCase();
|
|
149
|
-
return t === 'accept' || t === '
|
|
149
|
+
return t === 'accept' || t === 'localized text';
|
|
150
150
|
});
|
|
151
151
|
|
|
152
152
|
if (!acceptBtn) {
|
|
@@ -161,7 +161,7 @@ cli({
|
|
|
161
161
|
const btnsAfter = Array.from(document.querySelectorAll('[role="button"]'));
|
|
162
162
|
const confirmBtn = btnsAfter.find(btn => {
|
|
163
163
|
const t = btn.innerText.trim().toLowerCase();
|
|
164
|
-
return (t === 'accept' || t === '
|
|
164
|
+
return (t === 'accept' || t === 'localized text') && btn !== acceptBtn;
|
|
165
165
|
});
|
|
166
166
|
if (confirmBtn) {
|
|
167
167
|
confirmBtn.click();
|
|
@@ -17,7 +17,7 @@ import { normalizeTwitterScreenName, unwrapBrowserResult } from './shared.js';
|
|
|
17
17
|
* Strategy: subtract the i18n-variable button / badge texts from the lines of
|
|
18
18
|
* `cell.innerText`, treat the first remaining `@…` line as the handle, the
|
|
19
19
|
* first non-handle line as display name, and the rest as bio. We avoid
|
|
20
|
-
* locale-coupled string matching (`"Follow"` / `"
|
|
20
|
+
* locale-coupled string matching (`"Follow"` / `"Follow"` / `"Folgen"`).
|
|
21
21
|
*
|
|
22
22
|
* Note: Twitter does NOT render follower COUNTS in the list view, so the
|
|
23
23
|
* `followers` column is omitted from the output schema. Use
|
|
@@ -158,7 +158,7 @@ export async function listRemoveUser(page, kwargs) {
|
|
|
158
158
|
caret.click();
|
|
159
159
|
await sleep(600);
|
|
160
160
|
const menuItems = Array.from(document.querySelectorAll('[role="menuitem"]'));
|
|
161
|
-
const addToListItem = menuItems.find(el => /add\\/remove
|
|
161
|
+
const addToListItem = menuItems.find(el => /add\\/remove|localized text|localized text|add to list|add or remove/i.test(el.innerText));
|
|
162
162
|
if (!addToListItem) return { ok: false, message: 'Could not find "Add/remove from Lists" menu item' };
|
|
163
163
|
addToListItem.click();
|
|
164
164
|
await sleep(1200);
|
|
@@ -221,7 +221,7 @@ export async function listRemoveUser(page, kwargs) {
|
|
|
221
221
|
const rowRect = listCell.getBoundingClientRect();
|
|
222
222
|
const saveButton = Array.from(dialog.querySelectorAll('[role="button"], button')).find(b => {
|
|
223
223
|
const txt = (b.innerText || '').trim();
|
|
224
|
-
return /^(Save|Done
|
|
224
|
+
return /^(Save|Done|localized text|localized text|localized text)$/i.test(txt);
|
|
225
225
|
});
|
|
226
226
|
const saveRect = saveButton ? saveButton.getBoundingClientRect() : null;
|
|
227
227
|
return {
|