@jackwener/opencli 1.6.1 → 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/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/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 +1135 -184
- 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/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/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/CLI-ONESHOT.md
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
# CLI-ONESHOT — 单点快速 CLI 生成
|
|
2
|
-
|
|
3
|
-
> 给一个 URL + 一句话描述,4 步生成一个 CLI 命令。
|
|
4
|
-
> 完整探索式开发请看 [CLI-EXPLORER.md](./CLI-EXPLORER.md)。
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 输入
|
|
9
|
-
|
|
10
|
-
| 项目 | 示例 |
|
|
11
|
-
|------|------|
|
|
12
|
-
| **URL** | `https://x.com/jakevin7/lists` |
|
|
13
|
-
| **Goal** | 获取我的 Twitter Lists |
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 流程
|
|
18
|
-
|
|
19
|
-
### Step 1: 打开页面 + 抓包
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
1. browser_navigate → 打开目标 URL
|
|
23
|
-
2. 等待 3-5 秒(让页面加载完、API 请求触发)
|
|
24
|
-
3. browser_network_requests → 筛选 JSON API
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
**关键**:只关注返回 `application/json` 的请求,忽略静态资源。
|
|
28
|
-
如果没有自动触发 API,手动点击目标按钮/标签再抓一次。
|
|
29
|
-
|
|
30
|
-
### Step 2: 锁定一个接口
|
|
31
|
-
|
|
32
|
-
从抓包结果中找到**那个**目标 API。看这几个字段:
|
|
33
|
-
|
|
34
|
-
| 字段 | 关注什么 |
|
|
35
|
-
|------|----------|
|
|
36
|
-
| URL | API 路径 pattern(如 `/i/api/graphql/xxx/ListsManagePinTimeline`) |
|
|
37
|
-
| Method | GET / POST |
|
|
38
|
-
| Headers | 有 Cookie? Bearer? CSRF? 自定义签名? |
|
|
39
|
-
| Response | 数据在哪个路径(如 `data.list.lists`) |
|
|
40
|
-
|
|
41
|
-
### Step 3: 验证接口能复现
|
|
42
|
-
|
|
43
|
-
在 `browser_evaluate` 中用 `fetch` 复现请求:
|
|
44
|
-
|
|
45
|
-
```javascript
|
|
46
|
-
// Tier 2 (Cookie): 大多数情况
|
|
47
|
-
fetch('/api/endpoint', { credentials: 'include' }).then(r => r.json())
|
|
48
|
-
|
|
49
|
-
// Tier 3 (Header): 如 Twitter 需要额外 header
|
|
50
|
-
const ct0 = document.cookie.match(/ct0=([^;]+)/)?.[1];
|
|
51
|
-
fetch('/api/endpoint', {
|
|
52
|
-
headers: { 'Authorization': 'Bearer ...', 'X-Csrf-Token': ct0 },
|
|
53
|
-
credentials: 'include'
|
|
54
|
-
}).then(r => r.json())
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
如果 fetch 能拿到数据 → 用 YAML 或简单 TS adapter。
|
|
58
|
-
如果 fetch 拿不到(签名/风控)→ 用 intercept 策略。
|
|
59
|
-
|
|
60
|
-
### Step 4: 套模板,生成 adapter
|
|
61
|
-
|
|
62
|
-
根据 Step 3 判定的策略,选一个模板生成文件。
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 认证速查
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
fetch(url) 直接能拿到? → Tier 1: public (YAML, browser: false)
|
|
70
|
-
fetch(url, {credentials:'include'})? → Tier 2: cookie (YAML)
|
|
71
|
-
加 Bearer/CSRF header 后拿到? → Tier 3: header (TS)
|
|
72
|
-
都不行,但页面自己能请求成功? → Tier 4: intercept (TS, installInterceptor)
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## 模板
|
|
78
|
-
|
|
79
|
-
### YAML — Cookie/Public(最简)
|
|
80
|
-
|
|
81
|
-
```yaml
|
|
82
|
-
# src/clis/<site>/<name>.yaml
|
|
83
|
-
site: mysite
|
|
84
|
-
name: mycommand
|
|
85
|
-
description: "一句话描述"
|
|
86
|
-
domain: www.example.com
|
|
87
|
-
strategy: cookie # 或 public (加 browser: false)
|
|
88
|
-
|
|
89
|
-
args:
|
|
90
|
-
limit:
|
|
91
|
-
type: int
|
|
92
|
-
default: 20
|
|
93
|
-
|
|
94
|
-
pipeline:
|
|
95
|
-
- navigate: https://www.example.com/target-page
|
|
96
|
-
|
|
97
|
-
- evaluate: |
|
|
98
|
-
(async () => {
|
|
99
|
-
const res = await fetch('/api/target', { credentials: 'include' });
|
|
100
|
-
const d = await res.json();
|
|
101
|
-
return (d.data?.items || []).map(item => ({
|
|
102
|
-
title: item.title,
|
|
103
|
-
value: item.value,
|
|
104
|
-
}));
|
|
105
|
-
})()
|
|
106
|
-
|
|
107
|
-
- map:
|
|
108
|
-
rank: ${{ index + 1 }}
|
|
109
|
-
title: ${{ item.title }}
|
|
110
|
-
value: ${{ item.value }}
|
|
111
|
-
|
|
112
|
-
- limit: ${{ args.limit }}
|
|
113
|
-
|
|
114
|
-
columns: [rank, title, value]
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### TS — Intercept(抓包模式)
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// src/clis/<site>/<name>.ts
|
|
121
|
-
import { cli, Strategy } from '../../registry.js';
|
|
122
|
-
|
|
123
|
-
cli({
|
|
124
|
-
site: 'mysite',
|
|
125
|
-
name: 'mycommand',
|
|
126
|
-
description: '一句话描述',
|
|
127
|
-
domain: 'www.example.com',
|
|
128
|
-
strategy: Strategy.INTERCEPT,
|
|
129
|
-
browser: true,
|
|
130
|
-
args: [
|
|
131
|
-
{ name: 'limit', type: 'int', default: 20 },
|
|
132
|
-
],
|
|
133
|
-
columns: ['rank', 'title', 'value'],
|
|
134
|
-
func: async (page, kwargs) => {
|
|
135
|
-
// 1. 导航
|
|
136
|
-
await page.goto('https://www.example.com/target-page');
|
|
137
|
-
await page.wait(3);
|
|
138
|
-
|
|
139
|
-
// 2. 注入拦截器(URL 子串匹配)
|
|
140
|
-
await page.installInterceptor('target-api-keyword');
|
|
141
|
-
|
|
142
|
-
// 3. 触发 API(滚动/点击)
|
|
143
|
-
await page.autoScroll({ times: 2, delayMs: 2000 });
|
|
144
|
-
|
|
145
|
-
// 4. 读取拦截的响应
|
|
146
|
-
const requests = await page.getInterceptedRequests();
|
|
147
|
-
if (!requests?.length) return [];
|
|
148
|
-
|
|
149
|
-
let results: any[] = [];
|
|
150
|
-
for (const req of requests) {
|
|
151
|
-
const items = req.data?.data?.items || [];
|
|
152
|
-
results.push(...items);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return results.slice(0, kwargs.limit).map((item, i) => ({
|
|
156
|
-
rank: i + 1,
|
|
157
|
-
title: item.title || '',
|
|
158
|
-
value: item.value || '',
|
|
159
|
-
}));
|
|
160
|
-
},
|
|
161
|
-
});
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### TS — Header(如 Twitter GraphQL)
|
|
165
|
-
|
|
166
|
-
```typescript
|
|
167
|
-
import { cli, Strategy } from '../../registry.js';
|
|
168
|
-
|
|
169
|
-
cli({
|
|
170
|
-
site: 'twitter',
|
|
171
|
-
name: 'mycommand',
|
|
172
|
-
description: '一句话描述',
|
|
173
|
-
domain: 'x.com',
|
|
174
|
-
strategy: Strategy.HEADER,
|
|
175
|
-
browser: true,
|
|
176
|
-
args: [
|
|
177
|
-
{ name: 'limit', type: 'int', default: 20 },
|
|
178
|
-
],
|
|
179
|
-
columns: ['rank', 'name', 'value'],
|
|
180
|
-
func: async (page, kwargs) => {
|
|
181
|
-
await page.goto('https://x.com');
|
|
182
|
-
const data = await page.evaluate(`(async () => {
|
|
183
|
-
const ct0 = document.cookie.match(/ct0=([^;]+)/)?.[1];
|
|
184
|
-
if (!ct0) return { error: 'Not logged in' };
|
|
185
|
-
const bearer = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D...';
|
|
186
|
-
const res = await fetch('/i/api/graphql/QUERY_ID/Endpoint', {
|
|
187
|
-
headers: {
|
|
188
|
-
'Authorization': 'Bearer ' + decodeURIComponent(bearer),
|
|
189
|
-
'X-Csrf-Token': ct0,
|
|
190
|
-
'X-Twitter-Auth-Type': 'OAuth2Session',
|
|
191
|
-
},
|
|
192
|
-
credentials: 'include',
|
|
193
|
-
});
|
|
194
|
-
return res.json();
|
|
195
|
-
})()`);
|
|
196
|
-
// 解析 data...
|
|
197
|
-
return [];
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## 测试(必做)
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
npm run build # 语法检查
|
|
208
|
-
opencli list | grep mysite # 确认注册
|
|
209
|
-
opencli mysite mycommand --limit 3 -v # 实际运行
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## 就这样,没了
|
|
215
|
-
|
|
216
|
-
写完文件 → build → run → 提交。有问题再看 [CLI-EXPLORER.md](./CLI-EXPLORER.md)。
|
package/SKILL.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: opencli
|
|
3
|
-
description: "OpenCLI — Make any website or Electron App your CLI. Zero risk, AI-powered, reuse Chrome login."
|
|
4
|
-
version: 1.5.6
|
|
5
|
-
author: jackwener
|
|
6
|
-
tags: [cli, browser, web, chrome-extension, cdp, AI, agent, operate]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# OpenCLI
|
|
10
|
-
|
|
11
|
-
> Make any website or Electron App your CLI. Reuse Chrome login, zero risk, AI-powered.
|
|
12
|
-
|
|
13
|
-
## Skills
|
|
14
|
-
|
|
15
|
-
OpenCLI has three specialized skills. Use the one that matches your task:
|
|
16
|
-
|
|
17
|
-
### 1. CLI Commands (`skills/cli/SKILL.md`)
|
|
18
|
-
Use existing CLI commands to fetch data, interact with websites and desktop apps.
|
|
19
|
-
```bash
|
|
20
|
-
opencli twitter trending --limit 10
|
|
21
|
-
opencli hackernews top --limit 5
|
|
22
|
-
opencli bilibili hot
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 2. Browser Automation (`skills/opencli-operate/SKILL.md`)
|
|
26
|
-
Make websites accessible for AI agents. Navigate, click, type, extract, wait — with existing Chrome login sessions. No LLM API key needed.
|
|
27
|
-
```bash
|
|
28
|
-
opencli operate open https://example.com
|
|
29
|
-
opencli operate state # See interactive elements with [N] indices
|
|
30
|
-
opencli operate click 3 # Click element [3]
|
|
31
|
-
opencli operate network # Discover APIs
|
|
32
|
-
opencli operate init site/cmd # Generate adapter scaffold
|
|
33
|
-
opencli operate verify site/cmd # Test the adapter
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 3. Adapter Development (`skills/adapter-dev/SKILL.md`)
|
|
37
|
-
Create new CLI commands from websites. Explore APIs, record traffic, write TypeScript adapters.
|
|
38
|
-
```bash
|
|
39
|
-
opencli explore https://example.com
|
|
40
|
-
opencli record https://example.com
|
|
41
|
-
opencli generate https://example.com --goal "hot"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Quick Setup
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install -g @jackwener/opencli
|
|
48
|
-
opencli doctor # Verify Chrome extension + daemon
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Configuration
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
# For AI agent (opencli operate)
|
|
55
|
-
export OPENCLI_PROVIDER=anthropic # or openai
|
|
56
|
-
export OPENCLI_MODEL=sonnet # model alias
|
|
57
|
-
export OPENCLI_API_KEY=sk-ant-... # API key
|
|
58
|
-
export OPENCLI_BASE_URL=https://... # optional proxy
|
|
59
|
-
```
|