@jackwener/opencli 1.5.5 → 1.5.6
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 +27 -2
- package/README.zh-CN.md +36 -4
- package/dist/browser/daemon-client.d.ts +5 -1
- package/dist/browser/page.d.ts +6 -0
- package/dist/browser/page.js +15 -0
- package/dist/cli-manifest.json +1229 -67
- package/dist/clis/band/bands.d.ts +1 -0
- package/dist/clis/band/bands.js +72 -0
- package/dist/clis/band/mentions.d.ts +1 -0
- package/dist/clis/band/mentions.js +127 -0
- package/dist/clis/band/post.d.ts +1 -0
- package/dist/clis/band/post.js +175 -0
- package/dist/clis/band/posts.d.ts +1 -0
- package/dist/clis/band/posts.js +94 -0
- package/dist/clis/doubao/detail.d.ts +1 -0
- package/dist/clis/doubao/detail.js +33 -0
- package/dist/clis/doubao/detail.test.d.ts +1 -0
- package/dist/clis/doubao/detail.test.js +42 -0
- package/dist/clis/doubao/history.d.ts +1 -0
- package/dist/clis/doubao/history.js +28 -0
- package/dist/clis/doubao/history.test.d.ts +1 -0
- package/dist/clis/doubao/history.test.js +37 -0
- package/dist/clis/doubao/meeting-summary.d.ts +1 -0
- package/dist/clis/doubao/meeting-summary.js +39 -0
- package/dist/clis/doubao/meeting-transcript.d.ts +1 -0
- package/dist/clis/doubao/meeting-transcript.js +36 -0
- package/dist/clis/doubao/utils.d.ts +27 -0
- package/dist/clis/doubao/utils.js +317 -0
- package/dist/clis/doubao/utils.test.d.ts +1 -0
- package/dist/clis/doubao/utils.test.js +24 -0
- package/dist/clis/douyin/_shared/public-api.d.ts +33 -0
- package/dist/clis/douyin/_shared/public-api.js +29 -0
- package/dist/clis/douyin/user-videos.d.ts +5 -0
- package/dist/clis/douyin/user-videos.js +74 -0
- package/dist/clis/douyin/user-videos.test.d.ts +1 -0
- package/dist/clis/douyin/user-videos.test.js +108 -0
- package/dist/clis/ones/common.d.ts +32 -0
- package/dist/clis/ones/common.js +144 -0
- package/dist/clis/ones/enrich-tasks.d.ts +5 -0
- package/dist/clis/ones/enrich-tasks.js +37 -0
- package/dist/clis/ones/login.d.ts +1 -0
- package/dist/clis/ones/login.js +80 -0
- package/dist/clis/ones/logout.d.ts +1 -0
- package/dist/clis/ones/logout.js +17 -0
- package/dist/clis/ones/me.d.ts +1 -0
- package/dist/clis/ones/me.js +30 -0
- package/dist/clis/ones/my-tasks.d.ts +1 -0
- package/dist/clis/ones/my-tasks.js +120 -0
- package/dist/clis/ones/resolve-labels.d.ts +10 -0
- package/dist/clis/ones/resolve-labels.js +64 -0
- package/dist/clis/ones/task-helpers.d.ts +29 -0
- package/dist/clis/ones/task-helpers.js +212 -0
- package/dist/clis/ones/task-helpers.test.d.ts +1 -0
- package/dist/clis/ones/task-helpers.test.js +12 -0
- package/dist/clis/ones/task.d.ts +1 -0
- package/dist/clis/ones/task.js +66 -0
- package/dist/clis/ones/tasks.d.ts +1 -0
- package/dist/clis/ones/tasks.js +79 -0
- package/dist/clis/ones/token-info.d.ts +1 -0
- package/dist/clis/ones/token-info.js +42 -0
- package/dist/clis/ones/worklog.d.ts +11 -0
- package/dist/clis/ones/worklog.js +267 -0
- package/dist/clis/ones/worklog.test.d.ts +1 -0
- package/dist/clis/ones/worklog.test.js +20 -0
- package/dist/clis/spotify/spotify.d.ts +1 -0
- package/dist/clis/spotify/spotify.js +316 -0
- package/dist/clis/spotify/utils.d.ts +21 -0
- package/dist/clis/spotify/utils.js +66 -0
- package/dist/clis/spotify/utils.test.d.ts +1 -0
- package/dist/clis/spotify/utils.test.js +67 -0
- package/dist/clis/tieba/commands.test.d.ts +4 -0
- package/dist/clis/tieba/commands.test.js +79 -0
- package/dist/clis/tieba/hot.d.ts +1 -0
- package/dist/clis/tieba/hot.js +48 -0
- package/dist/clis/tieba/posts.d.ts +1 -0
- package/dist/clis/tieba/posts.js +85 -0
- package/dist/clis/tieba/read.d.ts +1 -0
- package/dist/clis/tieba/read.js +140 -0
- package/dist/clis/tieba/search.d.ts +1 -0
- package/dist/clis/tieba/search.js +108 -0
- package/dist/clis/tieba/utils.d.ts +101 -0
- package/dist/clis/tieba/utils.js +240 -0
- package/dist/clis/tieba/utils.test.d.ts +1 -0
- package/dist/clis/tieba/utils.test.js +290 -0
- package/dist/clis/weread/book.js +100 -13
- package/dist/clis/weread/commands.test.js +221 -0
- package/dist/clis/weread/private-api-regression.test.d.ts +1 -0
- package/dist/{weread-private-api-regression.test.js → clis/weread/private-api-regression.test.js} +92 -30
- package/dist/clis/weread/search-regression.test.d.ts +1 -0
- package/dist/clis/weread/search-regression.test.js +407 -0
- package/dist/clis/weread/search.js +143 -7
- package/dist/clis/weread/shelf.js +13 -95
- package/dist/clis/weread/utils.d.ts +46 -0
- package/dist/clis/weread/utils.js +214 -7
- package/dist/clis/weread/utils.test.js +71 -1
- package/dist/clis/xiaohongshu/publish.d.ts +1 -1
- package/dist/clis/xiaohongshu/publish.js +78 -31
- package/dist/clis/xiaohongshu/publish.test.js +66 -1
- package/dist/clis/xiaohongshu/user-helpers.d.ts +1 -0
- package/dist/clis/xiaohongshu/user-helpers.js +2 -0
- package/dist/clis/xiaohongshu/user-helpers.test.js +18 -0
- package/dist/clis/xueqiu/comments.d.ts +118 -0
- package/dist/clis/xueqiu/comments.js +354 -0
- package/dist/clis/xueqiu/comments.test.d.ts +1 -0
- package/dist/clis/xueqiu/comments.test.js +696 -0
- package/dist/clis/youtube/transcript.js +2 -4
- package/dist/clis/youtube/utils.d.ts +9 -0
- package/dist/clis/youtube/utils.js +67 -3
- package/dist/clis/youtube/utils.test.d.ts +1 -0
- package/dist/clis/youtube/utils.test.js +37 -0
- package/dist/clis/youtube/video.js +16 -15
- package/dist/clis/zsxq/dynamics.d.ts +1 -0
- package/dist/clis/zsxq/dynamics.js +47 -0
- package/dist/clis/zsxq/groups.d.ts +1 -0
- package/dist/clis/zsxq/groups.js +32 -0
- package/dist/clis/zsxq/search.d.ts +1 -0
- package/dist/clis/zsxq/search.js +43 -0
- package/dist/clis/zsxq/search.test.d.ts +1 -0
- package/dist/clis/zsxq/search.test.js +24 -0
- package/dist/clis/zsxq/topic.d.ts +1 -0
- package/dist/clis/zsxq/topic.js +47 -0
- package/dist/clis/zsxq/topic.test.d.ts +1 -0
- package/dist/clis/zsxq/topic.test.js +29 -0
- package/dist/clis/zsxq/topics.d.ts +1 -0
- package/dist/clis/zsxq/topics.js +25 -0
- package/dist/clis/zsxq/topics.test.d.ts +1 -0
- package/dist/clis/zsxq/topics.test.js +24 -0
- package/dist/clis/zsxq/utils.d.ts +97 -0
- package/dist/clis/zsxq/utils.js +230 -0
- package/dist/commanderAdapter.js +1 -1
- package/dist/commanderAdapter.test.js +39 -0
- package/dist/external-clis.yaml +17 -0
- package/dist/types.d.ts +5 -0
- package/docs/.vitepress/config.mts +3 -0
- package/docs/adapters/browser/band.md +63 -0
- package/docs/adapters/browser/ones.md +59 -0
- package/docs/adapters/browser/spotify.md +62 -0
- package/docs/adapters/browser/tieba.md +45 -0
- package/docs/adapters/browser/xueqiu.md +5 -0
- package/docs/adapters/browser/zsxq.md +49 -0
- package/docs/adapters/index.md +5 -2
- package/docs/adapters-doc/ones.md +32 -0
- package/extension/src/background.ts +15 -0
- package/extension/src/cdp.ts +42 -0
- package/extension/src/protocol.ts +5 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +16 -0
- package/src/browser/daemon-client.ts +5 -1
- package/src/browser/page.ts +16 -0
- package/src/clis/band/bands.ts +76 -0
- package/src/clis/band/mentions.ts +134 -0
- package/src/clis/band/post.ts +187 -0
- package/src/clis/band/posts.ts +106 -0
- package/src/clis/doubao/detail.test.ts +53 -0
- package/src/clis/doubao/detail.ts +41 -0
- package/src/clis/doubao/history.test.ts +45 -0
- package/src/clis/doubao/history.ts +32 -0
- package/src/clis/doubao/meeting-summary.ts +53 -0
- package/src/clis/doubao/meeting-transcript.ts +48 -0
- package/src/clis/doubao/utils.test.ts +45 -0
- package/src/clis/doubao/utils.ts +371 -0
- package/src/clis/douyin/_shared/public-api.ts +84 -0
- package/src/clis/douyin/user-videos.test.ts +122 -0
- package/src/clis/douyin/user-videos.ts +101 -0
- package/src/clis/ones/common.ts +187 -0
- package/src/clis/ones/enrich-tasks.ts +47 -0
- package/src/clis/ones/login.ts +103 -0
- package/src/clis/ones/logout.ts +19 -0
- package/src/clis/ones/me.ts +34 -0
- package/src/clis/ones/my-tasks.ts +148 -0
- package/src/clis/ones/resolve-labels.ts +80 -0
- package/src/clis/ones/task-helpers.test.ts +14 -0
- package/src/clis/ones/task-helpers.ts +214 -0
- package/src/clis/ones/task.ts +79 -0
- package/src/clis/ones/tasks.ts +92 -0
- package/src/clis/ones/token-info.ts +46 -0
- package/src/clis/ones/worklog.test.ts +24 -0
- package/src/clis/ones/worklog.ts +306 -0
- package/src/clis/spotify/spotify.ts +328 -0
- package/src/clis/spotify/utils.test.ts +87 -0
- package/src/clis/spotify/utils.ts +92 -0
- package/src/clis/tieba/commands.test.ts +86 -0
- package/src/clis/tieba/hot.ts +52 -0
- package/src/clis/tieba/posts.ts +108 -0
- package/src/clis/tieba/read.ts +158 -0
- package/src/clis/tieba/search.ts +119 -0
- package/src/clis/tieba/utils.test.ts +322 -0
- package/src/clis/tieba/utils.ts +348 -0
- package/src/clis/weread/book.ts +116 -13
- package/src/clis/weread/commands.test.ts +249 -0
- package/src/{weread-private-api-regression.test.ts → clis/weread/private-api-regression.test.ts} +108 -30
- package/src/clis/weread/search-regression.test.ts +440 -0
- package/src/clis/weread/search.ts +189 -9
- package/src/clis/weread/shelf.ts +20 -122
- package/src/clis/weread/utils.test.ts +81 -1
- package/src/clis/weread/utils.ts +264 -7
- package/src/clis/xiaohongshu/publish.test.ts +79 -1
- package/src/clis/xiaohongshu/publish.ts +84 -30
- package/src/clis/xiaohongshu/user-helpers.test.ts +23 -0
- package/src/clis/xiaohongshu/user-helpers.ts +4 -0
- package/src/clis/xueqiu/comments.test.ts +823 -0
- package/src/clis/xueqiu/comments.ts +461 -0
- package/src/clis/youtube/transcript.ts +2 -4
- package/src/clis/youtube/utils.test.ts +43 -0
- package/src/clis/youtube/utils.ts +69 -0
- package/src/clis/youtube/video.ts +16 -15
- package/src/clis/zsxq/dynamics.ts +60 -0
- package/src/clis/zsxq/groups.ts +41 -0
- package/src/clis/zsxq/search.test.ts +29 -0
- package/src/clis/zsxq/search.ts +54 -0
- package/src/clis/zsxq/topic.test.ts +34 -0
- package/src/clis/zsxq/topic.ts +68 -0
- package/src/clis/zsxq/topics.test.ts +29 -0
- package/src/clis/zsxq/topics.ts +36 -0
- package/src/clis/zsxq/utils.ts +351 -0
- package/src/commanderAdapter.test.ts +47 -0
- package/src/commanderAdapter.ts +1 -1
- package/src/external-clis.yaml +17 -0
- package/src/types.ts +5 -0
- package/tests/e2e/band-auth.test.ts +20 -0
- package/tests/e2e/browser-auth-helpers.ts +18 -0
- package/tests/e2e/browser-auth.test.ts +35 -47
- package/tests/e2e/browser-public.test.ts +288 -0
- package/tests/e2e/management.test.ts +1 -1
- package/tests/e2e/plugin-management.test.ts +1 -1
- package/vitest.config.ts +1 -0
- package/SKILL.md +0 -879
- package/dist/weread-private-api-regression.test.d.ts +0 -1
- package/dist/weread-search-regression.test.d.ts +0 -1
- package/dist/weread-search-regression.test.js +0 -39
- package/src/weread-search-regression.test.ts +0 -44
package/README.md
CHANGED
|
@@ -119,10 +119,12 @@ git clone git@github.com:jackwener/opencli.git && cd opencli && npm install && n
|
|
|
119
119
|
|------|----------|
|
|
120
120
|
| **xiaohongshu** | `search` `feed` `user` `download` `publish` `comments` `notifications` `creator-notes` `creator-notes-summary` `creator-note-detail` `creator-profile` `creator-stats` |
|
|
121
121
|
| **bilibili** | `hot` `search` `history` `feed` `ranking` `download` `comments` `dynamic` `favorite` `following` `me` `subtitle` `user-videos` |
|
|
122
|
+
| **tieba** | `hot` `posts` `search` `read` |
|
|
122
123
|
| **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` |
|
|
123
124
|
| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `user` `user-posts` `user-comments` `read` `save` `saved` `subscribe` `upvote` `upvoted` `comment` |
|
|
125
|
+
| **spotify** | `auth` `status` `play` `pause` `next` `prev` `volume` `search` `queue` `shuffle` `repeat` |
|
|
124
126
|
|
|
125
|
-
|
|
127
|
+
66+ adapters in total — **[→ see all supported sites & commands](./docs/adapters/index.md)**
|
|
126
128
|
|
|
127
129
|
## CLI Hub
|
|
128
130
|
|
|
@@ -133,8 +135,9 @@ OpenCLI acts as a universal hub for your existing command-line tools — unified
|
|
|
133
135
|
| **gh** | GitHub CLI | `opencli gh pr list --limit 5` |
|
|
134
136
|
| **obsidian** | Obsidian vault management | `opencli obsidian search query="AI"` |
|
|
135
137
|
| **docker** | Docker | `opencli docker ps` |
|
|
136
|
-
| **gws** | Google Workspace CLI | `opencli gws docs list` |
|
|
137
138
|
| **lark-cli** | Lark/Feishu — messages, docs, calendar, tasks, 200+ commands | `opencli lark-cli calendar +agenda` |
|
|
139
|
+
| **dingtalk** | DingTalk — cross-platform CLI for DingTalk's full suite, designed for humans and AI agents | `opencli dingtalk msg send --to user "hello"` |
|
|
140
|
+
| **wecom** | WeCom/企业微信 — CLI for WeCom open platform, for humans and AI agents | `opencli wecom msg send --to user "hello"` |
|
|
138
141
|
| **vercel** | Vercel — deploy projects, manage domains, env vars, logs | `opencli vercel deploy --prod` |
|
|
139
142
|
|
|
140
143
|
**Register your own** — add any local CLI so AI agents can discover it via `opencli list`:
|
|
@@ -192,6 +195,28 @@ opencli bilibili hot -f csv # Spreadsheet-friendly
|
|
|
192
195
|
opencli bilibili hot -v # Verbose: show pipeline debug steps
|
|
193
196
|
```
|
|
194
197
|
|
|
198
|
+
## Exit Codes
|
|
199
|
+
|
|
200
|
+
opencli follows Unix `sysexits.h` conventions so it integrates naturally with shell pipelines and CI scripts:
|
|
201
|
+
|
|
202
|
+
| Code | Meaning | When |
|
|
203
|
+
|------|---------|------|
|
|
204
|
+
| `0` | Success | Command completed normally |
|
|
205
|
+
| `1` | Generic error | Unexpected / unclassified failure |
|
|
206
|
+
| `2` | Usage error | Bad arguments or unknown command |
|
|
207
|
+
| `66` | Empty result | No data returned (`EX_NOINPUT`) |
|
|
208
|
+
| `69` | Service unavailable | Browser Bridge not connected (`EX_UNAVAILABLE`) |
|
|
209
|
+
| `75` | Temporary failure | Command timed out — retry (`EX_TEMPFAIL`) |
|
|
210
|
+
| `77` | Auth required | Not logged in to target site (`EX_NOPERM`) |
|
|
211
|
+
| `78` | Config error | Missing credentials or bad config (`EX_CONFIG`) |
|
|
212
|
+
| `130` | Interrupted | Ctrl-C / SIGINT |
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
opencli spotify status || echo "exit $?" # 69 if browser not running
|
|
216
|
+
opencli github issues 2>/dev/null
|
|
217
|
+
[ $? -eq 77 ] && opencli github auth # auto-auth if not logged in
|
|
218
|
+
```
|
|
219
|
+
|
|
195
220
|
## Plugins
|
|
196
221
|
|
|
197
222
|
Extend OpenCLI with community-contributed adapters:
|
package/README.zh-CN.md
CHANGED
|
@@ -122,16 +122,17 @@ npm install -g @jackwener/opencli@latest
|
|
|
122
122
|
|------|------|------|
|
|
123
123
|
| **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` | 浏览器 |
|
|
124
124
|
| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` | 浏览器 |
|
|
125
|
+
| **tieba** | `hot` `posts` `search` `read` | 浏览器 |
|
|
125
126
|
| **cursor** | `status` `send` `read` `new` `dump` `composer` `model` `extract-code` `ask` `screenshot` `history` `export` | 桌面端 |
|
|
126
127
|
| **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 浏览器 |
|
|
127
128
|
| **codex** | `status` `send` `read` `new` `dump` `extract-diff` `model` `ask` `screenshot` `history` `export` | 桌面端 |
|
|
128
129
|
| **chatwise** | `status` `new` `send` `read` `ask` `model` `history` `export` `screenshot` | 桌面端 |
|
|
129
|
-
| **doubao** | `status` `new` `send` `read` `ask` | 浏览器 |
|
|
130
|
+
| **doubao** | `status` `new` `send` `read` `ask` `history` `detail` `meeting-summary` `meeting-transcript` | 浏览器 |
|
|
130
131
|
| **doubao-app** | `status` `new` `send` `read` `ask` `screenshot` `dump` | 桌面端 |
|
|
131
132
|
| **notion** | `status` `search` `read` `new` `write` `sidebar` `favorites` `export` | 桌面端 |
|
|
132
133
|
| **discord-app** | `status` `send` `read` `channels` `servers` `search` `members` | 桌面端 |
|
|
133
134
|
| **v2ex** | `hot` `latest` `topic` `node` `user` `member` `replies` `nodes` `daily` `me` `notifications` | 公开 / 浏览器 |
|
|
134
|
-
| **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` `earnings-date` `fund-holdings` `fund-snapshot` | 浏览器 |
|
|
135
|
+
| **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `comments` `watchlist` `earnings-date` `fund-holdings` `fund-snapshot` | 浏览器 |
|
|
135
136
|
| **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` | 桌面端 |
|
|
136
137
|
| **chatgpt** | `status` `new` `send` `read` `ask` `model` | 桌面端 |
|
|
137
138
|
| **xiaohongshu** | `search` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 浏览器 |
|
|
@@ -173,6 +174,7 @@ npm install -g @jackwener/opencli@latest
|
|
|
173
174
|
| **douban** | `search` `top250` `subject` `photos` `download` `marks` `reviews` `movie-hot` `book-hot` | 浏览器 |
|
|
174
175
|
| **facebook** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | 浏览器 |
|
|
175
176
|
| **google** | `news` `search` `suggest` `trends` | 公开 |
|
|
177
|
+
| **spotify** | `auth` `status` `play` `pause` `next` `prev` `volume` `search` `queue` `shuffle` `repeat` | OAuth API |
|
|
176
178
|
| **36kr** | `news` `hot` `search` `article` | 公开 / 浏览器 |
|
|
177
179
|
| **imdb** | `search` `title` `top` `trending` `person` `reviews` | 公开 |
|
|
178
180
|
| **producthunt** | `posts` `today` `hot` `browse` | 公开 / 浏览器 |
|
|
@@ -183,7 +185,10 @@ npm install -g @jackwener/opencli@latest
|
|
|
183
185
|
| **substack** | `feed` `search` `publication` | 浏览器 |
|
|
184
186
|
| **pixiv** | `ranking` `search` `user` `illusts` `detail` `download` | 浏览器 |
|
|
185
187
|
| **tiktok** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | 浏览器 |
|
|
188
|
+
| **bluesky** | `search` `trending` `user` `profile` `thread` `feeds` `followers` `following` `starter-packs` | 公开 |
|
|
189
|
+
| **douyin** | `videos` `publish` `drafts` `draft` `delete` `stats` `profile` `update` `hashtag` `location` `activities` `collections` | 浏览器 |
|
|
186
190
|
|
|
191
|
+
66+ 适配器 — **[→ 查看完整命令列表](./docs/adapters/index.md)**
|
|
187
192
|
|
|
188
193
|
### 外部 CLI 枢纽
|
|
189
194
|
|
|
@@ -194,8 +199,10 @@ OpenCLI 也可以作为你现有命令行工具的统一入口,负责发现、
|
|
|
194
199
|
| **gh** | GitHub CLI | `opencli gh pr list --limit 5` |
|
|
195
200
|
| **obsidian** | Obsidian 仓库管理 | `opencli obsidian search query="AI"` |
|
|
196
201
|
| **docker** | Docker 命令行工具 | `opencli docker ps` |
|
|
197
|
-
| **
|
|
198
|
-
| **
|
|
202
|
+
| **lark-cli** | 飞书 CLI — 消息、文档、日历、任务,200+ 命令 | `opencli lark-cli calendar +agenda` |
|
|
203
|
+
| **dingtalk** | 钉钉 CLI — 钉钉全套产品能力的跨平台命令行工具,支持人类和 AI Agent 使用 | `opencli dingtalk msg send --to user "hello"` |
|
|
204
|
+
| **wecom** | 企业微信 CLI — 企业微信开放平台命令行工具,支持人类和 AI Agent 使用 | `opencli wecom msg send --to user "hello"` |
|
|
205
|
+
| **vercel** | Vercel — 部署项目、管理域名、环境变量、日志 | `opencli vercel deploy --prod` |
|
|
199
206
|
|
|
200
207
|
**零配置透传**:OpenCLI 会把你的输入原样转发给底层二进制,保留原生 stdout / stderr 行为。
|
|
201
208
|
|
|
@@ -295,6 +302,31 @@ opencli bilibili hot -f csv # CSV
|
|
|
295
302
|
opencli bilibili hot -v # 详细模式:展示管线执行步骤调试信息
|
|
296
303
|
```
|
|
297
304
|
|
|
305
|
+
## 退出码
|
|
306
|
+
|
|
307
|
+
opencli 遵循 Unix `sysexits.h` 惯例,可无缝接入 shell 管道和 CI 脚本:
|
|
308
|
+
|
|
309
|
+
| 退出码 | 含义 | 触发场景 |
|
|
310
|
+
|--------|------|----------|
|
|
311
|
+
| `0` | 成功 | 命令正常完成 |
|
|
312
|
+
| `1` | 通用错误 | 未分类的意外错误 |
|
|
313
|
+
| `2` | 用法错误 | 参数错误或未知命令 |
|
|
314
|
+
| `66` | 无数据 | 命令返回空结果(`EX_NOINPUT`) |
|
|
315
|
+
| `69` | 服务不可用 | Browser Bridge 未连接(`EX_UNAVAILABLE`) |
|
|
316
|
+
| `75` | 临时失败 | 命令超时,可重试(`EX_TEMPFAIL`) |
|
|
317
|
+
| `77` | 需要认证 | 未登录目标网站(`EX_NOPERM`) |
|
|
318
|
+
| `78` | 配置错误 | 凭证缺失或配置有误(`EX_CONFIG`) |
|
|
319
|
+
| `130` | 中断 | Ctrl-C / SIGINT |
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
opencli bilibili hot 2>/dev/null
|
|
323
|
+
case $? in
|
|
324
|
+
0) echo "ok" ;;
|
|
325
|
+
69) echo "请先启动 Browser Bridge" ;;
|
|
326
|
+
77) echo "请先登录 bilibili.com" ;;
|
|
327
|
+
esac
|
|
328
|
+
```
|
|
329
|
+
|
|
298
330
|
## 插件
|
|
299
331
|
|
|
300
332
|
通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 YAML/TS 格式,启动时自动发现。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { BrowserSessionInfo } from '../types.js';
|
|
7
7
|
export interface DaemonCommand {
|
|
8
8
|
id: string;
|
|
9
|
-
action: 'exec' | 'navigate' | 'tabs' | 'cookies' | 'screenshot' | 'close-window' | 'sessions';
|
|
9
|
+
action: 'exec' | 'navigate' | 'tabs' | 'cookies' | 'screenshot' | 'close-window' | 'sessions' | 'set-file-input';
|
|
10
10
|
tabId?: number;
|
|
11
11
|
code?: string;
|
|
12
12
|
workspace?: string;
|
|
@@ -17,6 +17,10 @@ export interface DaemonCommand {
|
|
|
17
17
|
format?: 'png' | 'jpeg';
|
|
18
18
|
quality?: number;
|
|
19
19
|
fullPage?: boolean;
|
|
20
|
+
/** Local file paths for set-file-input action */
|
|
21
|
+
files?: string[];
|
|
22
|
+
/** CSS selector for file input element (set-file-input action) */
|
|
23
|
+
selector?: string;
|
|
20
24
|
}
|
|
21
25
|
export interface DaemonResult {
|
|
22
26
|
id: string;
|
package/dist/browser/page.d.ts
CHANGED
|
@@ -72,5 +72,11 @@ export declare class Page implements IPage {
|
|
|
72
72
|
}): Promise<void>;
|
|
73
73
|
installInterceptor(pattern: string): Promise<void>;
|
|
74
74
|
getInterceptedRequests(): Promise<unknown[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Set local file paths on a file input element via CDP DOM.setFileInputFiles.
|
|
77
|
+
* Chrome reads the files directly from the local filesystem, avoiding the
|
|
78
|
+
* payload size limits of base64-in-evaluate.
|
|
79
|
+
*/
|
|
80
|
+
setFileInput(files: string[], selector?: string): Promise<void>;
|
|
75
81
|
waitForCapture(timeout?: number): Promise<void>;
|
|
76
82
|
}
|
package/dist/browser/page.js
CHANGED
|
@@ -308,6 +308,21 @@ export class Page {
|
|
|
308
308
|
const result = await this.evaluate(generateReadInterceptedJs('__opencli_xhr'));
|
|
309
309
|
return Array.isArray(result) ? result : [];
|
|
310
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Set local file paths on a file input element via CDP DOM.setFileInputFiles.
|
|
313
|
+
* Chrome reads the files directly from the local filesystem, avoiding the
|
|
314
|
+
* payload size limits of base64-in-evaluate.
|
|
315
|
+
*/
|
|
316
|
+
async setFileInput(files, selector) {
|
|
317
|
+
const result = await sendCommand('set-file-input', {
|
|
318
|
+
files,
|
|
319
|
+
selector,
|
|
320
|
+
...this._cmdOpts(),
|
|
321
|
+
});
|
|
322
|
+
if (!result?.count) {
|
|
323
|
+
throw new Error('setFileInput returned no count — command may not be supported by the extension');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
311
326
|
async waitForCapture(timeout = 10) {
|
|
312
327
|
const maxMs = timeout * 1000;
|
|
313
328
|
await sendCommand('exec', {
|