publishport-opencli 1.0.1 → 1.0.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/README.md +61 -61
- package/README.zh-CN.md +68 -68
- package/cli-manifest.json +502 -59
- package/clis/1688/shared.js +2 -2
- package/clis/36kr/news.js +1 -1
- package/clis/_atlassian/shared.js +1 -1
- package/clis/_shared/article/auth.js +1 -1
- package/clis/_shared/article/publish.js +1 -1
- package/clis/_shared/content-guard.js +1 -1
- package/clis/_shared/self-hosted-sites.js +2 -0
- package/clis/_shared/site-auth.js +1 -1
- package/clis/_shared/token-auth.js +2 -2
- package/clis/_shared/video-publish.js +1 -1
- package/clis/aibase/news.js +1 -1
- package/clis/amazon/shared.js +2 -2
- package/clis/antigravity/SKILL.md +12 -12
- package/clis/antigravity/storage.js +1 -1
- package/clis/apple-podcasts/episodes.js +1 -1
- package/clis/archive/item.js +1 -1
- package/clis/archive/search.js +1 -1
- package/clis/archive/snapshots.js +1 -1
- package/clis/archive/wayback.js +1 -1
- package/clis/arxiv/author.js +1 -1
- package/clis/baijiahao/publish.js +1 -1
- package/clis/bbc/utils.js +1 -1
- package/clis/bloomberg/businessweek.js +1 -1
- package/clis/bloomberg/utils.js +1 -1
- package/clis/booking/search.js +1 -1
- package/clis/boss/utils.js +1 -1
- package/clis/chatgpt/ask.js +1 -1
- package/clis/chatgpt/detail.js +1 -1
- package/clis/chatgpt/history.js +1 -1
- package/clis/chatgpt/project-file-add.js +1 -1
- package/clis/chatgpt/project-list.js +1 -1
- package/clis/chatgpt/utils.js +2 -2
- package/clis/chess/utils.js +1 -1
- package/clis/claude/ask.js +1 -1
- package/clis/claude/history.js +1 -1
- package/clis/claude/utils.js +1 -1
- package/clis/codex/extract-diff.js +1 -1
- package/clis/coingecko/coin.js +1 -1
- package/clis/crates/utils.js +1 -1
- package/clis/csdn/stats.js +1 -1
- package/clis/dblp/utils.js +1 -1
- package/clis/defillama/utils.js +1 -1
- package/clis/devto/publish.js +1 -1
- package/clis/discord-app/utils.js +1 -1
- package/clis/dockerhub/utils.js +1 -1
- package/clis/douban/utils.js +1 -1
- package/clis/douyin/_shared/tos-upload.js +1 -1
- package/clis/douyin/hashtag.js +1 -1
- package/clis/douyin/publish-image.js +1 -1
- package/clis/douyin/publish.js +1 -1
- package/clis/eastmoney/announcement.js +1 -1
- package/clis/eastmoney/rank.js +1 -1
- package/clis/eastmoney/sectors.js +1 -1
- package/clis/endoflife/utils.js +1 -1
- package/clis/flathub/utils.js +1 -1
- package/clis/gemini/detail.js +1 -1
- package/clis/gemini/read.js +1 -1
- package/clis/geogebra/add-circle.js +1 -1
- package/clis/geogebra/add-line.js +1 -1
- package/clis/geogebra/add-point.js +1 -1
- package/clis/geogebra/add-polygon.js +1 -1
- package/clis/geogebra/eval.js +1 -1
- package/clis/geogebra/hexagon.js +1 -1
- package/clis/geogebra/info.js +1 -1
- package/clis/geogebra/triangle.js +1 -1
- package/clis/ghost/login.js +1 -0
- package/clis/ghost/publish.js +1 -1
- package/clis/ghost/shared.js +24 -1
- package/clis/ghost/sites.js +1 -0
- package/clis/ghost/whoami.js +1 -1
- package/clis/gitee/user.js +2 -2
- package/clis/github-trending/repos.js +1 -1
- package/clis/goproxy/utils.js +1 -1
- package/clis/grok/export-all.js +1 -1
- package/clis/grok/export.js +1 -1
- package/clis/hashnode/publish.js +1 -1
- package/clis/hf/datasets.js +1 -1
- package/clis/hf/models.js +1 -1
- package/clis/hf/paper.js +1 -1
- package/clis/hf/spaces.js +1 -1
- package/clis/homebrew/utils.js +1 -1
- package/clis/instagram/note.js +1 -1
- package/clis/jimeng/generate.js +1 -1
- package/clis/juejin/utils.js +1 -1
- package/clis/kuaishou/publish.js +1 -1
- package/clis/lesswrong/tag.js +1 -1
- package/clis/lichess/utils.js +1 -1
- package/clis/linkedin/search.js +2 -2
- package/clis/linux-do/feed.js +2 -2
- package/clis/lobsters/domain.js +1 -1
- package/clis/mastodon/login.js +1 -0
- package/clis/mastodon/post.js +1 -1
- package/clis/mastodon/shared.js +10 -10
- package/clis/mastodon/sites.js +1 -0
- package/clis/mastodon/whoami.js +1 -1
- package/clis/maven/utils.js +1 -1
- package/clis/mdn/search.js +1 -1
- package/clis/medium/tag.js +1 -1
- package/clis/notebooklm/current.js +1 -1
- package/clis/notebooklm/get.js +1 -1
- package/clis/notebooklm/history.js +1 -1
- package/clis/notebooklm/note-list.js +1 -1
- package/clis/notebooklm/notes-get.js +1 -1
- package/clis/notebooklm/open.js +1 -1
- package/clis/notebooklm/source-fulltext.js +1 -1
- package/clis/notebooklm/source-get.js +1 -1
- package/clis/notebooklm/source-guide.js +1 -1
- package/clis/notebooklm/source-list.js +1 -1
- package/clis/notebooklm/summary.js +1 -1
- package/clis/notebooklm/utils.js +1 -1
- package/clis/npm/utils.js +1 -1
- package/clis/nuget/utils.js +1 -1
- package/clis/nvd/cve.js +1 -1
- package/clis/oeis/utils.js +1 -1
- package/clis/ones/common.js +2 -2
- package/clis/ones/me.js +1 -1
- package/clis/ones/tasks.js +1 -1
- package/clis/ones/token-info.js +1 -1
- package/clis/ones/worklog.js +1 -1
- package/clis/openalex/utils.js +1 -1
- package/clis/oschina/stats.js +1 -1
- package/clis/osv/utils.js +1 -1
- package/clis/packagist/utils.js +1 -1
- package/clis/pixiv/detail.js +1 -1
- package/clis/pixiv/user.js +1 -1
- package/clis/producthunt/utils.js +1 -1
- package/clis/pypi/utils.js +1 -1
- package/clis/qiita/gql.js +2 -2
- package/clis/rest-countries/utils.js +1 -1
- package/clis/rfc/utils.js +1 -1
- package/clis/rubygems/utils.js +1 -1
- package/clis/semanticscholar/utils.js +1 -1
- package/clis/slock/errors.js +1 -1
- package/clis/spotify/spotify.js +1 -1
- package/clis/spotify/utils.js +1 -1
- package/clis/stackoverflow/utils.js +1 -1
- package/clis/steam/utils.js +1 -1
- package/clis/substack/auth.js +2 -2
- package/clis/suno/generate.js +2 -2
- package/clis/suno/list.js +3 -3
- package/clis/telegram/send.js +1 -1
- package/clis/tiktok/creator-videos.js +1 -1
- package/clis/tiktok/publish.js +1 -1
- package/clis/tiktok/utils.js +1 -1
- package/clis/trae-cn/activity.js +1 -1
- package/clis/trae-cn/approve.js +1 -1
- package/clis/trae-cn/ask.js +1 -1
- package/clis/trae-cn/dump.js +1 -1
- package/clis/trae-cn/export.js +1 -1
- package/clis/trae-cn/model.js +1 -1
- package/clis/trae-cn/new.js +1 -1
- package/clis/trae-cn/read.js +1 -1
- package/clis/trae-cn/screenshot.js +1 -1
- package/clis/trae-cn/select-model.js +1 -1
- package/clis/trae-cn/send.js +1 -1
- package/clis/trae-cn/setup.js +1 -1
- package/clis/trae-cn/status.js +1 -1
- package/clis/trae-cn/targets.js +1 -1
- package/clis/trae-cn/watch.js +1 -1
- package/clis/trae-solo/state-fs.js +1 -1
- package/clis/tumblr/publish.js +1 -1
- package/clis/tvmaze/utils.js +1 -1
- package/clis/twitter/bookmark-folder.js +1 -1
- package/clis/twitter/download.js +1 -1
- package/clis/twitter/followers.js +2 -2
- package/clis/twitter/following.js +2 -2
- package/clis/twitter/likes.js +1 -1
- package/clis/twitter/list-add-batch.js +1 -1
- package/clis/twitter/list-add-core.js +1 -1
- package/clis/twitter/list-add.js +1 -1
- package/clis/twitter/list-create.js +1 -1
- package/clis/twitter/list-delete.js +3 -3
- package/clis/twitter/list-remove-batch.js +1 -1
- package/clis/twitter/list-remove.js +1 -1
- package/clis/twitter/list-tweets.js +1 -1
- package/clis/twitter/profile.js +1 -1
- package/clis/twitter/search.js +1 -1
- package/clis/twitter/shared.js +1 -1
- package/clis/twitter/tweets.js +1 -1
- package/clis/uisdc/news.js +1 -1
- package/clis/v2ex/daily.js +2 -2
- package/clis/v2ex/me.js +2 -2
- package/clis/v2ex/notifications.js +1 -1
- package/clis/wikidata/utils.js +1 -1
- package/clis/wikipedia/page.js +2 -2
- package/clis/wikipedia/summary.js +1 -1
- package/clis/wikipedia/utils.js +1 -1
- package/clis/wordpress/login.js +1 -1
- package/clis/wordpress/publish.js +1 -1
- package/clis/wordpress/shared.js +3 -3
- package/clis/wordpress/sites.js +1 -0
- package/clis/wordpress/whoami.js +1 -1
- package/clis/woshipm/stats.js +1 -1
- package/clis/xiaoe/content.js +1 -1
- package/clis/xiaohongshu/draft-delete.js +1 -1
- package/clis/xiaohongshu/draft-open.js +1 -1
- package/clis/xiaohongshu/draft-utils.js +2 -2
- package/clis/xiaohongshu/publish-video.js +1 -1
- package/clis/xiaohongshu/publish.js +1 -1
- package/clis/xiaoyuzhou/auth.js +1 -1
- package/clis/xiaoyuzhou/transcript.js +1 -1
- package/clis/yollomi/background.js +1 -1
- package/clis/yollomi/edit.js +1 -1
- package/clis/yollomi/generate.js +1 -1
- package/clis/yollomi/try-on.js +1 -1
- package/clis/youtube/publish.js +1 -1
- package/clis/zhihu/answer-comments.js +1 -1
- package/clis/zhihu/answer-detail.js +1 -1
- package/clis/zhihu/collection.js +2 -2
- package/clis/zhihu/collections.js +1 -1
- package/clis/zhihu/question.js +1 -1
- package/clis/zhihu/search.js +1 -1
- package/clis/zhihu/target.js +1 -1
- package/clis/zhihu/user-arg.js +1 -1
- package/dist/src/adapter-shadow.js +1 -1
- package/dist/src/browser/analyze.js +1 -1
- package/dist/src/browser/article-extract.d.ts +1 -1
- package/dist/src/browser/base-page.js +3 -3
- package/dist/src/browser/cdp.js +1 -1
- package/dist/src/browser/daemon-client.d.ts +1 -1
- package/dist/src/browser/daemon-lifecycle.js +6 -6
- package/dist/src/browser/daemon-version.js +1 -1
- package/dist/src/browser/dom-snapshot.d.ts +1 -1
- package/dist/src/browser/dom-snapshot.js +2 -2
- package/dist/src/browser/errors.js +2 -2
- package/dist/src/browser/network-cache.js +1 -1
- package/dist/src/browser/profile.js +1 -1
- package/dist/src/browser/target-resolver.js +4 -4
- package/dist/src/browser/verify-fixture.js +1 -1
- package/dist/src/browser-session-lock.js +1 -1
- package/dist/src/build-manifest.d.ts +1 -1
- package/dist/src/build-manifest.js +1 -1
- package/dist/src/cli-argv-preprocess.d.ts +4 -4
- package/dist/src/cli-argv-preprocess.js +1 -1
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/cli.js +19 -19
- package/dist/src/commanderAdapter.js +1 -1
- package/dist/src/commands/auth.js +2 -2
- package/dist/src/commands/daemon.d.ts +4 -4
- package/dist/src/commands/daemon.js +1 -1
- package/dist/src/completion-shared.js +12 -12
- package/dist/src/completion.d.ts +2 -2
- package/dist/src/constants.d.ts +1 -1
- package/dist/src/constants.js +1 -1
- package/dist/src/daemon-utils.d.ts +1 -1
- package/dist/src/daemon-utils.js +1 -1
- package/dist/src/daemon.d.ts +2 -2
- package/dist/src/daemon.js +1 -1
- package/dist/src/discovery.d.ts +7 -7
- package/dist/src/discovery.js +2 -2
- package/dist/src/doctor.d.ts +1 -1
- package/dist/src/doctor.js +6 -6
- package/dist/src/electron-apps.d.ts +1 -1
- package/dist/src/electron-apps.js +1 -1
- package/dist/src/errors.d.ts +2 -2
- package/dist/src/errors.js +1 -1
- package/dist/src/execution.js +1 -1
- package/dist/src/external.d.ts +1 -1
- package/dist/src/external.js +1 -1
- package/dist/src/help.d.ts +1 -1
- package/dist/src/help.js +3 -3
- package/dist/src/hooks.d.ts +1 -1
- package/dist/src/launcher.js +2 -2
- package/dist/src/logger.d.ts +1 -1
- package/dist/src/main.d.ts +1 -1
- package/dist/src/main.js +1 -1
- package/dist/src/observation/artifact.js +2 -2
- package/dist/src/package-paths.js +1 -1
- package/dist/src/package-paths.test.d.ts +1 -0
- package/dist/src/plugin-manifest.d.ts +12 -3
- package/dist/src/plugin-manifest.js +1 -1
- package/dist/src/plugin-scaffold.d.ts +2 -2
- package/dist/src/plugin-scaffold.js +9 -9
- package/dist/src/plugin.d.ts +4 -4
- package/dist/src/plugin.js +10 -10
- package/dist/src/rate-limit.js +1 -1
- package/dist/src/registry-api.d.ts +1 -1
- package/dist/src/runtime-detect.d.ts +1 -1
- package/dist/src/serialization.js +1 -1
- package/dist/src/skills.js +6 -6
- package/dist/src/user-runtime.d.ts +8 -0
- package/dist/src/user-runtime.js +1 -0
- package/dist/src/user-runtime.test.d.ts +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.test.d.ts +1 -1
- package/docs/guide/browser-bridge.md +23 -23
- package/docs/guide/electron-app-cli.md +3 -3
- package/docs/guide/exit-codes.md +3 -3
- package/docs/guide/extending-opencli.md +37 -37
- package/docs/guide/getting-started.md +19 -19
- package/docs/guide/installation.md +6 -6
- package/docs/guide/plugins.md +32 -32
- package/docs/guide/remote-orchestration.md +5 -5
- package/docs/guide/troubleshooting.md +9 -9
- package/package.json +3 -2
- package/scripts/fetch-adapters.js +6 -6
- package/scripts/postinstall.js +14 -14
- package/skills/opencli-adapter-author/SKILL.md +24 -24
- package/skills/opencli-adapter-author/references/adapter-template.md +13 -13
- package/skills/opencli-adapter-author/references/api-discovery.md +25 -25
- package/skills/opencli-adapter-author/references/coverage-matrix.md +3 -3
- package/skills/opencli-adapter-author/references/field-decode-playbook.md +10 -10
- package/skills/opencli-adapter-author/references/jsdom-fixture-pattern.md +2 -2
- package/skills/opencli-adapter-author/references/site-memory.md +11 -11
- package/skills/opencli-adapter-author/references/site-recon.md +7 -7
- package/skills/opencli-adapter-author/references/strategy-selection.md +3 -3
- package/skills/opencli-adapter-author/references/success-rate-pitfalls.md +4 -4
- package/skills/opencli-adapter-author/references/typed-errors.md +2 -2
- package/skills/opencli-autofix/SKILL.md +29 -29
- package/skills/opencli-browser/SKILL.md +55 -55
- package/skills/opencli-browser-sitemap/SKILL.md +7 -7
- package/skills/opencli-sitemap-author/SKILL.md +11 -11
- package/skills/opencli-sitemap-author/references/sitemap-schema.md +19 -19
- package/skills/opencli-usage/SKILL.md +43 -43
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ppcli
|
|
2
2
|
|
|
3
3
|
> **Convert any website into a CLI & run Browser Use on your logged-in Chrome.**
|
|
4
4
|
> Turn websites, browser sessions, Electron apps, and local tools into deterministic interfaces for humans and AI agents.
|
|
@@ -9,19 +9,19 @@
|
|
|
9
9
|
[](https://nodejs.org)
|
|
10
10
|
[](./LICENSE)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
ppcli gives you one surface for three different kinds of automation:
|
|
13
13
|
|
|
14
14
|
- **Use built-in adapters** for sites like Bilibili, Zhihu, Xiaohongshu, Reddit, HackerNews, Twitter/X, and [many more](#built-in-commands).
|
|
15
|
-
- **Let AI Agents operate any website** — install the `opencli-browser` skill in your AI agent (Claude Code, Cursor, etc.), and it can navigate, click, type/fill, extract, and inspect any page through your logged-in browser via `
|
|
16
|
-
- **Write new adapters** end-to-end with `
|
|
15
|
+
- **Let AI Agents operate any website** — install the `opencli-browser` skill in your AI agent (Claude Code, Cursor, etc.), and it can navigate, click, type/fill, extract, and inspect any page through your logged-in browser via `ppcli browser` primitives.
|
|
16
|
+
- **Write new adapters** end-to-end with `ppcli browser` + the `opencli-adapter-author` skill, which guides from first recon through field decoding, code, and `ppcli browser verify`.
|
|
17
17
|
|
|
18
18
|
It also works as a **CLI hub** for local tools such as `gh`, `docker`, `longbridge`, `tg`, `discord`, `wx`, `ntn` (Notion), and other binaries you register yourself, plus **desktop app adapters** for Electron apps like Cursor, Trae CN, Codex, Antigravity, ChatGPT, and Trae SOLO.
|
|
19
19
|
|
|
20
20
|
## Quick Start
|
|
21
21
|
|
|
22
|
-
### 1. Install
|
|
22
|
+
### 1. Install ppcli
|
|
23
23
|
|
|
24
|
-
For desktop use, start with **OpenCLIApp**. It bundles the
|
|
24
|
+
For desktop use, start with **OpenCLIApp**. It bundles the ppcli runtime,
|
|
25
25
|
keeps the managed `opencli` command installed, and gives you a system tray UI
|
|
26
26
|
for setup, diagnostics, updates, browser-login keepalive, and Web → Markdown.
|
|
27
27
|
|
|
@@ -31,7 +31,7 @@ open the app once and use the System page to install or repair the `opencli`
|
|
|
31
31
|
command.
|
|
32
32
|
|
|
33
33
|
**Option B — npm global install (CLI-only / CI / servers):**
|
|
34
|
-
|
|
34
|
+
ppcli requires **Node.js >= 20** when installed through npm.
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
node --version
|
|
@@ -40,10 +40,10 @@ npm install -g @jackwener/opencli
|
|
|
40
40
|
|
|
41
41
|
### 2. Install the Browser Bridge Extension
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
ppcli connects to Chrome/Chromium through a lightweight Browser Bridge extension plus a small local daemon. The daemon auto-starts when needed.
|
|
44
44
|
|
|
45
45
|
**Option A — Chrome Web Store (recommended):**
|
|
46
|
-
Install **
|
|
46
|
+
Install **ppcli** from the [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk).
|
|
47
47
|
|
|
48
48
|
**Option B — Manual install:**
|
|
49
49
|
1. Download the latest `opencli-extension-v{version}.zip` from the GitHub [Releases page](https://github.com/jackwener/opencli/releases).
|
|
@@ -53,54 +53,54 @@ Install **OpenCLI** from the [Chrome Web Store](https://chromewebstore.google.co
|
|
|
53
53
|
### 3. Verify the setup
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
|
|
56
|
+
ppcli doctor
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
### 4. Optional: name your Chrome profile
|
|
60
60
|
|
|
61
|
-
Each Chrome profile runs its own
|
|
61
|
+
Each Chrome profile runs its own ppcli extension instance. If you use multiple Chrome profiles, list the connected profiles and assign local aliases:
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
ppcli profile list
|
|
65
|
+
ppcli profile rename <contextId> work
|
|
66
|
+
ppcli profile use work
|
|
67
|
+
ppcli --profile work browser state
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
With only one connected profile,
|
|
70
|
+
With only one connected profile, ppcli uses it automatically. With multiple connected profiles and no default, ppcli asks you to choose instead of guessing.
|
|
71
71
|
|
|
72
72
|
### 5. Run your first commands
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
ppcli list
|
|
76
|
+
ppcli hackernews top --limit 5
|
|
77
|
+
ppcli bilibili hot --limit 5
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
## For Humans
|
|
81
81
|
|
|
82
|
-
Use
|
|
82
|
+
Use ppcli directly when you want a reliable command instead of a live browser session:
|
|
83
83
|
|
|
84
|
-
- `
|
|
85
|
-
- `
|
|
86
|
-
- `
|
|
87
|
-
- `
|
|
84
|
+
- `ppcli list` shows every registered command.
|
|
85
|
+
- `ppcli <site> <command>` runs a built-in or generated adapter.
|
|
86
|
+
- `ppcli external register mycli` exposes a local CLI through the same discovery surface.
|
|
87
|
+
- `ppcli doctor` helps diagnose browser connectivity.
|
|
88
88
|
|
|
89
|
-
## Extending
|
|
89
|
+
## Extending ppcli
|
|
90
90
|
|
|
91
|
-
If you want to add your own commands, start with the [Extending
|
|
91
|
+
If you want to add your own commands, start with the [Extending ppcli guide](./docs/guide/extending-opencli.md). README keeps this short; the guide covers the directory layout, source-control model, and install commands.
|
|
92
92
|
|
|
93
93
|
| Need | Recommended path |
|
|
94
94
|
|------|------------------|
|
|
95
|
-
| Keep personal website commands in your own Git repo | `
|
|
96
|
-
| Quickly draft a private local adapter | `
|
|
97
|
-
| Modify an official adapter locally | `
|
|
98
|
-
| Publish or install third-party commands | `
|
|
99
|
-
| Wrap an existing local binary | `
|
|
95
|
+
| Keep personal website commands in your own Git repo | `ppcli plugin create` + `ppcli plugin install file://...` |
|
|
96
|
+
| Quickly draft a private local adapter | `ppcli browser init <site>/<command>` in `~/.ppcli/clis/` |
|
|
97
|
+
| Modify an official adapter locally | `ppcli adapter eject <site>` + `ppcli adapter reset <site>` |
|
|
98
|
+
| Publish or install third-party commands | `ppcli plugin install github:user/repo` |
|
|
99
|
+
| Wrap an existing local binary | `ppcli external register <name>` |
|
|
100
100
|
|
|
101
101
|
## For AI Agents
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
ppcli's browser commands are designed to be used by AI Agents — not run manually. Install skills into your AI agent (Claude Code, Cursor, etc.), and the agent operates websites on your behalf using your logged-in Chrome session.
|
|
104
104
|
|
|
105
105
|
### Install skills (also refreshes existing installs)
|
|
106
106
|
|
|
@@ -124,11 +124,11 @@ npx skills add jackwener/opencli --skill opencli-usage
|
|
|
124
124
|
| Skill | When to use | Example prompt to your AI agent |
|
|
125
125
|
|-------|------------|-------------------------------|
|
|
126
126
|
| **opencli-adapter-author** | Write a reusable adapter for a new site or add a command to an existing site | "Write an adapter for douyin trending" / "Make a command that grabs the top posts from this page" |
|
|
127
|
-
| **opencli-autofix** | Repair a broken adapter when a built-in command fails | "`
|
|
127
|
+
| **opencli-autofix** | Repair a broken adapter when a built-in command fails | "`ppcli zhihu hot` is returning empty — fix it" |
|
|
128
128
|
| **opencli-browser** | Drive a real Chrome page ad-hoc — navigate, fill forms, click, extract | "Help me check my Xiaohongshu notifications" / "Help me fill out this form" / "Use browser commands to scrape this page" |
|
|
129
129
|
| **opencli-browser-sitemap** | Consume site sitemap context while driving a browser task | "Use the sitemap to navigate this website without blind clicking" |
|
|
130
130
|
| **opencli-sitemap-author** | Create or update site sitemap knowledge for browser agents | "Record the stable workflow you just discovered for this site" |
|
|
131
|
-
| **opencli-usage** | Quick reference for all
|
|
131
|
+
| **opencli-usage** | Quick reference for all ppcli commands and sites | "What commands does ppcli have for Twitter?" |
|
|
132
132
|
|
|
133
133
|
### How it works
|
|
134
134
|
|
|
@@ -140,7 +140,7 @@ Once `opencli-browser` is installed, your AI agent can:
|
|
|
140
140
|
4. **Extract** data from the page or intercept network API responses
|
|
141
141
|
5. **Wait** for elements, text, or page transitions
|
|
142
142
|
|
|
143
|
-
The agent handles all the `
|
|
143
|
+
The agent handles all the `ppcli browser` commands internally — you just describe what you want done in natural language.
|
|
144
144
|
|
|
145
145
|
**Skill references:**
|
|
146
146
|
- [`skills/opencli-browser/SKILL.md`](./skills/opencli-browser/SKILL.md) — drive Chrome ad-hoc (navigate, fill forms, click, extract)
|
|
@@ -152,7 +152,7 @@ The agent handles all the `opencli browser` commands internally — you just des
|
|
|
152
152
|
|
|
153
153
|
Available browser commands include `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`, and `close`.
|
|
154
154
|
|
|
155
|
-
`
|
|
155
|
+
`ppcli browser` commands require a `<session>` positional immediately after `browser`. `ppcli browser work open <url>` and `ppcli browser work tab new [url]` both return a target ID. Use `ppcli browser work tab list` to inspect target IDs, then pass `--tab <targetId>` to route a command to a specific tab. `tab new` creates a new tab without changing the default browser target; only `tab select <targetId>` promotes that tab to the default target for later untargeted commands in the same session.
|
|
156
156
|
|
|
157
157
|
## Writing a new adapter
|
|
158
158
|
|
|
@@ -162,8 +162,8 @@ When the site you need is not yet covered, use the `opencli-adapter-author` skil
|
|
|
162
162
|
2. **Discover** the right endpoint — network inspection, initial state, bundle search, token trace, or interceptor fallback.
|
|
163
163
|
3. **Pick auth** — `PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`.
|
|
164
164
|
4. **Decode** response fields and design output columns.
|
|
165
|
-
5. `
|
|
166
|
-
6. Site knowledge persists to `~/.
|
|
165
|
+
5. `ppcli browser recon analyze <url>` → `ppcli browser recon init <site>/<name>` → write adapter → `ppcli browser recon verify <site>/<name>`.
|
|
166
|
+
6. Site knowledge persists to `~/.ppcli/sites/<site>/` so the next adapter for the same site starts from context.
|
|
167
167
|
|
|
168
168
|
## Configuration
|
|
169
169
|
|
|
@@ -178,7 +178,7 @@ When the site you need is not yet covered, use the `opencli-adapter-author` skil
|
|
|
178
178
|
| `OPENCLI_VERBOSE` | `false` | Enable verbose logging (`-v` flag also works) |
|
|
179
179
|
| `DEBUG_SNAPSHOT` | — | Set to `1` for DOM snapshot debug output |
|
|
180
180
|
|
|
181
|
-
`
|
|
181
|
+
`ppcli browser *` requires an explicit `<session>` positional, uses a foreground browser window by default, and keeps that session's tab lease until `ppcli browser <session> close` or idle cleanup. Browser-backed adapters use a background adapter window and release one-shot tab leases by default. Interactive adapters can declare `siteSession: 'persistent'` to keep a stable site tab for continuity; pass `--site-session ephemeral` for a one-shot tab.
|
|
182
182
|
|
|
183
183
|
## Built-in Commands
|
|
184
184
|
|
|
@@ -204,17 +204,17 @@ Curated highlights — **[→ see all 100+ supported sites & commands](./docs/ad
|
|
|
204
204
|
|
|
205
205
|
## CLI Hub
|
|
206
206
|
|
|
207
|
-
Unified passthrough for your existing command-line tools. Run `
|
|
207
|
+
Unified passthrough for your existing command-line tools. Run `ppcli <tool> ...` for any of:
|
|
208
208
|
|
|
209
209
|
`gh` · `docker` · `vercel` · `wrangler` · `obsidian` · `longbridge` · `lark-cli` · `ntn(notion)` · `dws(DingTalk Workspace)` · `wecom-cli(企业微信)` · `tg(tg-cli)` · `discord(discord-cli)` · `wx(wx-cli)`
|
|
210
210
|
|
|
211
|
-
Register your own with `
|
|
211
|
+
Register your own with `ppcli external register <name>`; list everything with `ppcli external list`.
|
|
212
212
|
|
|
213
213
|
**Desktop app adapters** (Electron, via CDP): Cursor / Trae CN / Codex / Antigravity / ChatGPT App / ChatWise / Qoder / Discord / Doubao / Trae SOLO — see [`docs/adapters/desktop/`](./docs/adapters/desktop/).
|
|
214
214
|
|
|
215
215
|
## Download Support
|
|
216
216
|
|
|
217
|
-
|
|
217
|
+
ppcli supports downloading images, videos, and articles from supported platforms.
|
|
218
218
|
|
|
219
219
|
| Platform | Content Types | Notes |
|
|
220
220
|
|----------|---------------|-------|
|
|
@@ -232,41 +232,41 @@ OpenCLI supports downloading images, videos, and articles from supported platfor
|
|
|
232
232
|
For video downloads, install `yt-dlp` first: `brew install yt-dlp`
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
235
|
+
ppcli xiaohongshu download "https://www.xiaohongshu.com/search_result/<id>?xsec_token=..." --output ./xhs
|
|
236
|
+
ppcli xiaohongshu download "https://xhslink.com/..." --output ./xhs
|
|
237
|
+
ppcli rednote download "https://www.rednote.com/search_result/<id>?xsec_token=..." --output ./rednote
|
|
238
|
+
ppcli bilibili download BV1xxx --output ./bilibili
|
|
239
|
+
ppcli twitter download elonmusk --limit 20 --output ./twitter
|
|
240
|
+
ppcli 1688 download 841141931191 --output ./1688-downloads
|
|
241
|
+
ppcli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou
|
|
242
|
+
ppcli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
`
|
|
245
|
+
`ppcli xiaoyuzhou download` and `transcript` require local Xiaoyuzhou credentials in `~/.ppcli/xiaoyuzhou.json`.
|
|
246
246
|
|
|
247
247
|
## Output Formats
|
|
248
248
|
|
|
249
249
|
All built-in commands support `--format` / `-f` with `table` (default), `json`, `yaml`, `md`, and `csv`.
|
|
250
250
|
|
|
251
251
|
```bash
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
ppcli bilibili hot -f json # Pipe to jq or LLMs
|
|
253
|
+
ppcli bilibili hot -f csv # Spreadsheet-friendly
|
|
254
|
+
ppcli bilibili hot -v # Verbose: show pipeline debug steps
|
|
255
255
|
```
|
|
256
256
|
|
|
257
257
|
## Exit Codes
|
|
258
258
|
|
|
259
|
-
|
|
259
|
+
ppcli follows Unix `sysexits.h` so CI / scripts can branch on failure mode: `0` success, `66` empty result, `69` Browser Bridge down, `75` timeout, `77` auth required, `78` config error, `130` Ctrl-C. Full reference: [docs/guide/exit-codes.md](./docs/guide/exit-codes.md).
|
|
260
260
|
|
|
261
261
|
## Plugins
|
|
262
262
|
|
|
263
|
-
Extend
|
|
263
|
+
Extend ppcli with community-contributed adapters:
|
|
264
264
|
|
|
265
265
|
```bash
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
266
|
+
ppcli plugin install github:user/opencli-plugin-my-tool
|
|
267
|
+
ppcli plugin list
|
|
268
|
+
ppcli plugin update --all
|
|
269
|
+
ppcli plugin uninstall my-tool
|
|
270
270
|
```
|
|
271
271
|
|
|
272
272
|
| Plugin | Type | Description |
|
|
@@ -287,7 +287,7 @@ See **[TESTING.md](./TESTING.md)** for how to run and write tests.
|
|
|
287
287
|
- **"Extension not connected"** — Ensure the Browser Bridge extension is installed from the [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) and **enabled** in `chrome://extensions`.
|
|
288
288
|
- **"attach failed: Cannot access a chrome-extension:// URL"** — Another extension may be interfering. Try disabling other extensions temporarily.
|
|
289
289
|
- **Empty data or 'Unauthorized' error** — Your Chrome/Chromium login session may have expired. Navigate to the target site and log in again.
|
|
290
|
-
- **Node API errors / missing `fetch` / startup crash on old Node** —
|
|
290
|
+
- **Node API errors / missing `fetch` / startup crash on old Node** — ppcli requires **Node.js >= 20**. Run `node --version`, upgrade Node if needed, then retry.
|
|
291
291
|
- **Daemon issues** — Check status: `curl localhost:19825/status` · View logs: `curl localhost:19825/logs`
|
|
292
292
|
|
|
293
293
|
## Star History
|
package/README.zh-CN.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ppcli
|
|
2
2
|
|
|
3
3
|
> **把任意网站变成 CLI & 在你的登录态浏览器上跑 Browser Use。**
|
|
4
4
|
> 把网站、浏览器会话、Electron 应用和本地工具,统一变成适合人类与 AI Agent 使用的确定性接口。
|
|
@@ -9,20 +9,20 @@
|
|
|
9
9
|
[](https://nodejs.org)
|
|
10
10
|
[](./LICENSE)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
ppcli 可以用同一套 CLI 做三类事情:
|
|
13
13
|
|
|
14
14
|
- **直接使用现成适配器**:B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 [100+ 站点](#内置命令) 开箱即用。
|
|
15
15
|
- **让 AI Agent 操作任意网站**:在你的 AI Agent(Claude Code、Cursor 等)中安装 `opencli-browser` skill,Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。
|
|
16
|
-
- **把新网站写成 CLI**:用 `
|
|
16
|
+
- **把新网站写成 CLI**:用 `ppcli browser` 原语 + `opencli-adapter-author` skill,从站点侦察、API 发现、字段解码到 `ppcli browser verify` 一条龙。
|
|
17
17
|
|
|
18
|
-
除了网站能力,
|
|
18
|
+
除了网站能力,ppcli 还是一个 **CLI 枢纽**:你可以把 `gh`、`docker`、`longbridge`、`tg`、`discord`、`wx`、`ntn`(Notion)等本地工具统一注册到 `opencli` 下,也可以通过桌面端适配器控制 Cursor、Trae CN、Codex、Antigravity、ChatGPT、Trae SOLO 等 Electron 应用。
|
|
19
19
|
|
|
20
20
|
## 快速开始
|
|
21
21
|
|
|
22
|
-
### 1. 安装
|
|
22
|
+
### 1. 安装 ppcli
|
|
23
23
|
|
|
24
24
|
如果你是在自己的电脑上使用,优先安装 **OpenCLIApp**。它会内置
|
|
25
|
-
|
|
25
|
+
ppcli runtime,帮你安装 / 修复受管理的 `opencli` 命令,并提供系统托盘
|
|
26
26
|
UI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown。
|
|
27
27
|
|
|
28
28
|
**方式 A — OpenCLIApp(macOS / Windows 推荐):**
|
|
@@ -30,7 +30,7 @@ UI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown
|
|
|
30
30
|
System 页面安装或修复 `opencli` 命令。
|
|
31
31
|
|
|
32
32
|
**方式 B — npm 全局安装(纯 CLI / CI / 服务器):**
|
|
33
|
-
通过 npm 安装时,
|
|
33
|
+
通过 npm 安装时,ppcli 要求 **Node.js >= 20**。
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
node --version
|
|
@@ -39,10 +39,10 @@ npm install -g @jackwener/opencli
|
|
|
39
39
|
|
|
40
40
|
### 2. 安装 Browser Bridge 扩展
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
ppcli 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chromium 通信。daemon 会按需自动启动。
|
|
43
43
|
|
|
44
44
|
**方式 A — Chrome Web Store(推荐):**
|
|
45
|
-
在 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装 **
|
|
45
|
+
在 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装 **ppcli** 扩展。
|
|
46
46
|
|
|
47
47
|
**方式 B — 手动安装:**
|
|
48
48
|
1. 到 GitHub [Releases 页面](https://github.com/jackwener/opencli/releases) 下载最新的 `opencli-extension-v{version}.zip`。
|
|
@@ -52,41 +52,41 @@ OpenCLI 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chro
|
|
|
52
52
|
### 3. 验证环境
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
|
|
55
|
+
ppcli doctor
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
### 4. 跑第一个命令
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
ppcli list
|
|
62
|
+
ppcli hackernews top --limit 5
|
|
63
|
+
ppcli bilibili hot --limit 5
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
## 给人类用户
|
|
67
67
|
|
|
68
68
|
如果你只是想稳定地调用网站或桌面应用能力,主路径很简单:
|
|
69
69
|
|
|
70
|
-
- `
|
|
71
|
-
- `
|
|
72
|
-
- `
|
|
73
|
-
- `
|
|
70
|
+
- `ppcli list` 查看当前所有命令
|
|
71
|
+
- `ppcli <site> <command>` 调用内置或生成好的适配器
|
|
72
|
+
- `ppcli external register mycli` 把本地 CLI 接入同一发现入口
|
|
73
|
+
- `ppcli doctor` 处理浏览器连通性问题
|
|
74
74
|
|
|
75
|
-
## 扩展
|
|
75
|
+
## 扩展 ppcli
|
|
76
76
|
|
|
77
|
-
如果你想新增自己的命令,先看 [扩展
|
|
77
|
+
如果你想新增自己的命令,先看 [扩展 ppcli](./docs/zh/guide/extending-opencli.md)。README 只保留入口;目录结构、源码管理方式和安装命令放在文档里。
|
|
78
78
|
|
|
79
79
|
| 需求 | 推荐路径 |
|
|
80
80
|
|------|----------|
|
|
81
|
-
| 把个人网站命令放在自己的 Git repo | `
|
|
82
|
-
| 快速写一个本机私人 adapter | `
|
|
83
|
-
| 本地修改官方 adapter | `
|
|
84
|
-
| 发布或安装第三方命令 | `
|
|
85
|
-
| 包装已有本机 binary | `
|
|
81
|
+
| 把个人网站命令放在自己的 Git repo | `ppcli plugin create` + `ppcli plugin install file://...` |
|
|
82
|
+
| 快速写一个本机私人 adapter | `ppcli browser init <site>/<command>`,放在 `~/.ppcli/clis/` |
|
|
83
|
+
| 本地修改官方 adapter | `ppcli adapter eject <site>` + `ppcli adapter reset <site>` |
|
|
84
|
+
| 发布或安装第三方命令 | `ppcli plugin install github:user/repo` |
|
|
85
|
+
| 包装已有本机 binary | `ppcli external register <name>` |
|
|
86
86
|
|
|
87
87
|
## 给 AI Agent
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
ppcli 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent(Claude Code、Cursor 等)中,Agent 就能用你的已登录 Chrome 会话替你操作网站。
|
|
90
90
|
|
|
91
91
|
### 安装 skill(同时也用于更新)
|
|
92
92
|
|
|
@@ -110,11 +110,11 @@ npx skills add jackwener/opencli --skill opencli-usage
|
|
|
110
110
|
| Skill | 适用场景 | 你对 AI Agent 说的话 |
|
|
111
111
|
|-------|---------|-------------------|
|
|
112
112
|
| **opencli-adapter-author** | 为新站点写可复用适配器,或给已有站点添加命令 | "帮我做一个抖音热门的适配器" / "帮我做一个抓取这个页面热帖的命令" |
|
|
113
|
-
| **opencli-autofix** | 内置命令失败时修复已有适配器 | "`
|
|
113
|
+
| **opencli-autofix** | 内置命令失败时修复已有适配器 | "`ppcli zhihu hot` 返回空了,修一下" |
|
|
114
114
|
| **opencli-browser** | 实时驱动 Chrome 页面——导航、填表单、点击、抓取 | "帮我看看小红书的通知" / "帮我填一下这个表单" / "用浏览器命令抓取这个页面" |
|
|
115
115
|
| **opencli-browser-sitemap** | 使用站点 sitemap 上下文来操作浏览器任务 | "用 sitemap 帮我少走弯路地操作这个网站" |
|
|
116
116
|
| **opencli-sitemap-author** | 创建或更新面向浏览器 Agent 的站点 sitemap | "把刚发现的稳定流程记录到这个站点的 sitemap" |
|
|
117
|
-
| **opencli-usage** | 所有命令和站点的快速参考 | "
|
|
117
|
+
| **opencli-usage** | 所有命令和站点的快速参考 | "ppcli 有哪些 Twitter 相关的命令?" |
|
|
118
118
|
|
|
119
119
|
### 工作原理
|
|
120
120
|
|
|
@@ -126,7 +126,7 @@ npx skills add jackwener/opencli --skill opencli-usage
|
|
|
126
126
|
4. **提取**页面数据或拦截网络 API 响应
|
|
127
127
|
5. **等待**元素、文本或页面跳转
|
|
128
128
|
|
|
129
|
-
Agent 在内部自动处理所有 `
|
|
129
|
+
Agent 在内部自动处理所有 `ppcli browser` 命令——你只需用自然语言描述想做的事。
|
|
130
130
|
|
|
131
131
|
**Skill 参考文档:**
|
|
132
132
|
- [`skills/opencli-browser/SKILL.md`](./skills/opencli-browser/SKILL.md) — 实时驱动 Chrome(导航、填表单、点击、抓取)
|
|
@@ -138,7 +138,7 @@ Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自
|
|
|
138
138
|
|
|
139
139
|
`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`。
|
|
140
140
|
|
|
141
|
-
`
|
|
141
|
+
`ppcli browser` 命令必须紧跟一个 `<session>` 位置参数。`ppcli browser work open <url>` 和 `ppcli browser work tab new [url]` 都会返回 target ID。`ppcli browser work tab list` 用来查看当前已存在 tab 的 target ID,再通过 `--tab <targetId>` 把命令明确路由到某个 tab。`tab new` 只会新建 tab,不会改变默认浏览器目标;只有显式执行 `tab select <targetId>`,才会把该 tab 设为同一 session 后续未指定 target 的默认目标。
|
|
142
142
|
|
|
143
143
|
## 为新站点写适配器
|
|
144
144
|
|
|
@@ -148,8 +148,8 @@ Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自
|
|
|
148
148
|
2. **发现** endpoint——network 精读、initial state、bundle 搜索、token 溯源,或 interceptor 兜底
|
|
149
149
|
3. **定认证**——`PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`
|
|
150
150
|
4. **字段解码** + 设计输出列
|
|
151
|
-
5. `
|
|
152
|
-
6. 站点知识沉到 `~/.
|
|
151
|
+
5. `ppcli browser recon analyze <url>` → `ppcli browser recon init <site>/<name>` → 写适配器 → `ppcli browser recon verify <site>/<name>`
|
|
152
|
+
6. 站点知识沉到 `~/.ppcli/sites/<site>/`,下次同站点直接吃缓存
|
|
153
153
|
|
|
154
154
|
## 配置
|
|
155
155
|
|
|
@@ -164,11 +164,11 @@ Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自
|
|
|
164
164
|
| `OPENCLI_VERBOSE` | `false` | 启用详细日志(`-v` 也可以) |
|
|
165
165
|
| `DEBUG_SNAPSHOT` | — | 设为 `1` 输出 DOM 快照调试信息 |
|
|
166
166
|
|
|
167
|
-
`
|
|
167
|
+
`ppcli browser *` 必须紧跟一个 `<session>` 位置参数,默认使用前台窗口,并保留该 session 的 tab lease,直到你手动执行 `ppcli browser <session> close` 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease;如果需要调试最终页面,可以传 `--window foreground --keep-tab true`。
|
|
168
168
|
|
|
169
169
|
## 内置命令
|
|
170
170
|
|
|
171
|
-
运行 `
|
|
171
|
+
运行 `ppcli list` 查看完整注册表。
|
|
172
172
|
|
|
173
173
|
| 站点 | 命令 |
|
|
174
174
|
|------|------|
|
|
@@ -192,17 +192,17 @@ Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自
|
|
|
192
192
|
|
|
193
193
|
### 外部 CLI 枢纽
|
|
194
194
|
|
|
195
|
-
把现有命令行工具统一接入 `
|
|
195
|
+
把现有命令行工具统一接入 `ppcli <tool> ...`:
|
|
196
196
|
|
|
197
197
|
`gh` · `docker` · `vercel` · `wrangler` · `obsidian` · `longbridge` · `lark-cli` · `ntn(notion)` · `dws(DingTalk Workspace)` · `wecom-cli(企业微信)` · `tg(tg-cli)` · `discord(discord-cli)` · `wx(wx-cli)`
|
|
198
198
|
|
|
199
|
-
注册自定义本地 CLI:`
|
|
199
|
+
注册自定义本地 CLI:`ppcli external register <name>`;查看所有:`ppcli external list`。
|
|
200
200
|
|
|
201
201
|
**桌面应用适配器**(Electron,通过 CDP):Cursor / Trae CN / Codex / Antigravity / ChatGPT App / ChatWise / Qoder / Discord / Doubao / Trae SOLO — 详见 [`docs/adapters/desktop/`](./docs/adapters/desktop/)。
|
|
202
202
|
|
|
203
203
|
## 下载支持
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
ppcli 支持从各平台下载图片、视频和文章。
|
|
206
206
|
|
|
207
207
|
### 支持的平台
|
|
208
208
|
|
|
@@ -233,43 +233,43 @@ brew install yt-dlp
|
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
235
|
# 下载小红书笔记中的图片/视频
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
236
|
+
ppcli xiaohongshu download "https://www.xiaohongshu.com/search_result/<id>?xsec_token=..." --output ./xhs
|
|
237
|
+
ppcli xiaohongshu download "https://xhslink.com/..." --output ./xhs
|
|
238
|
+
ppcli rednote download "https://www.rednote.com/search_result/<id>?xsec_token=..." --output ./rednote
|
|
239
239
|
|
|
240
240
|
# 下载B站视频(需要 yt-dlp)
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
ppcli bilibili download BV1xxx --output ./bilibili
|
|
242
|
+
ppcli bilibili download BV1xxx --quality 1080p # 指定画质
|
|
243
243
|
|
|
244
244
|
# 下载 Twitter 用户的媒体
|
|
245
|
-
|
|
245
|
+
ppcli twitter download elonmusk --limit 20 --output ./twitter
|
|
246
246
|
|
|
247
247
|
# 下载单条推文的媒体
|
|
248
|
-
|
|
248
|
+
ppcli twitter download --tweet-url "https://x.com/user/status/123" --output ./twitter
|
|
249
249
|
|
|
250
250
|
# 下载豆瓣电影海报 / 剧照
|
|
251
|
-
|
|
251
|
+
ppcli douban download 30382501 --output ./douban
|
|
252
252
|
|
|
253
253
|
# 下载 1688 商品页中的图片 / 视频素材
|
|
254
|
-
|
|
254
|
+
ppcli 1688 download 841141931191 --output ./1688-downloads
|
|
255
255
|
|
|
256
256
|
# 下载小宇宙单集音频
|
|
257
|
-
|
|
257
|
+
ppcli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou
|
|
258
258
|
|
|
259
259
|
# 下载小宇宙单集转录
|
|
260
|
-
|
|
260
|
+
ppcli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts
|
|
261
261
|
|
|
262
262
|
# 导出知乎文章为 Markdown
|
|
263
|
-
|
|
263
|
+
ppcli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --output ./zhihu
|
|
264
264
|
|
|
265
265
|
# 导出并下载图片
|
|
266
|
-
|
|
266
|
+
ppcli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --download-images
|
|
267
267
|
|
|
268
268
|
# 导出微信公众号文章为 Markdown
|
|
269
|
-
|
|
269
|
+
ppcli weixin download --url "https://mp.weixin.qq.com/s/xxx" --output ./weixin
|
|
270
270
|
```
|
|
271
271
|
|
|
272
|
-
`
|
|
272
|
+
`ppcli xiaoyuzhou download` 和 `transcript` 需要本地小宇宙凭证:`~/.ppcli/xiaoyuzhou.json`。
|
|
273
273
|
|
|
274
274
|
|
|
275
275
|
|
|
@@ -279,32 +279,32 @@ opencli weixin download --url "https://mp.weixin.qq.com/s/xxx" --output ./weixin
|
|
|
279
279
|
`list` 命令也支持同样的格式参数,同时继续兼容 `--json`。
|
|
280
280
|
|
|
281
281
|
```bash
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
282
|
+
ppcli list -f yaml # 用 YAML 列出命令注册表
|
|
283
|
+
ppcli bilibili hot -f table # 默认:富文本表格
|
|
284
|
+
ppcli bilibili hot -f json # JSON(适合传给 jq 或者各类 AI Agent)
|
|
285
|
+
ppcli bilibili hot -f yaml # YAML(更适合人类直接阅读)
|
|
286
|
+
ppcli bilibili hot -f md # Markdown
|
|
287
|
+
ppcli bilibili hot -f csv # CSV
|
|
288
|
+
ppcli bilibili hot -v # 详细模式:展示管线执行步骤调试信息
|
|
289
289
|
```
|
|
290
290
|
|
|
291
291
|
## 退出码
|
|
292
292
|
|
|
293
|
-
|
|
293
|
+
ppcli 遵循 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)。
|
|
294
294
|
|
|
295
295
|
## 插件
|
|
296
296
|
|
|
297
|
-
通过社区贡献的插件扩展
|
|
297
|
+
通过社区贡献的插件扩展 ppcli。插件使用与内置命令相同的 JS 格式,启动时自动发现。
|
|
298
298
|
|
|
299
299
|
```bash
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
300
|
+
ppcli plugin install github:user/opencli-plugin-my-tool # 安装
|
|
301
|
+
ppcli plugin list # 查看已安装
|
|
302
|
+
ppcli plugin update my-tool # 更新到最新
|
|
303
|
+
ppcli plugin update --all # 更新全部已安装插件
|
|
304
|
+
ppcli plugin uninstall my-tool # 卸载
|
|
305
305
|
```
|
|
306
306
|
|
|
307
|
-
当 plugin 的版本被记录到 `~/.
|
|
307
|
+
当 plugin 的版本被记录到 `~/.ppcli/plugins.lock.json` 后,`ppcli plugin list` 也会显示对应的短 commit hash。
|
|
308
308
|
|
|
309
309
|
| 插件 | 类型 | 描述 |
|
|
310
310
|
|------|------|------|
|
|
@@ -318,13 +318,13 @@ opencli plugin uninstall my-tool # 卸载
|
|
|
318
318
|
## 常见问题排查
|
|
319
319
|
|
|
320
320
|
- **"Extension not connected" 报错**
|
|
321
|
-
- 确保你已从 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装
|
|
321
|
+
- 确保你已从 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装 ppcli 扩展,且在 `chrome://extensions` 中**已启用**。
|
|
322
322
|
- **"attach failed: Cannot access a chrome-extension:// URL" 报错**
|
|
323
323
|
- 其他 Chrome/Chromium 扩展(如 youmind、New Tab Override 或 AI 助手类扩展)可能产生冲突。请尝试**暂时禁用其他扩展**后重试。
|
|
324
324
|
- **返回空数据,或者报错 "Unauthorized"**
|
|
325
325
|
- Chrome/Chromium 里的登录态可能已经过期。请打开当前页面,在新标签页重新手工登录或刷新该页面。
|
|
326
326
|
- **Node API 错误 / 缺少 `fetch` / 旧 Node 启动即崩**
|
|
327
|
-
-
|
|
327
|
+
- ppcli 要求 **Node.js >= 20**。先执行 `node --version`,如果版本过低先升级,再重试命令。
|
|
328
328
|
- **Daemon 问题**
|
|
329
329
|
- 检查 daemon 状态:`curl localhost:19825/status`
|
|
330
330
|
- 查看扩展日志:`curl localhost:19825/logs`
|