@jackwener/opencli 1.7.22 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -194
- package/README.zh-CN.md +42 -260
- package/cli-manifest.json +8160 -4392
- package/clis/12306/me.js +73 -0
- package/clis/12306/orders.js +96 -0
- package/clis/12306/passengers.js +90 -0
- package/clis/12306/price.js +166 -0
- package/clis/12306/stations.js +66 -0
- package/clis/12306/train.js +91 -0
- package/clis/12306/trains.js +119 -0
- package/clis/12306/utils.js +272 -0
- package/clis/12306/utils.test.js +331 -0
- package/clis/36kr/article.js +6 -3
- package/clis/36kr/article.test.js +46 -0
- package/clis/_atlassian/shared.js +577 -0
- package/clis/_atlassian/shared.test.js +170 -0
- package/clis/apple-podcasts/commands.test.js +20 -0
- package/clis/apple-podcasts/search.js +2 -2
- package/clis/barchart/greeks.js +144 -56
- package/clis/barchart/greeks.test.js +138 -0
- package/clis/bilibili/comment.js +125 -0
- package/clis/bilibili/comment.test.js +153 -0
- package/clis/bilibili/comments.js +116 -21
- package/clis/bilibili/comments.test.js +77 -18
- package/clis/bilibili/subtitle.js +76 -31
- package/clis/bilibili/subtitle.test.js +156 -9
- package/clis/bilibili/summary.js +167 -0
- package/clis/bilibili/summary.test.js +210 -0
- package/clis/bilibili/utils.js +63 -5
- package/clis/bilibili/utils.test.js +45 -1
- package/clis/booking/booking.test.js +356 -0
- package/clis/booking/search.js +351 -0
- package/clis/chatgpt/envelope.test.js +108 -0
- package/clis/chatgpt/image.js +2 -2
- package/clis/chatgpt/image.test.js +6 -0
- package/clis/chatgpt/utils.js +148 -41
- package/clis/chatgpt/utils.test.js +92 -2
- package/clis/chess/analyze.js +35 -0
- package/clis/chess/analyze.test.js +79 -0
- package/clis/chess/game.js +114 -0
- package/clis/chess/game.test.js +178 -0
- package/clis/chess/games.js +67 -0
- package/clis/chess/games.test.js +164 -0
- package/clis/chess/stats.js +32 -0
- package/clis/chess/stats.test.js +79 -0
- package/clis/chess/utils.js +170 -0
- package/clis/chess/utils.test.js +230 -0
- package/clis/confluence/commands.test.js +195 -0
- package/clis/confluence/create.js +39 -0
- package/clis/confluence/page.js +23 -0
- package/clis/confluence/search.js +34 -0
- package/clis/confluence/shared.js +173 -0
- package/clis/confluence/update.js +38 -0
- package/clis/douyin/_shared/browser-fetch.js +44 -20
- package/clis/douyin/_shared/browser-fetch.test.js +22 -1
- package/clis/douyin/_shared/evaluate-result.js +16 -0
- package/clis/douyin/_shared/tos-upload.js +105 -69
- package/clis/douyin/_shared/vod-upload.js +212 -0
- package/clis/douyin/_shared/vod-upload.test.js +38 -0
- package/clis/douyin/delete.js +137 -4
- package/clis/douyin/delete.test.js +90 -1
- package/clis/douyin/hashtag.js +84 -23
- package/clis/douyin/hashtag.test.js +113 -0
- package/clis/douyin/publish-upload-id.test.js +170 -0
- package/clis/douyin/publish.js +88 -42
- package/clis/douyin/user-videos.js +9 -2
- package/clis/douyin/user-videos.test.js +43 -0
- package/clis/flomo/memos.js +228 -0
- package/clis/flomo/memos.test.js +144 -0
- package/clis/geogebra/add-circle.js +46 -0
- package/clis/geogebra/add-line.js +35 -0
- package/clis/geogebra/add-point.js +27 -0
- package/clis/geogebra/add-polygon.js +25 -0
- package/clis/geogebra/eval.js +35 -0
- package/clis/geogebra/geogebra.test.js +175 -0
- package/clis/geogebra/hexagon.js +62 -0
- package/clis/geogebra/info.js +72 -0
- package/clis/geogebra/list.js +35 -0
- package/clis/geogebra/triangle.js +60 -0
- package/clis/geogebra/utils.js +271 -0
- package/clis/gitee/search.js +2 -2
- package/clis/gitee/search.test.js +65 -0
- package/clis/jike/post.js +27 -17
- package/clis/jike/read.test.js +86 -0
- package/clis/jike/topic.js +32 -19
- package/clis/jike/user.js +33 -20
- package/clis/jira/attachments.js +28 -0
- package/clis/jira/commands.test.js +287 -0
- package/clis/jira/comments.js +28 -0
- package/clis/jira/issue.js +28 -0
- package/clis/jira/links.js +28 -0
- package/clis/jira/search.js +47 -0
- package/clis/jira/shared.js +256 -0
- package/clis/lesswrong/comments.js +1 -1
- package/clis/lesswrong/curated.js +1 -1
- package/clis/lesswrong/frontpage.js +1 -1
- package/clis/lesswrong/frontpage.test.js +37 -0
- package/clis/lesswrong/new.js +1 -1
- package/clis/lesswrong/read.js +1 -1
- package/clis/lesswrong/sequences.js +1 -1
- package/clis/lesswrong/shortform.js +1 -1
- package/clis/lesswrong/tag.js +1 -1
- package/clis/lesswrong/top-month.js +1 -1
- package/clis/lesswrong/top-week.js +1 -1
- package/clis/lesswrong/top-year.js +1 -1
- package/clis/lesswrong/top.js +1 -1
- package/clis/linkedin/connect.js +401 -0
- package/clis/linkedin/connect.test.js +213 -0
- package/clis/linkedin/inbox.js +234 -0
- package/clis/linkedin/inbox.test.js +152 -0
- package/clis/linkedin/job-detail.js +167 -0
- package/clis/linkedin/job-detail.test.js +38 -0
- package/clis/linkedin/jobs-preferences.js +113 -0
- package/clis/linkedin/jobs-preferences.test.js +43 -0
- package/clis/linkedin/people-search.js +262 -0
- package/clis/linkedin/people-search.test.js +216 -0
- package/clis/linkedin/post-analytics.js +74 -0
- package/clis/linkedin/post-analytics.test.js +40 -0
- package/clis/linkedin/posts-core.js +241 -0
- package/clis/linkedin/posts.js +22 -0
- package/clis/linkedin/posts.test.js +40 -0
- package/clis/linkedin/profile-analytics.js +104 -0
- package/clis/linkedin/profile-analytics.test.js +67 -0
- package/clis/linkedin/profile-experience.js +671 -0
- package/clis/linkedin/profile-experience.test.js +152 -0
- package/clis/linkedin/profile-projects.js +311 -0
- package/clis/linkedin/profile-projects.test.js +111 -0
- package/clis/linkedin/profile-read.js +148 -0
- package/clis/linkedin/profile-read.test.js +77 -0
- package/clis/linkedin/safe-send.js +357 -0
- package/clis/linkedin/safe-send.test.js +204 -0
- package/clis/linkedin/salesnav-inbox.js +210 -0
- package/clis/linkedin/salesnav-inbox.test.js +113 -0
- package/clis/linkedin/salesnav-message.js +360 -0
- package/clis/linkedin/salesnav-message.test.js +172 -0
- package/clis/linkedin/salesnav-search.js +186 -0
- package/clis/linkedin/salesnav-search.test.js +76 -0
- package/clis/linkedin/salesnav-thread.js +212 -0
- package/clis/linkedin/salesnav-thread.test.js +79 -0
- package/clis/linkedin/sent-invitations.js +92 -0
- package/clis/linkedin/sent-invitations.test.js +62 -0
- package/clis/linkedin/services-read.js +213 -0
- package/clis/linkedin/services-read.test.js +105 -0
- package/clis/linkedin/shared.js +124 -0
- package/clis/linkedin/thread-snapshot.js +214 -0
- package/clis/linkedin/thread-snapshot.test.js +89 -0
- package/clis/linkedin/timeline.js +14 -7
- package/clis/linkedin-learning/course.js +138 -0
- package/clis/linkedin-learning/course.test.js +114 -0
- package/clis/linkedin-learning/search.js +155 -0
- package/clis/linkedin-learning/search.test.js +144 -0
- package/clis/linkedin-learning/trending.js +133 -0
- package/clis/linkedin-learning/trending.test.js +123 -0
- package/clis/notebooklm/add-source.js +269 -0
- package/clis/notebooklm/add-source.test.js +97 -0
- package/clis/notebooklm/create.js +76 -0
- package/clis/notebooklm/create.test.js +58 -0
- package/clis/notebooklm/generate-audio.js +91 -0
- package/clis/notebooklm/generate-audio.test.js +63 -0
- package/clis/notebooklm/generate-slides.js +106 -0
- package/clis/notebooklm/generate-slides.test.js +75 -0
- package/clis/notebooklm/open.test.js +10 -10
- package/clis/notebooklm/rpc.js +20 -6
- package/clis/notebooklm/rpc.test.js +27 -1
- package/clis/notebooklm/utils.js +100 -24
- package/clis/notebooklm/utils.test.js +60 -1
- package/clis/notebooklm/write-note.js +103 -0
- package/clis/notebooklm/write-note.test.js +70 -0
- package/clis/pixiv/detail.js +41 -34
- package/clis/pixiv/detail.test.js +93 -0
- package/clis/pixiv/user.js +36 -31
- package/clis/pixiv/user.test.js +100 -0
- package/clis/pixiv/utils.js +56 -7
- package/clis/powerchina/search.js +3 -3
- package/clis/powerchina/search.test.js +27 -1
- package/clis/reddit/extract-media.test.js +149 -0
- package/clis/reddit/frontpage.js +47 -9
- package/clis/reddit/frontpage.test.js +34 -0
- package/clis/reddit/home.js +31 -1
- package/clis/reddit/home.test.js +46 -3
- package/clis/reddit/hot.js +32 -1
- package/clis/reddit/hot.test.js +15 -1
- package/clis/reddit/popular.js +39 -1
- package/clis/reddit/popular.test.js +26 -0
- package/clis/reddit/saved.js +1 -1
- package/clis/reddit/search.js +38 -1
- package/clis/reddit/search.test.js +26 -0
- package/clis/reddit/subreddit.js +52 -7
- package/clis/reddit/subreddit.test.js +31 -0
- package/clis/reddit/subscribed.js +165 -0
- package/clis/reddit/subscribed.test.js +168 -0
- package/clis/reddit/upvoted.js +1 -1
- package/clis/suno/commands.test.js +188 -0
- package/clis/suno/download.js +140 -0
- package/clis/suno/download.test.js +151 -0
- package/clis/suno/generate.js +231 -0
- package/clis/suno/generate.test.js +252 -0
- package/clis/suno/list.js +79 -0
- package/clis/suno/status.js +63 -0
- package/clis/suno/utils.js +549 -0
- package/clis/suno/utils.test.js +329 -0
- package/clis/twitter/device-follow.js +193 -0
- package/clis/twitter/device-follow.test.js +287 -0
- package/clis/twitter/download.js +443 -73
- package/clis/twitter/download.test.js +457 -0
- package/clis/twitter/followers.js +6 -2
- package/clis/twitter/followers.test.js +19 -1
- package/clis/twitter/following.js +14 -5
- package/clis/twitter/following.test.js +29 -0
- package/clis/twitter/likes.js +12 -4
- package/clis/twitter/likes.test.js +26 -1
- package/clis/twitter/list-add.js +1 -1
- package/clis/twitter/list-create.js +155 -0
- package/clis/twitter/list-create.test.js +169 -0
- package/clis/twitter/list-remove.js +13 -6
- package/clis/twitter/list-remove.test.js +74 -0
- package/clis/twitter/list-tweets.js +6 -2
- package/clis/twitter/list-tweets.test.js +41 -1
- package/clis/twitter/lists.js +31 -4
- package/clis/twitter/lists.test.js +152 -16
- package/clis/twitter/notifications.js +4 -4
- package/clis/twitter/post.js +62 -4
- package/clis/twitter/post.test.js +35 -3
- package/clis/twitter/profile.js +81 -28
- package/clis/twitter/profile.test.js +113 -2
- package/clis/twitter/quote.js +9 -4
- package/clis/twitter/reply.js +13 -10
- package/clis/twitter/reply.test.js +41 -0
- package/clis/twitter/search.js +7 -3
- package/clis/twitter/search.test.js +41 -0
- package/clis/twitter/shared.js +155 -0
- package/clis/twitter/shared.test.js +465 -1
- package/clis/twitter/thread.js +10 -2
- package/clis/twitter/thread.test.js +58 -0
- package/clis/twitter/timeline.js +6 -2
- package/clis/twitter/timeline.test.js +2 -0
- package/clis/twitter/tweets.js +3 -2
- package/clis/twitter/tweets.test.js +1 -1
- package/clis/twitter/utils.js +53 -16
- package/clis/upwork/detail.js +132 -0
- package/clis/upwork/feed.js +109 -0
- package/clis/upwork/search.js +115 -0
- package/clis/upwork/upwork.test.js +566 -0
- package/clis/upwork/utils.js +323 -0
- package/clis/weibo/delete.js +172 -0
- package/clis/weibo/delete.test.js +94 -0
- package/clis/weibo/publish.js +37 -14
- package/clis/weibo/publish.test.js +14 -5
- package/clis/weibo/user-posts.js +234 -0
- package/clis/weibo/user-posts.test.js +92 -0
- package/clis/weread/book-search.js +438 -0
- package/clis/weread/book-search.test.js +242 -0
- package/clis/weread/search-regression.test.js +98 -11
- package/clis/weread/search.js +32 -9
- package/clis/weread-official/book.js +135 -0
- package/clis/weread-official/commands.test.js +385 -0
- package/clis/weread-official/discover.js +107 -0
- package/clis/weread-official/list-apis.js +95 -0
- package/clis/weread-official/notes.js +171 -0
- package/clis/weread-official/readdata.js +158 -0
- package/clis/weread-official/review.js +93 -0
- package/clis/weread-official/search.js +106 -0
- package/clis/weread-official/shelf.js +97 -0
- package/clis/weread-official/utils.js +293 -0
- package/clis/weread-official/utils.test.js +242 -0
- package/clis/wikipedia/trending.js +7 -3
- package/clis/wikipedia/trending.test.js +57 -0
- package/clis/xianyu/chat.js +24 -109
- package/clis/xianyu/chat.test.js +5 -0
- package/clis/xianyu/im.js +322 -0
- package/clis/xianyu/im.test.js +253 -0
- package/clis/xianyu/inbox.js +96 -0
- package/clis/xianyu/messages.js +91 -0
- package/clis/xianyu/reply.js +82 -0
- package/clis/xiaohongshu/creator-note-detail.js +166 -28
- package/clis/xiaohongshu/creator-note-detail.test.js +196 -36
- package/clis/xiaohongshu/creator-notes-summary.js +2 -1
- package/clis/xiaohongshu/creator-notes-summary.test.js +7 -0
- package/clis/xiaohongshu/creator-notes.js +252 -2
- package/clis/xiaohongshu/creator-notes.test.js +90 -1
- package/clis/xiaohongshu/creator-stats.js +2 -1
- package/clis/xiaohongshu/creator-stats.test.js +24 -0
- package/clis/xiaohongshu/delete-note.js +260 -0
- package/clis/xiaohongshu/delete-note.test.js +172 -0
- package/clis/xiaohongshu/download.js +97 -39
- package/clis/xiaohongshu/download.test.js +201 -0
- package/clis/xiaohongshu/publish.js +48 -8
- package/clis/xiaohongshu/publish.test.js +65 -10
- package/clis/xiaohongshu/user-helpers.test.js +41 -0
- package/clis/xiaohongshu/user.js +27 -4
- package/clis/xiaoyuzhou/download.js +1 -1
- package/clis/xiaoyuzhou/transcript.js +1 -1
- package/clis/youdao/note.js +258 -0
- package/clis/youdao/note.test.js +99 -0
- package/clis/youtube/transcript.js +397 -24
- package/clis/youtube/transcript.test.js +196 -6
- package/clis/zhihu/answer-comments.js +280 -0
- package/clis/zhihu/answer-comments.test.js +287 -0
- package/clis/zhihu/answer-detail.js +2 -19
- package/clis/zhihu/answer-detail.test.js +8 -0
- package/clis/zhihu/collection.js +17 -16
- package/clis/zhihu/collection.test.js +50 -3
- package/clis/zhihu/download.js +1 -1
- package/clis/zhihu/question.js +42 -17
- package/clis/zhihu/question.test.js +113 -11
- package/clis/zhihu/search.js +195 -43
- package/clis/zhihu/search.test.js +198 -0
- package/clis/zhihu/text.js +29 -0
- package/clis/zhihu/text.test.js +24 -0
- package/dist/src/browser/errors.js +4 -2
- package/dist/src/browser/errors.test.js +6 -0
- package/dist/src/browser/network-cache.js +13 -1
- package/dist/src/browser/network-cache.test.js +17 -0
- package/dist/src/browser/page.js +30 -4
- package/dist/src/browser/page.test.js +42 -0
- package/dist/src/browser/utils.d.ts +1 -1
- package/dist/src/cli-argv-preprocess.d.ts +26 -0
- package/dist/src/cli-argv-preprocess.js +138 -0
- package/dist/src/cli-argv-preprocess.test.js +79 -0
- package/dist/src/convention-audit.js +15 -8
- package/dist/src/convention-audit.test.js +21 -0
- package/dist/src/download/index.js +13 -1
- package/dist/src/download/index.test.js +23 -1
- package/dist/src/download/media-download.js +15 -2
- package/dist/src/download/media-download.test.d.ts +1 -0
- package/dist/src/download/media-download.test.js +112 -0
- package/dist/src/download/progress.js +2 -2
- package/dist/src/download/progress.test.js +12 -1
- package/dist/src/electron-apps.js +1 -1
- package/dist/src/electron-apps.test.js +7 -2
- package/dist/src/errors.d.ts +17 -0
- package/dist/src/errors.js +22 -0
- package/dist/src/external-clis.yaml +8 -0
- package/dist/src/main.js +14 -2
- package/dist/src/output.js +11 -1
- package/dist/src/output.test.js +6 -0
- package/dist/src/registry.js +1 -0
- package/dist/src/registry.test.js +11 -0
- package/dist/src/utils.d.ts +43 -0
- package/dist/src/utils.js +97 -0
- package/dist/src/utils.test.d.ts +1 -0
- package/dist/src/utils.test.js +155 -0
- package/package.json +8 -2
- package/scripts/silent-column-drop-baseline.json +0 -52
- package/scripts/typed-error-lint-baseline.json +28 -380
- package/clis/slock/_utils.js +0 -12
package/README.zh-CN.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# OpenCLI
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **把任意网站变成 CLI & 在你的登录态浏览器上跑 Browser Use。**
|
|
4
|
+
> 把网站、浏览器会话、Electron 应用和本地工具,统一变成适合人类与 AI Agent 使用的确定性接口。
|
|
5
|
+
> 或者在任意页面上跑 Browser Use —— 导航、填表单、点击、抓取、自动化。
|
|
5
6
|
|
|
6
7
|
[](./README.md)
|
|
7
8
|
[](https://www.npmjs.com/package/@jackwener/opencli)
|
|
@@ -11,27 +12,16 @@
|
|
|
11
12
|
OpenCLI 可以用同一套 CLI 做三类事情:
|
|
12
13
|
|
|
13
14
|
- **直接使用现成适配器**:B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 [100+ 站点](#内置命令) 开箱即用。
|
|
14
|
-
- **让 AI Agent 操作任意网站**:在你的 AI Agent(Claude Code、Cursor 等)中安装 `opencli-
|
|
15
|
+
- **让 AI Agent 操作任意网站**:在你的 AI Agent(Claude Code、Cursor 等)中安装 `opencli-browser` skill,Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。
|
|
15
16
|
- **把新网站写成 CLI**:用 `opencli browser` 原语 + `opencli-adapter-author` skill,从站点侦察、API 发现、字段解码到 `opencli browser verify` 一条龙。
|
|
16
17
|
|
|
17
18
|
除了网站能力,OpenCLI 还是一个 **CLI 枢纽**:你可以把 `gh`、`docker`、`longbridge`、`tg`、`discord`、`wx`、`ntn`(Notion)等本地工具统一注册到 `opencli` 下,也可以通过桌面端适配器控制 Cursor、Codex、Antigravity、ChatGPT 等 Electron 应用。
|
|
18
19
|
|
|
19
|
-
## 亮点
|
|
20
|
-
|
|
21
|
-
- **桌面应用控制** — 通过 CDP 直接在终端驱动 Electron 应用(Cursor、Codex、ChatGPT 等)。
|
|
22
|
-
- **AI Agent 浏览器自动化** — 安装 `opencli-adapter-author` skill,你的 AI Agent 就能操作任意网站:导航、点击、输入/填充、提取、截图——全部通过你的已登录 Chrome 会话完成。
|
|
23
|
-
- **网站 → CLI** — 把任何网站变成确定性 CLI:100+ 站点能力已注册,或用 `opencli-adapter-author` skill + `opencli browser verify` 自己写。
|
|
24
|
-
- **账号安全** — 复用 Chrome/Chromium 登录态,凭证永远不会离开浏览器。
|
|
25
|
-
- **面向 AI Agent** — 一个 skill 带你走完站点侦察、API 发现、字段解码、适配器编写、验证的全流程。
|
|
26
|
-
- **CLI 枢纽** — 统一发现、自动安装、纯透传任何外部 CLI(gh、docker、obsidian、tg、discord、wx 等)。
|
|
27
|
-
- **零 LLM 成本** — 运行时不消耗模型 token,跑 10,000 次也不花一分钱。
|
|
28
|
-
- **确定性输出** — 相同命令,相同输出结构,每次一致。可管道、可脚本、CI 友好。
|
|
29
|
-
|
|
30
20
|
## 快速开始
|
|
31
21
|
|
|
32
22
|
### 1. 安装 OpenCLI
|
|
33
23
|
|
|
34
|
-
OpenCLI 要求 **Node.js >=
|
|
24
|
+
OpenCLI 要求 **Node.js >= 20**。
|
|
35
25
|
|
|
36
26
|
```bash
|
|
37
27
|
node --version
|
|
@@ -89,7 +79,7 @@ opencli bilibili hot --limit 5
|
|
|
89
79
|
|
|
90
80
|
OpenCLI 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent(Claude Code、Cursor 等)中,Agent 就能用你的已登录 Chrome 会话替你操作网站。
|
|
91
81
|
|
|
92
|
-
### 安装 skill
|
|
82
|
+
### 安装 skill(同时也用于更新)
|
|
93
83
|
|
|
94
84
|
```bash
|
|
95
85
|
npx skills add jackwener/opencli
|
|
@@ -102,22 +92,20 @@ npx skills add jackwener/opencli --skill opencli-adapter-author
|
|
|
102
92
|
npx skills add jackwener/opencli --skill opencli-autofix
|
|
103
93
|
npx skills add jackwener/opencli --skill opencli-browser
|
|
104
94
|
npx skills add jackwener/opencli --skill opencli-usage
|
|
105
|
-
npx skills add jackwener/opencli --skill smart-search
|
|
106
95
|
```
|
|
107
96
|
|
|
108
97
|
### 选择哪个 skill
|
|
109
98
|
|
|
110
99
|
| Skill | 适用场景 | 你对 AI Agent 说的话 |
|
|
111
100
|
|-------|---------|-------------------|
|
|
112
|
-
| **opencli-adapter-author** |
|
|
101
|
+
| **opencli-adapter-author** | 为新站点写可复用适配器,或给已有站点添加命令 | "帮我做一个抖音热门的适配器" / "帮我做一个抓取这个页面热帖的命令" |
|
|
113
102
|
| **opencli-autofix** | 内置命令失败时修复已有适配器 | "`opencli zhihu hot` 返回空了,修一下" |
|
|
114
|
-
| **opencli-browser** |
|
|
103
|
+
| **opencli-browser** | 实时驱动 Chrome 页面——导航、填表单、点击、抓取 | "帮我看看小红书的通知" / "帮我填一下这个表单" / "用浏览器命令抓取这个页面" |
|
|
115
104
|
| **opencli-usage** | 所有命令和站点的快速参考 | "OpenCLI 有哪些 Twitter 相关的命令?" |
|
|
116
|
-
| **smart-search** | 在现有 OpenCLI 能力里搜索 | "帮我找个 B 站热门相关的适配器" |
|
|
117
105
|
|
|
118
106
|
### 工作原理
|
|
119
107
|
|
|
120
|
-
安装 `opencli-
|
|
108
|
+
安装 `opencli-browser` skill 后,你的 AI Agent 可以:
|
|
121
109
|
|
|
122
110
|
1. **导航**到任意 URL,使用你的已登录浏览器
|
|
123
111
|
2. **读取**页面内容——通过结构化 DOM 快照(不是截图)
|
|
@@ -128,53 +116,25 @@ npx skills add jackwener/opencli --skill smart-search
|
|
|
128
116
|
Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自然语言描述想做的事。
|
|
129
117
|
|
|
130
118
|
**Skill 参考文档:**
|
|
131
|
-
- [`skills/opencli-
|
|
119
|
+
- [`skills/opencli-browser/SKILL.md`](./skills/opencli-browser/SKILL.md) — 实时驱动 Chrome(导航、填表单、点击、抓取)
|
|
120
|
+
- [`skills/opencli-adapter-author/SKILL.md`](./skills/opencli-adapter-author/SKILL.md) — 给新站点写适配器,全流程
|
|
132
121
|
- [`skills/opencli-autofix/SKILL.md`](./skills/opencli-autofix/SKILL.md) — 修复已有适配器
|
|
133
|
-
- [`skills/opencli-browser/SKILL.md`](./skills/opencli-browser/SKILL.md) — 浏览器自动化参考
|
|
134
122
|
- [`skills/opencli-usage/SKILL.md`](./skills/opencli-usage/SKILL.md) — 命令和站点参考
|
|
135
|
-
- [`skills/smart-search/SKILL.md`](./skills/smart-search/SKILL.md) — 能力搜索
|
|
136
123
|
|
|
137
124
|
`browser` 可用命令包括:`open`、`state`、`click`、`type`、`fill`、`select`、`keys`、`wait`、`get`、`find`、`extract`、`frames`、`screenshot`、`scroll`、`back`、`eval`、`network`、`tab list`、`tab new`、`tab select`、`tab close`、`init`、`verify`、`close`。
|
|
138
125
|
|
|
139
126
|
`opencli browser` 命令必须紧跟一个 `<session>` 位置参数。`opencli browser work open <url>` 和 `opencli browser work tab new [url]` 都会返回 target ID。`opencli browser work tab list` 用来查看当前已存在 tab 的 target ID,再通过 `--tab <targetId>` 把命令明确路由到某个 tab。`tab new` 只会新建 tab,不会改变默认浏览器目标;只有显式执行 `tab select <targetId>`,才会把该 tab 设为同一 session 后续未指定 target 的默认目标。
|
|
140
127
|
|
|
141
|
-
##
|
|
142
|
-
|
|
143
|
-
### `browser`:AI Agent 的浏览器控制层
|
|
144
|
-
|
|
145
|
-
`opencli browser` 命令是 AI Agent 操作网站的底层原语。你不需要手动运行这些命令——把 `opencli-adapter-author` skill 安装到你的 AI Agent 中,用自然语言描述你想做的事,Agent 会自动处理浏览器操作。
|
|
146
|
-
|
|
147
|
-
比如你告诉 Agent:*"帮我看看小红书的通知"*——Agent 会在底层调用 `opencli browser <session> open`、`state`、`click` 等命令。
|
|
148
|
-
|
|
149
|
-
### 内置适配器:稳定命令
|
|
150
|
-
|
|
151
|
-
当某个站点能力已经存在时,优先使用 `opencli hackernews top`、`opencli reddit hot` 这类稳定命令。这些命令是确定性的,无需浏览器——人类和 AI Agent 都可以直接使用。
|
|
152
|
-
|
|
153
|
-
### 为新站点写适配器
|
|
154
|
-
|
|
155
|
-
当你需要的网站还没覆盖时,用 `opencli-adapter-author` skill,它会把 Agent 带到闭环:
|
|
156
|
-
|
|
157
|
-
1. 侦察站点,分类 pattern(SPA / SSR / JSONP / Token / Streaming)
|
|
158
|
-
2. 发现目标 endpoint——network 精读、initial state、bundle 搜索、token 溯源,或 interceptor 兜底
|
|
159
|
-
3. 定认证策略——`PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`
|
|
160
|
-
4. 字段解码 + 设计输出列
|
|
161
|
-
5. `opencli browser recon analyze <url>` 一步侦察,再 `opencli browser recon init <site>/<name>` → 写适配器 → `opencli browser recon verify <site>/<name>`
|
|
162
|
-
6. 把站点知识沉到 `~/.opencli/sites/<site>/`,下次写同站点的其他命令直接吃缓存
|
|
163
|
-
|
|
164
|
-
### CLI 枢纽与桌面端适配器
|
|
165
|
-
|
|
166
|
-
OpenCLI 不只是网站 CLI,还可以:
|
|
167
|
-
|
|
168
|
-
- 统一代理本地二进制工具,例如 `gh`、`docker`、`obsidian`、`tg`、`discord`、`wx`
|
|
169
|
-
- 通过专门适配器和 CDP 集成控制 Electron 桌面应用
|
|
128
|
+
## 为新站点写适配器
|
|
170
129
|
|
|
171
|
-
|
|
130
|
+
当你需要的网站还没覆盖时,用 `opencli-adapter-author` skill,全流程:
|
|
172
131
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
132
|
+
1. **侦察**站点,分类 pattern(SPA / SSR / JSONP / Token / Streaming)
|
|
133
|
+
2. **发现** endpoint——network 精读、initial state、bundle 搜索、token 溯源,或 interceptor 兜底
|
|
134
|
+
3. **定认证**——`PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`
|
|
135
|
+
4. **字段解码** + 设计输出列
|
|
136
|
+
5. `opencli browser recon analyze <url>` → `opencli browser recon init <site>/<name>` → 写适配器 → `opencli browser recon verify <site>/<name>`
|
|
137
|
+
6. 站点知识沉到 `~/.opencli/sites/<site>/`,下次同站点直接吃缓存
|
|
178
138
|
|
|
179
139
|
## 配置
|
|
180
140
|
|
|
@@ -191,180 +151,37 @@ OpenCLI 不只是网站 CLI,还可以:
|
|
|
191
151
|
|
|
192
152
|
`opencli browser *` 必须紧跟一个 `<session>` 位置参数,默认使用前台窗口,并保留该 session 的 tab lease,直到你手动执行 `opencli browser <session> close` 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease;如果需要调试最终页面,可以传 `--window foreground --keep-tab true`。
|
|
193
153
|
|
|
194
|
-
## 更新
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
npm install -g @jackwener/opencli@latest
|
|
198
|
-
|
|
199
|
-
# 如果你在用打包发布的 OpenCLI skills,也一起刷新
|
|
200
|
-
npx skills add jackwener/opencli
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
如果你只装了部分 skill,也可以只刷新自己在用的:
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
npx skills add jackwener/opencli --skill opencli-adapter-author
|
|
207
|
-
npx skills add jackwener/opencli --skill opencli-autofix
|
|
208
|
-
npx skills add jackwener/opencli --skill smart-search
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## 面向开发者
|
|
212
|
-
|
|
213
|
-
从源码安装:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
git clone git@github.com:jackwener/opencli.git
|
|
217
|
-
cd opencli
|
|
218
|
-
npm install
|
|
219
|
-
npm run build
|
|
220
|
-
npm link
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
加载源码版 Browser Bridge 扩展:
|
|
224
|
-
|
|
225
|
-
1. 打开 `chrome://extensions` 并启用 **开发者模式**
|
|
226
|
-
2. 点击 **加载已解压的扩展程序**,选择本仓库里的 `extension/` 目录
|
|
227
|
-
|
|
228
154
|
## 内置命令
|
|
229
155
|
|
|
230
156
|
运行 `opencli list` 查看完整注册表。
|
|
231
157
|
|
|
232
|
-
| 站点 | 命令 |
|
|
233
|
-
|
|
234
|
-
| **
|
|
235
|
-
| **
|
|
236
|
-
| **
|
|
237
|
-
| **
|
|
238
|
-
| **
|
|
239
|
-
| **
|
|
240
|
-
| **
|
|
241
|
-
| **
|
|
242
|
-
| **
|
|
243
|
-
| **
|
|
244
|
-
| **
|
|
245
|
-
| **
|
|
246
|
-
| **
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
| **xiaohongshu** | `search` `note` `comments` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 浏览器 |
|
|
250
|
-
| **rednote** | `search` `note` `comments` `user` `download` `feed` `notifications` | 浏览器 |
|
|
251
|
-
| **xiaoe** | `courses` `detail` `catalog` `play-url` `content` | 浏览器 |
|
|
252
|
-
| **quark** | `ls` `mkdir` `mv` `rename` `rm` `save` `share-tree` | 浏览器 |
|
|
253
|
-
| **uiverse** | `code` `preview` | 浏览器 |
|
|
254
|
-
| **apple-podcasts** | `search` `episodes` `top` | 公开 |
|
|
255
|
-
| **baidu-scholar** | `search` | 公开 |
|
|
256
|
-
| **google-scholar** | `search` `cite` `profile` | 公开 |
|
|
257
|
-
| **gov-law** | `search` `recent` | 公开 |
|
|
258
|
-
| **gov-policy** | `search` `recent` | 公开 |
|
|
259
|
-
| **nowcoder** | `hot` `trending` `topics` `recommend` `creators` `companies` `jobs` `search` `suggest` `experience` `referral` `salary` `papers` `practice` `notifications` `detail` | 公开 / 浏览器 |
|
|
260
|
-
| **wanfang** | `search` | 公开 |
|
|
261
|
-
| **xiaoyuzhou** | `podcast*` `podcast-episodes*` `episode*` `download*` `transcript*` `auth` | 本地凭证 |
|
|
262
|
-
| **zhihu** | `hot` `search` `question` `download` `follow` `like` `favorite` `comment` `answer` | 浏览器 |
|
|
263
|
-
| **weixin** | `download` | 浏览器 |
|
|
264
|
-
| **youtube** | `search` `video` `transcript` `comments` `channel` `playlist` `feed` `history` `watch-later` `subscriptions` `like` `unlike` `subscribe` `unsubscribe` | 浏览器 |
|
|
265
|
-
| **boss** | `search` `detail` `recommend` `joblist` `greet` `batchgreet` `send` `chatlist` `chatmsg` `invite` `mark` `exchange` `resume` `stats` | 浏览器 |
|
|
266
|
-
| **coupang** | `search` `add-to-cart` | 浏览器 |
|
|
267
|
-
| **bbc** | `news` | 公共 API |
|
|
268
|
-
| **bloomberg** | `main` `markets` `economics` `industries` `tech` `politics` `businessweek` `opinions` `feeds` `news` | 公共 API / 浏览器 |
|
|
269
|
-
| **ctrip** | `search` | 浏览器 |
|
|
270
|
-
| **devto** | `top` `tag` `user` | 公开 |
|
|
271
|
-
| **dictionary** | `search` `synonyms` `examples` | 公开 |
|
|
272
|
-
| **arxiv** | `search` `paper` | 公开 |
|
|
273
|
-
| **pubmed** | `search` `article` `author` `citations` `related` | 公开 |
|
|
274
|
-
| **openreview** | `search` `venue` `paper` `reviews` | 公开 |
|
|
275
|
-
| **paperreview** | `submit` `review` `feedback` | 公开 |
|
|
276
|
-
| **wikipedia** | `search` `summary` `random` `trending` | 公开 |
|
|
277
|
-
| **hackernews** | `top` `new` `best` `ask` `show` `jobs` `search` `user` | 公共 API |
|
|
278
|
-
| **jd** | `item` | 浏览器 |
|
|
279
|
-
| **linkedin** | `search` `timeline` | 浏览器 |
|
|
280
|
-
| **reuters** | `search` | 浏览器 |
|
|
281
|
-
| **smzdm** | `search` | 浏览器 |
|
|
282
|
-
| **web** | `read` | 浏览器 |
|
|
283
|
-
| **weibo** | `hot` `search` `feed` `user` `me` `post` `comments` | 浏览器 |
|
|
284
|
-
| **yahoo-finance** | `quote` | 浏览器 |
|
|
285
|
-
| **sinafinance** | `news` | 🌐 公开 |
|
|
286
|
-
| **barchart** | `quote` `options` `greeks` `flow` | 浏览器 |
|
|
287
|
-
| **chaoxing** | `assignments` `exams` | 浏览器 |
|
|
288
|
-
| **grok** | `ask` `image` | 浏览器 |
|
|
289
|
-
| **hf** | `top` | 公开 |
|
|
290
|
-
| **jike** | `feed` `search` `create` `like` `comment` `repost` `notifications` `post` `topic` `user` | 浏览器 |
|
|
291
|
-
| **jimeng** | `generate` `history` | 浏览器 |
|
|
292
|
-
| **yollomi** | `generate` `video` `edit` `upload` `models` `remove-bg` `upscale` `face-swap` `restore` `try-on` `background` `object-remover` | 浏览器 |
|
|
293
|
-
| **linux-do** | `feed` `search` `categories` `tags` `topic` `topic-content` `user-posts` `user-topics` | 浏览器 |
|
|
294
|
-
| **stackoverflow** | `hot` `search` `bounties` `unanswered` | 公开 |
|
|
295
|
-
| **steam** | `top-sellers` | 公开 |
|
|
296
|
-
| **weread** | `shelf` `search` `book` `highlights` `notes` `notebooks` `ranking` | 浏览器 |
|
|
297
|
-
| **douban** | `search` `top250` `subject` `photos` `download` `marks` `reviews` `movie-hot` `book-hot` | 浏览器 |
|
|
298
|
-
| **facebook** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | 浏览器 |
|
|
299
|
-
| **google** | `news` `search` `suggest` `trends` | 公开 |
|
|
300
|
-
| **amazon** | `bestsellers` `search` `product` `offer` `discussion` `movers-shakers` `new-releases` `rankings` | 浏览器 |
|
|
301
|
-
| **1688** | `search` `item` `assets` `download` `store` | 浏览器 |
|
|
302
|
-
| **gitee** | `trending` `search` `user` | 公开 / 浏览器 |
|
|
303
|
-
| **gemini** | `new` `ask` `image` `deep-research` `deep-research-result` | 浏览器 |
|
|
304
|
-
| **claude** | `ask` `send` `new` `status` `read` `history` `detail` | 浏览器 |
|
|
305
|
-
| **spotify** | `auth` `status` `play` `pause` `next` `prev` `volume` `search` `queue` `shuffle` `repeat` | OAuth API |
|
|
306
|
-
| **notebooklm** | `status` `list` `open` `current` `get` `history` `summary` `note-list` `notes-get` `source-list` `source-get` `source-fulltext` `source-guide` | 浏览器 |
|
|
307
|
-
| **36kr** | `news` `hot` `search` `article` | 公开 / 浏览器 |
|
|
308
|
-
| **imdb** | `search` `title` `top` `trending` `person` `reviews` | 公开 |
|
|
309
|
-
| **producthunt** | `posts` `today` `hot` `browse` | 公开 / 浏览器 |
|
|
310
|
-
| **instagram** | `explore` `profile` `search` `user` `followers` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `saved` | 浏览器 |
|
|
311
|
-
| **lobsters** | `hot` `newest` `active` `tag` `read` | 公开 |
|
|
312
|
-
| **medium** | `feed` `search` `user` | 浏览器 |
|
|
313
|
-
| **sinablog** | `hot` `search` `article` `user` | 浏览器 |
|
|
314
|
-
| **substack** | `feed` `search` `publication` | 浏览器 |
|
|
315
|
-
| **pixiv** | `ranking` `search` `user` `illusts` `detail` `download` | 浏览器 |
|
|
316
|
-
| **tiktok** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | 浏览器 |
|
|
317
|
-
| **bluesky** | `search` `trending` `user` `profile` `thread` `feeds` `followers` `following` `starter-packs` | 公开 |
|
|
318
|
-
| **xianyu** | `search` `item` `chat` `publish` | 浏览器 |
|
|
319
|
-
| **douyin** | `videos` `publish` `drafts` `draft` `delete` `stats` `profile` `update` `hashtag` `location` `activities` `collections` | 浏览器 |
|
|
320
|
-
| **yuanbao** | `new` `ask` | 浏览器 |
|
|
321
|
-
|
|
322
|
-
100+ 站点能力 — **[→ 查看完整命令列表](./docs/adapters/index.md)**
|
|
323
|
-
|
|
324
|
-
`*` `opencli xiaoyuzhou podcast`、`podcast-episodes`、`episode`、`download`、`transcript` 需要本地小宇宙凭证:`~/.opencli/xiaoyuzhou.json`。
|
|
158
|
+
| 站点 | 命令 |
|
|
159
|
+
|------|------|
|
|
160
|
+
| **xiaohongshu** | `search` `note` `comments` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` |
|
|
161
|
+
| **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `summary` `video` `comments` `dynamic` `ranking` `following` `user-videos` `download` |
|
|
162
|
+
| **zhihu** | `hot` `search` `question` `download` `follow` `like` `favorite` `comment` `answer` |
|
|
163
|
+
| **hackernews** | `top` `new` `best` `ask` `show` `jobs` `search` `user` |
|
|
164
|
+
| **geogebra** | `eval` `add-point` `add-line` `add-circle` `add-polygon` `triangle` `hexagon` `list` `info` |
|
|
165
|
+
| **linkedin** | `connect` `inbox` `job-detail` `jobs-preferences` `post-analytics` `posts` `profile-experience` `profile-projects` `profile-read` `profile-analytics` `safe-send` `search` `people-search` `services-read` `sent-invitations` `thread-snapshot` `timeline` `salesnav-search` `salesnav-inbox` `salesnav-message` `salesnav-thread` |
|
|
166
|
+
| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` |
|
|
167
|
+
| **twitter** | `trending` `search` `timeline` `tweets` `lists` `list-tweets` `list-add` `list-remove` `bookmarks` `profile` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `likes` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` `accept` `reply-dm` `block` `unblock` `hide-reply` |
|
|
168
|
+
| **claude** | `ask` `send` `new` `status` `read` `history` `detail` |
|
|
169
|
+
| **gemini** | `new` `ask` `image` `deep-research` `deep-research-result` |
|
|
170
|
+
| **notebooklm** | `status` `list` `open` `current` `get` `history` `summary` `note-list` `notes-get` `source-list` `source-get` `source-fulltext` `source-guide` |
|
|
171
|
+
| **amazon** | `bestsellers` `search` `product` `offer` `discussion` `movers-shakers` `new-releases` `rankings` |
|
|
172
|
+
| **upwork** | `search` `feed` `detail` |
|
|
173
|
+
|
|
174
|
+
精选清单 — **[→ 查看全部 100+ 站点和命令](./docs/adapters/index.md)**(小红书 / B站 / 知乎 / Twitter / Reddit / 抖音 / 微博 / 微信读书 / 小宇宙 / 1688 / 夸克 / Spotify / 牛客 / arxiv / Chess.com / Bilibili / 等)。
|
|
325
175
|
|
|
326
176
|
### 外部 CLI 枢纽
|
|
327
177
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
| 外部 CLI | 描述 | 示例 |
|
|
331
|
-
|----------|------|------|
|
|
332
|
-
| **gh** | GitHub CLI | `opencli gh pr list --limit 5` |
|
|
333
|
-
| **obsidian** | Obsidian 仓库管理 | `opencli obsidian search query="AI"` |
|
|
334
|
-
| **docker** | Docker 命令行工具 | `opencli docker ps` |
|
|
335
|
-
| **longbridge** | Longbridge CLI — 通过 Longbridge OpenAPI 获取行情、账户和交易能力 | `opencli longbridge quote TSLA.US --format json` |
|
|
336
|
-
| **ntn** | Notion CLI — 基于官方 Notion API 的页面、数据库、块、搜索、评论命令 | `opencli ntn pages list` |
|
|
337
|
-
| **lark-cli** | 飞书 CLI — 消息、文档、日历、任务,200+ 命令 | `opencli lark-cli calendar +agenda` |
|
|
338
|
-
| **dws** | 钉钉 CLI — 钉钉全套产品能力的跨平台命令行工具,支持人类和 AI Agent 使用 | `opencli dws msg send --to user "hello"` |
|
|
339
|
-
| **wecom-cli** | 企业微信 CLI — 企业微信开放平台命令行工具,支持人类和 AI Agent 使用 | `opencli wecom-cli msg send --to user "hello"` |
|
|
340
|
-
| **tg(tg-cli)** | Telegram CLI — 基于 MTProto 的本地优先同步、搜索、导出,面向 AI Agent | `opencli tg search "AI news" -f json` |
|
|
341
|
-
| **discord(discord-cli)** | Discord CLI — 基于 SQLite 的本地优先同步、搜索、导出,面向 AI Agent | `opencli discord recent --channel general` |
|
|
342
|
-
| **wx(wx-cli)** | 微信本地数据 CLI — 会话、聊天记录、搜索、联系人、导出 | `opencli wx search "OpenCLI"` |
|
|
343
|
-
| **vercel** | Vercel — 部署项目、管理域名、环境变量、日志 | `opencli vercel deploy --prod` |
|
|
178
|
+
把现有命令行工具统一接入 `opencli <tool> ...`:
|
|
344
179
|
|
|
345
|
-
|
|
180
|
+
`gh` · `docker` · `vercel` · `wrangler` · `obsidian` · `longbridge` · `lark-cli` · `ntn(notion)` · `dws(DingTalk Workspace)` · `wecom-cli(企业微信)` · `tg(tg-cli)` · `discord(discord-cli)` · `wx(wx-cli)`
|
|
346
181
|
|
|
347
|
-
|
|
182
|
+
注册自定义本地 CLI:`opencli external register <name>`;查看所有:`opencli external list`。
|
|
348
183
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
```bash
|
|
352
|
-
opencli register mycli
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### 桌面应用适配器
|
|
356
|
-
|
|
357
|
-
每个桌面适配器都有自己详细的文档说明,包括命令参考、启动配置与使用示例:
|
|
358
|
-
|
|
359
|
-
| 应用 | 描述 | 文档 |
|
|
360
|
-
|-----|-------------|-----|
|
|
361
|
-
| **Cursor** | 控制 Cursor IDE — Composer、对话、代码提取等 | [Doc](./docs/adapters/desktop/cursor.md) |
|
|
362
|
-
| **Codex** | 在后台(无头)驱动 OpenAI Codex CLI Agent | [Doc](./docs/adapters/desktop/codex.md) |
|
|
363
|
-
| **Antigravity** | 在终端直接控制 Antigravity Ultra | [Doc](./docs/adapters/desktop/antigravity.md) |
|
|
364
|
-
| **ChatGPT App** | 自动化操作 ChatGPT macOS 桌面客户端 | [Doc](./docs/adapters/desktop/chatgpt-app.md) |
|
|
365
|
-
| **ChatWise** | 多 LLM 客户端(GPT-4、Claude、Gemini) | [Doc](./docs/adapters/desktop/chatwise.md) |
|
|
366
|
-
| **Discord** | Discord 桌面版 — 消息、频道、服务器 | [Doc](./docs/adapters/desktop/discord.md) |
|
|
367
|
-
| **Doubao** | 通过 CDP 控制豆包桌面应用 | [Doc](./docs/adapters/desktop/doubao-app.md) |
|
|
184
|
+
**桌面应用适配器**(Electron,通过 CDP):Cursor / Codex / Antigravity / ChatGPT App / ChatWise / Discord / Doubao — 详见 [`docs/adapters/desktop/`](./docs/adapters/desktop/)。
|
|
368
185
|
|
|
369
186
|
## 下载支持
|
|
370
187
|
|
|
@@ -456,28 +273,7 @@ opencli bilibili hot -v # 详细模式:展示管线执行步骤调试
|
|
|
456
273
|
|
|
457
274
|
## 退出码
|
|
458
275
|
|
|
459
|
-
opencli 遵循 Unix `sysexits.h`
|
|
460
|
-
|
|
461
|
-
| 退出码 | 含义 | 触发场景 |
|
|
462
|
-
|--------|------|----------|
|
|
463
|
-
| `0` | 成功 | 命令正常完成 |
|
|
464
|
-
| `1` | 通用错误 | 未分类的意外错误 |
|
|
465
|
-
| `2` | 用法错误 | 参数错误或未知命令 |
|
|
466
|
-
| `66` | 无数据 | 命令返回空结果(`EX_NOINPUT`) |
|
|
467
|
-
| `69` | 服务不可用 | Browser Bridge 未连接(`EX_UNAVAILABLE`) |
|
|
468
|
-
| `75` | 临时失败 | 命令超时,可重试(`EX_TEMPFAIL`) |
|
|
469
|
-
| `77` | 需要认证 | 未登录目标网站(`EX_NOPERM`) |
|
|
470
|
-
| `78` | 配置错误 | 凭证缺失或配置有误(`EX_CONFIG`) |
|
|
471
|
-
| `130` | 中断 | Ctrl-C / SIGINT |
|
|
472
|
-
|
|
473
|
-
```bash
|
|
474
|
-
opencli bilibili hot 2>/dev/null
|
|
475
|
-
case $? in
|
|
476
|
-
0) echo "ok" ;;
|
|
477
|
-
69) echo "请先启动 Browser Bridge" ;;
|
|
478
|
-
77) echo "请先登录 bilibili.com" ;;
|
|
479
|
-
esac
|
|
480
|
-
```
|
|
276
|
+
opencli 遵循 Unix `sysexits.h`,CI / 脚本可按失败模式分支:`0` 成功、`66` 无数据、`69` Browser Bridge 未连接、`75` 超时、`77` 需要认证、`78` 配置错误、`130` Ctrl-C。完整参考:[docs/zh/guide/exit-codes.md](./docs/zh/guide/exit-codes.md)。
|
|
481
277
|
|
|
482
278
|
## 插件
|
|
483
279
|
|
|
@@ -502,20 +298,6 @@ opencli plugin uninstall my-tool # 卸载
|
|
|
502
298
|
|
|
503
299
|
详见 [插件指南](./docs/zh/guide/plugins.md) 了解如何创建自己的插件。
|
|
504
300
|
|
|
505
|
-
## 致 AI Agent(开发者指南)
|
|
506
|
-
|
|
507
|
-
如果你是一个被要求查阅代码并编写新 `opencli` 适配器的 AI,请遵守以下工作流。
|
|
508
|
-
|
|
509
|
-
在动代码前,先读 [`opencli-adapter-author` skill](./skills/opencli-adapter-author/SKILL.md)。它把整个流程串起来:
|
|
510
|
-
|
|
511
|
-
- 侦察站点,选定 pattern(SPA / SSR / JSONP / Token / Streaming)
|
|
512
|
-
- 用 `opencli browser <name> network`、`eval`、interceptor 等找到目标 endpoint
|
|
513
|
-
- 定认证策略(`PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`)
|
|
514
|
-
- 先用 `opencli browser recon analyze <url>` 一步侦察,再字段解码、设计 columns、`opencli browser recon init` 生成骨架
|
|
515
|
-
- 交付前用 `opencli browser recon verify <site>/<name>` 验证
|
|
516
|
-
|
|
517
|
-
在仓库外写的私有适配器放到 `~/.opencli/clis/<site>/<name>.js`;每个站点的 endpoint、字段映射、抓包样本会累积在 `~/.opencli/sites/<site>/`,下次写同站点的其他命令可以直接复用。
|
|
518
|
-
|
|
519
301
|
## 常见问题排查
|
|
520
302
|
|
|
521
303
|
- **"Extension not connected" 报错**
|
|
@@ -525,7 +307,7 @@ opencli plugin uninstall my-tool # 卸载
|
|
|
525
307
|
- **返回空数据,或者报错 "Unauthorized"**
|
|
526
308
|
- Chrome/Chromium 里的登录态可能已经过期。请打开当前页面,在新标签页重新手工登录或刷新该页面。
|
|
527
309
|
- **Node API 错误 / 缺少 `fetch` / 旧 Node 启动即崩**
|
|
528
|
-
- OpenCLI 要求 **Node.js >=
|
|
310
|
+
- OpenCLI 要求 **Node.js >= 20**。先执行 `node --version`,如果版本过低先升级,再重试命令。
|
|
529
311
|
- **Daemon 问题**
|
|
530
312
|
- 检查 daemon 状态:`curl localhost:19825/status`
|
|
531
313
|
- 查看扩展日志:`curl localhost:19825/logs`
|