@agentrhq/webcmd 0.1.2 → 0.2.1
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 +196 -219
- package/cli-manifest.json +16205 -34869
- 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/delete.js +14 -6
- package/clis/twitter/delete.test.js +74 -1
- 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/timeline.js +3 -1
- package/clis/twitter/timeline.test.js +4 -0
- 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/bridge-readiness.test.js +1 -1
- package/dist/src/browser/bridge.d.ts +1 -0
- package/dist/src/browser/bridge.js +6 -4
- package/dist/src/browser/cdp.d.ts +1 -0
- package/dist/src/browser/daemon-client.d.ts +2 -0
- package/dist/src/browser/daemon-client.js +108 -51
- package/dist/src/browser/daemon-client.test.js +135 -47
- package/dist/src/browser/daemon-transport.js +3 -19
- package/dist/src/browser/errors.js +11 -0
- package/dist/src/browser/page.d.ts +2 -1
- package/dist/src/browser/page.js +5 -1
- package/dist/src/browser/profile.d.ts +9 -0
- package/dist/src/browser/profile.js +18 -7
- package/dist/src/browser/profile.test.js +44 -0
- package/dist/src/browser/protocol.d.ts +3 -0
- package/dist/src/browser/runtime/local-cloak/actions.js +24 -10
- package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +1 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.js +3 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.test.js +87 -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 +24 -19
- package/dist/src/cli.test.js +59 -59
- package/dist/src/commanderAdapter.test.js +19 -19
- package/dist/src/commands/daemon.test.js +13 -13
- package/dist/src/constants.d.ts +2 -3
- package/dist/src/constants.js +3 -10
- 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.js +1 -5
- package/dist/src/daemon.test.js +10 -1
- package/dist/src/doctor.js +19 -1
- package/dist/src/doctor.test.js +38 -4
- 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 +7 -3
- 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.js +19 -1
- package/dist/src/external.test.js +39 -18
- 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 -6
- package/dist/src/manifest-types.d.ts +1 -1
- package/dist/src/node-network.test.js +5 -5
- 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.d.ts +1 -0
- package/dist/src/release-notes.test.js +61 -0
- package/dist/src/runtime-identity.test.js +0 -8
- package/dist/src/runtime.d.ts +2 -0
- package/dist/src/runtime.js +1 -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 +5 -2
- 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/browser/profile.test.d.ts} +0 -0
- /package/dist/src/{weixin-download.test.d.ts → generate-release-notes-cli.test.d.ts} +0 -0
package/dist/src/cli.js
CHANGED
|
@@ -36,7 +36,7 @@ import { daemonRestart, daemonStatus, daemonStop } from './commands/daemon.js';
|
|
|
36
36
|
import { log } from './logger.js';
|
|
37
37
|
import { bindTab, BrowserCommandError, sendCommand } from './browser/daemon-client.js';
|
|
38
38
|
import { fetchDaemonStatus } from './browser/daemon-transport.js';
|
|
39
|
-
import { aliasForContextId, loadProfileConfig, renameProfile,
|
|
39
|
+
import { aliasForContextId, loadProfileConfig, profileRouteParams, renameProfile, resolveProfileSelection, setDefaultProfile } from './browser/profile.js';
|
|
40
40
|
import { formatDaemonVersion, isDaemonStale } from './browser/daemon-version.js';
|
|
41
41
|
import { DEFAULT_BROWSER_CONNECT_TIMEOUT } from './browser/config.js';
|
|
42
42
|
import { CLI_COMMAND } from './brand.js';
|
|
@@ -428,7 +428,7 @@ async function resolveStoredBrowserTarget(page, scope) {
|
|
|
428
428
|
return resolveBrowserTargetInSession(page, defaultPage, { scope, source: 'saved' });
|
|
429
429
|
}
|
|
430
430
|
/** Create a browser page for browser commands. Uses a named browser session for continuity. */
|
|
431
|
-
async function getBrowserPage(session, targetPage,
|
|
431
|
+
async function getBrowserPage(session, targetPage, profileSelection, opts = {}) {
|
|
432
432
|
const { BrowserBridge } = await import('./browser/index.js');
|
|
433
433
|
const bridge = new BrowserBridge();
|
|
434
434
|
// Internal GC timeout for browser sessions. Not the per-command runtime timeout.
|
|
@@ -438,11 +438,11 @@ async function getBrowserPage(session, targetPage, contextId, opts = {}) {
|
|
|
438
438
|
timeout: DEFAULT_BROWSER_CONNECT_TIMEOUT,
|
|
439
439
|
session,
|
|
440
440
|
surface: 'browser',
|
|
441
|
-
...(
|
|
441
|
+
...profileRouteParams(profileSelection),
|
|
442
442
|
...(idleTimeout && idleTimeout > 0 && { idleTimeout }),
|
|
443
443
|
windowMode: opts.windowMode ?? getBrowserWindowMode(undefined, 'foreground'),
|
|
444
444
|
});
|
|
445
|
-
const targetScope = getBrowserScope(session, contextId);
|
|
445
|
+
const targetScope = getBrowserScope(session, profileSelection?.contextId);
|
|
446
446
|
const resolvedTargetPage = targetPage
|
|
447
447
|
? await resolveBrowserTargetInSession(page, targetPage, { scope: targetScope, source: 'explicit' })
|
|
448
448
|
: await resolveStoredBrowserTarget(page, targetScope);
|
|
@@ -497,9 +497,9 @@ function getBrowserSession(command) {
|
|
|
497
497
|
return raw.trim();
|
|
498
498
|
throw new Error('<session> is a required positional argument: webcmd browser <session> <command>');
|
|
499
499
|
}
|
|
500
|
-
function
|
|
500
|
+
function getBrowserProfileSelection(command) {
|
|
501
501
|
const raw = getCommandOption(command, 'profile');
|
|
502
|
-
return
|
|
502
|
+
return resolveProfileSelection(typeof raw === 'string' && raw.trim() ? raw.trim() : undefined);
|
|
503
503
|
}
|
|
504
504
|
function getPageSession(page) {
|
|
505
505
|
const session = page.session;
|
|
@@ -508,8 +508,11 @@ function getPageSession(page) {
|
|
|
508
508
|
throw new Error('Browser page is missing a session');
|
|
509
509
|
}
|
|
510
510
|
function getPageScope(page) {
|
|
511
|
-
const contextId = page
|
|
512
|
-
|
|
511
|
+
const { contextId, preferredContextId } = page;
|
|
512
|
+
const selected = typeof contextId === 'string' && contextId.trim()
|
|
513
|
+
? contextId.trim()
|
|
514
|
+
: (typeof preferredContextId === 'string' && preferredContextId.trim() ? preferredContextId.trim() : undefined);
|
|
515
|
+
return getBrowserScope(getPageSession(page), selected);
|
|
513
516
|
}
|
|
514
517
|
function snapshotMetricText(snapshot) {
|
|
515
518
|
return typeof snapshot === 'string' ? snapshot : JSON.stringify(snapshot, null, 2);
|
|
@@ -882,9 +885,9 @@ Examples:
|
|
|
882
885
|
const command = args.at(-1) instanceof Command ? args.at(-1) : undefined;
|
|
883
886
|
const targetPage = getBrowserTargetId(command);
|
|
884
887
|
const session = getBrowserSession(command);
|
|
885
|
-
const
|
|
888
|
+
const profileSelection = getBrowserProfileSelection(command);
|
|
886
889
|
const windowMode = getBrowserWindowMode(command, 'foreground');
|
|
887
|
-
page = await getBrowserPage(session, targetPage,
|
|
890
|
+
page = await getBrowserPage(session, targetPage, profileSelection, { windowMode });
|
|
888
891
|
await fn(page, ...args);
|
|
889
892
|
}
|
|
890
893
|
catch (err) {
|
|
@@ -933,12 +936,14 @@ Examples:
|
|
|
933
936
|
? optsOrCommand
|
|
934
937
|
: {};
|
|
935
938
|
const session = getBrowserSession(command);
|
|
936
|
-
const
|
|
939
|
+
const profileSelection = getBrowserProfileSelection(command);
|
|
940
|
+
const contextId = profileSelection?.contextId;
|
|
941
|
+
const routing = profileRouteParams(profileSelection);
|
|
937
942
|
try {
|
|
938
943
|
const { BrowserBridge } = await import('./browser/index.js');
|
|
939
944
|
const bridge = new BrowserBridge();
|
|
940
|
-
await bridge.connect({ timeout: DEFAULT_BROWSER_CONNECT_TIMEOUT, session, surface: 'browser', ...
|
|
941
|
-
await fn({ session, contextId }, opts);
|
|
945
|
+
await bridge.connect({ timeout: DEFAULT_BROWSER_CONNECT_TIMEOUT, session, surface: 'browser', ...routing });
|
|
946
|
+
await fn({ session, contextId, routing }, opts);
|
|
942
947
|
}
|
|
943
948
|
catch (err) {
|
|
944
949
|
if (err instanceof BrowserCommandError) {
|
|
@@ -956,7 +961,7 @@ Examples:
|
|
|
956
961
|
.description('Bind an existing Cloak runtime tab to the browser session named by <session>')
|
|
957
962
|
.option('--page <id>', 'Cloak tab page id from `webcmd browser <session> tab list`')
|
|
958
963
|
.option('--index <n>', 'Cloak tab index from `webcmd browser <session> tab list`')
|
|
959
|
-
.action(browserSessionCommandAction(async ({ session, contextId }, opts) => {
|
|
964
|
+
.action(browserSessionCommandAction(async ({ session, contextId, routing }, opts) => {
|
|
960
965
|
const page = typeof opts.page === 'string' && opts.page.trim() ? opts.page.trim() : undefined;
|
|
961
966
|
const rawIndex = typeof opts.index === 'string' && opts.index.trim() ? opts.index.trim() : undefined;
|
|
962
967
|
if ((page && rawIndex) || (!page && !rawIndex)) {
|
|
@@ -966,14 +971,14 @@ Examples:
|
|
|
966
971
|
throw new BrowserCommandError('--index must be a non-negative integer.', 'invalid_request');
|
|
967
972
|
}
|
|
968
973
|
const index = rawIndex === undefined ? undefined : Number.parseInt(rawIndex, 10);
|
|
969
|
-
const data = await bindTab(session, { ...
|
|
974
|
+
const data = await bindTab(session, { ...routing, ...(page && { page }), ...(index !== undefined && { index }) });
|
|
970
975
|
saveBrowserTargetState(undefined, getBrowserScope(session, contextId));
|
|
971
976
|
console.log(JSON.stringify({ session, ...((data && typeof data === 'object') ? data : { data }) }, null, 2));
|
|
972
977
|
}));
|
|
973
978
|
browser.command('unbind')
|
|
974
979
|
.description('Compatibility command; release the Cloak browser session named by <session>')
|
|
975
|
-
.action(browserSessionCommandAction(async ({ session, contextId }) => {
|
|
976
|
-
await sendCommand('close-window', { session, surface: 'browser', ...
|
|
980
|
+
.action(browserSessionCommandAction(async ({ session, contextId, routing }) => {
|
|
981
|
+
await sendCommand('close-window', { session, surface: 'browser', ...routing });
|
|
977
982
|
saveBrowserTargetState(undefined, getBrowserScope(session, contextId));
|
|
978
983
|
console.log(JSON.stringify({ unbound: true, session }, null, 2));
|
|
979
984
|
}));
|
|
@@ -2980,7 +2985,7 @@ cli({
|
|
|
2980
2985
|
adapterCmd
|
|
2981
2986
|
.command('eject')
|
|
2982
2987
|
.description('Copy an official adapter to ~/.webcmd/clis/ for local editing')
|
|
2983
|
-
.argument('<site>', 'Site name (e.g. twitter,
|
|
2988
|
+
.argument('<site>', 'Site name (e.g. twitter, youtube)')
|
|
2984
2989
|
.action(async (site) => {
|
|
2985
2990
|
const os = await import('node:os');
|
|
2986
2991
|
const userClisDir = path.join(os.homedir(), '.webcmd', 'clis');
|
|
@@ -3009,7 +3014,7 @@ cli({
|
|
|
3009
3014
|
adapterCmd
|
|
3010
3015
|
.command('reset')
|
|
3011
3016
|
.description('Remove local override and restore official adapter version')
|
|
3012
|
-
.argument('[site]', 'Site name (e.g. twitter,
|
|
3017
|
+
.argument('[site]', 'Site name (e.g. twitter, youtube)')
|
|
3013
3018
|
.option('--all', 'Reset all local overrides')
|
|
3014
3019
|
.action(async (site, opts) => {
|
|
3015
3020
|
const os = await import('node:os');
|
package/dist/src/cli.test.js
CHANGED
|
@@ -100,10 +100,10 @@ describe('createProgram root help descriptions', () => {
|
|
|
100
100
|
registry.clear();
|
|
101
101
|
try {
|
|
102
102
|
cli({
|
|
103
|
-
site: '
|
|
103
|
+
site: 'reddit',
|
|
104
104
|
name: 'hot',
|
|
105
105
|
access: 'read',
|
|
106
|
-
description: '
|
|
106
|
+
description: 'Reddit hot posts',
|
|
107
107
|
strategy: Strategy.PUBLIC,
|
|
108
108
|
browser: false,
|
|
109
109
|
});
|
|
@@ -118,9 +118,9 @@ describe('createProgram root help descriptions', () => {
|
|
|
118
118
|
const program = createProgram('', '');
|
|
119
119
|
const help = program.helpInformation();
|
|
120
120
|
expect(help).toContain('Site adapters (2):');
|
|
121
|
-
expect(help).toContain('
|
|
121
|
+
expect(help).toContain('reddit, youtube');
|
|
122
122
|
expect(help).toContain("webcmd <site> --help -f yaml");
|
|
123
|
-
expect(help).not.toMatch(/\n
|
|
123
|
+
expect(help).not.toMatch(/\n reddit\s+hot/);
|
|
124
124
|
expect(help).not.toMatch(/\n youtube\s+search/);
|
|
125
125
|
}
|
|
126
126
|
finally {
|
|
@@ -135,11 +135,11 @@ describe('createProgram root help descriptions', () => {
|
|
|
135
135
|
registry.clear();
|
|
136
136
|
try {
|
|
137
137
|
cli({
|
|
138
|
-
site: '
|
|
139
|
-
name: '
|
|
138
|
+
site: 'youtube',
|
|
139
|
+
name: 'search',
|
|
140
140
|
access: 'read',
|
|
141
|
-
description: '
|
|
142
|
-
domain: 'www.
|
|
141
|
+
description: 'Search YouTube',
|
|
142
|
+
domain: 'www.youtube.com',
|
|
143
143
|
strategy: Strategy.PUBLIC,
|
|
144
144
|
browser: false,
|
|
145
145
|
});
|
|
@@ -158,7 +158,7 @@ describe('createProgram root help descriptions', () => {
|
|
|
158
158
|
expect(help).toContain('App adapters (1):');
|
|
159
159
|
expect(help).toMatch(/App adapters \(1\):\n {2}chatwise/);
|
|
160
160
|
expect(help).toContain('Site adapters (1):');
|
|
161
|
-
expect(help).toMatch(/Site adapters \(1\):\n {2}
|
|
161
|
+
expect(help).toMatch(/Site adapters \(1\):\n {2}youtube/);
|
|
162
162
|
// App adapters appear before Site adapters (External CLIs are absent here)
|
|
163
163
|
expect(help.indexOf('App adapters')).toBeLessThan(help.indexOf('Site adapters'));
|
|
164
164
|
}
|
|
@@ -172,7 +172,7 @@ describe('createProgram root help descriptions', () => {
|
|
|
172
172
|
expect(classifyAdapter('localhost')).toBe('app');
|
|
173
173
|
expect(classifyAdapter('127.0.0.1')).toBe('app');
|
|
174
174
|
expect(classifyAdapter('::1')).toBe('app');
|
|
175
|
-
expect(classifyAdapter('www.
|
|
175
|
+
expect(classifyAdapter('www.youtube.com')).toBe('site');
|
|
176
176
|
});
|
|
177
177
|
it('splits list table output into App and Site sections without changing per-site rows', async () => {
|
|
178
178
|
const registry = getRegistry();
|
|
@@ -200,11 +200,11 @@ describe('createProgram root help descriptions', () => {
|
|
|
200
200
|
browser: true,
|
|
201
201
|
});
|
|
202
202
|
cli({
|
|
203
|
-
site: '
|
|
204
|
-
name: '
|
|
203
|
+
site: 'youtube',
|
|
204
|
+
name: 'search',
|
|
205
205
|
access: 'read',
|
|
206
|
-
description: '
|
|
207
|
-
domain: 'www.
|
|
206
|
+
description: 'Search YouTube',
|
|
207
|
+
domain: 'www.youtube.com',
|
|
208
208
|
strategy: Strategy.PUBLIC,
|
|
209
209
|
browser: false,
|
|
210
210
|
});
|
|
@@ -216,7 +216,7 @@ describe('createProgram root help descriptions', () => {
|
|
|
216
216
|
expect(output.indexOf('App adapters')).toBeLessThan(output.indexOf('Site adapters'));
|
|
217
217
|
expect(output).toMatch(/App adapters[\s\S]*antigravity[\s\S]*history \[ui\] — Read Antigravity history/);
|
|
218
218
|
expect(output).toMatch(/App adapters[\s\S]*chatwise[\s\S]*ask \[ui\] — Ask Chatwise desktop app/);
|
|
219
|
-
expect(output).toMatch(/Site adapters[\s\S]*
|
|
219
|
+
expect(output).toMatch(/Site adapters[\s\S]*youtube[\s\S]*search \[public\] — Search YouTube/);
|
|
220
220
|
expect(output).toContain('3 built-in commands across 2 apps + 1 sites,');
|
|
221
221
|
}
|
|
222
222
|
finally {
|
|
@@ -235,11 +235,11 @@ describe('createProgram root help descriptions', () => {
|
|
|
235
235
|
registry.clear();
|
|
236
236
|
try {
|
|
237
237
|
cli({
|
|
238
|
-
site: '
|
|
239
|
-
name: '
|
|
238
|
+
site: 'youtube',
|
|
239
|
+
name: 'search',
|
|
240
240
|
access: 'read',
|
|
241
|
-
description: '
|
|
242
|
-
domain: 'www.
|
|
241
|
+
description: 'Search YouTube',
|
|
242
|
+
domain: 'www.youtube.com',
|
|
243
243
|
strategy: Strategy.PUBLIC,
|
|
244
244
|
browser: false,
|
|
245
245
|
columns: ['title', 'url'],
|
|
@@ -257,9 +257,9 @@ describe('createProgram root help descriptions', () => {
|
|
|
257
257
|
const rows = JSON.parse(jsonOutput);
|
|
258
258
|
expect(rows).toMatchObject([
|
|
259
259
|
{
|
|
260
|
-
site: '
|
|
261
|
-
name: '
|
|
262
|
-
domain: 'www.
|
|
260
|
+
site: 'youtube',
|
|
261
|
+
name: 'search',
|
|
262
|
+
domain: 'www.youtube.com',
|
|
263
263
|
columns: ['title', 'url'],
|
|
264
264
|
},
|
|
265
265
|
]);
|
|
@@ -281,11 +281,11 @@ describe('createProgram root help descriptions', () => {
|
|
|
281
281
|
registry.clear();
|
|
282
282
|
try {
|
|
283
283
|
cli({
|
|
284
|
-
site: '
|
|
285
|
-
name: '
|
|
284
|
+
site: 'youtube',
|
|
285
|
+
name: 'search',
|
|
286
286
|
access: 'read',
|
|
287
|
-
description: '
|
|
288
|
-
domain: 'www.
|
|
287
|
+
description: 'Search YouTube',
|
|
288
|
+
domain: 'www.youtube.com',
|
|
289
289
|
strategy: Strategy.PUBLIC,
|
|
290
290
|
browser: false,
|
|
291
291
|
});
|
|
@@ -304,13 +304,13 @@ describe('createProgram root help descriptions', () => {
|
|
|
304
304
|
expect(data.app_adapters.count).toBe(1);
|
|
305
305
|
expect(data.app_adapters.apps).toEqual(['chatwise']);
|
|
306
306
|
expect(data.site_adapters.count).toBe(1);
|
|
307
|
-
expect(data.site_adapters.sites).toEqual(['
|
|
307
|
+
expect(data.site_adapters.sites).toEqual(['youtube']);
|
|
308
308
|
expect(data.external_clis.count).toBeGreaterThanOrEqual(0);
|
|
309
309
|
expect(Array.isArray(data.external_clis.clis)).toBe(true);
|
|
310
310
|
expect(Array.isArray(data.external_clis.display)).toBe(true);
|
|
311
311
|
// Adapters must NOT leak into the core commands list
|
|
312
312
|
const commandNames = data.commands.map((cmd) => cmd.name);
|
|
313
|
-
expect(commandNames).not.toContain('
|
|
313
|
+
expect(commandNames).not.toContain('youtube');
|
|
314
314
|
expect(commandNames).not.toContain('chatwise');
|
|
315
315
|
}
|
|
316
316
|
finally {
|
|
@@ -327,10 +327,10 @@ describe('createProgram root help descriptions', () => {
|
|
|
327
327
|
registry.clear();
|
|
328
328
|
try {
|
|
329
329
|
cli({
|
|
330
|
-
site: '
|
|
331
|
-
name: '
|
|
330
|
+
site: 'youtube',
|
|
331
|
+
name: 'search',
|
|
332
332
|
access: 'read',
|
|
333
|
-
description: '
|
|
333
|
+
description: 'Search YouTube',
|
|
334
334
|
strategy: Strategy.PUBLIC,
|
|
335
335
|
browser: false,
|
|
336
336
|
});
|
|
@@ -338,9 +338,9 @@ describe('createProgram root help descriptions', () => {
|
|
|
338
338
|
process.argv = ['node', 'webcmd', '--help', '-f', 'yaml'];
|
|
339
339
|
const data = yaml.load(program.helpInformation());
|
|
340
340
|
expect(data.site_adapters.count).toBe(1);
|
|
341
|
-
expect(data.site_adapters.sites).toEqual(['
|
|
341
|
+
expect(data.site_adapters.sites).toEqual(['youtube']);
|
|
342
342
|
expect(data.commands.map((cmd) => cmd.name)).toContain('list');
|
|
343
|
-
expect(data.commands.map((cmd) => cmd.name)).not.toContain('
|
|
343
|
+
expect(data.commands.map((cmd) => cmd.name)).not.toContain('youtube');
|
|
344
344
|
}
|
|
345
345
|
finally {
|
|
346
346
|
process.argv = argv;
|
|
@@ -356,28 +356,28 @@ describe('createProgram root help descriptions', () => {
|
|
|
356
356
|
registry.clear();
|
|
357
357
|
try {
|
|
358
358
|
cli({
|
|
359
|
-
site: '
|
|
360
|
-
name: '
|
|
359
|
+
site: 'youtube',
|
|
360
|
+
name: 'search',
|
|
361
361
|
access: 'read',
|
|
362
|
-
description: '
|
|
362
|
+
description: 'Search YouTube',
|
|
363
363
|
strategy: Strategy.PUBLIC,
|
|
364
364
|
browser: false,
|
|
365
365
|
args: [{ name: 'limit', type: 'int', default: 20, help: 'Number of videos' }],
|
|
366
366
|
columns: ['title', 'url'],
|
|
367
367
|
});
|
|
368
368
|
const program = createProgram('', '');
|
|
369
|
-
const site = program.commands.find(cmd => cmd.name() === '
|
|
369
|
+
const site = program.commands.find(cmd => cmd.name() === 'youtube');
|
|
370
370
|
expect(site).toBeTruthy();
|
|
371
|
-
process.argv = ['node', 'webcmd', '
|
|
371
|
+
process.argv = ['node', 'webcmd', 'youtube', '--help', '-f', 'yaml'];
|
|
372
372
|
const data = yaml.load(site.helpInformation());
|
|
373
|
-
expect(data.site).toBe('
|
|
373
|
+
expect(data.site).toBe('youtube');
|
|
374
374
|
expect(data.commands).toMatchObject([
|
|
375
375
|
{
|
|
376
|
-
name: '
|
|
376
|
+
name: 'search',
|
|
377
377
|
access: 'read',
|
|
378
|
-
description: '
|
|
378
|
+
description: 'Search YouTube',
|
|
379
379
|
browser: false,
|
|
380
|
-
example: 'webcmd
|
|
380
|
+
example: 'webcmd youtube search -f yaml',
|
|
381
381
|
command_options: [{ name: 'limit', type: 'int', default: 20 }],
|
|
382
382
|
columns: ['title', 'url'],
|
|
383
383
|
},
|
|
@@ -397,31 +397,31 @@ describe('createProgram root help descriptions', () => {
|
|
|
397
397
|
registry.clear();
|
|
398
398
|
try {
|
|
399
399
|
cli({
|
|
400
|
-
site: '
|
|
401
|
-
name: '
|
|
400
|
+
site: 'youtube',
|
|
401
|
+
name: 'search',
|
|
402
402
|
access: 'read',
|
|
403
|
-
description: '
|
|
403
|
+
description: 'Search YouTube',
|
|
404
404
|
strategy: Strategy.PUBLIC,
|
|
405
405
|
browser: false,
|
|
406
406
|
args: [{ name: 'limit', type: 'int', default: 20, help: 'Number of videos' }],
|
|
407
407
|
});
|
|
408
408
|
cli({
|
|
409
|
-
site: '
|
|
409
|
+
site: 'youtube',
|
|
410
410
|
name: 'video',
|
|
411
411
|
access: 'read',
|
|
412
412
|
description: 'Read one video',
|
|
413
|
-
domain: 'www.
|
|
413
|
+
domain: 'www.youtube.com',
|
|
414
414
|
strategy: Strategy.PUBLIC,
|
|
415
415
|
browser: true,
|
|
416
416
|
args: [{ name: 'bvid', positional: true, required: true, help: 'Video id' }],
|
|
417
417
|
});
|
|
418
418
|
const program = createProgram('', '');
|
|
419
|
-
const site = program.commands.find(cmd => cmd.name() === '
|
|
419
|
+
const site = program.commands.find(cmd => cmd.name() === 'youtube');
|
|
420
420
|
expect(site).toBeTruthy();
|
|
421
421
|
const help = site.helpInformation();
|
|
422
|
-
expect(help).toContain('
|
|
423
|
-
expect(help).toContain('video <bvid>
|
|
424
|
-
expect(help).toContain('
|
|
422
|
+
expect(help).toContain('search [options] [read] Search YouTube');
|
|
423
|
+
expect(help).toContain('video <bvid> [read] Read one video');
|
|
424
|
+
expect(help).toContain('search [options]');
|
|
425
425
|
expect(help).not.toContain('video <bvid> [options]');
|
|
426
426
|
expect(help).not.toContain('\nOptions:');
|
|
427
427
|
expect(help).toContain('Common options:');
|
|
@@ -442,12 +442,12 @@ describe('createProgram root help descriptions', () => {
|
|
|
442
442
|
registry.clear();
|
|
443
443
|
try {
|
|
444
444
|
cli({
|
|
445
|
-
site: '
|
|
445
|
+
site: 'youtube',
|
|
446
446
|
name: 'video',
|
|
447
447
|
access: 'read',
|
|
448
448
|
description: 'Read one video',
|
|
449
449
|
strategy: Strategy.PUBLIC,
|
|
450
|
-
domain: 'www.
|
|
450
|
+
domain: 'www.youtube.com',
|
|
451
451
|
browser: true,
|
|
452
452
|
args: [
|
|
453
453
|
{ name: 'bvid', positional: true, required: true, help: 'Video id' },
|
|
@@ -456,14 +456,14 @@ describe('createProgram root help descriptions', () => {
|
|
|
456
456
|
columns: ['title', 'url'],
|
|
457
457
|
});
|
|
458
458
|
const program = createProgram('', '');
|
|
459
|
-
const site = program.commands.find(cmd => cmd.name() === '
|
|
459
|
+
const site = program.commands.find(cmd => cmd.name() === 'youtube');
|
|
460
460
|
const command = site.commands.find(cmd => cmd.name() === 'video');
|
|
461
461
|
expect(command).toBeTruthy();
|
|
462
|
-
process.argv = ['node', 'webcmd', '
|
|
462
|
+
process.argv = ['node', 'webcmd', 'youtube', 'video', '--help', '-f', 'yaml'];
|
|
463
463
|
const data = yaml.load(command.helpInformation());
|
|
464
|
-
expect(data.usage).toBe('webcmd
|
|
464
|
+
expect(data.usage).toBe('webcmd youtube video <bvid> [options]');
|
|
465
465
|
expect(data.browser).toBe(true);
|
|
466
|
-
expect(data.domain).toBe('www.
|
|
466
|
+
expect(data.domain).toBe('www.youtube.com');
|
|
467
467
|
expect(data.positionals).toMatchObject([{ name: 'bvid', positional: true, required: true }]);
|
|
468
468
|
expect(data.command_options).toMatchObject([{ name: 'with-comments', default: false }]);
|
|
469
469
|
expect(data.common_options.map((option) => option.name)).toEqual(['format', 'trace', 'verbose', 'help']);
|
|
@@ -1004,7 +1004,7 @@ describe('profile list', () => {
|
|
|
1004
1004
|
runtimeVersion: '1.0.3',
|
|
1005
1005
|
pending: 0,
|
|
1006
1006
|
memoryMB: 20,
|
|
1007
|
-
port:
|
|
1007
|
+
port: 9777,
|
|
1008
1008
|
}),
|
|
1009
1009
|
});
|
|
1010
1010
|
const program = createProgram('', '');
|
|
@@ -1027,7 +1027,7 @@ describe('profile list', () => {
|
|
|
1027
1027
|
profiles: [],
|
|
1028
1028
|
pending: 0,
|
|
1029
1029
|
memoryMB: 20,
|
|
1030
|
-
port:
|
|
1030
|
+
port: 9777,
|
|
1031
1031
|
}),
|
|
1032
1032
|
});
|
|
1033
1033
|
const program = createProgram('', '');
|
|
@@ -251,12 +251,12 @@ describe('commanderAdapter default formats', () => {
|
|
|
251
251
|
});
|
|
252
252
|
describe('commanderAdapter error envelope output', () => {
|
|
253
253
|
const cmd = {
|
|
254
|
-
site: '
|
|
255
|
-
name: '
|
|
256
|
-
description: 'Read one
|
|
254
|
+
site: 'github',
|
|
255
|
+
name: 'issue', access: 'read',
|
|
256
|
+
description: 'Read one issue',
|
|
257
257
|
browser: false,
|
|
258
258
|
args: [
|
|
259
|
-
{ name: '
|
|
259
|
+
{ name: 'issue-id', positional: true, required: true, help: 'Issue ID' },
|
|
260
260
|
],
|
|
261
261
|
func: vi.fn(),
|
|
262
262
|
};
|
|
@@ -268,26 +268,26 @@ describe('commanderAdapter error envelope output', () => {
|
|
|
268
268
|
});
|
|
269
269
|
it('outputs YAML error envelope with adapter hint to stderr', async () => {
|
|
270
270
|
const program = new Command();
|
|
271
|
-
const siteCmd = program.command('
|
|
271
|
+
const siteCmd = program.command('github');
|
|
272
272
|
registerCommandToProgram(siteCmd, cmd);
|
|
273
273
|
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
274
|
-
mockExecuteCommand.mockRejectedValueOnce(new EmptyResultError('
|
|
275
|
-
await program.parseAsync(['node', 'webcmd', '
|
|
274
|
+
mockExecuteCommand.mockRejectedValueOnce(new EmptyResultError('github/issue', 'Pass the full issue URL instead of a bare issue number.'));
|
|
275
|
+
await program.parseAsync(['node', 'webcmd', 'github', 'issue', '12345']);
|
|
276
276
|
const output = stderrSpy.mock.calls.map(c => String(c[0])).join('');
|
|
277
277
|
expect(output).toContain('ok: false');
|
|
278
278
|
expect(output).toContain('code: EMPTY_RESULT');
|
|
279
|
-
expect(output).toContain('
|
|
279
|
+
expect(output).toContain('full issue URL');
|
|
280
280
|
expect(output).toContain('--trace=retain-on-failure');
|
|
281
|
-
expect(output).toContain('webcmd
|
|
281
|
+
expect(output).toContain('webcmd github issue --trace retain-on-failure');
|
|
282
282
|
stderrSpy.mockRestore();
|
|
283
283
|
});
|
|
284
284
|
it('outputs YAML error envelope for selector errors', async () => {
|
|
285
285
|
const program = new Command();
|
|
286
|
-
const siteCmd = program.command('
|
|
286
|
+
const siteCmd = program.command('github');
|
|
287
287
|
registerCommandToProgram(siteCmd, cmd);
|
|
288
288
|
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
289
289
|
mockExecuteCommand.mockRejectedValueOnce(selectorError('.note-title', 'The note title selector no longer matches the current page.'));
|
|
290
|
-
await program.parseAsync(['node', 'webcmd', '
|
|
290
|
+
await program.parseAsync(['node', 'webcmd', 'github', 'issue', '12345']);
|
|
291
291
|
const output = stderrSpy.mock.calls.map(c => String(c[0])).join('');
|
|
292
292
|
expect(output).toContain('ok: false');
|
|
293
293
|
expect(output).toContain('code: SELECTOR');
|
|
@@ -297,16 +297,16 @@ describe('commanderAdapter error envelope output', () => {
|
|
|
297
297
|
});
|
|
298
298
|
it('does not add an AutoFix rerun hint when trace is already enabled', async () => {
|
|
299
299
|
const program = new Command();
|
|
300
|
-
const siteCmd = program.command('
|
|
300
|
+
const siteCmd = program.command('github');
|
|
301
301
|
registerCommandToProgram(siteCmd, cmd);
|
|
302
302
|
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
303
303
|
mockExecuteCommand.mockRejectedValueOnce(selectorError('.note-title'));
|
|
304
304
|
await program.parseAsync([
|
|
305
305
|
'node',
|
|
306
306
|
'webcmd',
|
|
307
|
-
'
|
|
308
|
-
'
|
|
309
|
-
'
|
|
307
|
+
'github',
|
|
308
|
+
'issue',
|
|
309
|
+
'12345',
|
|
310
310
|
'--trace',
|
|
311
311
|
'retain-on-failure',
|
|
312
312
|
]);
|
|
@@ -317,7 +317,7 @@ describe('commanderAdapter error envelope output', () => {
|
|
|
317
317
|
});
|
|
318
318
|
it('includes trace metadata from the error envelope when execution attached it', async () => {
|
|
319
319
|
const program = new Command();
|
|
320
|
-
const siteCmd = program.command('
|
|
320
|
+
const siteCmd = program.command('github');
|
|
321
321
|
registerCommandToProgram(siteCmd, cmd);
|
|
322
322
|
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
323
323
|
const err = selectorError('.note-title');
|
|
@@ -336,9 +336,9 @@ describe('commanderAdapter error envelope output', () => {
|
|
|
336
336
|
await program.parseAsync([
|
|
337
337
|
'node',
|
|
338
338
|
'webcmd',
|
|
339
|
-
'
|
|
340
|
-
'
|
|
341
|
-
'
|
|
339
|
+
'github',
|
|
340
|
+
'issue',
|
|
341
|
+
'12345',
|
|
342
342
|
'--trace',
|
|
343
343
|
'retain-on-failure',
|
|
344
344
|
]);
|
|
@@ -39,7 +39,7 @@ describe('daemonStatus', () => {
|
|
|
39
39
|
runtimeVersion: '1.6.8',
|
|
40
40
|
pending: 0,
|
|
41
41
|
memoryMB: 64,
|
|
42
|
-
port:
|
|
42
|
+
port: 9777,
|
|
43
43
|
});
|
|
44
44
|
await daemonStatus();
|
|
45
45
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('running'));
|
|
@@ -49,7 +49,7 @@ describe('daemonStatus', () => {
|
|
|
49
49
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('connected'));
|
|
50
50
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('v1.6.8'));
|
|
51
51
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('64 MB'));
|
|
52
|
-
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('
|
|
52
|
+
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('9777'));
|
|
53
53
|
});
|
|
54
54
|
it('shows disconnected when runtime is not connected', async () => {
|
|
55
55
|
fetchDaemonStatusMock.mockResolvedValue({
|
|
@@ -61,7 +61,7 @@ describe('daemonStatus', () => {
|
|
|
61
61
|
runtimeName: 'fake',
|
|
62
62
|
pending: 0,
|
|
63
63
|
memoryMB: 32,
|
|
64
|
-
port:
|
|
64
|
+
port: 9777,
|
|
65
65
|
});
|
|
66
66
|
await daemonStatus();
|
|
67
67
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('disconnected'));
|
|
@@ -77,7 +77,7 @@ describe('daemonStatus', () => {
|
|
|
77
77
|
runtimeVersion: undefined,
|
|
78
78
|
pending: 0,
|
|
79
79
|
memoryMB: 32,
|
|
80
|
-
port:
|
|
80
|
+
port: 9777,
|
|
81
81
|
});
|
|
82
82
|
await daemonStatus();
|
|
83
83
|
expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('fake connected'));
|
|
@@ -105,7 +105,7 @@ describe('daemonStatus runtime label states (#1575)', () => {
|
|
|
105
105
|
daemonVersion: PKG_VERSION,
|
|
106
106
|
pending: 0,
|
|
107
107
|
memoryMB: 32,
|
|
108
|
-
port:
|
|
108
|
+
port: 9777,
|
|
109
109
|
runtimeName: 'fake',
|
|
110
110
|
...extra,
|
|
111
111
|
});
|
|
@@ -173,7 +173,7 @@ describe('daemonStop', () => {
|
|
|
173
173
|
runtimeName: 'fake',
|
|
174
174
|
pending: 0,
|
|
175
175
|
memoryMB: 50,
|
|
176
|
-
port:
|
|
176
|
+
port: 9777,
|
|
177
177
|
});
|
|
178
178
|
requestDaemonShutdownMock.mockResolvedValue(true);
|
|
179
179
|
await daemonStop();
|
|
@@ -190,7 +190,7 @@ describe('daemonStop', () => {
|
|
|
190
190
|
runtimeName: 'fake',
|
|
191
191
|
pending: 0,
|
|
192
192
|
memoryMB: 50,
|
|
193
|
-
port:
|
|
193
|
+
port: 9777,
|
|
194
194
|
});
|
|
195
195
|
requestDaemonShutdownMock.mockResolvedValue(false);
|
|
196
196
|
await daemonStop();
|
|
@@ -221,7 +221,7 @@ describe('daemonRestart', () => {
|
|
|
221
221
|
profiles: [{ contextId: 'work', runtimeConnected: true, pending: 0 }],
|
|
222
222
|
pending: 0,
|
|
223
223
|
memoryMB: 50,
|
|
224
|
-
port:
|
|
224
|
+
port: 9777,
|
|
225
225
|
});
|
|
226
226
|
restartDaemonMock.mockResolvedValue({
|
|
227
227
|
previousStatus: { daemonVersion: '1.7.6' },
|
|
@@ -237,13 +237,13 @@ describe('daemonRestart', () => {
|
|
|
237
237
|
profiles: [{ contextId: 'work', runtimeConnected: true, pending: 0 }],
|
|
238
238
|
pending: 0,
|
|
239
239
|
memoryMB: 51,
|
|
240
|
-
port:
|
|
240
|
+
port: 9777,
|
|
241
241
|
},
|
|
242
242
|
});
|
|
243
243
|
await daemonRestart();
|
|
244
244
|
expect(restartDaemonMock).toHaveBeenCalledTimes(1);
|
|
245
245
|
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining('will disconnect 1 browser profile'));
|
|
246
|
-
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining(`Daemon restarted on port
|
|
246
|
+
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining(`Daemon restarted on port 9777 (v${PKG_VERSION})`));
|
|
247
247
|
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining('Runtime connected; 1 profile connected'));
|
|
248
248
|
});
|
|
249
249
|
it('starts a new daemon when none was running', async () => {
|
|
@@ -261,11 +261,11 @@ describe('daemonRestart', () => {
|
|
|
261
261
|
runtimeName: 'fake',
|
|
262
262
|
pending: 0,
|
|
263
263
|
memoryMB: 51,
|
|
264
|
-
port:
|
|
264
|
+
port: 9777,
|
|
265
265
|
},
|
|
266
266
|
});
|
|
267
267
|
await daemonRestart();
|
|
268
|
-
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining(`Daemon started on port
|
|
268
|
+
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining(`Daemon started on port 9777 (v${PKG_VERSION})`));
|
|
269
269
|
expect(stderrSpy).toHaveBeenCalledWith(expect.stringContaining('Cloak runtime has not connected yet'));
|
|
270
270
|
});
|
|
271
271
|
it('reports failure when the daemon cannot stop', async () => {
|
|
@@ -278,7 +278,7 @@ describe('daemonRestart', () => {
|
|
|
278
278
|
runtimeName: 'fake',
|
|
279
279
|
pending: 0,
|
|
280
280
|
memoryMB: 50,
|
|
281
|
-
port:
|
|
281
|
+
port: 9777,
|
|
282
282
|
});
|
|
283
283
|
restartDaemonMock.mockResolvedValue({
|
|
284
284
|
previousStatus: { daemonVersion: '1.7.6' },
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Shared constants used across explore, synthesize, and pipeline modules.
|
|
3
3
|
*/
|
|
4
4
|
import { DAEMON_HEADER_NAME } from './brand.js';
|
|
5
|
-
/** Default daemon port for HTTP
|
|
6
|
-
export declare const DEFAULT_DAEMON_PORT =
|
|
7
|
-
export declare function unsupportedDaemonPortEnvMessage(value?: string): string;
|
|
5
|
+
/** Default daemon port for HTTP communication with the browser runtime. */
|
|
6
|
+
export declare const DEFAULT_DAEMON_PORT = 9777;
|
|
8
7
|
export { DAEMON_HEADER_NAME };
|
|
9
8
|
/** URL query params that are volatile/ephemeral and should be stripped from patterns */
|
|
10
9
|
export declare const VOLATILE_PARAMS: Set<string>;
|