@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/clis/instagram/post.js
CHANGED
|
@@ -25,7 +25,7 @@ export function buildEnsureComposerOpenJs() {
|
|
|
25
25
|
const hasLoginField = !!document.querySelector('input[name="username"], input[name="password"]');
|
|
26
26
|
const hasLoginButton = Array.from(document.querySelectorAll('button, div[role="button"]')).some((el) => {
|
|
27
27
|
const text = (el.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();
|
|
28
|
-
return text === 'log in' || text === 'login' || text === '
|
|
28
|
+
return text === 'log in' || text === 'login' || text === 'Log in';
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
if (onLoginRoute || (hasLoginField && hasLoginButton)) {
|
|
@@ -35,7 +35,7 @@ export function buildEnsureComposerOpenJs() {
|
|
|
35
35
|
const alreadyOpen = document.querySelector('input[type="file"]');
|
|
36
36
|
if (alreadyOpen) return { ok: true };
|
|
37
37
|
|
|
38
|
-
const labels = ['Create', 'New post', 'Post', '
|
|
38
|
+
const labels = ['Create', 'New post', 'Post', 'Create', 'New post'];
|
|
39
39
|
const nodes = Array.from(document.querySelectorAll('a, button, div[role="button"], svg[aria-label], [aria-label]'));
|
|
40
40
|
for (const node of nodes) {
|
|
41
41
|
const text = ((node.textContent || '') + ' ' + (node.getAttribute?.('aria-label') || '')).trim();
|
|
@@ -71,10 +71,10 @@ export function buildPublishStatusProbeJs() {
|
|
|
71
71
|
const url = window.location.href;
|
|
72
72
|
const visibleText = dialogText.toLowerCase();
|
|
73
73
|
const sharingVisible = /sharing/.test(visibleText);
|
|
74
|
-
const shared = /post shared|your post has been shared
|
|
74
|
+
const shared = /post shared|your post has been shared|Shared|Posted/.test(visibleText)
|
|
75
75
|
|| /\\/p\\//.test(url);
|
|
76
76
|
const failed = !shared && !sharingVisible && (
|
|
77
|
-
/couldn['
|
|
77
|
+
/couldn['']t be shared|could not be shared|failed to share|share failed|Unable to share|Share failed/.test(visibleText)
|
|
78
78
|
|| (/something went wrong/.test(visibleText) && /try again/.test(visibleText))
|
|
79
79
|
);
|
|
80
80
|
const composerOpen = dialogs.some((dialog) =>
|
|
@@ -256,7 +256,7 @@ async function executeUiInstagramPost(input) {
|
|
|
256
256
|
if (input.preShareDelaySeconds > 0) {
|
|
257
257
|
await input.page.wait({ time: input.preShareDelaySeconds });
|
|
258
258
|
}
|
|
259
|
-
await clickAction(input.page, ['Share', '
|
|
259
|
+
await clickAction(input.page, ['Share', 'Share'], 'caption');
|
|
260
260
|
shareClicked = true;
|
|
261
261
|
let url = '';
|
|
262
262
|
try {
|
|
@@ -357,7 +357,7 @@ async function dismissResidualDialogs(page) {
|
|
|
357
357
|
}
|
|
358
358
|
const closeByText = Array.from(dialog.querySelectorAll('button, div[role="button"]')).find((el) => {
|
|
359
359
|
const buttonText = (el.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();
|
|
360
|
-
return isVisible(el) && (buttonText === 'close' || buttonText === 'cancel' || buttonText === '
|
|
360
|
+
return isVisible(el) && (buttonText === 'close' || buttonText === 'cancel' || buttonText === 'Cancel');
|
|
361
361
|
});
|
|
362
362
|
if (closeByText instanceof HTMLElement) {
|
|
363
363
|
closeByText.click();
|
|
@@ -408,7 +408,7 @@ async function findUploadSelectors(page, mediaItems) {
|
|
|
408
408
|
|
|
409
409
|
const dialogInputs = candidates.filter((el) => {
|
|
410
410
|
const dialog = el.closest('[role="dialog"]');
|
|
411
|
-
return hasButtonText(dialog, ['Select from computer', '
|
|
411
|
+
return hasButtonText(dialog, ['Select from computer', 'Select from computer']);
|
|
412
412
|
});
|
|
413
413
|
|
|
414
414
|
const visibleDialogInputs = dialogInputs.filter((el) => {
|
|
@@ -417,7 +417,7 @@ async function findUploadSelectors(page, mediaItems) {
|
|
|
417
417
|
});
|
|
418
418
|
|
|
419
419
|
const pickerInputs = candidates.filter((el) => {
|
|
420
|
-
return hasButtonText(el.parentElement, ['Select from computer', '
|
|
420
|
+
return hasButtonText(el.parentElement, ['Select from computer', 'Select from computer']);
|
|
421
421
|
});
|
|
422
422
|
|
|
423
423
|
const primary = visibleDialogInputs.length
|
|
@@ -593,12 +593,12 @@ export function buildInspectUploadStageJs() {
|
|
|
593
593
|
);
|
|
594
594
|
};
|
|
595
595
|
const hasCaption = dialogs.some((dialog) => !!dialog.querySelector('textarea, [contenteditable="true"]'));
|
|
596
|
-
const hasPicker = hasVisibleButtonInDialogs(['Select from computer', '
|
|
597
|
-
const hasNext = hasVisibleButtonInDialogs(['Next', '
|
|
596
|
+
const hasPicker = hasVisibleButtonInDialogs(['Select from computer', 'Select from computer']);
|
|
597
|
+
const hasNext = hasVisibleButtonInDialogs(['Next', 'Next']);
|
|
598
598
|
const hasPreviewUi = hasCaption
|
|
599
599
|
|| (!hasPicker && hasNext)
|
|
600
|
-
|| /crop|select crop|select zoom|open media gallery|filters|adjustments
|
|
601
|
-
const failed = /something went wrong|please try again|couldn['
|
|
600
|
+
|| /crop|select crop|select zoom|open media gallery|filters|adjustments|crop|zoom|filters|adjustments/.test(combined);
|
|
601
|
+
const failed = /something went wrong|please try again|couldn['']t upload|could not upload|upload failed|try again|error|failed/.test(combined);
|
|
602
602
|
if (hasPreviewUi) return { state: 'preview', detail: dialogText || '' };
|
|
603
603
|
if (failed) return { state: 'failed', detail: dialogText || 'Something went wrong' };
|
|
604
604
|
return { state: 'pending', detail: dialogText || '' };
|
|
@@ -722,7 +722,7 @@ async function dismissUploadErrorDialog(page) {
|
|
|
722
722
|
const dialogs = Array.from(document.querySelectorAll('[role="dialog"]')).filter((el) => isVisible(el));
|
|
723
723
|
for (const dialog of dialogs) {
|
|
724
724
|
const text = (dialog.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();
|
|
725
|
-
if (!text.includes('something went wrong') && !text.includes('try again') && !text.includes('
|
|
725
|
+
if (!text.includes('something went wrong') && !text.includes('try again') && !text.includes('failed') && !text.includes('error')) continue;
|
|
726
726
|
const close = dialog.querySelector('[aria-label="Close"], button[aria-label="Close"], div[role="button"][aria-label="Close"]');
|
|
727
727
|
if (close instanceof HTMLElement && isVisible(close)) {
|
|
728
728
|
close.click();
|
|
@@ -749,7 +749,7 @@ async function clickVisibleUploadRetry(page) {
|
|
|
749
749
|
const dialogs = Array.from(document.querySelectorAll('[role="dialog"]')).filter((el) => isVisible(el));
|
|
750
750
|
for (const dialog of dialogs) {
|
|
751
751
|
const text = (dialog.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();
|
|
752
|
-
if (!text.includes('something went wrong') && !text.includes('try again') && !text.includes('
|
|
752
|
+
if (!text.includes('something went wrong') && !text.includes('try again') && !text.includes('failed') && !text.includes('error')) continue;
|
|
753
753
|
const retry = Array.from(dialog.querySelectorAll('button, div[role="button"]')).find((el) => {
|
|
754
754
|
const label = ((el.textContent || '') + ' ' + (el.getAttribute?.('aria-label') || ''))
|
|
755
755
|
.replace(/\\s+/g, ' ')
|
|
@@ -758,8 +758,8 @@ async function clickVisibleUploadRetry(page) {
|
|
|
758
758
|
return isVisible(el) && (
|
|
759
759
|
label === 'try again'
|
|
760
760
|
|| label === 'retry'
|
|
761
|
-
|| label === '
|
|
762
|
-
|| label === '
|
|
761
|
+
|| label === 'Try again'
|
|
762
|
+
|| label === 'Retry'
|
|
763
763
|
);
|
|
764
764
|
});
|
|
765
765
|
if (retry instanceof HTMLElement) {
|
|
@@ -890,8 +890,8 @@ async function clickVisibleShareRetry(page) {
|
|
|
890
890
|
return isVisible(el) && (
|
|
891
891
|
label === 'try again'
|
|
892
892
|
|| label === 'retry'
|
|
893
|
-
|| label === '
|
|
894
|
-
|| label === '
|
|
893
|
+
|| label === 'Try again'
|
|
894
|
+
|| label === 'Retry'
|
|
895
895
|
);
|
|
896
896
|
});
|
|
897
897
|
|
|
@@ -939,7 +939,7 @@ async function advanceToCaptionEditor(page) {
|
|
|
939
939
|
return;
|
|
940
940
|
}
|
|
941
941
|
try {
|
|
942
|
-
await clickAction(page, ['Next', '
|
|
942
|
+
await clickAction(page, ['Next', 'Next'], 'media');
|
|
943
943
|
}
|
|
944
944
|
catch (error) {
|
|
945
945
|
if (error instanceof CommandExecutionError) {
|
|
@@ -234,7 +234,7 @@ describe('instagram click action detection', () => {
|
|
|
234
234
|
getComputedStyle: () => ({ display: 'block', visibility: 'visible' }),
|
|
235
235
|
};
|
|
236
236
|
try {
|
|
237
|
-
expect(eval(buildClickActionJs(['Next', '
|
|
237
|
+
expect(eval(buildClickActionJs(['Next', 'Next'], 'media'))).toEqual({
|
|
238
238
|
ok: true,
|
|
239
239
|
label: 'Next',
|
|
240
240
|
});
|
|
@@ -286,7 +286,7 @@ describe('instagram click action detection', () => {
|
|
|
286
286
|
getComputedStyle: () => ({ display: 'block', visibility: 'visible' }),
|
|
287
287
|
};
|
|
288
288
|
try {
|
|
289
|
-
expect(eval(buildClickActionJs(['Next', '
|
|
289
|
+
expect(eval(buildClickActionJs(['Next', 'Next'], 'media'))).toEqual({ ok: false });
|
|
290
290
|
expect(bodyNext.clicked).toBe(false);
|
|
291
291
|
}
|
|
292
292
|
finally {
|
package/clis/instagram/reel.js
CHANGED
|
@@ -260,7 +260,7 @@ function buildInspectReelStageJs() {
|
|
|
260
260
|
return isVisible(el) && labels.includes(value);
|
|
261
261
|
})
|
|
262
262
|
);
|
|
263
|
-
if (/something went wrong|please try again|share failed|couldn['
|
|
263
|
+
if (/something went wrong|please try again|share failed|couldn['']t be shared|could not be shared|failed|error/.test(lower)) {
|
|
264
264
|
return { state: 'failed', detail: text };
|
|
265
265
|
}
|
|
266
266
|
if (/new reel|write a caption|add location|tag people/.test(lower) && hasVisibleButton(['share'])) {
|
|
@@ -597,9 +597,9 @@ function buildReelPublishStatusProbeJs() {
|
|
|
597
597
|
const lower = dialogText.toLowerCase();
|
|
598
598
|
const url = window.location.href;
|
|
599
599
|
const sharingVisible = /sharing/.test(lower);
|
|
600
|
-
const shared = /your reel has been shared|reel shared
|
|
600
|
+
const shared = /your reel has been shared|reel shared|Shared|Posted/.test(lower) || /\\/reel\\//.test(url);
|
|
601
601
|
const failed = !shared && !sharingVisible && (
|
|
602
|
-
/couldn['
|
|
602
|
+
/couldn['']t be shared|could not be shared|share failed|Unable to share|Share failed/.test(lower)
|
|
603
603
|
|| (/something went wrong/.test(lower) && /try again/.test(lower))
|
|
604
604
|
);
|
|
605
605
|
const composerOpen = dialogs.some((dialog) =>
|
|
@@ -782,15 +782,15 @@ cli({
|
|
|
782
782
|
: new CommandExecutionError('Instagram reel preview did not appear after upload');
|
|
783
783
|
}
|
|
784
784
|
await clickActionMaybe(activePage, ['OK'], 'any');
|
|
785
|
-
await clickAction(activePage, ['Next', '
|
|
785
|
+
await clickAction(activePage, ['Next', 'Next'], 'media');
|
|
786
786
|
await waitForReelStage(activePage, 'edit', 20);
|
|
787
|
-
await clickAction(activePage, ['Next', '
|
|
787
|
+
await clickAction(activePage, ['Next', 'Next'], 'media');
|
|
788
788
|
await waitForReelStage(activePage, 'composer', 20);
|
|
789
789
|
if (content) {
|
|
790
790
|
await fillCaption(activePage, content);
|
|
791
791
|
await ensureCaptionFilled(activePage, content);
|
|
792
792
|
}
|
|
793
|
-
await clickAction(activePage, ['Share', '
|
|
793
|
+
await clickAction(activePage, ['Share', 'Share'], 'caption');
|
|
794
794
|
const sharedUrl = await waitForPublishSuccess(activePage);
|
|
795
795
|
const url = sharedUrl || await resolveLatestReelUrl(activePage, existingMediaPaths);
|
|
796
796
|
return buildInstagramReelSuccessResult(url);
|
package/clis/linkedin/connect.js
CHANGED
|
@@ -9,7 +9,7 @@ function normalizeWhitespace(value) {
|
|
|
9
9
|
|
|
10
10
|
function normalizeName(value) {
|
|
11
11
|
return normalizeWhitespace(value)
|
|
12
|
-
.replace(/\s*[
|
|
12
|
+
.replace(/\s*[•\u00b7]\s*(?:1st|2nd|3rd\+?|degree connection).*$/i, '')
|
|
13
13
|
.replace(/\s+LinkedIn.*$/i, '')
|
|
14
14
|
.replace(/\b(p\.?eng\.?|cpa|mba|ph\.?d\.?)\b/ig, '')
|
|
15
15
|
.replace(/[^\p{L}\p{N}\s.'-]+/gu, ' ')
|
|
@@ -131,7 +131,7 @@ function buildProfileProbeScript(expectedName = '') {
|
|
|
131
131
|
const clean = (s) => String(s || '').replace(/[\u00a0\u202f]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
132
132
|
const expectedName = ${JSON.stringify(expectedName)};
|
|
133
133
|
const normalizeName = (s) => clean(s)
|
|
134
|
-
.replace(/\s*[
|
|
134
|
+
.replace(/\s*[•\u00b7]\s*(?:1st|2nd|3rd\+?|degree connection).*$/i, '')
|
|
135
135
|
.replace(/\s+LinkedIn.*$/i, '')
|
|
136
136
|
.replace(/\b(p\.?eng\.?|cpa|mba|ph\.?d\.?)\b/ig, '')
|
|
137
137
|
.replace(/[^\p{L}\p{N}\s.'-]+/gu, ' ')
|
|
@@ -223,7 +223,7 @@ function buildSentInvitationsProbeScript(expectedName, expectedProfileUrl) {
|
|
|
223
223
|
const expectedUrl = ${JSON.stringify(canonicalizeLinkedInProfileUrl(expectedProfileUrl))};
|
|
224
224
|
const clean = (s) => String(s || '').replace(/[\u00a0\u202f]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
225
225
|
const normName = (s) => clean(s)
|
|
226
|
-
.replace(/\s*[
|
|
226
|
+
.replace(/\s*[•\u00b7]\s*(?:1st|2nd|3rd\+?|degree connection).*$/i, '')
|
|
227
227
|
.replace(/\s+LinkedIn.*$/i, '')
|
|
228
228
|
.replace(/\b(p\.?eng\.?|cpa|mba|ph\.?d\.?)\b/ig, '')
|
|
229
229
|
.replace(/[^\p{L}\p{N}\s.'-]+/gu, ' ')
|
|
@@ -43,7 +43,7 @@ function looksLinkedInAuthWall(value) {
|
|
|
43
43
|
if (!text) return false;
|
|
44
44
|
return /linkedin\.com\/(?:login|checkpoint|authwall|uas)/i.test(text)
|
|
45
45
|
|| /\b(sign in|log in|join linkedin|captcha|verification required)\b/i.test(text)
|
|
46
|
-
|| /(
|
|
46
|
+
|| /(Please log in|Log in to LinkedIn|security verification)/.test(text);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
function normalizeProfileUrl(value) {
|
|
@@ -106,8 +106,8 @@ function extractionScript() {
|
|
|
106
106
|
const skip = (l) => !l
|
|
107
107
|
|| /^Status is/.test(l)
|
|
108
108
|
|| /^(Message|Connect|Follow|View profile|Pending|Remove)$/i.test(l)
|
|
109
|
-
|| /^[
|
|
110
|
-
|| /^[
|
|
109
|
+
|| /^[•\u00b7]\s*(?:1st|2nd|3rd\+?|degree)/i.test(l)
|
|
110
|
+
|| /^[•\u00b7]/.test(l)
|
|
111
111
|
|| l.includes('mutual connection')
|
|
112
112
|
|| l.includes('shared connection')
|
|
113
113
|
|| /^Summary:/i.test(l)
|
|
@@ -125,7 +125,7 @@ function extractionScript() {
|
|
|
125
125
|
let name = normalize(aria ? aria.textContent : a.textContent);
|
|
126
126
|
name = name.replace(/^Status is (online|offline)\.?\s*/i, '')
|
|
127
127
|
.replace(/'?s profile$/i, '')
|
|
128
|
-
.replace(/\s*[
|
|
128
|
+
.replace(/\s*[•\u00b7].*$/, '').trim();
|
|
129
129
|
if (!name) continue;
|
|
130
130
|
seenHandles.add(profileHandle);
|
|
131
131
|
personEntries.push({ profileHandle, displayName: name });
|
|
@@ -50,7 +50,7 @@ function isDateLine(line) {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
function splitLinkedInDotLine(line) {
|
|
53
|
-
return normalizeWhitespace(line).split(/\s*[
|
|
53
|
+
return normalizeWhitespace(line).split(/\s*[\u00b7•]\s*/).map(normalizeWhitespace).filter(Boolean);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
function parseDateRangeParts(dateLine) {
|
|
@@ -65,7 +65,7 @@ function parseCompanyLine(companyLine) {
|
|
|
65
65
|
const parts = splitLinkedInDotLine(companyLine);
|
|
66
66
|
return {
|
|
67
67
|
company: parts[0] || normalizeWhitespace(companyLine),
|
|
68
|
-
employment_type: parts.slice(1).join('
|
|
68
|
+
employment_type: parts.slice(1).join(' \u00b7 '),
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -73,7 +73,7 @@ function parseLocationLine(locationLine) {
|
|
|
73
73
|
const parts = splitLinkedInDotLine(locationLine);
|
|
74
74
|
return {
|
|
75
75
|
location: parts[0] || normalizeWhitespace(locationLine),
|
|
76
|
-
location_type: parts.slice(1).join('
|
|
76
|
+
location_type: parts.slice(1).join(' \u00b7 '),
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -155,7 +155,7 @@ function buildExperienceExtractionScript() {
|
|
|
155
155
|
const isDateLine = (line) => DATE_RANGE_RE.test(line) || YEAR_RANGE_RE.test(line);
|
|
156
156
|
const isChromeLine = (line) => /^(show all|show less|edit|delete|add experience|back to profile|experience|show credential|show media|see more|see less|←|\+)$/i.test(line);
|
|
157
157
|
const splitLines = (text) => String(text || '').split(/\n+/).map(clean).filter(Boolean);
|
|
158
|
-
const splitDotLine = (line) => clean(line).split(/\s*[
|
|
158
|
+
const splitDotLine = (line) => clean(line).split(/\s*[\u00b7•]\s*/).map(clean).filter(Boolean);
|
|
159
159
|
const looksLocationLine = (line) => /remote|hybrid|on-site|india|area|bengaluru|jaipur|delhi|mumbai|pune|gurugram|noida|hyderabad|chennai|kolkata/i.test(line || '');
|
|
160
160
|
const decodeLinkedInSafetyUrl = (value) => {
|
|
161
161
|
if (!value) return '';
|
|
@@ -195,7 +195,7 @@ function buildExperienceExtractionScript() {
|
|
|
195
195
|
const groupEmploymentParts = splitDotLine(context.employment_type || '');
|
|
196
196
|
const company = (dateIndex > 1 ? companyParts[0] : '') || context.company || ariaMatch?.[2] || companyParts[0] || companyLine;
|
|
197
197
|
const parsedEmploymentType = dateIndex > 1
|
|
198
|
-
? companyParts.slice(1).join('
|
|
198
|
+
? companyParts.slice(1).join(' \u00b7 ')
|
|
199
199
|
: (groupEmploymentParts[0] || context.employment_type || '');
|
|
200
200
|
const dateParts = dateIndex >= 0 ? parseDateParts(lines[dateIndex]) : { dateRange: '', startDate: '', endDate: '' };
|
|
201
201
|
const lineAfterDate = dateIndex >= 0 ? lines[dateIndex + 1] : '';
|
|
@@ -253,7 +253,7 @@ function buildExperienceExtractionScript() {
|
|
|
253
253
|
start_date: dateParts.startDate,
|
|
254
254
|
end_date: dateParts.endDate,
|
|
255
255
|
location: locationParts[0] || locationLine,
|
|
256
|
-
location_type: locationParts.slice(1).join('
|
|
256
|
+
location_type: locationParts.slice(1).join(' \u00b7 '),
|
|
257
257
|
description,
|
|
258
258
|
skills: skillLine.replace(/^skills?:\s*/i, ''),
|
|
259
259
|
media: Array.from(new Set(media)).join(' | '),
|
|
@@ -58,16 +58,16 @@ describe('linkedin profile-experience adapter', () => {
|
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
it('parses company, date, and location line variants', () => {
|
|
61
|
-
expect(parseCompanyLine('Self Employed
|
|
61
|
+
expect(parseCompanyLine('Self Employed \u00b7 Freelance')).toEqual({
|
|
62
62
|
company: 'Self Employed',
|
|
63
63
|
employment_type: 'Freelance',
|
|
64
64
|
});
|
|
65
|
-
expect(parseDateRangeParts('Feb 2026 – Present
|
|
65
|
+
expect(parseDateRangeParts('Feb 2026 – Present \u00b7 4 mos')).toEqual({
|
|
66
66
|
dateRange: 'Feb 2026 – Present',
|
|
67
67
|
startDate: 'Feb 2026',
|
|
68
68
|
endDate: 'Present',
|
|
69
69
|
});
|
|
70
|
-
expect(parseLocationLine('Jaipur, Rajasthan, India
|
|
70
|
+
expect(parseLocationLine('Jaipur, Rajasthan, India \u00b7 Remote')).toEqual({
|
|
71
71
|
location: 'Jaipur, Rajasthan, India',
|
|
72
72
|
location_type: 'Remote',
|
|
73
73
|
});
|
|
@@ -75,9 +75,9 @@ describe('linkedin profile-experience adapter', () => {
|
|
|
75
75
|
|
|
76
76
|
it('parses visible experience text into fields', () => {
|
|
77
77
|
expect(parseExperienceText(`Senior Full-Stack AI Engineer
|
|
78
|
-
Self Employed
|
|
79
|
-
Feb 2026 – Present
|
|
80
|
-
Jaipur, Rajasthan, India
|
|
78
|
+
Self Employed \u00b7 Freelance
|
|
79
|
+
Feb 2026 – Present \u00b7 4 mos
|
|
80
|
+
Jaipur, Rajasthan, India \u00b7 Remote
|
|
81
81
|
Building AI-enabled SaaS products and agentic workflows.
|
|
82
82
|
Skills: Generative AI, Next.js, TypeScript`, 'https://www.linkedin.com/in/me/', 0, 1)).toMatchObject({
|
|
83
83
|
rank: 1,
|
|
@@ -100,15 +100,15 @@ Skills: Generative AI, Next.js, TypeScript`, 'https://www.linkedin.com/in/me/',
|
|
|
100
100
|
|
|
101
101
|
Senior Software Engineer
|
|
102
102
|
Zetwerk Manufacturing
|
|
103
|
-
Apr 2022 – Present
|
|
104
|
-
Bengaluru, Karnataka, India
|
|
103
|
+
Apr 2022 – Present \u00b7 4 yrs 2 mos
|
|
104
|
+
Bengaluru, Karnataka, India \u00b7 Hybrid
|
|
105
105
|
Led development and mentored team members.
|
|
106
106
|
Skills: Angular, Node.js
|
|
107
107
|
|
|
108
108
|
Software Engineer
|
|
109
109
|
OnGraph Technologies Pvt. Ltd.
|
|
110
|
-
Jun 2019 – Apr 2022
|
|
111
|
-
Jaipur, Rajasthan, India
|
|
110
|
+
Jun 2019 – Apr 2022 \u00b7 2 yrs 11 mos
|
|
111
|
+
Jaipur, Rajasthan, India \u00b7 On-site
|
|
112
112
|
Full-stack development for client projects.
|
|
113
113
|
Skills: React, MongoDB
|
|
114
114
|
|
|
@@ -44,7 +44,7 @@ function buildProfileExtractionScript() {
|
|
|
44
44
|
|| line === name
|
|
45
45
|
|| /^(1st|2nd|3rd|contact info|message|more|follow|connect|open to|add section|enhance profile|resources|self employed)$/i.test(line)
|
|
46
46
|
|| /^\d[\d,]*\s+(followers|connections)/i.test(line)
|
|
47
|
-
|| line === '
|
|
47
|
+
|| line === '\u00b7';
|
|
48
48
|
const headline = compact(lines.find((line) => !skipIntro(line) && line.length > 20) || '');
|
|
49
49
|
const locationText = lines.find((line) => /(area|india|jaipur|bangalore|bengaluru|delhi|mumbai|hyderabad|pune)/i.test(line) && line.length < 120) || '';
|
|
50
50
|
const about = readSection(/^About$/i);
|
|
@@ -15,7 +15,7 @@ function unwrapEvaluateResult(payload) {
|
|
|
15
15
|
|
|
16
16
|
function normalizeName(value) {
|
|
17
17
|
return normalizeWhitespace(value)
|
|
18
|
-
.replace(/\s*[
|
|
18
|
+
.replace(/\s*[•\u00b7]\s*(?:1st|2nd|3rd\+?|degree connection).*$/i, '')
|
|
19
19
|
.replace(/\s+LinkedIn.*$/i, '')
|
|
20
20
|
.toLowerCase();
|
|
21
21
|
}
|
package/clis/linkedin/search.js
CHANGED
|
@@ -144,7 +144,7 @@ function looksLinkedInAuthWallText(value) {
|
|
|
144
144
|
return /\b(sign in|log in|join linkedin)\b/.test(text) ||
|
|
145
145
|
/linkedin\.com\/(login|checkpoint|authwall)/i.test(text) ||
|
|
146
146
|
/\b(captcha|verification required)\b/.test(text) ||
|
|
147
|
-
/(
|
|
147
|
+
/(Please log in|Log in to LinkedIn|security verification)/.test(text);
|
|
148
148
|
}
|
|
149
149
|
function buildLinkedInAuthProbeScript() {
|
|
150
150
|
return `(() => {
|
package/clis/linkedin/shared.js
CHANGED
|
@@ -46,7 +46,7 @@ export function looksLinkedInAuthWall(value) {
|
|
|
46
46
|
if (!text) return false;
|
|
47
47
|
return /linkedin\.com\/(?:login|checkpoint|authwall|uas)/i.test(text)
|
|
48
48
|
|| /\b(sign in|log in|join linkedin|captcha|verification required)\b/i.test(text)
|
|
49
|
-
|| /(
|
|
49
|
+
|| /(Please log in|Log in to LinkedIn|security verification)/.test(text);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
export function assertSafeLinkedinUrl(value, label, fallbackPath = '/') {
|
|
@@ -108,7 +108,7 @@ export function buildAuthProbeScript() {
|
|
|
108
108
|
].join('\n');
|
|
109
109
|
return /linkedin\.com\/(?:login|checkpoint|authwall|uas)/i.test(text)
|
|
110
110
|
|| /\b(sign in|log in|join linkedin|captcha|verification required)\b/i.test(text)
|
|
111
|
-
|| /(
|
|
111
|
+
|| /(Please log in|Log in to LinkedIn|security verification)/.test(text);
|
|
112
112
|
})()`;
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -54,7 +54,7 @@ function mergeTimelinePosts(existing, batch) {
|
|
|
54
54
|
return merged;
|
|
55
55
|
}
|
|
56
56
|
function normalizeTimestamp(value) {
|
|
57
|
-
const text = normalizeWhitespace(value).replace(/[
|
|
57
|
+
const text = normalizeWhitespace(value).replace(/[•\u00b7.]$/g, '').trim();
|
|
58
58
|
const match = text.match(/\b(\d+\s*(?:s|m|h|d|w|mo|yr|min))\b/i);
|
|
59
59
|
return match ? match[1].replace(/\s+/g, '') : text;
|
|
60
60
|
}
|
|
@@ -215,8 +215,8 @@ async function extractVisiblePosts(page) {
|
|
|
215
215
|
} else {
|
|
216
216
|
rest = text;
|
|
217
217
|
}
|
|
218
|
-
rest = normalize(rest.replace(/^[
|
|
219
|
-
match = rest.match(/(\\d+\\s*(?:s|m|h|d|w|mo|yr|min))\\s*[
|
|
218
|
+
rest = normalize(rest.replace(/^[•\u00b7]\\s*(1st|2nd|3rd\\+?|3rd|degree connection)/i, ''));
|
|
219
|
+
match = rest.match(/(\\d+\\s*(?:s|m|h|d|w|mo|yr|min))\\s*[•\u00b7]?$/i);
|
|
220
220
|
if (match) {
|
|
221
221
|
postedAt = cleanTimestamp(match[1]);
|
|
222
222
|
headline = normalize(rest.slice(0, rest.length - match[0].length));
|
|
@@ -244,13 +244,13 @@ async function extractVisiblePosts(page) {
|
|
|
244
244
|
var postedAt = '';
|
|
245
245
|
var match;
|
|
246
246
|
if (actorText) {
|
|
247
|
-
match = actorText.match(/^(.+?)\\s+[
|
|
247
|
+
match = actorText.match(/^(.+?)\\s+[•\u00b7]\\s+(1st|2nd|3rd\\+?|3rd|degree connection)(.*)$/i);
|
|
248
248
|
if (match) {
|
|
249
249
|
author = normalize(match[1]);
|
|
250
250
|
actorText = normalize(match[3]);
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
match = actorText.match(/(.+?)\\s+(\\d+\\s*(?:s|m|h|d|w|mo|yr|min))\\s*[
|
|
253
|
+
match = actorText.match(/(.+?)\\s+(\\d+\\s*(?:s|m|h|d|w|mo|yr|min))\\s*[•\u00b7]?$/i);
|
|
254
254
|
if (match) {
|
|
255
255
|
headline = normalize(match[1]);
|
|
256
256
|
postedAt = cleanTimestamp(match[2]);
|
package/clis/manus/manus.test.js
CHANGED
|
@@ -37,7 +37,7 @@ const SESSIONS = {
|
|
|
37
37
|
userId: '310519663277886366',
|
|
38
38
|
title: 'PPT task',
|
|
39
39
|
status: 'SESSION_STATUS_STOPPED',
|
|
40
|
-
lastDisplayMessage: '
|
|
40
|
+
lastDisplayMessage: 'localized text localized text',
|
|
41
41
|
lastMessageTime: '2026-05-04T06:39:47.774Z',
|
|
42
42
|
createdAt: '2026-04-30T07:54:17.891Z',
|
|
43
43
|
updatedAt: '2026-05-26T06:23:41Z',
|
|
@@ -75,7 +75,7 @@ const SKILLS = {
|
|
|
75
75
|
],
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
// ── makePage helper
|
|
78
|
+
// ── makePage helper with queued evaluate results ──────────────────────────
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
81
|
* Create a mock page with a queue of page.evaluate results.
|
package/clis/medium/feed.js
CHANGED
|
@@ -4,12 +4,12 @@ cli({
|
|
|
4
4
|
site: 'medium',
|
|
5
5
|
name: 'feed',
|
|
6
6
|
access: 'read',
|
|
7
|
-
description: 'Medium
|
|
7
|
+
description: 'Medium popular posts Feed',
|
|
8
8
|
domain: 'medium.com',
|
|
9
9
|
strategy: Strategy.COOKIE,
|
|
10
10
|
args: [
|
|
11
|
-
{ name: 'topic', default: '', help: '
|
|
12
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
11
|
+
{ name: 'topic', default: '', help: 'Topic (for example technology, programming, ai)' },
|
|
12
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of posts to return' },
|
|
13
13
|
],
|
|
14
14
|
columns: ['rank', 'title', 'author', 'date', 'readTime', 'claps'],
|
|
15
15
|
func: async (page, args) => loadMediumPosts(page, buildMediumTagUrl(args.topic), Number(args.limit) || 20),
|
package/clis/medium/search.js
CHANGED
|
@@ -4,12 +4,12 @@ cli({
|
|
|
4
4
|
site: 'medium',
|
|
5
5
|
name: 'search',
|
|
6
6
|
access: 'read',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'Search Medium posts',
|
|
8
8
|
domain: 'medium.com',
|
|
9
9
|
strategy: Strategy.COOKIE,
|
|
10
10
|
args: [
|
|
11
|
-
{ name: 'keyword', required: true, positional: true, help: '
|
|
12
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
11
|
+
{ name: 'keyword', required: true, positional: true, help: 'Search keyword' },
|
|
12
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of posts to return' },
|
|
13
13
|
],
|
|
14
14
|
columns: ['rank', 'title', 'author', 'date', 'readTime', 'claps', 'url'],
|
|
15
15
|
func: async (page, args) => loadMediumPosts(page, buildMediumSearchUrl(args.keyword), Number(args.limit) || 20),
|
package/clis/medium/user.js
CHANGED
|
@@ -4,12 +4,12 @@ cli({
|
|
|
4
4
|
site: 'medium',
|
|
5
5
|
name: 'user',
|
|
6
6
|
access: 'read',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'Get Medium user posts',
|
|
8
8
|
domain: 'medium.com',
|
|
9
9
|
strategy: Strategy.COOKIE,
|
|
10
10
|
args: [
|
|
11
|
-
{ name: 'username', required: true, positional: true, help: 'Medium
|
|
12
|
-
{ name: 'limit', type: 'int', default: 20, help: '
|
|
11
|
+
{ name: 'username', required: true, positional: true, help: 'Medium username(for example @username or username)' },
|
|
12
|
+
{ name: 'limit', type: 'int', default: 20, help: 'Number of posts to return' },
|
|
13
13
|
],
|
|
14
14
|
columns: ['rank', 'title', 'date', 'readTime', 'claps', 'url'],
|
|
15
15
|
func: async (page, args) => loadMediumPosts(page, buildMediumUserUrl(args.username), Number(args.limit) || 20),
|
package/clis/notebooklm/auth.js
CHANGED
|
@@ -18,13 +18,13 @@ async function verifyNotebookLmIdentity(page) {
|
|
|
18
18
|
if (/accounts\\.google\\.com\\/ServiceLogin/.test(location.href) || /accounts\\.google\\.com\\/signin/i.test(location.href)) {
|
|
19
19
|
return { kind: 'auth', detail: 'NotebookLM redirected to Google sign-in' };
|
|
20
20
|
}
|
|
21
|
-
const acctEl = document.querySelector('a[aria-label^="Google Account:"], a[aria-label*="Google
|
|
21
|
+
const acctEl = document.querySelector('a[aria-label^="Google Account:"], a[aria-label*="Google localized text:"]');
|
|
22
22
|
if (!acctEl) {
|
|
23
23
|
return { kind: 'auth', detail: 'NotebookLM missing Google Account button' };
|
|
24
24
|
}
|
|
25
25
|
const label = acctEl.getAttribute('aria-label') || '';
|
|
26
26
|
const nameMatch = label.match(/Google Account:\\s*([^\\n\\(]+?)(?:\\s*\\n|\\s*\\()/i) ||
|
|
27
|
-
label.match(/Google
|
|
27
|
+
label.match(/Google localized text:\\s*([^\\n\\(]+?)(?:\\s*\\n|\\s*\\()/i);
|
|
28
28
|
const name = nameMatch ? nameMatch[1].trim() : '';
|
|
29
29
|
const authuserMatch = location.href.match(/[?&]authuser=(\\d+)/);
|
|
30
30
|
const authuser = authuserMatch ? Number(authuserMatch[1]) : 0;
|
|
@@ -36,8 +36,8 @@ describe('notebooklm note-list', () => {
|
|
|
36
36
|
mockListNotebooklmNotesFromPage.mockResolvedValue([
|
|
37
37
|
{
|
|
38
38
|
notebook_id: 'nb-demo',
|
|
39
|
-
title: '
|
|
40
|
-
created_at: '6
|
|
39
|
+
title: 'New note',
|
|
40
|
+
created_at: '6 minutes ago',
|
|
41
41
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
42
42
|
source: 'studio-list',
|
|
43
43
|
},
|
|
@@ -46,8 +46,8 @@ describe('notebooklm note-list', () => {
|
|
|
46
46
|
expect(result).toEqual([
|
|
47
47
|
{
|
|
48
48
|
notebook_id: 'nb-demo',
|
|
49
|
-
title: '
|
|
50
|
-
created_at: '6
|
|
49
|
+
title: 'New note',
|
|
50
|
+
created_at: '6 minutes ago',
|
|
51
51
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
52
52
|
source: 'studio-list',
|
|
53
53
|
},
|
|
@@ -38,17 +38,17 @@ describe('notebooklm notes-get', () => {
|
|
|
38
38
|
it('returns the currently visible note editor content when the title matches', async () => {
|
|
39
39
|
mockReadNotebooklmVisibleNoteFromPage.mockResolvedValue({
|
|
40
40
|
notebook_id: 'nb-demo',
|
|
41
|
-
title: '
|
|
42
|
-
content: '
|
|
41
|
+
title: 'New note',
|
|
42
|
+
content: 'First paragraph\\nSecond paragraph',
|
|
43
43
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
44
44
|
source: 'studio-editor',
|
|
45
45
|
});
|
|
46
|
-
const result = await command.func({}, { note: '
|
|
46
|
+
const result = await command.func({}, { note: 'New note' });
|
|
47
47
|
expect(result).toEqual([
|
|
48
48
|
{
|
|
49
49
|
notebook_id: 'nb-demo',
|
|
50
|
-
title: '
|
|
51
|
-
content: '
|
|
50
|
+
title: 'New note',
|
|
51
|
+
content: 'First paragraph\\nSecond paragraph',
|
|
52
52
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
53
53
|
source: 'studio-editor',
|
|
54
54
|
},
|
|
@@ -59,13 +59,13 @@ describe('notebooklm notes-get', () => {
|
|
|
59
59
|
mockListNotebooklmNotesFromPage.mockResolvedValue([
|
|
60
60
|
{
|
|
61
61
|
notebook_id: 'nb-demo',
|
|
62
|
-
title: '
|
|
63
|
-
created_at: '6
|
|
62
|
+
title: 'New note',
|
|
63
|
+
created_at: '6 minutes ago',
|
|
64
64
|
url: 'https://notebooklm.google.com/notebook/nb-demo',
|
|
65
65
|
source: 'studio-list',
|
|
66
66
|
},
|
|
67
67
|
]);
|
|
68
|
-
await expect(command.func({}, { note: '
|
|
68
|
+
await expect(command.func({}, { note: 'New note' })).rejects.toMatchObject({
|
|
69
69
|
hint: expect.stringMatching(/currently reads note content only from the visible note editor/i),
|
|
70
70
|
});
|
|
71
71
|
});
|