@jackwener/opencli 1.6.0 → 1.6.2
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/CHANGELOG.md +8 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +27 -45
- package/README.zh-CN.md +32 -34
- package/autoresearch/browse-tasks.json +18 -20
- package/autoresearch/commands/debug.ts +163 -0
- package/autoresearch/commands/fix.ts +145 -0
- package/autoresearch/commands/plan.ts +88 -0
- package/autoresearch/commands/run.ts +138 -0
- package/autoresearch/config.ts +82 -0
- package/autoresearch/engine.ts +359 -0
- package/autoresearch/eval-all.ts +127 -0
- package/autoresearch/eval-browse.ts +1 -1
- package/autoresearch/eval-publish.ts +238 -0
- package/autoresearch/eval-save.ts +249 -0
- package/autoresearch/eval-skill.ts +14 -8
- package/autoresearch/eval-v2ex.ts +220 -0
- package/autoresearch/eval-zhihu.ts +230 -0
- package/autoresearch/logger.ts +69 -0
- package/autoresearch/presets/combined-reliability.ts +27 -0
- package/autoresearch/presets/index.ts +23 -0
- package/autoresearch/presets/operate-reliability.ts +24 -0
- package/autoresearch/presets/save-reliability.ts +26 -0
- package/autoresearch/presets/skill-quality.ts +20 -0
- package/autoresearch/presets/v2ex-reliability.ts +24 -0
- package/autoresearch/presets/zhihu-reliability.ts +25 -0
- package/autoresearch/publish-tasks.json +345 -0
- package/autoresearch/run-save.sh +11 -0
- package/autoresearch/save-adapters/xhs-explore-deep.ts +64 -0
- package/autoresearch/save-adapters/xhs-note-comments.ts +61 -0
- package/autoresearch/save-adapters/xhs-search-full.ts +62 -0
- package/autoresearch/save-adapters/zhihu-hot-detail.ts +52 -0
- package/autoresearch/save-adapters/zhihu-question-full.ts +57 -0
- package/autoresearch/save-adapters/zhihu-search-detail.ts +53 -0
- package/autoresearch/save-tasks.json +281 -0
- package/autoresearch/v2ex-tasks.json +899 -0
- package/autoresearch/zhihu-tasks.json +848 -0
- package/bun.lock +615 -0
- package/dist/browser/base-page.d.ts +4 -2
- package/dist/browser/base-page.js +37 -4
- package/dist/browser/bridge.js +10 -8
- package/dist/browser/cdp.js +2 -6
- package/dist/browser/daemon-client.d.ts +11 -1
- package/dist/browser/daemon-client.js +3 -0
- package/dist/browser/dom-helpers.d.ts +4 -2
- package/dist/browser/dom-helpers.js +42 -31
- package/dist/browser/dom-snapshot.js +23 -1
- package/dist/browser/page.d.ts +7 -2
- package/dist/browser/page.js +112 -30
- package/dist/browser.test.js +1 -1
- package/dist/build-manifest.d.ts +1 -0
- package/dist/build-manifest.js +1 -0
- package/dist/cli-manifest.json +1133 -182
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +48 -7
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +88 -0
- package/dist/clis/1688/item.d.ts +70 -0
- package/dist/clis/1688/item.js +187 -0
- package/dist/clis/1688/item.test.d.ts +1 -0
- package/dist/clis/1688/item.test.js +67 -0
- package/dist/clis/1688/search.d.ts +56 -0
- package/dist/clis/1688/search.js +309 -0
- package/dist/clis/1688/search.test.d.ts +1 -0
- package/dist/clis/1688/search.test.js +75 -0
- package/dist/clis/1688/shared.d.ts +112 -0
- package/dist/clis/1688/shared.js +514 -0
- package/dist/clis/1688/shared.test.d.ts +1 -0
- package/dist/clis/1688/shared.test.js +57 -0
- package/dist/clis/1688/store.d.ts +45 -0
- package/dist/clis/1688/store.js +226 -0
- package/dist/clis/1688/store.test.d.ts +1 -0
- package/dist/clis/1688/store.test.js +62 -0
- package/dist/clis/amazon/bestsellers.d.ts +0 -20
- package/dist/clis/amazon/bestsellers.js +6 -129
- package/dist/clis/amazon/bestsellers.test.js +12 -3
- package/dist/clis/amazon/movers-shakers.d.ts +1 -0
- package/dist/clis/amazon/movers-shakers.js +7 -0
- package/dist/clis/amazon/new-releases.d.ts +1 -0
- package/dist/clis/amazon/new-releases.js +7 -0
- package/dist/clis/amazon/rankings.d.ts +59 -0
- package/dist/clis/amazon/rankings.js +226 -0
- package/dist/clis/amazon/rankings.test.d.ts +1 -0
- package/dist/clis/amazon/rankings.test.js +41 -0
- package/dist/clis/amazon/shared.d.ts +11 -0
- package/dist/clis/amazon/shared.js +121 -11
- package/dist/clis/amazon/shared.test.js +11 -0
- package/dist/clis/bilibili/comments.js +2 -2
- package/dist/clis/bilibili/comments.test.js +3 -2
- package/dist/clis/bilibili/download.js +2 -1
- package/dist/clis/bilibili/subtitle.js +4 -3
- package/dist/clis/bilibili/subtitle.test.js +2 -1
- package/dist/clis/bilibili/utils.d.ts +5 -0
- package/dist/clis/bilibili/utils.js +30 -0
- package/dist/clis/bilibili/utils.test.d.ts +1 -0
- package/dist/clis/bilibili/utils.test.js +17 -0
- package/dist/clis/douban/marks.js +1 -1
- package/dist/clis/douban/subject.yaml +50 -19
- package/dist/clis/doubao/utils.js +32 -12
- package/dist/clis/douyin/_shared/browser-fetch.test.js +0 -1
- package/dist/clis/douyin/_shared/transcode.test.js +0 -2
- package/dist/clis/douyin/draft.test.js +0 -2
- package/dist/clis/facebook/search.test.js +0 -2
- package/dist/clis/gemini/ask.js +9 -3
- package/dist/clis/gemini/ask.test.d.ts +1 -0
- package/dist/clis/gemini/ask.test.js +100 -0
- package/dist/clis/gemini/reply-state.test.d.ts +1 -0
- package/dist/clis/gemini/reply-state.test.js +641 -0
- package/dist/clis/gemini/utils.d.ts +44 -1
- package/dist/clis/gemini/utils.js +528 -61
- package/dist/clis/gemini/utils.test.js +149 -2
- package/dist/clis/hupu/detail.d.ts +1 -0
- package/dist/clis/hupu/detail.js +72 -0
- package/dist/clis/hupu/hot.yaml +43 -0
- package/dist/clis/hupu/like.d.ts +1 -0
- package/dist/clis/hupu/like.js +75 -0
- package/dist/clis/hupu/reply.d.ts +1 -0
- package/dist/clis/hupu/reply.js +71 -0
- package/dist/clis/hupu/search.d.ts +1 -0
- package/dist/clis/hupu/search.js +59 -0
- package/dist/clis/hupu/unlike.d.ts +1 -0
- package/dist/clis/hupu/unlike.js +75 -0
- package/dist/clis/hupu/utils.d.ts +20 -0
- package/dist/clis/hupu/utils.js +319 -0
- package/dist/clis/instagram/_shared/private-publish.d.ts +138 -0
- package/dist/clis/instagram/_shared/private-publish.js +1030 -0
- package/dist/clis/instagram/_shared/private-publish.test.d.ts +1 -0
- package/dist/clis/instagram/_shared/private-publish.test.js +705 -0
- package/dist/clis/instagram/_shared/protocol-capture.d.ts +26 -0
- package/dist/clis/instagram/_shared/protocol-capture.js +282 -0
- package/dist/clis/instagram/_shared/protocol-capture.test.d.ts +1 -0
- package/dist/clis/instagram/_shared/protocol-capture.test.js +114 -0
- package/dist/clis/instagram/_shared/runtime-info.d.ts +9 -0
- package/dist/clis/instagram/_shared/runtime-info.js +81 -0
- package/dist/clis/instagram/note.d.ts +1 -0
- package/dist/clis/instagram/note.js +222 -0
- package/dist/clis/instagram/note.test.d.ts +1 -0
- package/dist/clis/instagram/note.test.js +81 -0
- package/dist/clis/instagram/post.d.ts +4 -0
- package/dist/clis/instagram/post.js +1496 -0
- package/dist/clis/instagram/post.test.d.ts +1 -0
- package/dist/clis/instagram/post.test.js +1647 -0
- package/dist/clis/instagram/reel.d.ts +1 -0
- package/dist/clis/instagram/reel.js +826 -0
- package/dist/clis/instagram/reel.test.d.ts +1 -0
- package/dist/clis/instagram/reel.test.js +167 -0
- package/dist/clis/instagram/story.d.ts +1 -0
- package/dist/clis/instagram/story.js +115 -0
- package/dist/clis/instagram/story.test.d.ts +1 -0
- package/dist/clis/instagram/story.test.js +167 -0
- package/dist/clis/sinafinance/stock-rank.d.ts +4 -0
- package/dist/clis/sinafinance/stock-rank.js +65 -0
- package/dist/clis/substack/utils.test.js +0 -2
- package/dist/clis/twitter/post.js +72 -45
- package/dist/clis/twitter/post.test.d.ts +1 -0
- package/dist/clis/twitter/post.test.js +116 -0
- package/dist/clis/twitter/reply.d.ts +12 -0
- package/dist/clis/twitter/reply.js +257 -35
- package/dist/clis/twitter/reply.test.d.ts +1 -0
- package/dist/clis/twitter/reply.test.js +151 -0
- package/dist/clis/twitter/search.js +67 -5
- package/dist/clis/twitter/search.test.js +83 -5
- package/dist/clis/xianyu/chat.d.ts +7 -0
- package/dist/clis/xianyu/chat.js +146 -0
- package/dist/clis/xianyu/chat.test.d.ts +1 -0
- package/dist/clis/xianyu/chat.test.js +15 -0
- package/dist/clis/xianyu/item.d.ts +7 -0
- package/dist/clis/xianyu/item.js +152 -0
- package/dist/clis/xianyu/item.test.d.ts +1 -0
- package/dist/clis/xianyu/item.test.js +56 -0
- package/dist/clis/xianyu/search.d.ts +10 -0
- package/dist/clis/xianyu/search.js +134 -0
- package/dist/clis/xianyu/search.test.d.ts +1 -0
- package/dist/clis/xianyu/search.test.js +17 -0
- package/dist/clis/xianyu/utils.d.ts +1 -0
- package/dist/clis/xianyu/utils.js +8 -0
- package/dist/clis/xiaoe/catalog.yaml +129 -0
- package/dist/clis/xiaoe/content.yaml +43 -0
- package/dist/clis/xiaoe/courses.yaml +73 -0
- package/dist/clis/xiaoe/detail.yaml +39 -0
- package/dist/clis/xiaoe/play-url.yaml +124 -0
- package/dist/clis/xiaohongshu/comments.test.js +0 -2
- package/dist/clis/xiaohongshu/creator-note-detail.test.js +0 -2
- package/dist/clis/xiaohongshu/creator-notes.test.js +0 -2
- package/dist/clis/xiaohongshu/download.test.js +0 -2
- package/dist/clis/xiaohongshu/note.test.js +0 -2
- package/dist/clis/xiaohongshu/publish.test.js +0 -2
- package/dist/clis/xiaohongshu/search.js +29 -20
- package/dist/clis/xiaohongshu/search.test.js +56 -48
- package/dist/clis/yuanbao/ask.d.ts +21 -0
- package/dist/clis/yuanbao/ask.js +427 -0
- package/dist/clis/yuanbao/ask.test.d.ts +1 -0
- package/dist/clis/yuanbao/ask.test.js +124 -0
- package/dist/clis/yuanbao/new.d.ts +1 -0
- package/dist/clis/yuanbao/new.js +70 -0
- package/dist/clis/yuanbao/new.test.d.ts +1 -0
- package/dist/clis/yuanbao/new.test.js +30 -0
- package/dist/clis/yuanbao/shared.d.ts +13 -0
- package/dist/clis/yuanbao/shared.js +49 -0
- package/dist/clis/zhihu/question.js +30 -19
- package/dist/clis/zhihu/question.test.js +34 -16
- package/dist/commanderAdapter.js +8 -4
- package/dist/commanderAdapter.test.js +42 -0
- package/dist/completion.js +3 -1
- package/dist/completion.test.d.ts +1 -0
- package/dist/completion.test.js +23 -0
- package/dist/doctor.js +1 -1
- package/dist/electron-apps.d.ts +2 -0
- package/dist/electron-apps.js +7 -1
- package/dist/errors.js +1 -1
- package/dist/execution.js +25 -35
- package/dist/explore.js +1 -1
- package/dist/launcher.d.ts +4 -0
- package/dist/launcher.js +64 -8
- package/dist/launcher.test.js +88 -7
- package/dist/output.d.ts +2 -0
- package/dist/output.js +10 -1
- package/dist/output.test.d.ts +0 -3
- package/dist/output.test.js +59 -92
- package/dist/pipeline/executor.test.js +0 -2
- package/dist/pipeline/steps/download.test.js +0 -2
- package/dist/registry.d.ts +2 -0
- package/dist/serialization.d.ts +1 -0
- package/dist/serialization.js +1 -0
- package/dist/types.d.ts +9 -2
- package/docs/.vitepress/config.mts +4 -0
- package/docs/adapters/browser/1688.md +52 -0
- package/docs/adapters/browser/36kr.md +2 -1
- package/docs/adapters/browser/doubao.md +5 -1
- package/docs/adapters/browser/hupu.md +53 -0
- package/docs/adapters/browser/sinafinance.md +32 -2
- package/docs/adapters/browser/weibo.md +6 -1
- package/docs/adapters/browser/wikipedia.md +2 -0
- package/docs/adapters/browser/xianyu.md +42 -0
- package/docs/adapters/browser/xiaoe.md +44 -0
- package/docs/adapters/browser/yuanbao.md +64 -0
- package/docs/adapters/index.md +14 -5
- package/docs/comparison.md +1 -1
- package/docs/developer/ai-workflow.md +2 -2
- package/docs/developer/contributing.md +1 -1
- package/docs/developer/testing.md +2 -0
- package/docs/guide/plugins.md +1 -0
- package/docs/guide/troubleshooting.md +11 -0
- package/docs/superpowers/specs/2026-04-03-v2ex-autoresearch-design.md +41 -0
- package/docs/zh/guide/plugins.md +1 -0
- package/extension/dist/background.js +1127 -0
- package/extension/src/background.test.ts +39 -0
- package/extension/src/background.ts +223 -34
- package/extension/src/cdp.ts +194 -4
- package/extension/src/protocol.ts +22 -1
- package/package.json +3 -2
- package/scripts/postinstall.js +1 -1
- package/skills/opencli-explorer/SKILL.md +1 -1
- package/skills/opencli-oneshot/SKILL.md +2 -2
- package/skills/opencli-operate/SKILL.md +120 -27
- package/skills/opencli-usage/SKILL.md +31 -20
- package/skills/opencli-usage/browser.md +114 -16
- package/skills/opencli-usage/public-api.md +32 -3
- package/skills/smart-search/SKILL.md +156 -0
- package/skills/smart-search/references/sources-ai.md +74 -0
- package/skills/smart-search/references/sources-info.md +43 -0
- package/skills/smart-search/references/sources-media.md +50 -0
- package/skills/smart-search/references/sources-other.md +42 -0
- package/skills/smart-search/references/sources-shopping.md +31 -0
- package/skills/smart-search/references/sources-social.md +51 -0
- package/skills/smart-search/references/sources-tech.md +42 -0
- package/skills/smart-search/references/sources-travel.md +20 -0
- package/src/browser/base-page.ts +41 -6
- package/src/browser/bridge.ts +11 -8
- package/src/browser/cdp.ts +1 -8
- package/src/browser/daemon-client.ts +11 -1
- package/src/browser/dom-helpers.ts +43 -31
- package/src/browser/dom-snapshot.ts +23 -1
- package/src/browser/page.ts +115 -31
- package/src/browser.test.ts +1 -1
- package/src/build-manifest.ts +2 -0
- package/src/cli.test.ts +133 -0
- package/src/cli.ts +73 -11
- package/src/clis/1688/item.test.ts +69 -0
- package/src/clis/1688/item.ts +282 -0
- package/src/clis/1688/search.test.ts +81 -0
- package/src/clis/1688/search.ts +402 -0
- package/src/clis/1688/shared.test.ts +75 -0
- package/src/clis/1688/shared.ts +623 -0
- package/src/clis/1688/store.test.ts +69 -0
- package/src/clis/1688/store.ts +300 -0
- package/src/clis/amazon/bestsellers.test.ts +12 -3
- package/src/clis/amazon/bestsellers.ts +6 -178
- package/src/clis/amazon/movers-shakers.ts +8 -0
- package/src/clis/amazon/new-releases.ts +8 -0
- package/src/clis/amazon/rankings.test.ts +47 -0
- package/src/clis/amazon/rankings.ts +312 -0
- package/src/clis/amazon/shared.test.ts +16 -0
- package/src/clis/amazon/shared.ts +134 -12
- package/src/clis/bilibili/comments.test.ts +4 -3
- package/src/clis/bilibili/comments.ts +2 -2
- package/src/clis/bilibili/download.ts +2 -1
- package/src/clis/bilibili/subtitle.test.ts +2 -1
- package/src/clis/bilibili/subtitle.ts +4 -3
- package/src/clis/bilibili/utils.test.ts +21 -0
- package/src/clis/bilibili/utils.ts +27 -0
- package/src/clis/douban/marks.ts +1 -1
- package/src/clis/douban/subject.yaml +50 -19
- package/src/clis/doubao/utils.ts +32 -12
- package/src/clis/douyin/_shared/browser-fetch.test.ts +0 -1
- package/src/clis/douyin/_shared/transcode.test.ts +0 -2
- package/src/clis/douyin/draft.test.ts +0 -2
- package/src/clis/facebook/search.test.ts +0 -2
- package/src/clis/gemini/ask.test.ts +116 -0
- package/src/clis/gemini/ask.ts +10 -3
- package/src/clis/gemini/reply-state.test.ts +708 -0
- package/src/clis/gemini/utils.test.ts +184 -2
- package/src/clis/gemini/utils.ts +588 -60
- package/src/clis/hupu/detail.ts +126 -0
- package/src/clis/hupu/hot.yaml +43 -0
- package/src/clis/hupu/like.ts +76 -0
- package/src/clis/hupu/reply.ts +76 -0
- package/src/clis/hupu/search.ts +95 -0
- package/src/clis/hupu/unlike.ts +76 -0
- package/src/clis/hupu/utils.ts +381 -0
- package/src/clis/instagram/_shared/private-publish.test.ts +827 -0
- package/src/clis/instagram/_shared/private-publish.ts +1303 -0
- package/src/clis/instagram/_shared/protocol-capture.test.ts +148 -0
- package/src/clis/instagram/_shared/protocol-capture.ts +321 -0
- package/src/clis/instagram/_shared/runtime-info.ts +91 -0
- package/src/clis/instagram/note.test.ts +96 -0
- package/src/clis/instagram/note.ts +254 -0
- package/src/clis/instagram/post.test.ts +1716 -0
- package/src/clis/instagram/post.ts +1620 -0
- package/src/clis/instagram/reel.test.ts +191 -0
- package/src/clis/instagram/reel.ts +886 -0
- package/src/clis/instagram/story.test.ts +191 -0
- package/src/clis/instagram/story.ts +151 -0
- package/src/clis/sinafinance/stock-rank.ts +68 -0
- package/src/clis/substack/utils.test.ts +0 -2
- package/src/clis/twitter/post.test.ts +157 -0
- package/src/clis/twitter/post.ts +82 -48
- package/src/clis/twitter/reply.test.ts +177 -0
- package/src/clis/twitter/reply.ts +285 -39
- package/src/clis/twitter/search.test.ts +88 -5
- package/src/clis/twitter/search.ts +68 -5
- package/src/clis/xianyu/chat.test.ts +20 -0
- package/src/clis/xianyu/chat.ts +175 -0
- package/src/clis/xianyu/item.test.ts +67 -0
- package/src/clis/xianyu/item.ts +172 -0
- package/src/clis/xianyu/search.test.ts +22 -0
- package/src/clis/xianyu/search.ts +151 -0
- package/src/clis/xianyu/utils.ts +9 -0
- package/src/clis/xiaoe/catalog.yaml +129 -0
- package/src/clis/xiaoe/content.yaml +43 -0
- package/src/clis/xiaoe/courses.yaml +73 -0
- package/src/clis/xiaoe/detail.yaml +39 -0
- package/src/clis/xiaoe/play-url.yaml +124 -0
- package/src/clis/xiaohongshu/comments.test.ts +0 -2
- package/src/clis/xiaohongshu/creator-note-detail.test.ts +0 -2
- package/src/clis/xiaohongshu/creator-notes.test.ts +0 -2
- package/src/clis/xiaohongshu/download.test.ts +0 -2
- package/src/clis/xiaohongshu/note.test.ts +0 -2
- package/src/clis/xiaohongshu/publish.test.ts +0 -2
- package/src/clis/xiaohongshu/search.test.ts +59 -48
- package/src/clis/xiaohongshu/search.ts +31 -21
- package/src/clis/yuanbao/ask.test.ts +156 -0
- package/src/clis/yuanbao/ask.ts +522 -0
- package/src/clis/yuanbao/new.test.ts +36 -0
- package/src/clis/yuanbao/new.ts +81 -0
- package/src/clis/yuanbao/shared.ts +57 -0
- package/src/clis/zhihu/question.test.ts +42 -17
- package/src/clis/zhihu/question.ts +31 -26
- package/src/commanderAdapter.test.ts +51 -0
- package/src/commanderAdapter.ts +8 -4
- package/src/completion.test.ts +30 -0
- package/src/completion.ts +3 -1
- package/src/doctor.ts +1 -1
- package/src/electron-apps.ts +9 -1
- package/src/errors.ts +1 -1
- package/src/execution.ts +26 -30
- package/src/explore.ts +1 -1
- package/src/launcher.test.ts +121 -7
- package/src/launcher.ts +87 -9
- package/src/output.test.ts +50 -90
- package/src/output.ts +10 -1
- package/src/pipeline/executor.test.ts +0 -2
- package/src/pipeline/steps/download.test.ts +0 -2
- package/src/registry.ts +2 -0
- package/src/serialization.ts +2 -0
- package/src/types.ts +9 -2
- package/tests/e2e/browser-auth.test.ts +9 -0
- package/CLI-EXPLORER.md +0 -724
- package/CLI-ONESHOT.md +0 -216
- package/SKILL.md +0 -59
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.6.1](https://github.com/jackwener/opencli/compare/v1.6.0...v1.6.1) (2026-04-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* sync package-lock.json version with package.json ([#698](https://github.com/jackwener/opencli/issues/698))
|
|
9
|
+
|
|
10
|
+
|
|
3
11
|
## [1.6.0](https://github.com/jackwener/opencli/compare/v1.5.9...v1.6.0) (2026-04-02)
|
|
4
12
|
|
|
5
13
|
|
package/CONTRIBUTING.md
CHANGED
|
@@ -109,7 +109,7 @@ cli({
|
|
|
109
109
|
});
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
Use `opencli explore <url>` to discover APIs and see [
|
|
112
|
+
Use `opencli explore <url>` to discover APIs and see [opencli-explorer skill](./skills/opencli-explorer/SKILL.md) if you need the full adapter workflow.
|
|
113
113
|
|
|
114
114
|
### Validate Your Adapter
|
|
115
115
|
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# OpenCLI
|
|
2
2
|
|
|
3
3
|
> **Make any website, Electron App, or Local Tool your CLI.**
|
|
4
|
-
> Zero risk · Reuse Chrome login · AI-powered discovery · Universal CLI Hub
|
|
4
|
+
> Zero risk · Reuse Chrome/Chromium login · AI-powered discovery · Universal CLI Hub
|
|
5
5
|
|
|
6
6
|
[](./README.zh-CN.md)
|
|
7
7
|
[](https://www.npmjs.com/package/@jackwener/opencli)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
A CLI tool that turns **any website**, **Electron app**, or **local CLI tool** into a command-line interface — Bilibili, Zhihu, 小红书, Twitter/X, Reddit, YouTube, Antigravity, `gh`, `docker`, and [many more](#built-in-commands) — powered by browser session reuse and AI-native discovery.
|
|
12
12
|
|
|
13
|
-
**Built for AI Agents** —
|
|
13
|
+
**Built for AI Agents** — Load the [`opencli-operate` skill](./skills/opencli-operate/SKILL.md) to give any AI agent (Claude Code, Cursor) direct browser control. Operate any website, then crystallize those interactions into reusable CLI commands. Configure `opencli list` in your `AGENT.md` or `.cursorrules` so the AI auto-discovers all available tools.
|
|
14
14
|
|
|
15
15
|
**CLI Hub** — Register any local CLI (`opencli register mycli`) so AI agents can discover and call it alongside built-in commands. Auto-installs missing tools via your package manager (e.g. if `gh` isn't installed, `opencli gh ...` runs `brew install gh` first then re-executes seamlessly).
|
|
16
16
|
|
|
@@ -21,33 +21,17 @@ A CLI tool that turns **any website**, **Electron app**, or **local CLI tool** i
|
|
|
21
21
|
## Highlights
|
|
22
22
|
|
|
23
23
|
- **CLI All Electron** — CLI-ify apps like Antigravity Ultra! Now AI can control itself natively.
|
|
24
|
-
- **
|
|
24
|
+
- **Browser Automation** — `operate` gives AI agents direct browser control: click, type, extract, screenshot — any interaction, fully scriptable.
|
|
25
|
+
- **Website → CLI** — Turn any website into a deterministic CLI: 70+ pre-built adapters, or crystallize your own with `opencli record`.
|
|
26
|
+
- **Account-safe** — Reuses Chrome/Chromium logged-in state; your credentials never leave the browser.
|
|
25
27
|
- **Anti-detection built-in** — Patches `navigator.webdriver`, stubs `window.chrome`, fakes plugin lists, cleans ChromeDriver/Playwright globals, and strips CDP frames from Error stack traces. Extensive anti-fingerprinting and risk-control evasion measures baked in at every layer.
|
|
26
|
-
- **AI Agent ready** — `explore` discovers APIs, `synthesize` generates adapters, `cascade` finds auth strategies.
|
|
28
|
+
- **AI Agent ready** — `explore` discovers APIs, `synthesize` generates adapters, `cascade` finds auth strategies, `operate` controls the browser directly.
|
|
27
29
|
- **External CLI Hub** — Discover, auto-install, and passthrough commands to any external CLI (gh, obsidian, docker, etc). Zero setup.
|
|
28
30
|
- **Self-healing setup** — `opencli doctor` diagnoses and auto-starts the daemon, extension, and live browser connectivity.
|
|
29
31
|
- **Dynamic Loader** — Simply drop `.ts` or `.yaml` adapters into the `clis/` folder for auto-registration.
|
|
30
|
-
- **Dual-Engine Architecture** — Supports both YAML declarative data pipelines and robust browser runtime TypeScript injections.
|
|
31
|
-
|
|
32
|
-
## Why opencli?
|
|
33
|
-
|
|
34
|
-
There are many great browser automation tools. Here's when opencli is the right choice:
|
|
35
|
-
|
|
36
|
-
| Your need | Best tool | Why |
|
|
37
|
-
|-----------|-----------|-----|
|
|
38
|
-
| Scheduled data extraction from specific sites | **opencli** | Pre-built adapters, deterministic JSON, zero LLM cost |
|
|
39
|
-
| AI agent needs reliable site operations | **opencli** | Hundreds of commands, structured output, fast deterministic response |
|
|
40
|
-
| Explore an unknown website ad-hoc | Browser-Use, Stagehand | LLM-driven general browsing for one-off tasks |
|
|
41
|
-
| Large-scale web crawling | Crawl4AI, Scrapy | Purpose-built for throughput and scale |
|
|
42
|
-
| Control desktop Electron apps from terminal | **opencli** | CDP + AppleScript — the only CLI tool that does this |
|
|
43
|
-
|
|
44
|
-
**What makes opencli different:**
|
|
45
|
-
|
|
46
32
|
- **Zero LLM cost** — No tokens consumed at runtime. Run 10,000 times and pay nothing.
|
|
47
33
|
- **Deterministic** — Same command, same output schema, every time. Pipeable, scriptable, CI-friendly.
|
|
48
|
-
- **Broad coverage** —
|
|
49
|
-
|
|
50
|
-
> For a detailed comparison with Browser-Use, Crawl4AI, Firecrawl, and others, see the [Comparison Guide](./docs/comparison.md).
|
|
34
|
+
- **Broad coverage** — 73+ sites across global and Chinese platforms (Bilibili, Zhihu, Xiaohongshu, Reddit, HackerNews, and more), plus desktop Electron apps via CDP.
|
|
51
35
|
|
|
52
36
|
---
|
|
53
37
|
|
|
@@ -55,7 +39,7 @@ There are many great browser automation tools. Here's when opencli is the right
|
|
|
55
39
|
|
|
56
40
|
### 1. Install Browser Bridge Extension
|
|
57
41
|
|
|
58
|
-
> OpenCLI connects to your browser through a lightweight **Browser Bridge** Chrome
|
|
42
|
+
> OpenCLI connects to your browser through a lightweight **Browser Bridge** Chrome/Chromium extension + micro-daemon (zero config, auto-start).
|
|
59
43
|
|
|
60
44
|
1. Go to the GitHub [Releases page](https://github.com/jackwener/opencli/releases) and download the latest `opencli-extension.zip`.
|
|
61
45
|
2. Unzip the file and open `chrome://extensions`, enable **Developer mode** (top-right toggle).
|
|
@@ -67,6 +51,9 @@ There are many great browser automation tools. Here's when opencli is the right
|
|
|
67
51
|
|
|
68
52
|
```bash
|
|
69
53
|
npm install -g @jackwener/opencli
|
|
54
|
+
|
|
55
|
+
# Install AI skills for Claude Code / Cursor
|
|
56
|
+
npx skills add jackwener/opencli
|
|
70
57
|
```
|
|
71
58
|
|
|
72
59
|
### 3. Verify & Try
|
|
@@ -86,21 +73,9 @@ opencli bilibili hot --limit 5 # Browser command (requires Extension)
|
|
|
86
73
|
|
|
87
74
|
### 4. Browser Automation — Make Websites Accessible for AI Agents
|
|
88
75
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
Point your AI agent (Claude Code, Cursor) to [`skills/opencli-operate/SKILL.md`](./skills/opencli-operate/SKILL.md). It has everything needed.
|
|
92
|
-
|
|
93
|
-
#### Human Quickstart (3 steps)
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
opencli operate open https://news.ycombinator.com # 1. Open a page
|
|
97
|
-
opencli operate state # 2. See interactive elements
|
|
98
|
-
opencli operate eval "document.title" # 3. Extract data
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
More commands: `click`, `type`, `select`, `keys`, `wait`, `get`, `screenshot`, `scroll`, `back`, `close`.
|
|
76
|
+
Point your AI agent (Claude Code, Cursor) to [`skills/opencli-operate/SKILL.md`](./skills/opencli-operate/SKILL.md). It has everything needed — full command reference, examples, and workflow.
|
|
102
77
|
|
|
103
|
-
|
|
78
|
+
Available commands: `open`, `state`, `click`, `type`, `select`, `keys`, `wait`, `get`, `screenshot`, `scroll`, `back`, `eval`, `network`, `init`, `verify`, `close`.
|
|
104
79
|
|
|
105
80
|
### Update
|
|
106
81
|
|
|
@@ -118,6 +93,7 @@ npx skills add jackwener/opencli
|
|
|
118
93
|
|
|
119
94
|
# Or install specific skills
|
|
120
95
|
npx skills add jackwener/opencli --skill opencli-usage # Command reference
|
|
96
|
+
npx skills add jackwener/opencli --skill opencli-operate # Browser automation for AI agents
|
|
121
97
|
npx skills add jackwener/opencli --skill opencli-explorer # Adapter development guide
|
|
122
98
|
npx skills add jackwener/opencli --skill opencli-oneshot # Quick command reference
|
|
123
99
|
```
|
|
@@ -142,9 +118,9 @@ git clone git@github.com:jackwener/opencli.git && cd opencli && npm install && n
|
|
|
142
118
|
## Prerequisites
|
|
143
119
|
|
|
144
120
|
- **Node.js**: >= 20.0.0 (or **Bun** >= 1.0)
|
|
145
|
-
- **Chrome** running **and logged into the target site** (e.g. bilibili.com, zhihu.com, xiaohongshu.com).
|
|
121
|
+
- **Chrome or Chromium** running **and logged into the target site** (e.g. bilibili.com, zhihu.com, xiaohongshu.com, goofish.com).
|
|
146
122
|
|
|
147
|
-
> **⚠️ Important**: Browser commands reuse your Chrome login session. You must be logged into the target website in Chrome before running commands. If you get empty data or errors, check your login status first.
|
|
123
|
+
> **⚠️ Important**: Browser commands reuse your Chrome/Chromium login session. You must be logged into the target website in Chrome or Chromium before running commands. If you get empty data or errors, check your login status first.
|
|
148
124
|
|
|
149
125
|
## Built-in Commands
|
|
150
126
|
|
|
@@ -153,14 +129,19 @@ git clone git@github.com:jackwener/opencli.git && cd opencli && npm install && n
|
|
|
153
129
|
| **xiaohongshu** | `search` `note` `comments` `feed` `user` `download` `publish` `notifications` `creator-notes` `creator-notes-summary` `creator-note-detail` `creator-profile` `creator-stats` |
|
|
154
130
|
| **bilibili** | `hot` `search` `history` `feed` `ranking` `download` `comments` `dynamic` `favorite` `following` `me` `subtitle` `user-videos` |
|
|
155
131
|
| **tieba** | `hot` `posts` `search` `read` |
|
|
132
|
+
| **hupu** | `hot` `search` `detail` `reply` `like` `unlike` |
|
|
156
133
|
| **twitter** | `trending` `search` `timeline` `bookmarks` `post` `download` `profile` `article` `like` `likes` `notifications` `reply` `reply-dm` `thread` `follow` `unfollow` `followers` `following` `block` `unblock` `bookmark` `unbookmark` `delete` `hide-reply` `accept` |
|
|
157
134
|
| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `user` `user-posts` `user-comments` `read` `save` `saved` `subscribe` `upvote` `upvoted` `comment` |
|
|
158
135
|
| **amazon** | `bestsellers` `search` `product` `offer` `discussion` |
|
|
136
|
+
| **1688** | `search` `item` `store` |
|
|
159
137
|
| **gemini** | `new` `ask` `image` |
|
|
138
|
+
| **yuanbao** | `new` `ask` |
|
|
160
139
|
| **notebooklm** | `status` `list` `open` `select` `current` `get` `metadata` `source-list` `source-get` `source-fulltext` `source-guide` `history` `note-list` `notes-list` `notes-get` `summary` |
|
|
161
140
|
| **spotify** | `auth` `status` `play` `pause` `next` `prev` `volume` `search` `queue` `shuffle` `repeat` |
|
|
141
|
+
| **xianyu** | `search` `item` `chat` |
|
|
142
|
+
| **xiaoe** | `courses` `detail` `catalog` `play-url` `content` |
|
|
162
143
|
|
|
163
|
-
|
|
144
|
+
73+ adapters in total — **[→ see all supported sites & commands](./docs/adapters/index.md)**
|
|
164
145
|
|
|
165
146
|
## CLI Hub
|
|
166
147
|
|
|
@@ -269,14 +250,15 @@ opencli plugin uninstall my-tool
|
|
|
269
250
|
| [opencli-plugin-github-trending](https://github.com/ByteYue/opencli-plugin-github-trending) | YAML | GitHub Trending repositories |
|
|
270
251
|
| [opencli-plugin-hot-digest](https://github.com/ByteYue/opencli-plugin-hot-digest) | TS | Multi-platform trending aggregator |
|
|
271
252
|
| [opencli-plugin-juejin](https://github.com/Astro-Han/opencli-plugin-juejin) | YAML | 稀土掘金 (Juejin) hot articles |
|
|
253
|
+
| [opencli-plugin-vk](https://github.com/flobo3/opencli-plugin-vk) | TS | VK (VKontakte) wall, feed, and search |
|
|
272
254
|
|
|
273
255
|
See [Plugins Guide](./docs/guide/plugins.md) for creating your own plugin.
|
|
274
256
|
|
|
275
257
|
## For AI Agents (Developer Guide)
|
|
276
258
|
|
|
277
|
-
> **Quick mode**: To generate a single command for a specific page URL, see [
|
|
259
|
+
> **Quick mode**: To generate a single command for a specific page URL, see [opencli-oneshot skill](./skills/opencli-oneshot/SKILL.md) — just a URL + one-line goal, 4 steps done.
|
|
278
260
|
|
|
279
|
-
> **Full mode**: Before writing any adapter code, read [
|
|
261
|
+
> **Full mode**: Before writing any adapter code, read [opencli-explorer skill](./skills/opencli-explorer/SKILL.md). It contains the complete browser exploration workflow, the 5-tier authentication strategy decision tree, and debugging guide.
|
|
280
262
|
|
|
281
263
|
```bash
|
|
282
264
|
opencli explore https://example.com --site mysite # Discover APIs + capabilities
|
|
@@ -291,9 +273,9 @@ See **[TESTING.md](./TESTING.md)** for how to run and write tests.
|
|
|
291
273
|
|
|
292
274
|
## Troubleshooting
|
|
293
275
|
|
|
294
|
-
- **"Extension not connected"** — Ensure the Browser Bridge extension is installed and **enabled** in `chrome://extensions
|
|
276
|
+
- **"Extension not connected"** — Ensure the Browser Bridge extension is installed and **enabled** in `chrome://extensions` in Chrome or Chromium.
|
|
295
277
|
- **"attach failed: Cannot access a chrome-extension:// URL"** — Another extension may be interfering. Try disabling other extensions temporarily.
|
|
296
|
-
- **Empty data or 'Unauthorized' error** — Your Chrome login session may have expired. Navigate to the target site and log in again.
|
|
278
|
+
- **Empty data or 'Unauthorized' error** — Your Chrome/Chromium login session may have expired. Navigate to the target site and log in again.
|
|
297
279
|
- **Node API errors** — Ensure Node.js >= 20. Some dependencies require modern Node APIs.
|
|
298
280
|
- **Daemon issues** — Check status: `curl localhost:19825/status` · View logs: `curl localhost:19825/logs`
|
|
299
281
|
|
package/README.zh-CN.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# OpenCLI
|
|
2
2
|
|
|
3
3
|
> **把任何网站、本地工具、Electron 应用变成能够让 AI 调用的命令行!**
|
|
4
|
-
> 零风控 · 复用 Chrome 登录 · AI 自动发现接口 · 全能 CLI 枢纽
|
|
4
|
+
> 零风控 · 复用 Chrome/Chromium 登录 · AI 自动发现接口 · 全能 CLI 枢纽
|
|
5
5
|
|
|
6
6
|
[](./README.md)
|
|
7
7
|
[](https://www.npmjs.com/package/@jackwener/opencli)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
OpenCLI 将任何网站、本地 CLI 或 Electron 应用(如 Antigravity)变成命令行工具 — B站、知乎、小红书、Twitter/X、Reddit、YouTube,以及 `gh`、`docker` 等[多种站点与工具](#内置命令) — 复用浏览器登录态,AI 驱动探索。
|
|
12
12
|
|
|
13
|
-
**专为 AI Agent
|
|
13
|
+
**专为 AI Agent 打造**:加载 [`opencli-operate` skill](./skills/opencli-operate/SKILL.md),赋予 AI Agent(Claude Code、Cursor 等)直接操控浏览器的能力——操作任意网站,并将这些交互沉淀为可复用的 CLI 命令。在 `AGENT.md` 或 `.cursorrules` 中配置 `opencli list`,AI 即可自动发现并调用所有可用工具。
|
|
14
14
|
|
|
15
15
|
**opencli 支持 CLI 化所有 electron 应用!最强大更新来袭!**
|
|
16
16
|
CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合出各种神奇的能力。
|
|
@@ -22,41 +22,24 @@ CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合
|
|
|
22
22
|
## 亮点
|
|
23
23
|
|
|
24
24
|
- **CLI All Electron** — 支持把所有 electron 应用(如 Antigravity Ultra)CLI 化,让 AI 控制自己!
|
|
25
|
-
-
|
|
26
|
-
-
|
|
25
|
+
- **浏览器自动化** — `operate` 赋予 AI Agent 直接操控浏览器的能力:点击、输入、提取、截图,任意交互皆可脚本化
|
|
26
|
+
- **网页转 CLI** — 将任意网站变成确定性命令行工具:73+ 预置适配器,或用 `opencli record` 沉淀自己的操作
|
|
27
|
+
- **多站点覆盖** — 73+ 站点,横跨全球与中国平台(B站、知乎、小红书、Reddit、HackerNews 等),并支持通过 CDP 控制桌面 Electron 应用
|
|
28
|
+
- **零风控** — 复用 Chrome/Chromium 登录态,无需存储任何凭证
|
|
27
29
|
- **外部 CLI 枢纽** — 统一发现、自动安装、透传执行 `gh`、`docker` 等本地 CLI
|
|
28
30
|
- **自修复配置** — `opencli doctor` 自动启动 daemon,诊断扩展和浏览器连接状态
|
|
29
|
-
- **AI 原生** — `explore` 自动发现 API,`synthesize` 生成适配器,`cascade`
|
|
30
|
-
- **动态加载引擎** — 声明式的 `.yaml` 或者底层定制的 `.ts` 适配器,放入 `clis/` 文件夹即可自动注册生效
|
|
31
|
-
|
|
32
|
-
## 为什么选 opencli?
|
|
33
|
-
|
|
34
|
-
浏览器自动化工具很多,opencli 适合什么场景?
|
|
35
|
-
|
|
36
|
-
| 你的需求 | 最佳工具 | 原因 |
|
|
37
|
-
|----------|----------|------|
|
|
38
|
-
| 定时从特定站点提取结构化数据 | **opencli** | 预定义适配器,确定性 JSON 输出,零 LLM 成本 |
|
|
39
|
-
| AI Agent 需要可靠的站点操作 | **opencli** | 数百条命令,结构化输出,快速确定性响应 |
|
|
40
|
-
| 临时探索未知网站 | Browser-Use、Stagehand | LLM 驱动的通用浏览,适合一次性任务 |
|
|
41
|
-
| 大规模网页爬取 | Crawl4AI、Scrapy | 专为吞吐量和规模设计 |
|
|
42
|
-
| 从终端控制桌面 Electron 应用 | **opencli** | CDP + AppleScript,目前唯一能做到这一点的 CLI 工具 |
|
|
43
|
-
|
|
44
|
-
**opencli 的核心差异:**
|
|
45
|
-
|
|
31
|
+
- **AI 原生** — `explore` 自动发现 API,`synthesize` 生成适配器,`cascade` 探测认证策略,`operate` 直接控制浏览器
|
|
46
32
|
- **零 LLM 成本** — 运行时不消耗任何 token,跑一万次不花一分钱
|
|
47
33
|
- **确定性** — 同一命令永远返回同一结构,可管道化、可脚本化、CI 友好
|
|
48
|
-
- **覆盖广泛** — 50+ 站点,横跨全球与中国平台(B站、知乎、小红书、Reddit、HackerNews 等),并支持通过 CDP 控制桌面 Electron 应用
|
|
49
|
-
|
|
50
|
-
> 与 Browser-Use、Crawl4AI、Firecrawl 等工具的详细对比,请查看 [Comparison Guide](./docs/comparison.md)。
|
|
51
34
|
|
|
52
35
|
## 前置要求
|
|
53
36
|
|
|
54
37
|
- **Node.js**: >= 20.0.0
|
|
55
|
-
- **Chrome** 浏览器正在运行,且**已登录目标网站**(如 bilibili.com、zhihu.com、xiaohongshu.com)
|
|
38
|
+
- **Chrome 或 Chromium** 浏览器正在运行,且**已登录目标网站**(如 bilibili.com、zhihu.com、xiaohongshu.com、goofish.com)
|
|
56
39
|
|
|
57
|
-
> **⚠️ 重要**:大多数命令复用你的 Chrome 登录状态。运行命令前,你必须已在 Chrome 中打开目标网站并完成登录。如果获取到空数据或报错,请先检查你的浏览器登录状态。
|
|
40
|
+
> **⚠️ 重要**:大多数命令复用你的 Chrome/Chromium 登录状态。运行命令前,你必须已在 Chrome 或 Chromium 中打开目标网站并完成登录。如果获取到空数据或报错,请先检查你的浏览器登录状态。
|
|
58
41
|
|
|
59
|
-
OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与浏览器通信(零配置,自动启动)。
|
|
42
|
+
OpenCLI 通过轻量化的 **Browser Bridge** Chrome/Chromium 扩展 + 微型 daemon 与浏览器通信(零配置,自动启动)。
|
|
60
43
|
|
|
61
44
|
### Browser Bridge 扩展配置
|
|
62
45
|
|
|
@@ -64,7 +47,7 @@ OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与
|
|
|
64
47
|
|
|
65
48
|
**方式一:下载构建好的安装包(推荐)**
|
|
66
49
|
1. 到 GitHub [Releases 页面](https://github.com/jackwener/opencli/releases) 下载最新的 `opencli-extension.zip`。
|
|
67
|
-
2.
|
|
50
|
+
2. 解压后在 Chrome 或 Chromium 中打开 `chrome://extensions`,启用右上角的 **开发者模式**。
|
|
68
51
|
3. 点击 **加载已解压的扩展程序**,选择解压后的文件夹。
|
|
69
52
|
|
|
70
53
|
**方式二:加载源码(针对开发者)**
|
|
@@ -86,6 +69,9 @@ OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与
|
|
|
86
69
|
|
|
87
70
|
```bash
|
|
88
71
|
npm install -g @jackwener/opencli
|
|
72
|
+
|
|
73
|
+
# 安装 AI Skills(Claude Code / Cursor)
|
|
74
|
+
npx skills add jackwener/opencli
|
|
89
75
|
```
|
|
90
76
|
|
|
91
77
|
直接使用:
|
|
@@ -116,6 +102,12 @@ opencli list # 可以在任何地方使用了!
|
|
|
116
102
|
npm install -g @jackwener/opencli@latest
|
|
117
103
|
```
|
|
118
104
|
|
|
105
|
+
### 浏览器自动化 — 让 AI Agent 直接控制浏览器
|
|
106
|
+
|
|
107
|
+
将 [`skills/opencli-operate/SKILL.md`](./skills/opencli-operate/SKILL.md) 指向你的 AI Agent(Claude Code、Cursor),即可开箱即用,内含完整命令参考与使用示例。
|
|
108
|
+
|
|
109
|
+
可用命令:`open`、`state`、`click`、`type`、`select`、`keys`、`wait`、`get`、`screenshot`、`scroll`、`back`、`eval`、`network`、`init`、`verify`、`close`。
|
|
110
|
+
|
|
119
111
|
### 安装 AI Skills
|
|
120
112
|
|
|
121
113
|
OpenCLI 提供 [skills](./skills/) 供 AI Agent(Claude Code 等)使用:
|
|
@@ -126,6 +118,7 @@ npx skills add jackwener/opencli
|
|
|
126
118
|
|
|
127
119
|
# 或安装特定 skill
|
|
128
120
|
npx skills add jackwener/opencli --skill opencli-usage # 命令参考
|
|
121
|
+
npx skills add jackwener/opencli --skill opencli-operate # 浏览器自动化(AI Agent 专用)
|
|
129
122
|
npx skills add jackwener/opencli --skill opencli-explorer # 适配器开发指南
|
|
130
123
|
npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参考
|
|
131
124
|
```
|
|
@@ -139,6 +132,7 @@ npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参
|
|
|
139
132
|
| **twitter** | `trending` `bookmarks` `profile` `search` `timeline` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` `accept` `reply-dm` `block` `unblock` `hide-reply` | 浏览器 |
|
|
140
133
|
| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` | 浏览器 |
|
|
141
134
|
| **tieba** | `hot` `posts` `search` `read` | 浏览器 |
|
|
135
|
+
| **hupu** | `hot` `search` `detail` `reply` `like` `unlike` | 浏览器 |
|
|
142
136
|
| **cursor** | `status` `send` `read` `new` `dump` `composer` `model` `extract-code` `ask` `screenshot` `history` `export` | 桌面端 |
|
|
143
137
|
| **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 浏览器 |
|
|
144
138
|
| **codex** | `status` `send` `read` `new` `dump` `extract-diff` `model` `ask` `screenshot` `history` `export` | 桌面端 |
|
|
@@ -152,6 +146,7 @@ npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参
|
|
|
152
146
|
| **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` | 桌面端 |
|
|
153
147
|
| **chatgpt** | `status` `new` `send` `read` `ask` `model` | 桌面端 |
|
|
154
148
|
| **xiaohongshu** | `search` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 浏览器 |
|
|
149
|
+
| **xiaoe** | `courses` `detail` `catalog` `play-url` `content` | 浏览器 |
|
|
155
150
|
| **apple-podcasts** | `search` `episodes` `top` | 公开 |
|
|
156
151
|
| **xiaoyuzhou** | `podcast` `podcast-episodes` `episode` | 公开 |
|
|
157
152
|
| **zhihu** | `hot` `search` `question` `download` | 浏览器 |
|
|
@@ -191,6 +186,7 @@ npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参
|
|
|
191
186
|
| **facebook** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | 浏览器 |
|
|
192
187
|
| **google** | `news` `search` `suggest` `trends` | 公开 |
|
|
193
188
|
| **amazon** | `bestsellers` `search` `product` `offer` `discussion` | 浏览器 |
|
|
189
|
+
| **1688** | `search` `item` `store` | 浏览器 |
|
|
194
190
|
| **gemini** | `new` `ask` `image` | 浏览器 |
|
|
195
191
|
| **spotify** | `auth` `status` `play` `pause` `next` `prev` `volume` `search` `queue` `shuffle` `repeat` | OAuth API |
|
|
196
192
|
| **notebooklm** | `status` `list` `open` `select` `current` `get` `metadata` `source-list` `source-get` `source-fulltext` `source-guide` `history` `note-list` `notes-list` `notes-get` `summary` | 浏览器 |
|
|
@@ -205,9 +201,11 @@ npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参
|
|
|
205
201
|
| **pixiv** | `ranking` `search` `user` `illusts` `detail` `download` | 浏览器 |
|
|
206
202
|
| **tiktok** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | 浏览器 |
|
|
207
203
|
| **bluesky** | `search` `trending` `user` `profile` `thread` `feeds` `followers` `following` `starter-packs` | 公开 |
|
|
204
|
+
| **xianyu** | `search` `item` `chat` | 浏览器 |
|
|
208
205
|
| **douyin** | `videos` `publish` `drafts` `draft` `delete` `stats` `profile` `update` `hashtag` `location` `activities` `collections` | 浏览器 |
|
|
206
|
+
| **yuanbao** | `new` `ask` | 浏览器 |
|
|
209
207
|
|
|
210
|
-
|
|
208
|
+
73+ 适配器 — **[→ 查看完整命令列表](./docs/adapters/index.md)**
|
|
211
209
|
|
|
212
210
|
### 外部 CLI 枢纽
|
|
213
211
|
|
|
@@ -372,9 +370,9 @@ opencli plugin uninstall my-tool # 卸载
|
|
|
372
370
|
|
|
373
371
|
如果你是一个被要求查阅代码并编写新 `opencli` 适配器的 AI,请遵守以下工作流。
|
|
374
372
|
|
|
375
|
-
> **快速模式**:只想为某个页面快速生成一个命令?看 [
|
|
373
|
+
> **快速模式**:只想为某个页面快速生成一个命令?看 [opencli-oneshot skill](./skills/opencli-oneshot/SKILL.md) — 给一个 URL + 一句话描述,4 步搞定。
|
|
376
374
|
|
|
377
|
-
> **完整模式**:在编写任何新代码前,先阅读 [
|
|
375
|
+
> **完整模式**:在编写任何新代码前,先阅读 [opencli-explorer skill](./skills/opencli-explorer/SKILL.md)。它包含完整的适配器探索开发指南、API 探测流程、5级认证策略以及常见陷阱。
|
|
378
376
|
|
|
379
377
|
```bash
|
|
380
378
|
# 1. Deep Explore — 网络拦截 → 响应分析 → 能力推理 → 框架检测
|
|
@@ -395,11 +393,11 @@ opencli cascade https://api.example.com/data
|
|
|
395
393
|
## 常见问题排查
|
|
396
394
|
|
|
397
395
|
- **"Extension not connected" 报错**
|
|
398
|
-
- 确保你当前的 Chrome 已安装且**开启了** opencli Browser Bridge 扩展(在 `chrome://extensions` 中检查)。
|
|
396
|
+
- 确保你当前的 Chrome 或 Chromium 已安装且**开启了** opencli Browser Bridge 扩展(在 `chrome://extensions` 中检查)。
|
|
399
397
|
- **"attach failed: Cannot access a chrome-extension:// URL" 报错**
|
|
400
|
-
- 其他 Chrome 扩展(如 youmind、New Tab Override 或 AI 助手类扩展)可能产生冲突。请尝试**暂时禁用其他扩展**后重试。
|
|
398
|
+
- 其他 Chrome/Chromium 扩展(如 youmind、New Tab Override 或 AI 助手类扩展)可能产生冲突。请尝试**暂时禁用其他扩展**后重试。
|
|
401
399
|
- **返回空数据,或者报错 "Unauthorized"**
|
|
402
|
-
- Chrome
|
|
400
|
+
- Chrome/Chromium 里的登录态可能已经过期。请打开当前页面,在新标签页重新手工登录或刷新该页面。
|
|
403
401
|
- **Node API 错误 (如 parseArgs, fs 等)**
|
|
404
402
|
- 确保 Node.js 版本 `>= 20`。
|
|
405
403
|
- **Daemon 问题**
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"name": "extract-title-iana",
|
|
15
15
|
"steps": [
|
|
16
16
|
"opencli operate open https://www.iana.org",
|
|
17
|
-
"opencli operate eval \"document.querySelector('h1')?.textContent\""
|
|
17
|
+
"opencli operate eval \"document.querySelector('h1')?.textContent || document.title || document.querySelector('title')?.textContent\""
|
|
18
18
|
],
|
|
19
19
|
"judge": {
|
|
20
20
|
"type": "nonEmpty"
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"name": "extract-github-readme-heading",
|
|
68
68
|
"steps": [
|
|
69
69
|
"opencli operate open https://github.com/vercel/next.js",
|
|
70
|
-
"opencli operate eval \"document.querySelector('article h1, article h2')?.textContent?.trim()\""
|
|
70
|
+
"opencli operate eval \"document.querySelector('[data-testid=readme] h1, [data-testid=readme] h2, #readme h1, #readme h2, article h1, article h2, .markdown-body h1, .markdown-body h2')?.textContent?.trim()\""
|
|
71
71
|
],
|
|
72
72
|
"judge": {
|
|
73
73
|
"type": "nonEmpty"
|
|
@@ -88,7 +88,8 @@
|
|
|
88
88
|
"name": "extract-npm-description",
|
|
89
89
|
"steps": [
|
|
90
90
|
"opencli operate open https://www.npmjs.com/package/express",
|
|
91
|
-
"opencli operate
|
|
91
|
+
"opencli operate wait time 2",
|
|
92
|
+
"opencli operate eval \"(function(){var ps=document.querySelectorAll('p');for(var i=0;i<ps.length;i++){var t=ps[i].textContent.trim();if(t.length>10&&t.length<200)return t;}return '';})()\""
|
|
92
93
|
],
|
|
93
94
|
"judge": {
|
|
94
95
|
"type": "nonEmpty"
|
|
@@ -142,7 +143,7 @@
|
|
|
142
143
|
"name": "list-quotes-3",
|
|
143
144
|
"steps": [
|
|
144
145
|
"opencli operate open https://quotes.toscrape.com",
|
|
145
|
-
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('.quote')].slice(0,3).map(el=>({text:el.querySelector('.text')?.textContent,author:el.querySelector('.author')?.textContent})))\""
|
|
146
|
+
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('.quote, [class*=quote]')].slice(0,3).map(el=>({text:(el.querySelector('.text, [class*=text]')?.textContent)||(el.querySelector('span')?.textContent),author:(el.querySelector('.author, [class*=author]')?.textContent)||(el.querySelector('small')?.textContent)})))\""
|
|
146
147
|
],
|
|
147
148
|
"judge": {
|
|
148
149
|
"type": "arrayMinLength",
|
|
@@ -164,7 +165,7 @@
|
|
|
164
165
|
"name": "list-github-trending",
|
|
165
166
|
"steps": [
|
|
166
167
|
"opencli operate open https://github.com/trending",
|
|
167
|
-
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('article.Box-row')].slice(0,3).map(el=>({name:el.querySelector('h2 a')?.textContent?.trim().replace(
|
|
168
|
+
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('article.Box-row, article[class*=Box-row], [data-hpc] article, .Box article')].slice(0,3).map(el=>({name:(el.querySelector('h2 a, h1 a')?.textContent?.trim().replace(/\\\\s+/g,' '))||(el.querySelector('a[href^=\\\"/\\\"]')?.textContent?.trim()),desc:el.querySelector('p')?.textContent?.trim()})))\""
|
|
168
169
|
],
|
|
169
170
|
"judge": {
|
|
170
171
|
"type": "arrayMinLength",
|
|
@@ -175,7 +176,7 @@
|
|
|
175
176
|
"name": "list-github-trending-lang",
|
|
176
177
|
"steps": [
|
|
177
178
|
"opencli operate open https://github.com/trending/python",
|
|
178
|
-
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('article.Box-row')].slice(0,5).map(el=>({name:el.querySelector('h2 a')?.textContent?.trim().replace(
|
|
179
|
+
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('article.Box-row, article[class*=Box-row], [data-hpc] article, .Box article')].slice(0,5).map(el=>({name:(el.querySelector('h2 a, h1 a')?.textContent?.trim().replace(/\\\\s+/g,' '))||(el.querySelector('a[href^=\\\"/\\\"]')?.textContent?.trim())})))\""
|
|
179
180
|
],
|
|
180
181
|
"judge": {
|
|
181
182
|
"type": "arrayMinLength",
|
|
@@ -207,8 +208,7 @@
|
|
|
207
208
|
{
|
|
208
209
|
"name": "search-google",
|
|
209
210
|
"steps": [
|
|
210
|
-
"opencli operate open https://www.google.com",
|
|
211
|
-
"opencli operate eval \"document.querySelector('textarea[name=q], input[name=q]').value='opencli github';document.querySelector('form').submit();'submitted'\"",
|
|
211
|
+
"opencli operate open https://www.google.com/search?q=opencli+github",
|
|
212
212
|
"opencli operate wait time 3",
|
|
213
213
|
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('h3')].slice(0,3).map(h=>h.textContent))\""
|
|
214
214
|
],
|
|
@@ -249,8 +249,7 @@
|
|
|
249
249
|
{
|
|
250
250
|
"name": "search-wiki",
|
|
251
251
|
"steps": [
|
|
252
|
-
"opencli operate open https://en.wikipedia.org",
|
|
253
|
-
"opencli operate eval \"document.querySelector('input[name=search]').value='Rust programming language';document.querySelector('form#searchform, form[role=search]').submit();'submitted'\"",
|
|
252
|
+
"opencli operate open \"https://en.wikipedia.org/w/index.php?search=Rust+programming+language&title=Special:Search&go=Go\"",
|
|
254
253
|
"opencli operate wait time 3",
|
|
255
254
|
"opencli operate eval \"(() => { const ps = document.querySelectorAll('#mw-content-text .mw-parser-output > p'); for (const p of ps) { const t = p.textContent?.trim(); if (t && t.length > 50) return t.slice(0,300); } return ''; })()\""
|
|
256
255
|
],
|
|
@@ -263,11 +262,9 @@
|
|
|
263
262
|
{
|
|
264
263
|
"name": "search-npm",
|
|
265
264
|
"steps": [
|
|
266
|
-
"opencli operate open https://www.npmjs.com",
|
|
267
|
-
"opencli operate
|
|
268
|
-
"opencli operate
|
|
269
|
-
"opencli operate keys Enter",
|
|
270
|
-
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('[data-testid=pkg-list-item] h3, section h3')].slice(0,3).map(h=>h.textContent?.trim()))\""
|
|
265
|
+
"opencli operate open https://www.npmjs.com/search?q=react",
|
|
266
|
+
"opencli operate wait time 3",
|
|
267
|
+
"opencli operate eval \"JSON.stringify([...document.querySelectorAll('[data-testid=pkg-list-item] h3, section h3, .package-list-item h3, a[class*=package] h3')].slice(0,3).map(h=>h.textContent?.trim()))\""
|
|
271
268
|
],
|
|
272
269
|
"judge": {
|
|
273
270
|
"type": "arrayMinLength",
|
|
@@ -294,7 +291,7 @@
|
|
|
294
291
|
"opencli operate open https://example.com",
|
|
295
292
|
"opencli operate eval \"document.querySelector('a')?.click();'clicked'\"",
|
|
296
293
|
"opencli operate wait time 2",
|
|
297
|
-
"opencli operate eval \"document.title\""
|
|
294
|
+
"opencli operate eval \"document.title + ' ' + location.href\""
|
|
298
295
|
],
|
|
299
296
|
"judge": {
|
|
300
297
|
"type": "contains",
|
|
@@ -328,8 +325,8 @@
|
|
|
328
325
|
"name": "nav-click-wiki-link",
|
|
329
326
|
"steps": [
|
|
330
327
|
"opencli operate open https://en.wikipedia.org/wiki/JavaScript",
|
|
331
|
-
"opencli operate eval \"document.querySelector('#toc a, .toc a, [href=\\\"#History\\\"]')?.click(); 'clicked'\"",
|
|
332
|
-
"opencli operate eval \"document.querySelector('#History,
|
|
328
|
+
"opencli operate eval \"document.querySelector('.vector-toc-contents a[href*=History], #toc a[href*=History], .toc a[href*=History], [href=\\\"#History\\\"]')?.click(); 'clicked'\"",
|
|
329
|
+
"opencli operate eval \"document.querySelector('#History')?.textContent?.slice(0,100) || document.querySelector('[id*=History]')?.textContent?.slice(0,100)\""
|
|
333
330
|
],
|
|
334
331
|
"judge": {
|
|
335
332
|
"type": "nonEmpty"
|
|
@@ -479,7 +476,7 @@
|
|
|
479
476
|
"name": "form-textarea",
|
|
480
477
|
"steps": [
|
|
481
478
|
"opencli operate open https://httpbin.org/forms/post",
|
|
482
|
-
"opencli operate eval \"var ta=document.querySelector('textarea[name=comments]');ta.value='AutoResearch test';ta.dispatchEvent(new Event('input',{bubbles:true}));ta.value\""
|
|
479
|
+
"opencli operate eval \"var ta=document.querySelector('textarea[name=comments], textarea[name=delivery], textarea');ta.value='AutoResearch test';ta.dispatchEvent(new Event('input',{bubbles:true}));ta.value\""
|
|
483
480
|
],
|
|
484
481
|
"judge": {
|
|
485
482
|
"type": "contains",
|
|
@@ -580,7 +577,8 @@
|
|
|
580
577
|
"name": "bench-imdb-matrix",
|
|
581
578
|
"steps": [
|
|
582
579
|
"opencli operate open https://www.imdb.com/title/tt0133093/",
|
|
583
|
-
"opencli operate
|
|
580
|
+
"opencli operate wait time 3",
|
|
581
|
+
"opencli operate eval \"(function(){var title=document.querySelector('h1')?.textContent?.trim()||'';var year='';var links=document.querySelectorAll('a');for(var i=0;i<links.length;i++){if(links[i].textContent.trim()==='1999'){year='1999';break;}}var rating=document.querySelector('[data-testid=hero-rating-bar__aggregate-rating__score] span, .sc-bde20123-1')?.textContent?.trim()||'';return JSON.stringify({title:title,year:year,rating:rating});})()\""
|
|
584
582
|
],
|
|
585
583
|
"judge": {
|
|
586
584
|
"type": "contains",
|