@jackwener/opencli 1.1.1 → 1.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/.github/workflows/build-extension.yml +3 -3
- package/.github/workflows/ci.yml +6 -6
- package/.github/workflows/doc-check.yml +3 -3
- package/.github/workflows/e2e-headed.yml +2 -2
- package/.github/workflows/pkg-pr-new.yml +2 -2
- package/.github/workflows/release.yml +3 -3
- package/.github/workflows/security.yml +2 -2
- package/CONTRIBUTING.md +39 -1
- package/README.md +13 -10
- package/README.zh-CN.md +43 -17
- package/SKILL.md +10 -5
- package/dist/browser/cdp.d.ts +4 -4
- package/dist/browser/cdp.js +39 -16
- package/dist/browser/daemon-client.d.ts +4 -2
- package/dist/browser/daemon-client.js +17 -4
- package/dist/browser/dom-helpers.js +38 -7
- package/dist/browser/dom-snapshot.d.ts +86 -0
- package/dist/browser/dom-snapshot.js +729 -0
- package/dist/browser/dom-snapshot.test.d.ts +11 -0
- package/dist/browser/dom-snapshot.test.js +212 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.js +1 -0
- package/dist/browser/mcp.js +3 -1
- package/dist/browser/page.d.ts +14 -24
- package/dist/browser/page.js +46 -6
- package/dist/build-manifest.d.ts +11 -4
- package/dist/build-manifest.js +59 -21
- package/dist/build-manifest.test.js +58 -2
- package/dist/cli-manifest.json +3856 -1509
- package/dist/cli.js +66 -0
- package/dist/clis/barchart/greeks.js +1 -1
- package/dist/clis/barchart/options.js +1 -1
- package/dist/clis/barchart/quote.js +1 -1
- package/dist/clis/bilibili/download.js +1 -1
- package/dist/clis/bilibili/following.js +1 -1
- package/dist/clis/bilibili/subtitle.js +1 -1
- package/dist/clis/bilibili/user-videos.js +1 -1
- package/dist/clis/boss/batchgreet.js +10 -97
- package/dist/clis/boss/chatlist.js +8 -25
- package/dist/clis/boss/chatmsg.js +11 -42
- package/dist/clis/boss/common.d.ts +92 -0
- package/dist/clis/boss/common.js +223 -0
- package/dist/clis/boss/detail.js +7 -49
- package/dist/clis/boss/exchange.js +13 -79
- package/dist/clis/boss/greet.js +18 -145
- package/dist/clis/boss/invite.js +26 -121
- package/dist/clis/boss/joblist.js +6 -31
- package/dist/clis/boss/mark.js +12 -85
- package/dist/clis/boss/recommend.js +10 -49
- package/dist/clis/boss/resume.js +18 -118
- package/dist/clis/boss/search.js +12 -60
- package/dist/clis/boss/send.js +17 -151
- package/dist/clis/boss/stats.js +18 -69
- package/dist/clis/coupang/add-to-cart.js +1 -1
- package/dist/clis/devto/tag.yaml +34 -0
- package/dist/clis/devto/top.yaml +29 -0
- package/dist/clis/devto/user.yaml +33 -0
- package/dist/clis/douban/book-hot.d.ts +1 -0
- package/dist/clis/douban/book-hot.js +14 -0
- package/dist/clis/douban/marks.d.ts +1 -0
- package/dist/clis/douban/marks.js +115 -0
- package/dist/clis/douban/movie-hot.d.ts +1 -0
- package/dist/clis/douban/movie-hot.js +14 -0
- package/dist/clis/douban/reviews.d.ts +1 -0
- package/dist/clis/douban/reviews.js +106 -0
- package/dist/clis/douban/search.d.ts +1 -0
- package/dist/clis/douban/search.js +16 -0
- package/dist/clis/douban/shared.d.ts +4 -0
- package/dist/clis/douban/shared.js +155 -0
- package/dist/clis/douban/subject.yaml +76 -0
- package/dist/clis/douban/top250.yaml +70 -0
- package/dist/clis/douban/utils.d.ts +35 -0
- package/dist/clis/douban/utils.js +48 -0
- package/dist/clis/facebook/add-friend.yaml +43 -0
- package/dist/clis/facebook/events.yaml +44 -0
- package/dist/clis/facebook/feed.yaml +63 -0
- package/dist/clis/facebook/friends.yaml +42 -0
- package/dist/clis/facebook/groups.yaml +50 -0
- package/dist/clis/facebook/join-group.yaml +44 -0
- package/dist/clis/facebook/memories.yaml +39 -0
- package/dist/clis/facebook/notifications.yaml +40 -0
- package/dist/clis/facebook/profile.yaml +37 -0
- package/dist/clis/facebook/search.yaml +46 -0
- package/dist/clis/google/news.d.ts +5 -0
- package/dist/clis/google/news.js +58 -0
- package/dist/clis/google/search.d.ts +10 -0
- package/dist/clis/google/search.js +127 -0
- package/dist/clis/google/suggest.d.ts +5 -0
- package/dist/clis/google/suggest.js +34 -0
- package/dist/clis/google/trends.d.ts +5 -0
- package/dist/clis/google/trends.js +38 -0
- package/dist/clis/google/utils.d.ts +9 -0
- package/dist/clis/google/utils.js +23 -0
- package/dist/clis/google/utils.test.d.ts +1 -0
- package/dist/clis/google/utils.test.js +75 -0
- package/dist/clis/grok/ask.d.ts +14 -0
- package/dist/clis/grok/ask.js +257 -65
- package/dist/clis/grok/ask.test.d.ts +1 -0
- package/dist/clis/grok/ask.test.js +36 -0
- package/dist/clis/instagram/comment.yaml +52 -0
- package/dist/clis/instagram/explore.yaml +43 -0
- package/dist/clis/instagram/follow.yaml +41 -0
- package/dist/clis/instagram/followers.yaml +51 -0
- package/dist/clis/instagram/following.yaml +51 -0
- package/dist/clis/instagram/like.yaml +46 -0
- package/dist/clis/instagram/profile.yaml +42 -0
- package/dist/clis/instagram/save.yaml +46 -0
- package/dist/clis/instagram/saved.yaml +40 -0
- package/dist/clis/instagram/search.yaml +43 -0
- package/dist/clis/instagram/unfollow.yaml +38 -0
- package/dist/clis/instagram/unlike.yaml +46 -0
- package/dist/clis/instagram/unsave.yaml +46 -0
- package/dist/clis/instagram/user.yaml +54 -0
- package/dist/clis/jike/repost.js +1 -1
- package/dist/clis/jimeng/generate.yaml +1 -0
- package/dist/clis/linux-do/category.yaml +1 -0
- package/dist/clis/lobsters/active.yaml +29 -0
- package/dist/clis/lobsters/hot.yaml +29 -0
- package/dist/clis/lobsters/newest.yaml +29 -0
- package/dist/clis/lobsters/tag.yaml +34 -0
- package/dist/clis/medium/feed.d.ts +1 -0
- package/dist/clis/medium/feed.js +15 -0
- package/dist/clis/medium/search.d.ts +1 -0
- package/dist/clis/medium/search.js +15 -0
- package/dist/clis/medium/shared.d.ts +5 -0
- package/dist/clis/medium/shared.js +78 -0
- package/dist/clis/medium/user.d.ts +1 -0
- package/dist/clis/medium/user.js +15 -0
- package/dist/clis/reddit/comment.js +1 -1
- package/dist/clis/reddit/read.js +1 -1
- package/dist/clis/reddit/save.js +1 -1
- package/dist/clis/reddit/subreddit.yaml +1 -0
- package/dist/clis/reddit/subscribe.js +1 -1
- package/dist/clis/reddit/upvote.js +1 -1
- package/dist/clis/sinablog/article.d.ts +1 -0
- package/dist/clis/sinablog/article.js +14 -0
- package/dist/clis/sinablog/hot.d.ts +1 -0
- package/dist/clis/sinablog/hot.js +14 -0
- package/dist/clis/sinablog/search.d.ts +1 -0
- package/dist/clis/sinablog/search.js +51 -0
- package/dist/clis/sinablog/shared.d.ts +7 -0
- package/dist/clis/sinablog/shared.js +187 -0
- package/dist/clis/sinablog/user.d.ts +1 -0
- package/dist/clis/sinablog/user.js +15 -0
- package/dist/clis/substack/feed.d.ts +1 -0
- package/dist/clis/substack/feed.js +15 -0
- package/dist/clis/substack/publication.d.ts +1 -0
- package/dist/clis/substack/publication.js +15 -0
- package/dist/clis/substack/search.d.ts +1 -0
- package/dist/clis/substack/search.js +77 -0
- package/dist/clis/substack/shared.d.ts +4 -0
- package/dist/clis/substack/shared.js +129 -0
- package/dist/clis/tiktok/comment.yaml +66 -0
- package/dist/clis/tiktok/explore.yaml +39 -0
- package/dist/clis/tiktok/follow.yaml +39 -0
- package/dist/clis/tiktok/following.yaml +46 -0
- package/dist/clis/tiktok/friends.yaml +47 -0
- package/dist/clis/tiktok/like.yaml +38 -0
- package/dist/clis/tiktok/live.yaml +51 -0
- package/dist/clis/tiktok/notifications.yaml +52 -0
- package/dist/clis/tiktok/profile.yaml +45 -0
- package/dist/clis/tiktok/save.yaml +34 -0
- package/dist/clis/tiktok/search.yaml +46 -0
- package/dist/clis/tiktok/unfollow.yaml +44 -0
- package/dist/clis/tiktok/unlike.yaml +38 -0
- package/dist/clis/tiktok/unsave.yaml +36 -0
- package/dist/clis/tiktok/user.yaml +44 -0
- package/dist/clis/twitter/download.d.ts +1 -1
- package/dist/clis/twitter/download.js +3 -3
- package/dist/clis/twitter/followers.js +1 -1
- package/dist/clis/twitter/following.js +1 -1
- package/dist/clis/twitter/thread.js +1 -1
- package/dist/clis/twitter/timeline.d.ts +23 -0
- package/dist/clis/twitter/timeline.js +42 -14
- package/dist/clis/twitter/timeline.test.d.ts +1 -0
- package/dist/clis/twitter/timeline.test.js +102 -0
- package/dist/clis/wikipedia/random.d.ts +1 -0
- package/dist/clis/wikipedia/random.js +19 -0
- package/dist/clis/wikipedia/search.js +3 -3
- package/dist/clis/wikipedia/summary.js +4 -9
- package/dist/clis/wikipedia/trending.d.ts +1 -0
- package/dist/clis/wikipedia/trending.js +35 -0
- package/dist/clis/wikipedia/utils.d.ts +28 -0
- package/dist/clis/wikipedia/utils.js +13 -0
- package/dist/clis/xiaohongshu/creator-note-detail.js +1 -1
- package/dist/clis/xiaohongshu/creator-note-detail.test.js +2 -0
- package/dist/clis/xiaohongshu/creator-notes.test.js +2 -0
- package/dist/clis/xiaohongshu/download.js +1 -1
- package/dist/clis/xueqiu/earnings-date.yaml +69 -0
- package/dist/clis/xueqiu/search.yaml +2 -1
- package/dist/clis/xueqiu/stock.yaml +2 -0
- package/dist/clis/yahoo-finance/quote.js +1 -1
- package/dist/commanderAdapter.js +13 -7
- package/dist/daemon.js +21 -0
- package/dist/discovery.d.ts +8 -0
- package/dist/discovery.js +105 -19
- package/dist/doctor.js +3 -1
- package/dist/doctor.test.js +46 -2
- package/dist/engine.test.d.ts +0 -3
- package/dist/engine.test.js +74 -6
- package/dist/execution.d.ts +4 -2
- package/dist/execution.js +31 -7
- package/dist/explore.d.ts +76 -3
- package/dist/explore.js +11 -4
- package/dist/generate.d.ts +41 -2
- package/dist/generate.js +5 -4
- package/dist/main.js +2 -1
- package/dist/pipeline/executor.d.ts +4 -2
- package/dist/pipeline/executor.js +54 -15
- package/dist/pipeline/executor.test.js +33 -6
- package/dist/pipeline/registry.d.ts +1 -1
- package/dist/pipeline/steps/browser.d.ts +7 -7
- package/dist/pipeline/steps/browser.js +15 -7
- package/dist/pipeline/steps/fetch.d.ts +1 -1
- package/dist/pipeline/steps/fetch.js +11 -7
- package/dist/pipeline/steps/transform.d.ts +6 -5
- package/dist/pipeline/steps/transform.js +30 -9
- package/dist/pipeline/template.d.ts +6 -6
- package/dist/pipeline/template.js +43 -5
- package/dist/pipeline/template.test.js +18 -0
- package/dist/pipeline/transform.test.js +11 -0
- package/dist/plugin.d.ts +31 -0
- package/dist/plugin.js +216 -0
- package/dist/plugin.test.d.ts +4 -0
- package/dist/plugin.test.js +76 -0
- package/dist/registry-api.d.ts +11 -0
- package/dist/registry-api.js +9 -0
- package/dist/registry.d.ts +11 -0
- package/dist/registry.js +6 -1
- package/dist/synthesize.d.ts +94 -4
- package/dist/synthesize.js +5 -4
- package/dist/types.d.ts +39 -26
- package/dist/validate.js +8 -2
- package/docs/.vitepress/config.mts +6 -4
- package/docs/adapters/browser/barchart.md +6 -5
- package/docs/adapters/browser/bilibili.md +9 -0
- package/docs/adapters/browser/devto.md +35 -0
- package/docs/adapters/browser/douban.md +38 -0
- package/docs/adapters/browser/facebook.md +36 -0
- package/docs/adapters/browser/google.md +62 -0
- package/docs/adapters/browser/grok.md +26 -8
- package/docs/adapters/browser/instagram.md +46 -0
- package/docs/adapters/browser/lobsters.md +32 -0
- package/docs/adapters/browser/medium.md +32 -0
- package/docs/adapters/browser/reddit.md +9 -0
- package/docs/adapters/browser/sinablog.md +36 -0
- package/docs/adapters/browser/substack.md +38 -0
- package/docs/adapters/browser/tiktok.md +68 -0
- package/docs/adapters/browser/wikipedia.md +11 -2
- package/docs/adapters/browser/xueqiu.md +10 -0
- package/docs/adapters/browser/yahoo-finance.md +6 -5
- package/docs/adapters/desktop/antigravity.md +6 -0
- package/docs/adapters/desktop/chatgpt.md +2 -1
- package/docs/adapters/desktop/codex.md +5 -1
- package/docs/adapters/desktop/cursor.md +4 -0
- package/docs/adapters/desktop/discord.md +7 -7
- package/docs/adapters/index.md +1 -4
- package/docs/guide/getting-started.md +1 -0
- package/docs/guide/plugins.md +153 -0
- package/docs/zh/guide/plugins.md +107 -0
- package/extension/dist/background.js +91 -23
- package/extension/src/background.ts +82 -29
- package/extension/src/cdp.ts +42 -1
- package/package.json +10 -5
- package/scripts/clean-dist.cjs +13 -0
- package/src/browser/cdp.ts +71 -31
- package/src/browser/daemon-client.ts +21 -5
- package/src/browser/dom-helpers.ts +38 -7
- package/src/browser/dom-snapshot.test.ts +249 -0
- package/src/browser/dom-snapshot.ts +770 -0
- package/src/browser/index.ts +2 -0
- package/src/browser/mcp.ts +3 -1
- package/src/browser/page.ts +57 -21
- package/src/build-manifest.test.ts +70 -2
- package/src/build-manifest.ts +94 -26
- package/src/cli.ts +71 -2
- package/src/clis/barchart/greeks.ts +1 -1
- package/src/clis/barchart/options.ts +1 -1
- package/src/clis/barchart/quote.ts +1 -1
- package/src/clis/bilibili/download.ts +1 -1
- package/src/clis/bilibili/following.ts +1 -1
- package/src/clis/bilibili/subtitle.ts +1 -1
- package/src/clis/bilibili/user-videos.ts +1 -1
- package/src/clis/boss/batchgreet.ts +14 -106
- package/src/clis/boss/chatlist.ts +12 -26
- package/src/clis/boss/chatmsg.ts +16 -40
- package/src/clis/boss/common.ts +287 -0
- package/src/clis/boss/detail.ts +8 -54
- package/src/clis/boss/exchange.ts +15 -89
- package/src/clis/boss/greet.ts +23 -160
- package/src/clis/boss/invite.ts +36 -133
- package/src/clis/boss/joblist.ts +7 -36
- package/src/clis/boss/mark.ts +13 -94
- package/src/clis/boss/recommend.ts +12 -57
- package/src/clis/boss/resume.ts +19 -124
- package/src/clis/boss/search.ts +13 -66
- package/src/clis/boss/send.ts +21 -161
- package/src/clis/boss/stats.ts +19 -74
- package/src/clis/coupang/add-to-cart.ts +1 -1
- package/src/clis/devto/tag.yaml +34 -0
- package/src/clis/devto/top.yaml +29 -0
- package/src/clis/devto/user.yaml +33 -0
- package/src/clis/douban/book-hot.ts +15 -0
- package/src/clis/douban/marks.ts +135 -0
- package/src/clis/douban/movie-hot.ts +15 -0
- package/src/clis/douban/reviews.ts +127 -0
- package/src/clis/douban/search.ts +17 -0
- package/src/clis/douban/shared.ts +165 -0
- package/src/clis/douban/subject.yaml +76 -0
- package/src/clis/douban/top250.yaml +70 -0
- package/src/clis/douban/utils.ts +81 -0
- package/src/clis/facebook/add-friend.yaml +43 -0
- package/src/clis/facebook/events.yaml +44 -0
- package/src/clis/facebook/feed.yaml +63 -0
- package/src/clis/facebook/friends.yaml +42 -0
- package/src/clis/facebook/groups.yaml +50 -0
- package/src/clis/facebook/join-group.yaml +44 -0
- package/src/clis/facebook/memories.yaml +39 -0
- package/src/clis/facebook/notifications.yaml +40 -0
- package/src/clis/facebook/profile.yaml +37 -0
- package/src/clis/facebook/search.yaml +46 -0
- package/src/clis/google/news.ts +66 -0
- package/src/clis/google/search.ts +133 -0
- package/src/clis/google/suggest.ts +40 -0
- package/src/clis/google/trends.ts +44 -0
- package/src/clis/google/utils.test.ts +82 -0
- package/src/clis/google/utils.ts +24 -0
- package/src/clis/grok/ask.test.ts +53 -0
- package/src/clis/grok/ask.ts +300 -69
- package/src/clis/instagram/comment.yaml +52 -0
- package/src/clis/instagram/explore.yaml +43 -0
- package/src/clis/instagram/follow.yaml +41 -0
- package/src/clis/instagram/followers.yaml +51 -0
- package/src/clis/instagram/following.yaml +51 -0
- package/src/clis/instagram/like.yaml +46 -0
- package/src/clis/instagram/profile.yaml +42 -0
- package/src/clis/instagram/save.yaml +46 -0
- package/src/clis/instagram/saved.yaml +40 -0
- package/src/clis/instagram/search.yaml +43 -0
- package/src/clis/instagram/unfollow.yaml +38 -0
- package/src/clis/instagram/unlike.yaml +46 -0
- package/src/clis/instagram/unsave.yaml +46 -0
- package/src/clis/instagram/user.yaml +54 -0
- package/src/clis/jike/repost.ts +1 -1
- package/src/clis/jimeng/generate.yaml +1 -0
- package/src/clis/linux-do/category.yaml +1 -0
- package/src/clis/lobsters/active.yaml +29 -0
- package/src/clis/lobsters/hot.yaml +29 -0
- package/src/clis/lobsters/newest.yaml +29 -0
- package/src/clis/lobsters/tag.yaml +34 -0
- package/src/clis/medium/feed.ts +16 -0
- package/src/clis/medium/search.ts +16 -0
- package/src/clis/medium/shared.ts +83 -0
- package/src/clis/medium/user.ts +16 -0
- package/src/clis/reddit/comment.ts +1 -1
- package/src/clis/reddit/read.ts +1 -1
- package/src/clis/reddit/save.ts +1 -1
- package/src/clis/reddit/subreddit.yaml +1 -0
- package/src/clis/reddit/subscribe.ts +1 -1
- package/src/clis/reddit/upvote.ts +1 -1
- package/src/clis/sinablog/article.ts +15 -0
- package/src/clis/sinablog/hot.ts +15 -0
- package/src/clis/sinablog/search.ts +56 -0
- package/src/clis/sinablog/shared.ts +198 -0
- package/src/clis/sinablog/user.ts +16 -0
- package/src/clis/substack/feed.ts +16 -0
- package/src/clis/substack/publication.ts +16 -0
- package/src/clis/substack/search.ts +91 -0
- package/src/clis/substack/shared.ts +132 -0
- package/src/clis/tiktok/comment.yaml +66 -0
- package/src/clis/tiktok/explore.yaml +39 -0
- package/src/clis/tiktok/follow.yaml +39 -0
- package/src/clis/tiktok/following.yaml +46 -0
- package/src/clis/tiktok/friends.yaml +47 -0
- package/src/clis/tiktok/like.yaml +38 -0
- package/src/clis/tiktok/live.yaml +51 -0
- package/src/clis/tiktok/notifications.yaml +52 -0
- package/src/clis/tiktok/profile.yaml +45 -0
- package/src/clis/tiktok/save.yaml +34 -0
- package/src/clis/tiktok/search.yaml +46 -0
- package/src/clis/tiktok/unfollow.yaml +44 -0
- package/src/clis/tiktok/unlike.yaml +38 -0
- package/src/clis/tiktok/unsave.yaml +36 -0
- package/src/clis/tiktok/user.yaml +44 -0
- package/src/clis/twitter/download.ts +3 -3
- package/src/clis/twitter/followers.ts +1 -1
- package/src/clis/twitter/following.ts +1 -1
- package/src/clis/twitter/thread.ts +1 -1
- package/src/clis/twitter/timeline.test.ts +109 -0
- package/src/clis/twitter/timeline.ts +59 -19
- package/src/clis/wikipedia/random.ts +19 -0
- package/src/clis/wikipedia/search.ts +10 -4
- package/src/clis/wikipedia/summary.ts +4 -9
- package/src/clis/wikipedia/trending.ts +41 -0
- package/src/clis/wikipedia/utils.ts +31 -0
- package/src/clis/xiaohongshu/creator-note-detail.test.ts +2 -0
- package/src/clis/xiaohongshu/creator-note-detail.ts +1 -1
- package/src/clis/xiaohongshu/creator-notes.test.ts +2 -0
- package/src/clis/xiaohongshu/download.ts +1 -1
- package/src/clis/xueqiu/earnings-date.yaml +69 -0
- package/src/clis/xueqiu/search.yaml +2 -1
- package/src/clis/xueqiu/stock.yaml +2 -0
- package/src/clis/yahoo-finance/quote.ts +1 -1
- package/src/commanderAdapter.ts +17 -10
- package/src/daemon.ts +23 -0
- package/src/discovery.ts +134 -24
- package/src/doctor.test.ts +59 -2
- package/src/doctor.ts +4 -2
- package/src/engine.test.ts +79 -6
- package/src/execution.ts +42 -16
- package/src/explore.ts +77 -9
- package/src/generate.ts +58 -9
- package/src/main.ts +2 -1
- package/src/pipeline/executor.test.ts +35 -6
- package/src/pipeline/executor.ts +68 -19
- package/src/pipeline/registry.ts +3 -3
- package/src/pipeline/steps/browser.ts +24 -15
- package/src/pipeline/steps/fetch.ts +18 -13
- package/src/pipeline/steps/transform.ts +40 -15
- package/src/pipeline/template.test.ts +18 -0
- package/src/pipeline/template.ts +86 -13
- package/src/pipeline/transform.test.ts +15 -2
- package/src/plugin.test.ts +86 -0
- package/src/plugin.ts +254 -0
- package/src/registry-api.ts +12 -0
- package/src/registry.ts +19 -1
- package/src/synthesize.ts +102 -21
- package/src/types.ts +44 -12
- package/src/validate.ts +19 -4
- package/tests/e2e/browser-public.test.ts +11 -0
- package/tests/e2e/public-commands.test.ts +64 -0
- package/dist/clis/feishu/new.d.ts +0 -1
- package/dist/clis/feishu/new.js +0 -27
- package/dist/clis/feishu/read.d.ts +0 -1
- package/dist/clis/feishu/read.js +0 -40
- package/dist/clis/feishu/search.d.ts +0 -1
- package/dist/clis/feishu/search.js +0 -30
- package/dist/clis/feishu/send.d.ts +0 -1
- package/dist/clis/feishu/send.js +0 -39
- package/dist/clis/feishu/status.d.ts +0 -1
- package/dist/clis/feishu/status.js +0 -28
- package/dist/clis/neteasemusic/like.d.ts +0 -1
- package/dist/clis/neteasemusic/like.js +0 -25
- package/dist/clis/neteasemusic/lyrics.d.ts +0 -1
- package/dist/clis/neteasemusic/lyrics.js +0 -47
- package/dist/clis/neteasemusic/next.d.ts +0 -1
- package/dist/clis/neteasemusic/next.js +0 -26
- package/dist/clis/neteasemusic/play.d.ts +0 -1
- package/dist/clis/neteasemusic/play.js +0 -26
- package/dist/clis/neteasemusic/playing.d.ts +0 -1
- package/dist/clis/neteasemusic/playing.js +0 -59
- package/dist/clis/neteasemusic/playlist.d.ts +0 -1
- package/dist/clis/neteasemusic/playlist.js +0 -46
- package/dist/clis/neteasemusic/prev.d.ts +0 -1
- package/dist/clis/neteasemusic/prev.js +0 -25
- package/dist/clis/neteasemusic/search.d.ts +0 -1
- package/dist/clis/neteasemusic/search.js +0 -52
- package/dist/clis/neteasemusic/status.d.ts +0 -1
- package/dist/clis/neteasemusic/status.js +0 -16
- package/dist/clis/neteasemusic/volume.d.ts +0 -1
- package/dist/clis/neteasemusic/volume.js +0 -54
- package/dist/clis/wechat/chats.d.ts +0 -1
- package/dist/clis/wechat/chats.js +0 -28
- package/dist/clis/wechat/contacts.d.ts +0 -1
- package/dist/clis/wechat/contacts.js +0 -28
- package/dist/clis/wechat/read.d.ts +0 -1
- package/dist/clis/wechat/read.js +0 -58
- package/dist/clis/wechat/search.d.ts +0 -1
- package/dist/clis/wechat/search.js +0 -31
- package/dist/clis/wechat/send.d.ts +0 -1
- package/dist/clis/wechat/send.js +0 -42
- package/dist/clis/wechat/status.d.ts +0 -1
- package/dist/clis/wechat/status.js +0 -29
- package/dist/pipeline.d.ts +0 -7
- package/dist/pipeline.js +0 -7
- package/docs/adapters/browser/github.md +0 -26
- package/docs/adapters/desktop/feishu.md +0 -20
- package/docs/adapters/desktop/neteasemusic.md +0 -31
- package/docs/adapters/desktop/wechat.md +0 -28
- package/src/clis/antigravity/README.md +0 -5
- package/src/clis/antigravity/README.zh-CN.md +0 -51
- package/src/clis/chaoxing/README.md +0 -14
- package/src/clis/chaoxing/README.zh-CN.md +0 -35
- package/src/clis/chatgpt/README.md +0 -5
- package/src/clis/chatgpt/README.zh-CN.md +0 -44
- package/src/clis/chatwise/README.md +0 -5
- package/src/clis/chatwise/README.zh-CN.md +0 -38
- package/src/clis/codex/README.md +0 -5
- package/src/clis/codex/README.zh-CN.md +0 -33
- package/src/clis/cursor/README.md +0 -5
- package/src/clis/cursor/README.zh-CN.md +0 -33
- package/src/clis/discord-app/README.md +0 -5
- package/src/clis/discord-app/README.zh-CN.md +0 -28
- package/src/clis/feishu/README.md +0 -5
- package/src/clis/feishu/README.zh-CN.md +0 -20
- package/src/clis/feishu/new.ts +0 -32
- package/src/clis/feishu/read.ts +0 -48
- package/src/clis/feishu/search.ts +0 -35
- package/src/clis/feishu/send.ts +0 -46
- package/src/clis/feishu/status.ts +0 -34
- package/src/clis/neteasemusic/README.md +0 -5
- package/src/clis/neteasemusic/README.zh-CN.md +0 -31
- package/src/clis/neteasemusic/like.ts +0 -28
- package/src/clis/neteasemusic/lyrics.ts +0 -53
- package/src/clis/neteasemusic/next.ts +0 -30
- package/src/clis/neteasemusic/play.ts +0 -30
- package/src/clis/neteasemusic/playing.ts +0 -62
- package/src/clis/neteasemusic/playlist.ts +0 -51
- package/src/clis/neteasemusic/prev.ts +0 -29
- package/src/clis/neteasemusic/search.ts +0 -58
- package/src/clis/neteasemusic/status.ts +0 -18
- package/src/clis/neteasemusic/volume.ts +0 -61
- package/src/clis/notion/README.md +0 -5
- package/src/clis/notion/README.zh-CN.md +0 -29
- package/src/clis/wechat/README.md +0 -5
- package/src/clis/wechat/README.zh-CN.md +0 -28
- package/src/clis/wechat/chats.ts +0 -33
- package/src/clis/wechat/contacts.ts +0 -33
- package/src/clis/wechat/read.ts +0 -72
- package/src/clis/wechat/search.ts +0 -36
- package/src/clis/wechat/send.ts +0 -49
- package/src/clis/wechat/status.ts +0 -35
- package/src/pipeline.ts +0 -8
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { cli, Strategy } from '../../registry.js';
|
|
2
|
-
export const volumeCommand = cli({
|
|
3
|
-
site: 'neteasemusic',
|
|
4
|
-
name: 'volume',
|
|
5
|
-
description: 'Get or set the volume level (0-100)',
|
|
6
|
-
domain: 'localhost',
|
|
7
|
-
strategy: Strategy.UI,
|
|
8
|
-
browser: true,
|
|
9
|
-
args: [
|
|
10
|
-
{ name: 'level', required: false, positional: true, help: 'Volume level 0-100 (omit to read current)' },
|
|
11
|
-
],
|
|
12
|
-
columns: ['Status', 'Volume'],
|
|
13
|
-
func: async (page, kwargs) => {
|
|
14
|
-
const level = kwargs.level;
|
|
15
|
-
if (!level) {
|
|
16
|
-
// Read current volume
|
|
17
|
-
const vol = await page.evaluate(`
|
|
18
|
-
(function() {
|
|
19
|
-
const bar = document.querySelector('.m-playbar .vol .barbg .rng, [class*="volume"] [class*="progress"], [class*="volume"] [class*="played"]');
|
|
20
|
-
if (bar) {
|
|
21
|
-
const style = bar.getAttribute('style') || '';
|
|
22
|
-
const match = style.match(/width:\\s*(\\d+\\.?\\d*)%/);
|
|
23
|
-
if (match) return match[1];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const vol = document.querySelector('.m-playbar .j-vol, [class*="volume-value"]');
|
|
27
|
-
if (vol) return vol.textContent.trim();
|
|
28
|
-
|
|
29
|
-
return 'Unknown';
|
|
30
|
-
})()
|
|
31
|
-
`);
|
|
32
|
-
return [{ Status: 'Current', Volume: vol + '%' }];
|
|
33
|
-
}
|
|
34
|
-
// Set volume by clicking on the volume bar at the right position
|
|
35
|
-
const targetVol = Math.max(0, Math.min(100, parseInt(level, 10)));
|
|
36
|
-
await page.evaluate(`
|
|
37
|
-
(function(target) {
|
|
38
|
-
const bar = document.querySelector('.m-playbar .vol .barbg, [class*="volume-bar"], [class*="volume"] [class*="track"]');
|
|
39
|
-
if (!bar) return;
|
|
40
|
-
|
|
41
|
-
const rect = bar.getBoundingClientRect();
|
|
42
|
-
const x = rect.left + (rect.width * target / 100);
|
|
43
|
-
const y = rect.top + rect.height / 2;
|
|
44
|
-
|
|
45
|
-
bar.dispatchEvent(new MouseEvent('click', {
|
|
46
|
-
clientX: x,
|
|
47
|
-
clientY: y,
|
|
48
|
-
bubbles: true,
|
|
49
|
-
}));
|
|
50
|
-
})(${targetVol})
|
|
51
|
-
`);
|
|
52
|
-
return [{ Status: 'Set', Volume: targetVol + '%' }];
|
|
53
|
-
},
|
|
54
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const chatsCommand: import("../../registry.js").CliCommand;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const chatsCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'chats',
|
|
6
|
-
description: 'Open the WeChat chats panel (conversation list)',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [],
|
|
11
|
-
columns: ['Status'],
|
|
12
|
-
func: async (page) => {
|
|
13
|
-
try {
|
|
14
|
-
// Activate WeChat
|
|
15
|
-
execSync("osascript -e 'tell application \"WeChat\" to activate'");
|
|
16
|
-
execSync("osascript -e 'delay 0.3'");
|
|
17
|
-
// Cmd+1 switches to Chats tab in WeChat Mac
|
|
18
|
-
execSync("osascript " +
|
|
19
|
-
"-e 'tell application \"System Events\"' " +
|
|
20
|
-
"-e 'keystroke \"1\" using command down' " +
|
|
21
|
-
"-e 'end tell'");
|
|
22
|
-
return [{ Status: 'Chats panel opened (Cmd+1)' }];
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
return [{ Status: 'Error: ' + err.message }];
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const contactsCommand: import("../../registry.js").CliCommand;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const contactsCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'contacts',
|
|
6
|
-
description: 'Open the WeChat contacts panel',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [],
|
|
11
|
-
columns: ['Status'],
|
|
12
|
-
func: async (page) => {
|
|
13
|
-
try {
|
|
14
|
-
// Activate WeChat
|
|
15
|
-
execSync("osascript -e 'tell application \"WeChat\" to activate'");
|
|
16
|
-
execSync("osascript -e 'delay 0.3'");
|
|
17
|
-
// Cmd+2 switches to Contacts tab in WeChat Mac
|
|
18
|
-
execSync("osascript " +
|
|
19
|
-
"-e 'tell application \"System Events\"' " +
|
|
20
|
-
"-e 'keystroke \"2\" using command down' " +
|
|
21
|
-
"-e 'end tell'");
|
|
22
|
-
return [{ Status: 'Contacts panel opened (Cmd+2)' }];
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
return [{ Status: 'Error: ' + err.message }];
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const readCommand: import("../../registry.js").CliCommand;
|
package/dist/clis/wechat/read.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { execSync, spawnSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const readCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'read',
|
|
6
|
-
description: 'Read the current chat content by selecting all and copying',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [],
|
|
11
|
-
columns: ['Content'],
|
|
12
|
-
func: async (page) => {
|
|
13
|
-
try {
|
|
14
|
-
// Backup clipboard
|
|
15
|
-
let clipBackup = '';
|
|
16
|
-
try {
|
|
17
|
-
clipBackup = execSync('pbpaste', { encoding: 'utf-8' });
|
|
18
|
-
}
|
|
19
|
-
catch { /* empty */ }
|
|
20
|
-
// Activate WeChat
|
|
21
|
-
execSync("osascript -e 'tell application \"WeChat\" to activate'");
|
|
22
|
-
execSync("osascript -e 'delay 0.3'");
|
|
23
|
-
// Click on the chat area first, then select all and copy
|
|
24
|
-
execSync("osascript " +
|
|
25
|
-
"-e 'tell application \"System Events\"' " +
|
|
26
|
-
"-e 'tell application process \"WeChat\"' " +
|
|
27
|
-
// Click in the message area (center-right of the window)
|
|
28
|
-
"-e 'set frontWin to front window' " +
|
|
29
|
-
"-e 'set winPos to position of frontWin' " +
|
|
30
|
-
"-e 'set winSize to size of frontWin' " +
|
|
31
|
-
"-e 'end tell' " +
|
|
32
|
-
"-e 'end tell'");
|
|
33
|
-
execSync("osascript -e 'delay 0.2'");
|
|
34
|
-
// Select all text in chat area and copy
|
|
35
|
-
execSync("osascript " +
|
|
36
|
-
"-e 'tell application \"System Events\"' " +
|
|
37
|
-
"-e 'keystroke \"a\" using command down' " +
|
|
38
|
-
"-e 'delay 0.2' " +
|
|
39
|
-
"-e 'keystroke \"c\" using command down' " +
|
|
40
|
-
"-e 'delay 0.2' " +
|
|
41
|
-
"-e 'end tell'");
|
|
42
|
-
const content = execSync('pbpaste', { encoding: 'utf-8' }).trim();
|
|
43
|
-
// Restore clipboard
|
|
44
|
-
if (clipBackup) {
|
|
45
|
-
spawnSync('pbcopy', { input: clipBackup });
|
|
46
|
-
}
|
|
47
|
-
// Press Escape to deselect
|
|
48
|
-
execSync("osascript " +
|
|
49
|
-
"-e 'tell application \"System Events\"' " +
|
|
50
|
-
"-e 'key code 53' " + // Escape
|
|
51
|
-
"-e 'end tell'");
|
|
52
|
-
return [{ Content: content || '(no content captured)' }];
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
return [{ Content: 'Error: ' + err.message }];
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const searchCommand: import("../../registry.js").CliCommand;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const searchCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'search',
|
|
6
|
-
description: 'Open WeChat search and type a query (find contacts or messages)',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [{ name: 'query', required: true, positional: true, help: 'Search query (contact name or keyword)' }],
|
|
11
|
-
columns: ['Status'],
|
|
12
|
-
func: async (page, kwargs) => {
|
|
13
|
-
const query = kwargs.query;
|
|
14
|
-
try {
|
|
15
|
-
// Activate WeChat
|
|
16
|
-
execSync("osascript -e 'tell application \"WeChat\" to activate'");
|
|
17
|
-
execSync("osascript -e 'delay 0.3'");
|
|
18
|
-
// Cmd+F to open search (WeChat Mac uses Cmd+F for search)
|
|
19
|
-
execSync("osascript " +
|
|
20
|
-
"-e 'tell application \"System Events\"' " +
|
|
21
|
-
"-e 'keystroke \"f\" using command down' " +
|
|
22
|
-
"-e 'delay 0.5' " +
|
|
23
|
-
`-e 'keystroke ${JSON.stringify(query)}' ` +
|
|
24
|
-
"-e 'end tell'");
|
|
25
|
-
return [{ Status: `Searching for: ${query}` }];
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
return [{ Status: 'Error: ' + err.message }];
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const sendCommand: import("../../registry.js").CliCommand;
|
package/dist/clis/wechat/send.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { execSync, spawnSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const sendCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'send',
|
|
6
|
-
description: 'Send a message in the active WeChat conversation via clipboard paste',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [{ name: 'text', required: true, positional: true, help: 'Message to send' }],
|
|
11
|
-
columns: ['Status'],
|
|
12
|
-
func: async (page, kwargs) => {
|
|
13
|
-
const text = kwargs.text;
|
|
14
|
-
try {
|
|
15
|
-
// Backup clipboard
|
|
16
|
-
let clipBackup = '';
|
|
17
|
-
try {
|
|
18
|
-
clipBackup = execSync('pbpaste', { encoding: 'utf-8' });
|
|
19
|
-
}
|
|
20
|
-
catch { /* clipboard may be empty */ }
|
|
21
|
-
// Copy text to clipboard
|
|
22
|
-
spawnSync('pbcopy', { input: text });
|
|
23
|
-
// Activate WeChat and paste
|
|
24
|
-
execSync("osascript -e 'tell application \"WeChat\" to activate'");
|
|
25
|
-
execSync("osascript -e 'delay 0.5'");
|
|
26
|
-
execSync("osascript " +
|
|
27
|
-
"-e 'tell application \"System Events\"' " +
|
|
28
|
-
"-e 'keystroke \"v\" using command down' " +
|
|
29
|
-
"-e 'delay 0.2' " +
|
|
30
|
-
"-e 'keystroke return' " +
|
|
31
|
-
"-e 'end tell'");
|
|
32
|
-
// Restore clipboard
|
|
33
|
-
if (clipBackup) {
|
|
34
|
-
spawnSync('pbcopy', { input: clipBackup });
|
|
35
|
-
}
|
|
36
|
-
return [{ Status: 'Success' }];
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
return [{ Status: 'Error: ' + err.message }];
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const statusCommand: import("../../registry.js").CliCommand;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { cli, Strategy } from '../../registry.js';
|
|
3
|
-
export const statusCommand = cli({
|
|
4
|
-
site: 'wechat',
|
|
5
|
-
name: 'status',
|
|
6
|
-
description: 'Check if WeChat Desktop is running on macOS',
|
|
7
|
-
domain: 'localhost',
|
|
8
|
-
strategy: Strategy.PUBLIC,
|
|
9
|
-
browser: false,
|
|
10
|
-
args: [],
|
|
11
|
-
columns: ['Status', 'Detail'],
|
|
12
|
-
func: async (page) => {
|
|
13
|
-
try {
|
|
14
|
-
const running = execSync("osascript -e 'application \"WeChat\" is running'", { encoding: 'utf-8' }).trim();
|
|
15
|
-
if (running !== 'true') {
|
|
16
|
-
return [{ Status: 'Stopped', Detail: 'WeChat is not running' }];
|
|
17
|
-
}
|
|
18
|
-
// Get window count to check if logged in
|
|
19
|
-
const windowCount = execSync("osascript -e 'tell application \"System Events\" to count windows of application process \"WeChat\"'", { encoding: 'utf-8' }).trim();
|
|
20
|
-
return [{
|
|
21
|
-
Status: 'Running',
|
|
22
|
-
Detail: `${windowCount} window(s) open`,
|
|
23
|
-
}];
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
return [{ Status: 'Error', Detail: err.message }];
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
});
|
package/dist/pipeline.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* YAML pipeline executor — re-exports from modular pipeline system.
|
|
3
|
-
*
|
|
4
|
-
* This file exists for backward compatibility. All logic has been
|
|
5
|
-
* refactored into src/pipeline/ with modular step handlers.
|
|
6
|
-
*/
|
|
7
|
-
export { executePipeline, type PipelineContext } from './pipeline/index.js';
|
package/dist/pipeline.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* YAML pipeline executor — re-exports from modular pipeline system.
|
|
3
|
-
*
|
|
4
|
-
* This file exists for backward compatibility. All logic has been
|
|
5
|
-
* refactored into src/pipeline/ with modular step handlers.
|
|
6
|
-
*/
|
|
7
|
-
export { executePipeline } from './pipeline/index.js';
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# GitHub
|
|
2
|
-
|
|
3
|
-
**Mode**: 🌐 Public · **Domain**: `github.com`
|
|
4
|
-
|
|
5
|
-
## Commands
|
|
6
|
-
|
|
7
|
-
| Command | Description |
|
|
8
|
-
|---------|-------------|
|
|
9
|
-
| `opencli github search` | |
|
|
10
|
-
|
|
11
|
-
## Usage Examples
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Quick start
|
|
15
|
-
opencli github search --limit 5
|
|
16
|
-
|
|
17
|
-
# JSON output
|
|
18
|
-
opencli github search -f json
|
|
19
|
-
|
|
20
|
-
# Verbose mode
|
|
21
|
-
opencli github search -v
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Prerequisites
|
|
25
|
-
|
|
26
|
-
- No browser required — uses public API
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Feishu (飞书/Lark)
|
|
2
|
-
|
|
3
|
-
Control **Feishu/Lark Desktop** from the terminal via AppleScript.
|
|
4
|
-
|
|
5
|
-
> **Note:** Feishu uses a custom `Lark Framework` (Chromium-based but NOT Electron). CDP is not available, so this adapter uses AppleScript + clipboard.
|
|
6
|
-
|
|
7
|
-
## Prerequisites
|
|
8
|
-
|
|
9
|
-
1. Feishu/Lark must be running and logged in
|
|
10
|
-
2. Terminal must have **Accessibility permission**
|
|
11
|
-
|
|
12
|
-
## Commands
|
|
13
|
-
|
|
14
|
-
| Command | Description |
|
|
15
|
-
|---------|-------------|
|
|
16
|
-
| `opencli feishu status` | Check if Feishu/Lark is running |
|
|
17
|
-
| `opencli feishu send "msg"` | Send message in active chat (paste + Enter) |
|
|
18
|
-
| `opencli feishu read` | Read current chat (Cmd+A → Cmd+C) |
|
|
19
|
-
| `opencli feishu search "query"` | Global search (Cmd+K) |
|
|
20
|
-
| `opencli feishu new` | New message/document (Cmd+N) |
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# NeteaseMusic (网易云音乐)
|
|
2
|
-
|
|
3
|
-
Control **NeteaseMusic** (网易云音乐) from the terminal via Chrome DevTools Protocol (CDP). The app uses Chromium Embedded Framework (CEF).
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
Launch with remote debugging port:
|
|
8
|
-
```bash
|
|
9
|
-
/Applications/NeteaseMusic.app/Contents/MacOS/NeteaseMusic --remote-debugging-port=9234
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Setup
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9234"
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Commands
|
|
19
|
-
|
|
20
|
-
| Command | Description |
|
|
21
|
-
|---------|-------------|
|
|
22
|
-
| `opencli neteasemusic status` | Check CDP connection |
|
|
23
|
-
| `opencli neteasemusic playing` | Current song info (title, artist, album) |
|
|
24
|
-
| `opencli neteasemusic play` | Play / Pause toggle |
|
|
25
|
-
| `opencli neteasemusic next` | Skip to next song |
|
|
26
|
-
| `opencli neteasemusic prev` | Go to previous song |
|
|
27
|
-
| `opencli neteasemusic search "query"` | Search songs, artists |
|
|
28
|
-
| `opencli neteasemusic playlist` | Show current playback queue |
|
|
29
|
-
| `opencli neteasemusic like` | Like / unlike current song |
|
|
30
|
-
| `opencli neteasemusic lyrics` | Get lyrics of current song |
|
|
31
|
-
| `opencli neteasemusic volume [0-100]` | Get or set volume |
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# WeChat (微信)
|
|
2
|
-
|
|
3
|
-
Control **WeChat Mac Desktop** from the terminal via AppleScript + Accessibility API.
|
|
4
|
-
|
|
5
|
-
> **Note:** WeChat is a native macOS app (not Electron), so CDP is not available. This adapter uses AppleScript keyboard simulation and clipboard operations.
|
|
6
|
-
|
|
7
|
-
## Prerequisites
|
|
8
|
-
|
|
9
|
-
1. WeChat must be running and logged in
|
|
10
|
-
2. Terminal must have **Accessibility permission** (System Settings → Privacy & Security → Accessibility)
|
|
11
|
-
|
|
12
|
-
## Commands
|
|
13
|
-
|
|
14
|
-
| Command | Description |
|
|
15
|
-
|---------|-------------|
|
|
16
|
-
| `opencli wechat status` | Check if WeChat is running |
|
|
17
|
-
| `opencli wechat send "msg"` | Send message in the active chat (clipboard paste + Enter) |
|
|
18
|
-
| `opencli wechat read` | Read current chat content (Cmd+A → Cmd+C) |
|
|
19
|
-
| `opencli wechat search "keyword"` | Open search and type a query (Cmd+F) |
|
|
20
|
-
| `opencli wechat chats` | Switch to Chats tab (Cmd+1) |
|
|
21
|
-
| `opencli wechat contacts` | Switch to Contacts tab (Cmd+2) |
|
|
22
|
-
|
|
23
|
-
## Limitations
|
|
24
|
-
|
|
25
|
-
- **No CDP support** — WeChat is native Cocoa, not Electron
|
|
26
|
-
- `send` requires the correct conversation to be already open
|
|
27
|
-
- `read` captures whatever is visible via select-all + copy
|
|
28
|
-
- `search` types the query but cannot programmatically click results
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# Antigravity CLI Adapter (探针插件)
|
|
2
|
-
|
|
3
|
-
🔥 **opencli 支持 CLI 化所有 electron 应用!最强大更新来袭!** 🔥
|
|
4
|
-
|
|
5
|
-
CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合出各种神奇的能力。
|
|
6
|
-
如果你在使用诸如 Antigravity Ultra 等工具时觉得不够灵活或难以扩展,现在通过 OpenCLI 把他 CLI 化,轻松打破界限。
|
|
7
|
-
|
|
8
|
-
现在,**AI 可以自己控制自己**!结合 cc/openclaw 就可以远程控制任何 electron 应用!无限玩法!!
|
|
9
|
-
|
|
10
|
-
通过 Chrome DevTools Protocol (CDP),将你本地运行的 Antigravity 桌面客户端转变为一个完全可编程的 AI 节点。这让你可以在命令行终端中直接操控它的 UI 界面,实现真正的“零 API 限制”本地自动化大模型工作流调度。
|
|
11
|
-
|
|
12
|
-
## 开发准备
|
|
13
|
-
|
|
14
|
-
首先,**请在终端启动 Antigravity 桌面版**,并附加上允许远程调试(CDP)的内核启动参数:
|
|
15
|
-
|
|
16
|
-
\`\`\`bash
|
|
17
|
-
# 在后台启动并驻留
|
|
18
|
-
/Applications/Antigravity.app/Contents/MacOS/Electron \
|
|
19
|
-
--remote-debugging-port=9224
|
|
20
|
-
\`\`\`
|
|
21
|
-
|
|
22
|
-
*(注意:如果你打包的应用重命名过主构建,可能需要把 `Electron` 换成实际的可执行文件名,如 `Antigravity`)*
|
|
23
|
-
|
|
24
|
-
接下来,在你想执行 CLI 命令的另一个新终端板块里,声明要连入的本地调试端口环境变量:
|
|
25
|
-
|
|
26
|
-
\`\`\`bash
|
|
27
|
-
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9224"
|
|
28
|
-
\`\`\`
|
|
29
|
-
|
|
30
|
-
## 全部指令一览
|
|
31
|
-
|
|
32
|
-
### \`opencli antigravity status\`
|
|
33
|
-
快速检查当前探针与内核 CDP 的连接状态。会返回底层的当前 URL 和网页 Title。
|
|
34
|
-
|
|
35
|
-
### \`opencli antigravity send <message>\`
|
|
36
|
-
给 Agent 发送消息。它会自动定位到底部的 Lexical 输入框,安全地注入你的指定文本然后模拟回车发送。
|
|
37
|
-
|
|
38
|
-
### \`opencli antigravity read\`
|
|
39
|
-
全量抓取当前的对话面板,将所有历史聊天记录作为一整块纯文本取回。
|
|
40
|
-
|
|
41
|
-
### \`opencli antigravity new\`
|
|
42
|
-
模拟点击侧边栏顶部的“开启新对话”按钮,瞬间清空并重置 Agent 的上下文状态。
|
|
43
|
-
|
|
44
|
-
### \`opencli antigravity extract-code\`
|
|
45
|
-
从当前的 Agent 聊天记录中单独提取所有的多行代码块。非常适合自动化脚手架开发(例如直接重定向输出写入本地文件:\`opencli antigravity extract-code > script.sh\`)。
|
|
46
|
-
|
|
47
|
-
### \`opencli antigravity model <name>\`
|
|
48
|
-
切换大模型引擎。只需传入关键词(比如:\`opencli antigravity model claude\` 或 \`model gemini\`),它会自动帮你点开模型选择菜单并模拟点击。
|
|
49
|
-
|
|
50
|
-
### \`opencli antigravity watch\`
|
|
51
|
-
开启一个长连接流式监听。通过持续轮询 DOM 的变化量,它能像流式 API 一样,在终端实时向你推送 Agent 刚刚打出的那一行最新回复,直到你按 Ctrl+C 中止。
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Chaoxing (学习通) Adapter
|
|
2
|
-
|
|
3
|
-
View your Chaoxing assignments and exams from the terminal by reusing your Chrome login session.
|
|
4
|
-
|
|
5
|
-
📖 **Full documentation**: See commands and usage below.
|
|
6
|
-
|
|
7
|
-
## Commands
|
|
8
|
-
|
|
9
|
-
| Command | Description |
|
|
10
|
-
|---------|-------------|
|
|
11
|
-
| `opencli chaoxing assignments` | List assignments across all courses |
|
|
12
|
-
| `opencli chaoxing exams` | List exams across all courses |
|
|
13
|
-
|
|
14
|
-
Supports `--course` and `--status` filters. Requires Chrome logged into `i.chaoxing.com` with Browser Bridge extension installed.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# 学习通(Chaoxing)适配器
|
|
2
|
-
|
|
3
|
-
通过复用 Chrome 登录态,在终端查看学习通的作业和考试列表。
|
|
4
|
-
|
|
5
|
-
## 前置条件
|
|
6
|
-
|
|
7
|
-
1. Chrome 必须正在运行,且已经登录学习通(`i.chaoxing.com`)。
|
|
8
|
-
2. 需安装 opencli Browser Bridge 扩展。
|
|
9
|
-
|
|
10
|
-
## 命令
|
|
11
|
-
|
|
12
|
-
| 命令 | 说明 |
|
|
13
|
-
|------|------|
|
|
14
|
-
| `opencli chaoxing assignments` | 列出所有课程的作业 |
|
|
15
|
-
| `opencli chaoxing assignments --course "数学"` | 按课程名模糊过滤 |
|
|
16
|
-
| `opencli chaoxing assignments --status pending` | 按状态过滤:`all` / `pending` / `submitted` / `graded` |
|
|
17
|
-
| `opencli chaoxing exams` | 列出所有课程的考试 |
|
|
18
|
-
| `opencli chaoxing exams --course "数学"` | 按课程名模糊过滤 |
|
|
19
|
-
| `opencli chaoxing exams --status upcoming` | 按状态过滤:`all` / `upcoming` / `ongoing` / `finished` |
|
|
20
|
-
|
|
21
|
-
## 工作原理
|
|
22
|
-
|
|
23
|
-
学习通没有扁平的"作业列表"API,适配器模拟学生在浏览器中的操作流程:
|
|
24
|
-
|
|
25
|
-
1. 通过交互页建立会话
|
|
26
|
-
2. 通过 `backclazzdata` JSON API 获取课程列表
|
|
27
|
-
3. 通过 `stucoursemiddle` 重定向进入课程(获取会话 `enc`)
|
|
28
|
-
4. 点击作业/考试标签,捕获 iframe URL
|
|
29
|
-
5. 导航到该 URL 并解析 DOM
|
|
30
|
-
|
|
31
|
-
## 限制
|
|
32
|
-
|
|
33
|
-
- 实际使用建议配合 `--course` 过滤(扫描全部 40+ 门课程较慢)
|
|
34
|
-
- 不提交作业、不参加考试
|
|
35
|
-
- 如学习通页面结构变动,DOM 解析器需同步更新
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# ChatGPT 桌面端适配器
|
|
2
|
-
|
|
3
|
-
在终端中直接控制 **ChatGPT macOS 桌面应用**。OpenCLI 支持两种自动化方式。
|
|
4
|
-
|
|
5
|
-
## 方式一:AppleScript(默认,无需配置)
|
|
6
|
-
|
|
7
|
-
内置命令使用原生 AppleScript 自动化,无需额外启动参数。
|
|
8
|
-
|
|
9
|
-
### 前置条件
|
|
10
|
-
1. 安装官方 [ChatGPT Desktop App](https://openai.com/chatgpt/mac/)。
|
|
11
|
-
2. 在 **系统设置 → 隐私与安全性 → 辅助功能** 中为终端应用授予权限。
|
|
12
|
-
|
|
13
|
-
### 命令
|
|
14
|
-
- `opencli chatgpt status`:检查 ChatGPT 应用是否在运行。
|
|
15
|
-
- `opencli chatgpt new`:激活 ChatGPT 并按 `Cmd+N` 开始新对话。
|
|
16
|
-
- `opencli chatgpt send "消息"`:将消息复制到剪贴板,激活 ChatGPT,粘贴并提交。
|
|
17
|
-
- `opencli chatgpt read`:通过当前聚焦 ChatGPT 窗口的辅助功能树读取最后一条可见消息并返回文本。
|
|
18
|
-
|
|
19
|
-
## 方式二:CDP(高级,Electron 调试模式)
|
|
20
|
-
|
|
21
|
-
ChatGPT Desktop 同样是 Electron 应用,可以通过远程调试端口启动以实现更深度的自动化:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
/Applications/ChatGPT.app/Contents/MacOS/ChatGPT \
|
|
25
|
-
--remote-debugging-port=9224
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
然后设置环境变量:
|
|
29
|
-
```bash
|
|
30
|
-
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9224"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
> **注意**:CDP 模式支持未来的高级命令(如 DOM 检查、模型切换、代码提取等),与 Cursor 和 Codex 适配器类似。
|
|
34
|
-
|
|
35
|
-
## 工作原理
|
|
36
|
-
|
|
37
|
-
- **AppleScript 模式**:使用 `osascript` 控制 ChatGPT,发送消息时借助 `pbcopy`/`pbpaste` 粘贴文本,读取消息时通过 macOS 辅助功能树获取当前可见聊天内容。
|
|
38
|
-
- **CDP 模式**:通过 Chrome DevTools Protocol 连接到 Electron 渲染进程,直接操作 DOM。
|
|
39
|
-
|
|
40
|
-
## 限制
|
|
41
|
-
|
|
42
|
-
- 仅支持 macOS(AppleScript 依赖)
|
|
43
|
-
- AppleScript 模式需要辅助功能权限
|
|
44
|
-
- `read` 返回的是当前聚焦 ChatGPT 窗口里的最后一条可见消息;如果目标消息不在可见区域,需先手动滚动
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# ChatWise 适配器
|
|
2
|
-
|
|
3
|
-
通过 Chrome DevTools Protocol (CDP) 在终端中控制 **ChatWise 桌面应用**。ChatWise 是基于 Electron 的多 LLM 客户端,支持 GPT-4、Claude、Gemini 等。
|
|
4
|
-
|
|
5
|
-
## 前置条件
|
|
6
|
-
|
|
7
|
-
1. 安装 [ChatWise](https://chatwise.app/)。
|
|
8
|
-
2. 通过远程调试端口启动:
|
|
9
|
-
```bash
|
|
10
|
-
/Applications/ChatWise.app/Contents/MacOS/ChatWise \
|
|
11
|
-
--remote-debugging-port=9228
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## 配置
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9228"
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## 命令
|
|
21
|
-
|
|
22
|
-
### 诊断
|
|
23
|
-
- `opencli chatwise status`:检查 CDP 连接状态。
|
|
24
|
-
- `opencli chatwise screenshot`:导出 DOM + accessibility 快照。
|
|
25
|
-
|
|
26
|
-
### 对话
|
|
27
|
-
- `opencli chatwise new`:开始新对话(`Cmd+N`)。
|
|
28
|
-
- `opencli chatwise send "消息"`:发送消息到当前对话。
|
|
29
|
-
- `opencli chatwise read`:读取当前对话内容。
|
|
30
|
-
- `opencli chatwise ask "提示词"`:发送 + 等待回复 + 返回结果(一站式)。
|
|
31
|
-
|
|
32
|
-
### AI 功能
|
|
33
|
-
- `opencli chatwise model`:获取当前 AI 模型。
|
|
34
|
-
- `opencli chatwise model gpt-4`:切换模型。
|
|
35
|
-
|
|
36
|
-
### 组织管理
|
|
37
|
-
- `opencli chatwise history`:列出 sidebar 会话列表。
|
|
38
|
-
- `opencli chatwise export`:导出对话为 Markdown 文件。
|