@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
|
@@ -134,7 +134,7 @@ export function buildListChannelsScript() {
|
|
|
134
134
|
|
|
135
135
|
function cleanChannelLabel(label) {
|
|
136
136
|
var cleaned = String(label || '').trim();
|
|
137
|
-
var commaIdx = cleaned.search(/[
|
|
137
|
+
var commaIdx = cleaned.search(/[,,]/);
|
|
138
138
|
if (commaIdx !== -1) cleaned = cleaned.slice(commaIdx + 1).trimStart();
|
|
139
139
|
return cleaned;
|
|
140
140
|
}
|
|
@@ -151,12 +151,12 @@ export function buildListChannelsScript() {
|
|
|
151
151
|
|
|
152
152
|
function channelName(label, el) {
|
|
153
153
|
var cleaned = cleanChannelLabel(label);
|
|
154
|
-
var m = cleaned.match(/^(.+?)\\s*[
|
|
154
|
+
var m = cleaned.match(/^(.+?)\\s*[((](.+?)[))]\\s*$/);
|
|
155
155
|
if (m) return m[1].trim();
|
|
156
156
|
var ariaName = el.getAttribute('aria-label') || '';
|
|
157
|
-
if (ariaName && ariaName !== label) return cleanChannelLabel(ariaName).replace(/\\s*[
|
|
157
|
+
if (ariaName && ariaName !== label) return cleanChannelLabel(ariaName).replace(/\\s*[((].*?[))]\\s*$/, '').trim();
|
|
158
158
|
var text = (el.textContent || '').replace(/\\s+/g, ' ').trim();
|
|
159
|
-
return text.replace(/\\s*[
|
|
159
|
+
return text.replace(/\\s*[((].*?[))]\\s*$/, '').trim();
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
var links = Array.from(document.querySelectorAll('a[href*="/channels/"]'));
|
|
@@ -171,7 +171,7 @@ export function buildListChannelsScript() {
|
|
|
171
171
|
|
|
172
172
|
var label = el.getAttribute('aria-label') || el.getAttribute('title') || '';
|
|
173
173
|
var cleaned = cleanChannelLabel(label);
|
|
174
|
-
if (/[
|
|
174
|
+
if (/[((]\\s*category\\s*[))]/i.test(cleaned)) return;
|
|
175
175
|
|
|
176
176
|
var name = channelName(cleaned, el);
|
|
177
177
|
if (!name) return;
|
|
@@ -355,7 +355,7 @@ export function buildRouteStateScript() {
|
|
|
355
355
|
route: parseRoute(window.location.href),
|
|
356
356
|
has_messages: !!document.querySelector('[id^="chat-messages-"], [class*="messageListItem"]'),
|
|
357
357
|
has_threads: !!document.querySelector('a[href*="/channels/"][href*="/"]'),
|
|
358
|
-
has_header: !!document.querySelector('[class*="title"], [aria-label*="Channel"], [aria-label*="
|
|
358
|
+
has_header: !!document.querySelector('[class*="title"], [aria-label*="Channel"], [aria-label*="Channel"]')
|
|
359
359
|
};
|
|
360
360
|
})()
|
|
361
361
|
`;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="zh">
|
|
3
|
-
<head><meta charset="utf-8"><title
|
|
3
|
+
<head><meta charset="utf-8"><title>notifications | Facebook</title></head>
|
|
4
4
|
<body>
|
|
5
5
|
<div role="main">
|
|
6
|
-
<div class="x1rdy4ex" role="listitem"><div><div><div><div><div><div><span dir="auto"><div><div><h2><span><span
|
|
7
|
-
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/photo/?fbid=104250644186433&set=a.104250310853133&notif_id=1777926497886652&notif_t=onthisday&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div
|
|
8
|
-
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/jake.win.39/posts/pfbid0JYwqY2r7MnMtowrMXbB2xuho8CMjPbS9fJgQYppcrk6JgNcNhDVUMQQX3SMeUwnDl?story_gqlid=UzpfSTEwMDAzODA0NDkzMjEzNToxMDQyNDkzNjQxODY1NjE6MTA0MjQ5MzY0MTg2NTYx&notif_id=1777926497887116&notif_t=onthisday&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div
|
|
9
|
-
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/afad/?approval_id=1202094468666719&notif_id=1773680546395691&notif_t=approve_from_another_device&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div
|
|
10
|
-
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/groups/discover/?source=recommendation_notif&hoisted_group_id=720850587716560&notif_id=1777892286665396&notif_t=group_recommendation&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div
|
|
6
|
+
<div class="x1rdy4ex" role="listitem"><div><div><div><div><div><div><span dir="auto"><div><div><h2><span><span>New notifications</span></span></h2></div><div><div><div> </div><div><div></div></div></div></div></div></span></div></div></div></div></div></div></div>
|
|
7
|
+
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/photo/?fbid=104250644186433&set=a.104250310853133&notif_id=1777926497886652&notif_t=onthisday&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Review your 2019year6memory from that month.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Review your 2019year6memory from that month." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1o_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
|
|
8
|
+
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/jake.win.39/posts/pfbid0JYwqY2r7MnMtowrMXbB2xuho8CMjPbS9fJgQYppcrk6JgNcNhDVUMQQX3SMeUwnDl?story_gqlid=UzpfSTEwMDAzODA0NDkzMjEzNToxMDQyNDkzNjQxODY1NjE6MTA0MjQ5MzY0MTg2NTYx&notif_id=1777926497887116&notif_t=onthisday&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Look back at your 2019year6post from June,memory from the past.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Look back at your 2019year6post from June,memory from the past." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_1s_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
|
|
9
|
+
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/afad/?approval_id=1202094468666719&notif_id=1773680546395691&notif_t=approve_from_another_device&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>Someone tried to log in,but we blocked it.</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="7weeks ago"><span>7weeks</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,Someone tried to log in,but we blocked it." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_20_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
|
|
10
|
+
<div class="x1n2onr6" role="listitem"><div data-visualcompletion="ignore-dynamic" role="none"><a href="https://www.facebook.com/groups/discover/?source=recommendation_notif&hoisted_group_id=720850587716560&notif_id=1777892286665396&notif_t=group_recommendation&ref=notif" role="link" tabindex="0"><div><div><div><div data-visualcompletion="ignore"><div><div aria-hidden="true"></div><div role="none" data-visualcompletion="ignore"></div></div></div></div></div><div><div><div><div><div><span dir="auto"><span><div>Unread</div>You might like <b>ETYCAL VIBEZ fan's page</b> .</span></span></div><div><span dir="auto"><span><span><span><abbr aria-label="2days ago"><span>2days</span></abbr></span></span></span></span></div></div></div><div><div></div></div></div><div><div><div><div aria-label="Mark as read,You might like ETYCAL VIBEZ fan's page ." role="button" tabindex="0"><span data-visualcompletion="ignore"></span></div></div></div></div></div></div><div role="none" data-visualcompletion="ignore"></div></a></div><div><div><div><div aria-controls="_r_24_" aria-expanded="false" aria-haspopup="dialog" aria-label="ManageJake Winnotification settings" role="button" tabindex="0"><div role="none" data-visualcompletion="ignore"></div></div></div></div></div></div>
|
|
11
11
|
</div>
|
|
12
12
|
</body>
|
|
13
13
|
</html>
|
|
@@ -22,14 +22,14 @@ cli({
|
|
|
22
22
|
const buttons = Array.from(document.querySelectorAll('[role="button"]'));
|
|
23
23
|
const addBtn = buttons.find(b => {
|
|
24
24
|
const text = b.textContent.trim();
|
|
25
|
-
return text === '
|
|
25
|
+
return text === 'Add friend' || text === 'Add Friend' || text === 'Add friend';
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
if (!addBtn) {
|
|
29
29
|
// Check if already friends
|
|
30
30
|
const isFriend = buttons.some(b => {
|
|
31
31
|
const t = b.textContent.trim();
|
|
32
|
-
return t === '
|
|
32
|
+
return t === 'Friends' || t === 'Friends' || t.includes('Pending') || t.includes('Pending');
|
|
33
33
|
});
|
|
34
34
|
if (isFriend) return [{ status: 'Already friends or request pending', username }];
|
|
35
35
|
return [{ status: 'Add Friend button not found', username }];
|
package/clis/facebook/feed.js
CHANGED
|
@@ -39,36 +39,36 @@ function buildFeedExtractScript(limit) {
|
|
|
39
39
|
const path = window.location && window.location.pathname ? window.location.pathname : '';
|
|
40
40
|
const body = textOf(document.body);
|
|
41
41
|
return /^\\/(login|checkpoint)(\\/|$|\\.php)/.test(path)
|
|
42
|
-
|| /^(Log in to Facebook|
|
|
42
|
+
|| /^(Log in to Facebook|FacebookLog in|Log in Facebook)/i.test(body)
|
|
43
43
|
|| /You must log in to continue/i.test(body);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function isExplicitEmptyFeed() {
|
|
47
47
|
const body = textOf(document.body);
|
|
48
|
-
return /No posts available|Nothing to show
|
|
48
|
+
return /No posts available|Nothing to show|No posts available|No more posts|No posts yet/i.test(body);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
function isSuggestionOrChrome(text) {
|
|
52
|
-
return /^(People you may know|People You May Know
|
|
53
|
-
|| /^(Suggested for you|Suggested Groups
|
|
52
|
+
return /^(People you may know|People You May Know|People you may know?|People you may know?)/i.test(text)
|
|
53
|
+
|| /^(Suggested for you|Suggested Groups|Suggested groups|Suggested content)/i.test(text);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
function isSponsored(text) {
|
|
57
|
-
return /(^|\\s)(Sponsored
|
|
57
|
+
return /(^|\\s)(Sponsored|Sponsored|Advertisement)(\\s|$)/i.test(text);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
function isActionText(text) {
|
|
61
|
-
return /^(Like|Comment|Share|Send|Follow
|
|
61
|
+
return /^(Like|Comment|Share|Send|Follow|Like|Comment|Share|Send|Follow)$/i.test(text);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
function isMetricText(text) {
|
|
65
|
-
return /^(All
|
|
65
|
+
return /^(All:|All reactions:)/i.test(text)
|
|
66
66
|
|| /\\b(likes?|reactions?|comments?|shares?)\\b/i.test(text)
|
|
67
|
-
|| /(
|
|
67
|
+
|| /(comments|shares)$/.test(text);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
function isTimestampText(text) {
|
|
71
|
-
return /^(\\d+\\s*(s|m|h|d|w|mo|yr|min|sec|second|minute|hour|day|week|month|year)s?|Just now|Yesterday
|
|
71
|
+
return /^(\\d+\\s*(s|m|h|d|w|mo|yr|min|sec|second|minute|hour|day|week|month|year)s?|Just now|Yesterday|just now|yesterday|\\d+hours|\\d+days)(\\s*[\u00b7•.])?$/i.test(text);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
function postUrlFrom(root) {
|
|
@@ -86,9 +86,9 @@ function buildFeedExtractScript(limit) {
|
|
|
86
86
|
const kinds = new Set();
|
|
87
87
|
for (const el of root.querySelectorAll('[aria-label]')) {
|
|
88
88
|
const label = labelOf(el);
|
|
89
|
-
if (/^(Like
|
|
90
|
-
if (/^(Comment
|
|
91
|
-
if (/^(Share
|
|
89
|
+
if (/^(Like|Like)$/i.test(label)) kinds.add('like');
|
|
90
|
+
if (/^(Comment|Comment)$/i.test(label)) kinds.add('comment');
|
|
91
|
+
if (/^(Share|Share)$/i.test(label)) kinds.add('share');
|
|
92
92
|
}
|
|
93
93
|
return kinds;
|
|
94
94
|
}
|
|
@@ -129,7 +129,7 @@ function buildFeedExtractScript(limit) {
|
|
|
129
129
|
if (text.length <= 10) return false;
|
|
130
130
|
if (isSuggestionOrChrome(text) || isSponsored(text)) return false;
|
|
131
131
|
if (isActionText(text) || isMetricText(text) || isTimestampText(text)) return false;
|
|
132
|
-
if (/^(See more
|
|
132
|
+
if (/^(See more|See more|More)$/i.test(text)) return false;
|
|
133
133
|
return true;
|
|
134
134
|
});
|
|
135
135
|
}
|
|
@@ -147,12 +147,12 @@ function buildFeedExtractScript(limit) {
|
|
|
147
147
|
if (!author && !content) return null;
|
|
148
148
|
if (!content && !postUrl && kinds.size < 2) return null;
|
|
149
149
|
|
|
150
|
-
const likesMatch = fullText.match(
|
|
150
|
+
const likesMatch = fullText.match(/All reactions:\\s*(\\d[\\d,.\\slocalized textKMk]*)/)
|
|
151
151
|
|| fullText.match(/All:\\s*(\\d[\\d,.KMk]*)/)
|
|
152
152
|
|| fullText.match(/(\\d[\\d,.KMk]*)\\s*(?:likes?|reactions?)/i);
|
|
153
|
-
const commentsMatch = fullText.match(/([\\d,.]+\\s*[
|
|
153
|
+
const commentsMatch = fullText.match(/([\\d,.]+\\s*[localized text]?)\\s*comments/)
|
|
154
154
|
|| fullText.match(/(\\d[\\d,.KMk]*)\\s*comments?/i);
|
|
155
|
-
const sharesMatch = fullText.match(/([\\d,.]+\\s*[
|
|
155
|
+
const sharesMatch = fullText.match(/([\\d,.]+\\s*[localized text]?)\\s*shares/)
|
|
156
156
|
|| fullText.match(/(\\d[\\d,.KMk]*)\\s*shares?/i);
|
|
157
157
|
|
|
158
158
|
return {
|
|
@@ -173,7 +173,7 @@ function buildFeedExtractScript(limit) {
|
|
|
173
173
|
function fallbackContainers() {
|
|
174
174
|
const main = document.querySelector('[role="main"]');
|
|
175
175
|
if (!main) return [];
|
|
176
|
-
const buttons = Array.from(main.querySelectorAll('[aria-label="Like"], [aria-label="
|
|
176
|
+
const buttons = Array.from(main.querySelectorAll('[aria-label="Like"], [aria-label="Like"], [aria-label="Comment"], [aria-label="Comment"], [aria-label="Share"], [aria-label="Share"]'));
|
|
177
177
|
const seen = new WeakSet();
|
|
178
178
|
const containers = [];
|
|
179
179
|
for (const button of buttons) {
|
|
@@ -224,7 +224,7 @@ function buildFeedExtractScript(limit) {
|
|
|
224
224
|
diagnostics: {
|
|
225
225
|
articleCount: document.querySelectorAll('[role="article"]').length,
|
|
226
226
|
primaryCount: primary.length,
|
|
227
|
-
fallbackActionCount: document.querySelectorAll('[role="main"] [aria-label="Like"], [role="main"] [aria-label="
|
|
227
|
+
fallbackActionCount: document.querySelectorAll('[role="main"] [aria-label="Like"], [role="main"] [aria-label="Like"], [role="main"] [aria-label="Comment"], [role="main"] [aria-label="Comment"]').length,
|
|
228
228
|
mainTextLength: textOf(document.querySelector('[role="main"]')).length,
|
|
229
229
|
},
|
|
230
230
|
};
|
package/clis/facebook/friends.js
CHANGED
|
@@ -19,12 +19,12 @@ cli({
|
|
|
19
19
|
.map((el, i) => {
|
|
20
20
|
const text = el.textContent.trim().replace(/\\s+/g, ' ');
|
|
21
21
|
// Extract mutual info if present (before name extraction to avoid pollution)
|
|
22
|
-
const mutualMatch = text.match(/([\\d,]+)\\s
|
|
22
|
+
const mutualMatch = text.match(/([\\d,]+)\\s*people.*(?:Follow|mutual|mutual)/);
|
|
23
23
|
// Extract name: remove mutual info, action buttons, etc.
|
|
24
24
|
let name = text
|
|
25
|
-
.replace(/[\\d,]+\\s
|
|
26
|
-
.replace(
|
|
27
|
-
.replace(
|
|
25
|
+
.replace(/[\\d,]+\\s*people.*(?:followed|mutual friends|mutual friends?)/, '')
|
|
26
|
+
.replace(/Add friend.*/, '').replace(/Add [Ff]riend.*/, '')
|
|
27
|
+
.replace(/Remove$/, '').replace(/Remove$/, '')
|
|
28
28
|
.trim();
|
|
29
29
|
return {
|
|
30
30
|
index: i + 1,
|
package/clis/facebook/groups.js
CHANGED
|
@@ -32,11 +32,11 @@ cli({
|
|
|
32
32
|
if (seen.has(href)) continue;
|
|
33
33
|
seen.add(href);
|
|
34
34
|
const raw = a.textContent.trim().replace(/\\s+/g, ' ');
|
|
35
|
-
// Split name from "
|
|
36
|
-
const parts = raw.split(
|
|
35
|
+
// Split name from "Last post" info
|
|
36
|
+
const parts = raw.split(/Last post|Last post/);
|
|
37
37
|
groups.push({
|
|
38
38
|
name: (parts[0] || '').trim().substring(0, 60),
|
|
39
|
-
last_post: parts[1] ? parts[1].replace(/^[
|
|
39
|
+
last_post: parts[1] ? parts[1].replace(/^[::]/, '').trim() : '-',
|
|
40
40
|
url: href,
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -24,13 +24,13 @@ cli({
|
|
|
24
24
|
const buttons = Array.from(document.querySelectorAll('[role="button"]'));
|
|
25
25
|
const joinBtn = buttons.find(b => {
|
|
26
26
|
const text = b.textContent.trim();
|
|
27
|
-
return text === '
|
|
27
|
+
return text === 'Join group' || text === 'Join group' || text === 'Join Group';
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
if (!joinBtn) {
|
|
31
31
|
const isMember = buttons.some(b => {
|
|
32
32
|
const t = b.textContent.trim();
|
|
33
|
-
return t === '
|
|
33
|
+
return t === 'Joined' || t === 'Joined' || t === 'Member' || t === 'Member';
|
|
34
34
|
});
|
|
35
35
|
if (isMember) return [{ status: 'Already a member', group: groupName }];
|
|
36
36
|
return [{ status: 'Join button not found', group: groupName }];
|
|
@@ -28,7 +28,7 @@ cli({
|
|
|
28
28
|
|
|
29
29
|
const result = await page.evaluate(String.raw`(() => {
|
|
30
30
|
const clean = (s) => String(s || '').replace(/[\u00a0\u202f]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
31
|
-
const timeRe = /^(?:\d{1,2}:\d{2}\s?(?:AM|PM|am|pm
|
|
31
|
+
const timeRe = /^(?:\d{1,2}:\d{2}\s?(?:AM|PM|am|pm|AM|PM)?|Mon|Tue|Wed|Thu|Fri|Sat|Sun|Today|Yesterday|\d+[mhdw]|\d+\s*(?:min|h|d|w))$/;
|
|
32
32
|
const text = document.body?.innerText || '';
|
|
33
33
|
if (/log in|sign in/i.test(text) && !/Marketplace/i.test(text)) {
|
|
34
34
|
return { authRequired: true, rows: [] };
|
|
@@ -41,8 +41,8 @@ cli({
|
|
|
41
41
|
for (let i = 0; i < lines.length - 2; i += 1) {
|
|
42
42
|
const buyer = lines[i];
|
|
43
43
|
const meta = lines[i + 1];
|
|
44
|
-
if (skipBuyer.test(buyer) ||
|
|
45
|
-
const listing = meta.replace(
|
|
44
|
+
if (skipBuyer.test(buyer) || !/^\u00b7\s+/.test(meta)) continue;
|
|
45
|
+
const listing = meta.replace(/^\u00b7\s*/, '');
|
|
46
46
|
if (!listing || /^Within\b/i.test(listing)) continue;
|
|
47
47
|
const snippet = lines[i + 2] || '';
|
|
48
48
|
const time = timeRe.test(lines[i + 3] || '') ? lines[i + 3] : '';
|
|
@@ -44,7 +44,7 @@ cli({
|
|
|
44
44
|
seen.add(title);
|
|
45
45
|
const windowLines = lines.slice(i, i + 12);
|
|
46
46
|
const status = windowLines.find((line) => /^(Active|Sold|Pending|Draft)$/i.test(line)) || '';
|
|
47
|
-
const listed = windowLines.find((line) => /Listed on\b/i.test(line))?.replace(
|
|
47
|
+
const listed = windowLines.find((line) => /Listed on\b/i.test(line))?.replace(/^\u00b7\s*/, '') || '';
|
|
48
48
|
const clickLine = windowLines.find((line) => /clicks? on listing/i.test(line)) || '';
|
|
49
49
|
const clickMatch = clickLine.match(/([\d,.]+)\s+clicks? on listing/i);
|
|
50
50
|
const actions = windowLines.filter((line) => /^(Mark as sold|Mark as available|Relist this item|Share|Boost listing)$/i.test(line));
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// 2. silent-bad-shape — the old time field used a dash sentinel for
|
|
9
9
|
// unknown values; typed unknown should be `null` so an agent caller
|
|
10
10
|
// does not have to learn in-band sentinel strings.
|
|
11
|
-
// 3. silent-column-drop — the IIFE saw the `<div
|
|
11
|
+
// 3. silent-column-drop — the IIFE saw the `<div>Unread</div>` /
|
|
12
12
|
// `<div>Unread</div>` badge child and the anchor's `<a href>` URL
|
|
13
13
|
// but kept neither, so callers got a bare text blob with no way
|
|
14
14
|
// to follow up on a notification.
|
|
@@ -22,8 +22,7 @@
|
|
|
22
22
|
// silent clamp; `ArgumentError` on bad input.
|
|
23
23
|
// - Pure extractor `extractNotificationRowsFromDoc` is a Node-side
|
|
24
24
|
// export — JSDOM-against-frozen-fixture tests call it directly while
|
|
25
|
-
// the live IIFE embeds it via `${fn.toString()}
|
|
26
|
-
// #1387 / xiaoe #1388 / dianping #1313 pattern). Helpers
|
|
25
|
+
// the live IIFE embeds it via `${fn.toString()}`. Helpers
|
|
27
26
|
// `stripMarkAsReadPrefix`, `stripAnchorChrome`, `parseNotifQuery`
|
|
28
27
|
// are also pure exports for the same reason.
|
|
29
28
|
// - Seven columns instead of three:
|
|
@@ -50,24 +49,24 @@ export const NOTIFICATIONS_LIMIT_MAX = 100;
|
|
|
50
49
|
|
|
51
50
|
// Locale-specific "Mark as read" button prefixes Facebook attaches to
|
|
52
51
|
// the per-row mark-as-read action. We use this to recover the bare
|
|
53
|
-
// notification body text without the leading "
|
|
52
|
+
// notification body text without the leading "Unread" / "Unread" badge or
|
|
54
53
|
// the trailing time-ago suffix that the anchor's textContent contains.
|
|
55
54
|
//
|
|
56
55
|
// Each entry must be a complete, deterministic prefix — no regex — so a
|
|
57
56
|
// rare false-positive substring match elsewhere on the page does not
|
|
58
57
|
// silently truncate body text.
|
|
59
58
|
export const MARK_AS_READ_PREFIXES = [
|
|
60
|
-
'
|
|
59
|
+
'Mark as read,',
|
|
61
60
|
'Mark as read, ',
|
|
62
61
|
'Mark as Read, ',
|
|
63
62
|
'Marquer comme lu, ',
|
|
64
63
|
'Marcar como leído, ',
|
|
65
|
-
'
|
|
64
|
+
'Readにする, ',
|
|
66
65
|
];
|
|
67
66
|
|
|
68
67
|
// Localised "unread" badge labels that appear inside a `<div>` inside
|
|
69
68
|
// the notification listitem. Used to set the typed `unread` boolean.
|
|
70
|
-
export const UNREAD_BADGE_LABELS = ['
|
|
69
|
+
export const UNREAD_BADGE_LABELS = ['Unread', 'Unread', 'No leído', 'Unread'];
|
|
71
70
|
|
|
72
71
|
export function normalizeNotificationsLimit(raw) {
|
|
73
72
|
if (raw === undefined || raw === null || raw === '') {
|
|
@@ -102,14 +101,14 @@ export function stripMarkAsReadPrefix(label, prefixes) {
|
|
|
102
101
|
return null;
|
|
103
102
|
}
|
|
104
103
|
|
|
105
|
-
// Pure: strip the leading "
|
|
106
|
-
// time-ago suffix (e.g. "
|
|
104
|
+
// Pure: strip the leading "Unread" / "Unread" badge prefix and the trailing
|
|
105
|
+
// time-ago suffix (e.g. "2days" / "5 hrs") from the rendered text of a
|
|
107
106
|
// notification anchor. Used as a fallback when the mark-as-read
|
|
108
107
|
// aria-label is not present (already-read rows).
|
|
109
108
|
//
|
|
110
109
|
// `badges` is the localized unread-badge labels list; `timeStr` is the
|
|
111
110
|
// trailing time string previously extracted from `<abbr>` (or `null`).
|
|
112
|
-
// Trailing `.` /
|
|
111
|
+
// Trailing `.` / `.` that Facebook inserts between body and time are
|
|
113
112
|
// also stripped — but only at the very end, never mid-text.
|
|
114
113
|
export function stripAnchorChrome(rawText, timeStr, badges) {
|
|
115
114
|
if (!rawText) return '';
|
|
@@ -127,7 +126,7 @@ export function stripAnchorChrome(rawText, timeStr, badges) {
|
|
|
127
126
|
text = text.slice(0, text.length - t.length).trim();
|
|
128
127
|
}
|
|
129
128
|
}
|
|
130
|
-
text = text.replace(/[
|
|
129
|
+
text = text.replace(/[..]+$/, '').trim();
|
|
131
130
|
return text;
|
|
132
131
|
}
|
|
133
132
|
|
|
@@ -156,7 +155,7 @@ export function isFacebookAuthRedirectPath(pathname) {
|
|
|
156
155
|
|
|
157
156
|
// Pure extractor: walks `[role="listitem"]` containers in `doc` and
|
|
158
157
|
// returns at most `limit` notification rows. Header listitems (those
|
|
159
|
-
// without an `<a href>` child — e.g. the "
|
|
158
|
+
// without an `<a href>` child — e.g. the "New notifications" / "Earlier" section
|
|
160
159
|
// heading FB inserts at the top of the feed) are skipped.
|
|
161
160
|
//
|
|
162
161
|
// `helpers` carries the four pure helpers as positional refs so the
|
|
@@ -177,7 +176,7 @@ export function extractNotificationRowsFromDoc(doc, limit, helpers) {
|
|
|
177
176
|
const abbr = item.querySelector('abbr');
|
|
178
177
|
const time = abbr ? ((abbr.textContent || '').trim() || null) : null;
|
|
179
178
|
|
|
180
|
-
// Unread badge: prefer the explicit `<div
|
|
179
|
+
// Unread badge: prefer the explicit `<div>Unread</div>` /
|
|
181
180
|
// `<div>Unread</div>` child; fall back to anchor text prefix.
|
|
182
181
|
let unread = false;
|
|
183
182
|
const allDivs = item.querySelectorAll('div');
|
|
@@ -208,7 +207,7 @@ export function extractNotificationRowsFromDoc(doc, limit, helpers) {
|
|
|
208
207
|
const label = labelHosts[k].getAttribute('aria-label');
|
|
209
208
|
const stripped = helpers.stripMark(label, helpers.markPrefixes);
|
|
210
209
|
if (stripped !== null) {
|
|
211
|
-
const cleaned = stripped.replace(/[
|
|
210
|
+
const cleaned = stripped.replace(/[..]+$/, '').trim();
|
|
212
211
|
text = cleaned || null;
|
|
213
212
|
break;
|
|
214
213
|
}
|
|
@@ -311,7 +310,7 @@ export const notificationsCommand = cli({
|
|
|
311
310
|
site: 'facebook',
|
|
312
311
|
name: 'notifications',
|
|
313
312
|
access: 'read',
|
|
314
|
-
description: 'Get recent Facebook notifications (
|
|
313
|
+
description: 'Get recent Facebook notifications (includes unread / time / url / notif_id / notif_type columns)',
|
|
315
314
|
domain: 'www.facebook.com',
|
|
316
315
|
strategy: Strategy.COOKIE,
|
|
317
316
|
browser: true,
|
|
@@ -5,17 +5,16 @@
|
|
|
5
5
|
// snapshot of `www.facebook.com/notifications` captured live from a
|
|
6
6
|
// logged-in session. Class names are stripped; SVG / `<i>` icon nodes
|
|
7
7
|
// are removed. The structure preserves what the extractor needs:
|
|
8
|
-
// - 5 `[role="listitem"]` rows: 1 header ("
|
|
8
|
+
// - 5 `[role="listitem"]` rows: 1 header ("New notifications" — no anchor) +
|
|
9
9
|
// 4 real notifications across 3 distinct `notif_t` types
|
|
10
10
|
// (`onthisday`, `approve_from_another_device`,
|
|
11
11
|
// `group_recommendation`).
|
|
12
12
|
// - Each data row has `<a href>` with `notif_id` + `notif_t` query
|
|
13
|
-
// params, `<div
|
|
14
|
-
// <span>
|
|
15
|
-
// aria-label="
|
|
13
|
+
// params, `<div>Unread</div>` unread badge, `<abbr aria-label="Ndays ago">
|
|
14
|
+
// <span>Ndays</span></abbr>` for time, and a `<div role="button"
|
|
15
|
+
// aria-label="Mark as read,<body>">` for the bare body text.
|
|
16
16
|
//
|
|
17
|
-
//
|
|
18
|
-
// embeds the same `extractNotificationRowsFromDoc` function via
|
|
17
|
+
// The live IIFE embeds the same `extractNotificationRowsFromDoc` function via
|
|
19
18
|
// `${fn.toString()}` so the extractor seen by these JSDOM tests is the
|
|
20
19
|
// exact same code that runs in the browser.
|
|
21
20
|
|
|
@@ -135,8 +134,8 @@ describe('normalizeNotificationsLimit', () => {
|
|
|
135
134
|
|
|
136
135
|
describe('stripMarkAsReadPrefix', () => {
|
|
137
136
|
it('strips known locale prefixes', () => {
|
|
138
|
-
expect(stripMarkAsReadPrefix('
|
|
139
|
-
.toBe('
|
|
137
|
+
expect(stripMarkAsReadPrefix('Mark as read,Review your 2019year6memory from that month.', MARK_AS_READ_PREFIXES))
|
|
138
|
+
.toBe('Review your 2019year6memory from that month.');
|
|
140
139
|
expect(stripMarkAsReadPrefix('Mark as read, John liked your photo', MARK_AS_READ_PREFIXES))
|
|
141
140
|
.toBe('John liked your photo');
|
|
142
141
|
expect(stripMarkAsReadPrefix('Mark as Read, John liked your photo', MARK_AS_READ_PREFIXES))
|
|
@@ -144,7 +143,7 @@ describe('stripMarkAsReadPrefix', () => {
|
|
|
144
143
|
});
|
|
145
144
|
|
|
146
145
|
it('returns null when prefix is missing — never silent default', () => {
|
|
147
|
-
expect(stripMarkAsReadPrefix('
|
|
146
|
+
expect(stripMarkAsReadPrefix('ManageJake Winnotification settings', MARK_AS_READ_PREFIXES)).toBeNull();
|
|
148
147
|
expect(stripMarkAsReadPrefix('arbitrary aria-label without prefix', MARK_AS_READ_PREFIXES))
|
|
149
148
|
.toBeNull();
|
|
150
149
|
});
|
|
@@ -158,18 +157,18 @@ describe('stripMarkAsReadPrefix', () => {
|
|
|
158
157
|
});
|
|
159
158
|
|
|
160
159
|
describe('stripAnchorChrome', () => {
|
|
161
|
-
it('strips leading
|
|
162
|
-
expect(stripAnchorChrome('
|
|
160
|
+
it('strips leading Unread / Unread badge', () => {
|
|
161
|
+
expect(stripAnchorChrome('UnreadJohn liked your photo', null, UNREAD_BADGE_LABELS))
|
|
163
162
|
.toBe('John liked your photo');
|
|
164
163
|
expect(stripAnchorChrome('UnreadJohn liked your photo', null, UNREAD_BADGE_LABELS))
|
|
165
164
|
.toBe('John liked your photo');
|
|
166
165
|
});
|
|
167
166
|
|
|
168
167
|
it('strips trailing time-ago suffix when timeStr is provided', () => {
|
|
169
|
-
expect(stripAnchorChrome('
|
|
170
|
-
.toBe('
|
|
171
|
-
expect(stripAnchorChrome('
|
|
172
|
-
.toBe('
|
|
168
|
+
expect(stripAnchorChrome('UnreadReview your June 2019 memory.2 days', '2 days', UNREAD_BADGE_LABELS))
|
|
169
|
+
.toBe('Review your June 2019 memory');
|
|
170
|
+
expect(stripAnchorChrome('UnreadSomeone tried to log in, but we blocked it.7 weeks', '7 weeks', UNREAD_BADGE_LABELS))
|
|
171
|
+
.toBe('Someone tried to log in, but we blocked it');
|
|
173
172
|
});
|
|
174
173
|
|
|
175
174
|
it('keeps text intact when there is no badge / no time', () => {
|
|
@@ -237,8 +236,8 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
237
236
|
expect(rows[0]).toEqual({
|
|
238
237
|
index: 1,
|
|
239
238
|
unread: true,
|
|
240
|
-
text: '
|
|
241
|
-
time: '
|
|
239
|
+
text: 'Review your 2019year6memory from that month',
|
|
240
|
+
time: '2days',
|
|
242
241
|
url: 'https://www.facebook.com/photo/?fbid=104250644186433&set=a.104250310853133¬if_id=1777926497886652¬if_t=onthisday&ref=notif',
|
|
243
242
|
notif_id: '1777926497886652',
|
|
244
243
|
notif_type: 'onthisday',
|
|
@@ -246,16 +245,16 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
246
245
|
expect(rows[2]).toMatchObject({
|
|
247
246
|
index: 3,
|
|
248
247
|
unread: true,
|
|
249
|
-
text: '
|
|
250
|
-
time: '
|
|
248
|
+
text: 'Someone tried to log in,but we blocked it',
|
|
249
|
+
time: '7weeks',
|
|
251
250
|
notif_type: 'approve_from_another_device',
|
|
252
251
|
notif_id: '1773680546395691',
|
|
253
252
|
});
|
|
254
253
|
expect(rows[3]).toMatchObject({
|
|
255
254
|
index: 4,
|
|
256
255
|
unread: true,
|
|
257
|
-
text: '
|
|
258
|
-
time: '
|
|
256
|
+
text: 'You might like ETYCAL VIBEZ fan\'s page',
|
|
257
|
+
time: '2days',
|
|
259
258
|
notif_type: 'group_recommendation',
|
|
260
259
|
});
|
|
261
260
|
});
|
|
@@ -275,7 +274,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
275
274
|
expect(rows.length).toBe(4); // header skipped
|
|
276
275
|
// None of the returned rows match the header text.
|
|
277
276
|
for (const row of rows) {
|
|
278
|
-
expect(row.text).not.toBe('
|
|
277
|
+
expect(row.text).not.toBe('New notifications');
|
|
279
278
|
}
|
|
280
279
|
});
|
|
281
280
|
|
|
@@ -286,8 +285,8 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
286
285
|
// have happily returned anything <= 150. The point of this test
|
|
287
286
|
// is to assert nothing is silently sliced — full body text round-
|
|
288
287
|
// trips through the extractor.
|
|
289
|
-
expect(rows[0].text).toBe('
|
|
290
|
-
expect(rows[1].text).toBe('
|
|
288
|
+
expect(rows[0].text).toBe('Review your 2019year6memory from that month');
|
|
289
|
+
expect(rows[1].text).toBe('Look back at your 2019year6post from June,memory from the past');
|
|
291
290
|
// No row has a value that ends with our legacy truncation point.
|
|
292
291
|
for (const row of rows) {
|
|
293
292
|
expect(row.text).not.toMatch(/\u2026$/); // U+2026 ellipsis as a defensive check
|
|
@@ -299,7 +298,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
299
298
|
const html = `<!doctype html><html><body><div role="main">
|
|
300
299
|
<div role="listitem">
|
|
301
300
|
<a href="https://www.facebook.com/page?notif_id=999¬if_t=test_event">
|
|
302
|
-
<span><div
|
|
301
|
+
<span><div>Unread</div>Body text without time</span>
|
|
303
302
|
</a>
|
|
304
303
|
</div>
|
|
305
304
|
</body></html>`;
|
|
@@ -347,7 +346,7 @@ describe('extractNotificationRowsFromDoc — JSDOM against frozen fixture', () =
|
|
|
347
346
|
const html = `<!doctype html><html><body><div role="main">
|
|
348
347
|
<div role="listitem">
|
|
349
348
|
<a href="https://www.facebook.com/x?notif_id=1¬if_t=blank">
|
|
350
|
-
<span><div
|
|
349
|
+
<span><div>Unread</div></span>
|
|
351
350
|
<abbr aria-label="3 hr"><span>3 hr</span></abbr>
|
|
352
351
|
</a>
|
|
353
352
|
</div>
|
|
@@ -382,8 +381,8 @@ describe('buildNotificationsScript — IIFE invariants', () => {
|
|
|
382
381
|
|
|
383
382
|
it('inlines locale prefix and badge tables so the IIFE has them at runtime', () => {
|
|
384
383
|
const script = buildNotificationsScript(15);
|
|
385
|
-
expect(script).toContain('"
|
|
386
|
-
expect(script).toContain('"
|
|
384
|
+
expect(script).toContain('"Mark as read,"');
|
|
385
|
+
expect(script).toContain('"Unread"');
|
|
387
386
|
expect(script).toContain('"Unread"');
|
|
388
387
|
});
|
|
389
388
|
|
|
@@ -430,7 +429,7 @@ describe('facebook/notifications — func typed boundaries', () => {
|
|
|
430
429
|
index: 1,
|
|
431
430
|
unread: true,
|
|
432
431
|
text: 'hello',
|
|
433
|
-
time: '
|
|
432
|
+
time: '2days',
|
|
434
433
|
url: 'https://www.facebook.com/notifications/?notif_id=1¬if_t=test',
|
|
435
434
|
notif_id: '1',
|
|
436
435
|
notif_type: 'test',
|