@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
|
@@ -1,127 +1,109 @@
|
|
|
1
1
|
# Site Memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Site memory prevents every adapter run from starting cold. It has two layers:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
1. In-repo public seeds under `references/site-memory/<site>.md`, when a seed exists.
|
|
6
|
+
2. Local working memory under `~/.webcmd/sites/<site>/`.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
Local memory is the main write target. Do not write private cookies, tokens, or user data into the repo.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
skills/webcmd-adapter-author/references/site-memory/<site>.md
|
|
11
|
-
— 公共种子。手写 + PR 审核进入。多 agent 共享的第一批起点。
|
|
12
|
-
— 已铺:eastmoney / xueqiu / bilibili / tonghuashun
|
|
13
|
-
|
|
14
|
-
~/.webcmd/sites/<site>/
|
|
15
|
-
— 本地累积。agent 跑 adapter 过程里自动写入,跨 session 复用。
|
|
16
|
-
— 不进 git,不进 PR。
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
用法:开头先读本地,命中 **不跳写 adapter**,仍要跑 Step 5 endpoint 验证 + Step 7 字段抽查(memory 可能过期或站点换版);没命中读 in-repo;都没有走完整 recon。
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Layer 1 — In-repo 种子(`references/site-memory/<site>.md`)
|
|
24
|
-
|
|
25
|
-
每个覆盖站点一个 `.md`,结构固定:
|
|
26
|
-
|
|
27
|
-
```markdown
|
|
28
|
-
# <site>
|
|
29
|
-
|
|
30
|
-
## 域名
|
|
31
|
-
主 API / 备 API / 登录 / 静态资源
|
|
32
|
-
|
|
33
|
-
## 默认鉴权
|
|
34
|
-
`Strategy.XXX` + 必需 cookie/header + 获取方式
|
|
10
|
+
## Directory Layout
|
|
35
11
|
|
|
36
|
-
|
|
37
|
-
- `GET <url>` — 返回 X,分页参数 Y
|
|
38
|
-
- ...
|
|
39
|
-
|
|
40
|
-
## 字段(指向 `field-conventions.md` 的某一节)
|
|
41
|
-
|
|
42
|
-
## 坑 / 陷阱
|
|
43
|
-
- fltt=2 必传
|
|
44
|
-
- 单位是"万"不是"元"
|
|
45
|
-
- ...
|
|
46
|
-
|
|
47
|
-
## 可参考的 adapter
|
|
48
|
-
`clis/<site>/<name>.js` × N
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
审核门槛高,里面写的东西必须是"多数人都会踩到"的共识。一次性试错、站点局部怪癖放 Layer 2。
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Layer 2 — 本地工作目录(`~/.webcmd/sites/<site>/`)
|
|
56
|
-
|
|
57
|
-
agent 每跑一次相关 adapter 就可以自动写/读:
|
|
58
|
-
|
|
59
|
-
```
|
|
12
|
+
```text
|
|
60
13
|
~/.webcmd/sites/<site>/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
verify/
|
|
14
|
+
endpoints.json
|
|
15
|
+
field-map.json
|
|
16
|
+
notes.md
|
|
17
|
+
verify/
|
|
65
18
|
<cmd>.json
|
|
66
|
-
fixtures/
|
|
67
|
-
<cmd>-<
|
|
68
|
-
last-probe.log — 最近一次侦察输出(下次接着用)
|
|
19
|
+
fixtures/
|
|
20
|
+
<cmd>-<YYYYMMDDHHMM>.json
|
|
69
21
|
```
|
|
70
22
|
|
|
71
|
-
|
|
72
|
-
- `verify/<cmd>.json` 是**结构期望**(rowCount / columns / types / patterns / notEmpty),每 adapter 一份、会被 verify 读。
|
|
73
|
-
- `fixtures/<cmd>-<ts>.json` 是**原始响应样本**,给人 / 下一个 agent 做字段比对用,verify 不会读。
|
|
23
|
+
## `endpoints.json`
|
|
74
24
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
key = endpoint 的短名(`clist` / `kline` / `search` 等),不要用全 URL 当 key。
|
|
25
|
+
Short endpoint name as key:
|
|
78
26
|
|
|
79
27
|
```json
|
|
80
28
|
{
|
|
81
|
-
"
|
|
82
|
-
"url": "https://
|
|
29
|
+
"search": {
|
|
30
|
+
"url": "https://example.com/api/search",
|
|
83
31
|
"method": "GET",
|
|
84
32
|
"params": {
|
|
85
|
-
"required": ["
|
|
86
|
-
"optional": ["
|
|
33
|
+
"required": ["q"],
|
|
34
|
+
"optional": ["page", "sort"]
|
|
35
|
+
},
|
|
36
|
+
"response": {
|
|
37
|
+
"rowsPath": "data.items",
|
|
38
|
+
"sampleFields": ["title", "url", "score"]
|
|
87
39
|
},
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"notes": "fltt=2 必传"
|
|
40
|
+
"verified_at": "YYYY-MM-DD",
|
|
41
|
+
"notes": "What was checked and what can drift."
|
|
91
42
|
}
|
|
92
43
|
}
|
|
93
44
|
```
|
|
94
45
|
|
|
95
|
-
|
|
46
|
+
Rules:
|
|
96
47
|
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
- `notes`:一两句关键坑(`fltt=2 必传` / `ms 单位 begin` 之类),不要写长文
|
|
48
|
+
- Re-verify memory hits before using them.
|
|
49
|
+
- Treat entries older than 30 days as stale.
|
|
50
|
+
- Mark changed endpoints stale instead of deleting evidence silently.
|
|
51
|
+
- Never store cookies, bearer tokens, CSRF tokens, or private user data.
|
|
102
52
|
|
|
103
|
-
|
|
53
|
+
## `field-map.json`
|
|
104
54
|
|
|
105
|
-
|
|
55
|
+
Map source codes or unclear keys to meanings:
|
|
106
56
|
|
|
107
57
|
```json
|
|
108
58
|
{
|
|
109
|
-
"
|
|
110
|
-
"meaning": "
|
|
111
|
-
"verified_at": "
|
|
112
|
-
"source": "
|
|
59
|
+
"num_comments": {
|
|
60
|
+
"meaning": "commentCount",
|
|
61
|
+
"verified_at": "YYYY-MM-DD",
|
|
62
|
+
"source": "visible page comparison"
|
|
113
63
|
}
|
|
114
64
|
}
|
|
115
65
|
```
|
|
116
66
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
67
|
+
Rules:
|
|
68
|
+
|
|
69
|
+
- Append new mappings.
|
|
70
|
+
- Do not overwrite existing keys without visible-page proof.
|
|
71
|
+
- If a conflict appears, compare against the visible page and record the decision in `notes.md`.
|
|
72
|
+
|
|
73
|
+
## `notes.md`
|
|
74
|
+
|
|
75
|
+
Prepend a dated note for each run:
|
|
76
|
+
|
|
77
|
+
```md
|
|
78
|
+
## YYYY-MM-DD by <agent/user>
|
|
79
|
+
|
|
80
|
+
- What changed:
|
|
81
|
+
- New endpoint evidence:
|
|
82
|
+
- Field decoding evidence:
|
|
83
|
+
- Pitfalls:
|
|
84
|
+
- Follow-up:
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Notes should capture decisions that future agents would otherwise rediscover.
|
|
88
|
+
|
|
89
|
+
## `verify/<cmd>.json`
|
|
90
|
+
|
|
91
|
+
This is the `webcmd browser verify` fixture.
|
|
121
92
|
|
|
122
|
-
|
|
93
|
+
It should include:
|
|
123
94
|
|
|
124
|
-
|
|
95
|
+
- args
|
|
96
|
+
- rowCount
|
|
97
|
+
- columns
|
|
98
|
+
- types
|
|
99
|
+
- patterns
|
|
100
|
+
- notEmpty
|
|
101
|
+
- mustNotContain
|
|
102
|
+
- mustBeTruthy
|
|
103
|
+
|
|
104
|
+
Write it after the first passing run, then tighten it manually and verify again.
|
|
105
|
+
|
|
106
|
+
Example:
|
|
125
107
|
|
|
126
108
|
```json
|
|
127
109
|
{
|
|
@@ -136,96 +118,64 @@ key = 字段代号(`f237` / `f152`),value 三件套:
|
|
|
136
118
|
"url": "string"
|
|
137
119
|
},
|
|
138
120
|
"patterns": {
|
|
139
|
-
"url": "^https://www\\.
|
|
121
|
+
"url": "^https://www\\.example\\.com/thread-"
|
|
122
|
+
},
|
|
123
|
+
"notEmpty": ["title", "url"],
|
|
124
|
+
"mustNotContain": {
|
|
125
|
+
"title": ["breadcrumb:", "category:"]
|
|
140
126
|
},
|
|
141
|
-
"
|
|
127
|
+
"mustBeTruthy": ["rank"]
|
|
142
128
|
}
|
|
143
129
|
}
|
|
144
130
|
```
|
|
145
131
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
- `args`:verify 调 adapter 时要带的参数。支持两种形态:
|
|
149
|
-
- **对象**:`{ "limit": 3 }` → 展开成 `--limit 3`,用于标准 named flag 适配器
|
|
150
|
-
- **数组**:`["123", "--limit", "3"]` → **原样**追加到命令后,用于 positional 主语型适配器(`<tid>` / `<url>` / `<query>`)。repo 约定"主语优先 positional",所以这类适配器只能用数组形态
|
|
151
|
-
- `expect.rowCount.{min,max}`:包含边界。稳定列表接口收紧到 `[min, max]`,动态接口给一个宽区间
|
|
152
|
-
- `expect.columns`:每行必须都有这些 key(严格要求——漏了就 fail)
|
|
153
|
-
- `expect.types`:支持 `|` union(`string|null`)和 `any` 通配。写多少列类型看列的稳定性;波动大的列直接 `any` 比频繁改 fixture 好
|
|
154
|
-
- `expect.patterns`:正则表达式 **字符串**(注意 `\\` 转义)。`null` / `undefined` 会被跳过,不要用正则校验可空字段
|
|
155
|
-
- `expect.notEmpty`:trim 后不能为空的列。这是"adapter 没吃掉核心业务字段"的最后一道保险
|
|
156
|
-
- `expect.mustNotContain`:`Record<col, string[]>`。列值里不允许出现这些子串。用来挡"字段内容污染"——比如 `description` 里混进了 `address:` / `category:` 的邻居节点文字、`title` 前面粘了面包屑前缀。`notEmpty` 挡不住这种软污染
|
|
157
|
-
- `expect.mustBeTruthy`:列数组。列值必须是 JS truthy。用来挡"silent `|| 0` / `|| false` 兜底"——数值列返回 0 / 空字符串 / false 都会被 `notEmpty` 放过,但业务上通常是"没抓到"
|
|
158
|
-
|
|
159
|
-
### 什么时候手写 vs `--write-fixture` 自动生成
|
|
160
|
-
|
|
161
|
-
- `--write-fixture` 只是种子:生成 `rowCount.min=1` / `columns` / `types`,**没有** `patterns` / `notEmpty` / `mustNotContain` / `mustBeTruthy`——纯类型 fixture 挡不住数值错位 / 字段污染 / silent fallback。
|
|
162
|
-
- 拿到种子后**必须手改**,四件套一起上:
|
|
163
|
-
- `patterns`:URL / 日期 / ID 等格式列
|
|
164
|
-
- `notEmpty`:核心业务字段
|
|
165
|
-
- `mustNotContain`:描述类文本列容易被兄弟节点污染时,把禁词(`address:` / `category:` 等)列出来
|
|
166
|
-
- `mustBeTruthy`:数值 / 布尔业务列,挡 `|| 0` / `|| false`
|
|
167
|
-
- adapter 是 positional 主语型(`<tid>` / `<url>` / `<query>`)时,`--write-fixture` 的 `args` 要手写成数组形态。工具不会替你决定形态。
|
|
168
|
-
- 站点换版导致 fixture 过时:`--update-fixture` 覆盖。改之前**先用肉眼核对一次网页值**,别闭着眼把错的响应固化下来。
|
|
169
|
-
- **规避反模式:不要为了让 verify 通过去放松 pattern**。失败的 pattern 说明 adapter 输出有问题,要收紧 adapter,不是收紧 fixture。放松 fixture 等于默认把错数据接受下来。
|
|
170
|
-
|
|
171
|
-
### `notes.md` 格式
|
|
172
|
-
|
|
173
|
-
```markdown
|
|
174
|
-
## 2026-04-20 by webcmd-user
|
|
175
|
-
写 `convertible.js` 时遇到:
|
|
176
|
-
- f237 推断是溢价率(排序对比法,页面对照)
|
|
177
|
-
- `fltt=2` 不加的话价格是整数 × 10^f152
|
|
178
|
-
- `fs=b:MK0354` 过滤可转债
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
顶部追加新段落,老的不删。每段有日期 + 写入人。
|
|
132
|
+
Field rules:
|
|
182
133
|
|
|
183
|
-
|
|
134
|
+
- `args` controls how verify invokes the adapter. Use an object such as `{ "limit": 3 }` for named flags; verify expands it to `--limit 3`.
|
|
135
|
+
- Use an array such as `["1234567", "--limit", "3"]` for positional-subject adapters (`<tid>`, `<url>`, `<query>`). The array is appended exactly as written. Do not encode a positional subject as `{ "tid": "1234567", "limit": 3 }`, because that becomes `--tid 1234567 --limit 3`.
|
|
136
|
+
- `expect.rowCount.{min,max}` is inclusive. Stable list APIs should use a tight range; dynamic feeds can use a wider range.
|
|
137
|
+
- `expect.columns` is strict. Each row must contain every listed key.
|
|
138
|
+
- `expect.types` supports `|` unions such as `string|null` and the `any` wildcard for intentionally variable fields.
|
|
139
|
+
- `expect.patterns` uses regular expression strings. Remember to escape backslashes as `\\`.
|
|
140
|
+
- `expect.notEmpty` trims string values and fails when core business fields are empty.
|
|
141
|
+
- `expect.mustNotContain` is `Record<column, string[]>`. It blocks soft contamination such as a `description` that accidentally includes neighboring `address:` or `category:` text.
|
|
142
|
+
- `expect.mustBeTruthy` lists columns whose values must be JavaScript truthy. Use it to catch silent `|| 0`, `|| false`, or empty-string fallbacks that `notEmpty` can miss on numeric or boolean business fields.
|
|
184
143
|
|
|
185
|
-
|
|
144
|
+
Fixture workflow:
|
|
186
145
|
|
|
187
|
-
-
|
|
188
|
-
-
|
|
146
|
+
- `--write-fixture` is only a seed. It usually writes `rowCount.min=1`, `columns`, and `types`; it does not know the business-specific `patterns`, `notEmpty`, `mustNotContain`, or `mustBeTruthy` checks.
|
|
147
|
+
- After generating the seed, tighten it manually with URL/date/ID patterns, core-field `notEmpty`, contamination guards in `mustNotContain`, truthiness guards in `mustBeTruthy`, and a realistic `rowCount`.
|
|
148
|
+
- For positional-subject adapters, handwrite or correct `args` as an array because the seed cannot infer the subject shape.
|
|
149
|
+
- If a site change makes the fixture stale, compare at least one visible page value before running `--update-fixture`.
|
|
150
|
+
- Do not loosen fixtures just to make verify pass. A failed pattern or guard is evidence to check the adapter output first; accepting wrong data by weakening the fixture defeats the fixture.
|
|
189
151
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## runbook 里的读/写时机
|
|
195
|
-
|
|
196
|
-
```
|
|
197
|
-
Step 2 开始前 → 读 ~/.webcmd/sites/<site>/
|
|
198
|
-
→ 读 references/site-memory/<site>.md
|
|
199
|
-
命中后 → 不跳写 adapter,仍要跑 Step 5 (endpoint 验证) + Step 7 (字段抽查)
|
|
200
|
-
verified_at 超 30 天 → 当作过期,按冷启动走 Step 3 → 4
|
|
201
|
-
|
|
202
|
-
Step 10 verify 首轮通过后 → 写 ~/.webcmd/sites/<site>/verify/<cmd>.json
|
|
203
|
-
- 先 `--write-fixture` 拿种子,再手改 patterns / notEmpty / rowCount
|
|
204
|
-
- 没这份后续 verify 挡不住数据错位,**必填**
|
|
205
|
-
|
|
206
|
-
Step 11 肉眼对比通过后 → 写 ~/.webcmd/sites/<site>/
|
|
207
|
-
- endpoints.json:按 schema 追加或更新 verified_at
|
|
208
|
-
- field-map.json:只追加新 key,已有的不默默覆盖
|
|
209
|
-
- notes.md:顶部追加一段
|
|
210
|
-
- fixtures/:脱敏后存一份完整响应样本(区别于 verify/)
|
|
211
|
-
```
|
|
152
|
+
## `fixtures/<cmd>-<YYYYMMDDHHMM>.json`
|
|
212
153
|
|
|
213
|
-
|
|
154
|
+
Store a sanitized response sample for field decoding and offline replay.
|
|
214
155
|
|
|
215
|
-
|
|
156
|
+
Rules:
|
|
216
157
|
|
|
217
|
-
|
|
158
|
+
- Remove cookies, tokens, account identifiers, private messages, emails, and private user data.
|
|
159
|
+
- Keep enough response shape to decode fields later.
|
|
160
|
+
- Prefer local memory for raw samples; commit repo fixtures only when they are intentional tests.
|
|
218
161
|
|
|
219
|
-
-
|
|
220
|
-
- 用户私有数据(返回体里有个人敏感字段的 → 脱敏再存 fixtures)
|
|
221
|
-
- 过期超过 30 天的 last-probe.log(自动清)
|
|
162
|
+
## In-Repo Seeds
|
|
222
163
|
|
|
223
|
-
|
|
164
|
+
In-repo seeds are public knowledge only. They may contain:
|
|
224
165
|
|
|
225
|
-
|
|
166
|
+
- public domains
|
|
167
|
+
- known endpoint shapes
|
|
168
|
+
- non-secret header requirements
|
|
169
|
+
- field-code conventions
|
|
170
|
+
- adapter references
|
|
171
|
+
- pitfalls that apply to any user
|
|
226
172
|
|
|
227
|
-
|
|
173
|
+
They must not contain:
|
|
228
174
|
|
|
229
|
-
|
|
175
|
+
- private credentials
|
|
176
|
+
- tokens
|
|
177
|
+
- cookies
|
|
178
|
+
- user-specific IDs
|
|
179
|
+
- scraped private content
|
|
230
180
|
|
|
231
|
-
|
|
181
|
+
If `references/site-memory/<site>.md` is absent, proceed with local memory only.
|
|
@@ -1,134 +1,130 @@
|
|
|
1
1
|
# Site Recon
|
|
2
2
|
|
|
3
|
-
**Layer 1
|
|
3
|
+
**Layer 1: what kind of site is this?** Classify the site, then go directly to `api-discovery.md` to find the endpoint.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This file only classifies sites. It does not explain how to discover endpoints.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## One-Step Diagnosis
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Preferred command:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
webcmd browser analyze <url>
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The command returns JSON with:
|
|
16
16
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
|
-
"pattern":
|
|
20
|
-
"anti_bot":
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"recommended_next_step": "
|
|
19
|
+
"pattern": "A|B|C|D|E",
|
|
20
|
+
"anti_bot": [],
|
|
21
|
+
"api_candidates": [],
|
|
22
|
+
"nearest_adapters": [],
|
|
23
|
+
"recommended_next_step": "..."
|
|
24
24
|
}
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`analyze`
|
|
27
|
+
`analyze` gives Pattern classification, anti-bot signals, nearest-adapter matches, and the next step in one pass. Follow `recommended_next_step` directly in most cases.
|
|
28
|
+
|
|
29
|
+
## Manual Three-Step Diagnosis
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
Use this only when `analyze` is ambiguous:
|
|
30
32
|
|
|
31
33
|
```bash
|
|
32
|
-
webcmd browser open <url>
|
|
34
|
+
webcmd browser open <url> --trace on --keep-tab true --window foreground
|
|
33
35
|
webcmd browser wait time 2
|
|
34
|
-
webcmd browser network
|
|
36
|
+
webcmd browser network --format json
|
|
35
37
|
```
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| `network` 看到什么 | 站点类型 | 特征 |
|
|
40
|
-
|------------------|---------|------|
|
|
41
|
-
| 大量 `/api/...` JSON 请求,包含目标数据 | **A. SPA / JSON XHR** | React/Vue,数据走 fetch |
|
|
42
|
-
| 有请求但都是广告 / 埋点,无目标数据 | **B. SSR / inline data** | 首屏在 HTML 里,深层再走 API |
|
|
43
|
-
| 完全空 / 只有静态资源 | **C. JSONP / `<script src>` 驱动** | 老金融行情站常见 |
|
|
44
|
-
| 有 API 但 401/403/签名错 | **D. Token / CSRF 鉴权型** | 在 A 基础上加鉴权 |
|
|
45
|
-
| `Content-Type: text/event-stream` / WebSocket 握手 | **E. 流式** | 行情 tick / chat |
|
|
39
|
+
Read `network` output this way:
|
|
46
40
|
|
|
47
|
-
|
|
41
|
+
| `network` shows | Site type | Signals |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| Many `/api/...` JSON requests containing target data | **A. SPA / JSON XHR** | React/Vue style app, data loaded through fetch/XHR |
|
|
44
|
+
| Requests exist but are ads, analytics, or no target data | **B. SSR / inline data** | First screen data is in HTML, deeper pages may use API |
|
|
45
|
+
| Empty except static resources | **C. JSONP / `<script src>` driven** | Data may arrive through script tags or callback-wrapped payloads |
|
|
46
|
+
| API exists but returns 401/403 or signature errors | **D. Token / CSRF auth** | Pattern A plus auth headers or page-sourced tokens |
|
|
47
|
+
| `Content-Type: text/event-stream` or WebSocket handshake | **E. Streaming** | Live feed, chat, or tick data |
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
If data is loaded asynchronously, `wait time 2` may not be enough. Prefer `webcmd browser wait xhr '/api/path-fragment'` for a specific interface over blind `wait time 5`.
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## Pattern A
|
|
53
|
+
## Pattern A - SPA / JSON XHR
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
**Examples:** GitHub, Linear, Notion, many modern SaaS apps.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
- URL 一访问就是 `/`,后续数据都在 network tab
|
|
59
|
-
- `document.querySelector('main').childElementCount` 一开始为 0,后被 JS 填充
|
|
60
|
-
- `window.React / window.Vue / window.__REACT_DEVTOOLS_GLOBAL_HOOK__` 存在
|
|
57
|
+
**Signals:**
|
|
61
58
|
|
|
62
|
-
|
|
59
|
+
- The initial URL loads shell HTML, then target data appears in network.
|
|
60
|
+
- `document.querySelector('main').childElementCount` starts low and is later populated by JavaScript.
|
|
61
|
+
- `window.React`, `window.Vue`, or `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` exists.
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
- 先看 `webcmd browser analyze` 输出的 `api_candidates[]`:`verdict=likely_data` 的条目才是真候选;`verdict=noise`(analytics / beacon / personalization)不能算 API 信号
|
|
66
|
-
- booking #1680 反例:17 个 JSON XHR 看起来像 Pattern A,但全是 analytics side-channel,最终走 `DOM_STATE` / `UI_SELECTOR`
|
|
67
|
-
- replay 候选 endpoint 后,按 `strategy-selection.md` 的契约模型选 strategy;`PUBLIC_API` / `COOKIE_API` 都不通才考虑 `PAGE_FETCH`
|
|
63
|
+
**Next step:** `api-discovery.md` section 1, network deep read.
|
|
68
64
|
|
|
69
|
-
|
|
65
|
+
**Important:** Pattern A does not automatically mean `PAGE_FETCH`.
|
|
70
66
|
|
|
71
|
-
|
|
67
|
+
- First inspect `api_candidates[]` from `webcmd browser analyze`: only `verdict=likely_data` entries are real candidates. `verdict=noise` entries such as analytics, beacons, or personalization do not count as API signals.
|
|
68
|
+
- The booking #1680 counterexample had many JSON XHRs that looked like Pattern A, but they were analytics side-channels; the final strategy was `DOM_STATE` / `UI_SELECTOR`.
|
|
69
|
+
- After replaying a candidate endpoint, choose strategy through `strategy-selection.md`. Consider `PAGE_FETCH` only after `PUBLIC_API` and `COOKIE_API` fail.
|
|
72
70
|
|
|
73
|
-
|
|
71
|
+
## Pattern B - SSR / Inline Data
|
|
74
72
|
|
|
75
|
-
|
|
76
|
-
- 第一个请求(`document`)返回的 HTML 里已经含目标数据(`curl <url> | grep <某数字>`)
|
|
77
|
-
- `window.__INITIAL_STATE__` / `window.__NEXT_DATA__` / `window.__NUXT__` 存在
|
|
78
|
-
- 关 JS 仍能看到首屏数据
|
|
73
|
+
**Examples:** Reddit post pages, YouTube watch pages, many Next.js / Nuxt pages.
|
|
79
74
|
|
|
80
|
-
|
|
75
|
+
**Signals:**
|
|
81
76
|
|
|
82
|
-
|
|
77
|
+
- The first `document` response already contains target data (`curl <url> | grep <known-value>`).
|
|
78
|
+
- `window.__INITIAL_STATE__`, `window.__NEXT_DATA__`, or `window.__NUXT__` exists.
|
|
79
|
+
- The first screen is still visible with JavaScript disabled.
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
**Next step:** `api-discovery.md` section 2 for state extraction, plus section 1 when deeper data returns to network.
|
|
85
82
|
|
|
86
|
-
|
|
83
|
+
## Pattern C - JSONP / `<script src>` Driven
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
- `network` 空或只有 css/font
|
|
90
|
-
- 页面上肯定有数据(价格、成交量等)
|
|
91
|
-
- `document.querySelectorAll('script[src]')` 里有指向 `push / api / data` 域名的 src
|
|
92
|
-
- 响应是 `jQuery123({...})` 这种回调包裹(JSONP)
|
|
85
|
+
**Examples:** older quote pages, legacy directory pages, callback-wrapped data feeds.
|
|
93
86
|
|
|
94
|
-
|
|
87
|
+
**Signals:**
|
|
95
88
|
|
|
96
|
-
|
|
89
|
+
- `network` is empty or mostly CSS/fonts.
|
|
90
|
+
- The page clearly displays data such as price, count, or volume.
|
|
91
|
+
- `document.querySelectorAll('script[src]')` includes URLs under `push`, `api`, or `data` style domains.
|
|
92
|
+
- Response is callback-wrapped, such as `callback123({...})`.
|
|
97
93
|
|
|
98
|
-
|
|
94
|
+
**Next step:** `api-discovery.md` section 3, bundle / script src search.
|
|
99
95
|
|
|
100
|
-
|
|
96
|
+
## Pattern D - Token / CSRF Auth
|
|
101
97
|
|
|
102
|
-
|
|
103
|
-
- 已经是 Pattern A,但 `fetch(url, {credentials:'include'})` 返回 401/403
|
|
104
|
-
- network 里请求头有 `X-Csrf-Token / Authorization: Bearer / X-Client-Id / X-Workspace-Id` 等自定义字段
|
|
105
|
-
- 401 响应体带 `{"code":"AUTH_REQUIRED","csrf":"..."}` 类提示
|
|
98
|
+
**Examples:** Twitter/X and some enterprise SaaS apps.
|
|
106
99
|
|
|
107
|
-
|
|
100
|
+
**Signals:**
|
|
108
101
|
|
|
109
|
-
|
|
102
|
+
- It is otherwise Pattern A, but `fetch(url, { credentials: 'include' })` returns 401/403.
|
|
103
|
+
- Network requests contain custom headers such as `X-Csrf-Token`, `Authorization: Bearer`, `X-Client-Id`, or `X-Workspace-Id`.
|
|
104
|
+
- 401 responses include hints like `{"code":"AUTH_REQUIRED","csrf":"..."}`.
|
|
110
105
|
|
|
111
|
-
|
|
106
|
+
**Next step:** `api-discovery.md` section 4 token-source investigation, then section 5 store-action / intercept fallback if needed.
|
|
112
107
|
|
|
113
|
-
|
|
108
|
+
## Pattern E - Streaming
|
|
114
109
|
|
|
115
|
-
|
|
116
|
-
- `network` 里有 `101 Switching Protocols`(WebSocket 握手)
|
|
117
|
-
- Response headers 含 `Content-Type: text/event-stream`
|
|
118
|
-
- 请求一直 pending 不结束
|
|
110
|
+
**Examples:** LLM chat streams, live feeds, real-time dashboards.
|
|
119
111
|
|
|
120
|
-
|
|
112
|
+
**Signals:**
|
|
121
113
|
|
|
122
|
-
|
|
114
|
+
- `network` contains `101 Switching Protocols`.
|
|
115
|
+
- Response headers include `Content-Type: text/event-stream`.
|
|
116
|
+
- The request stays pending.
|
|
117
|
+
|
|
118
|
+
**Next step:** first find an HTTP polling endpoint with the same data. Most sites have one. Use intercept only when no polling endpoint exists.
|
|
123
119
|
|
|
124
|
-
##
|
|
120
|
+
## If Classification Fails
|
|
125
121
|
|
|
126
|
-
|
|
122
|
+
When diagnostic signals conflict, such as non-empty network with no target data, use this priority order:
|
|
127
123
|
|
|
128
|
-
1.
|
|
129
|
-
2.
|
|
130
|
-
3.
|
|
131
|
-
4. 401
|
|
132
|
-
5.
|
|
124
|
+
1. Treat as A and try `api-discovery.md` section 1.
|
|
125
|
+
2. If that fails, treat as B and try section 2.
|
|
126
|
+
3. If that fails, treat as C and try section 3.
|
|
127
|
+
4. If 401/403 appears, switch to D and try section 4.
|
|
128
|
+
5. After all other paths fail, use intercept from section 5.
|
|
133
129
|
|
|
134
|
-
|
|
130
|
+
Do not get stuck debating classification. Classification chooses the first move; fallback order handles misses.
|