@jackwener/opencli 1.0.0 → 1.0.3

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.
Files changed (171) hide show
  1. package/.github/workflows/build-extension.yml +62 -0
  2. package/.github/workflows/ci.yml +6 -6
  3. package/.github/workflows/e2e-headed.yml +2 -2
  4. package/.github/workflows/pkg-pr-new.yml +2 -2
  5. package/.github/workflows/release.yml +2 -5
  6. package/.github/workflows/security.yml +2 -2
  7. package/CDP.md +1 -1
  8. package/CDP.zh-CN.md +1 -1
  9. package/README.md +35 -8
  10. package/README.zh-CN.md +35 -8
  11. package/SKILL.md +3 -5
  12. package/dist/browser/cdp.d.ts +27 -0
  13. package/dist/browser/cdp.js +295 -0
  14. package/dist/browser/daemon-client.d.ts +1 -1
  15. package/dist/browser/index.d.ts +4 -2
  16. package/dist/browser/index.js +5 -5
  17. package/dist/browser/mcp.d.ts +5 -8
  18. package/dist/browser/mcp.js +9 -10
  19. package/dist/browser/page.d.ts +8 -1
  20. package/dist/browser/page.js +25 -40
  21. package/dist/browser/utils.d.ts +10 -0
  22. package/dist/browser/utils.js +27 -0
  23. package/dist/browser.test.js +48 -7
  24. package/dist/chaoxing.d.ts +58 -0
  25. package/dist/chaoxing.js +225 -0
  26. package/dist/chaoxing.test.d.ts +1 -0
  27. package/dist/chaoxing.test.js +38 -0
  28. package/dist/cli-manifest.json +597 -14
  29. package/dist/cli.d.ts +1 -0
  30. package/dist/cli.js +197 -0
  31. package/dist/clis/apple-podcasts/episodes.d.ts +1 -0
  32. package/dist/clis/apple-podcasts/episodes.js +28 -0
  33. package/dist/clis/apple-podcasts/search.d.ts +1 -0
  34. package/dist/clis/apple-podcasts/search.js +29 -0
  35. package/dist/clis/apple-podcasts/top.d.ts +1 -0
  36. package/dist/clis/apple-podcasts/top.js +34 -0
  37. package/dist/clis/apple-podcasts/utils.d.ts +11 -0
  38. package/dist/clis/apple-podcasts/utils.js +30 -0
  39. package/dist/clis/apple-podcasts/utils.test.d.ts +1 -0
  40. package/dist/clis/apple-podcasts/utils.test.js +57 -0
  41. package/dist/clis/boss/chatlist.d.ts +1 -0
  42. package/dist/clis/boss/chatlist.js +50 -0
  43. package/dist/clis/boss/chatmsg.d.ts +1 -0
  44. package/dist/clis/boss/chatmsg.js +73 -0
  45. package/dist/clis/boss/send.d.ts +1 -0
  46. package/dist/clis/boss/send.js +176 -0
  47. package/dist/clis/chaoxing/assignments.d.ts +1 -0
  48. package/dist/clis/chaoxing/assignments.js +74 -0
  49. package/dist/clis/chaoxing/exams.d.ts +1 -0
  50. package/dist/clis/chaoxing/exams.js +74 -0
  51. package/dist/clis/chatgpt/ask.js +15 -14
  52. package/dist/clis/chatgpt/ax.d.ts +1 -0
  53. package/dist/clis/chatgpt/ax.js +78 -0
  54. package/dist/clis/chatgpt/read.js +5 -6
  55. package/dist/clis/chatwise/history.js +18 -1
  56. package/dist/clis/discord-app/channels.js +33 -21
  57. package/dist/clis/twitter/accept.d.ts +1 -0
  58. package/dist/clis/twitter/accept.js +202 -0
  59. package/dist/clis/twitter/followers.js +30 -22
  60. package/dist/clis/twitter/following.js +19 -14
  61. package/dist/clis/twitter/notifications.js +29 -22
  62. package/dist/clis/twitter/post.js +9 -2
  63. package/dist/clis/twitter/reply-dm.d.ts +1 -0
  64. package/dist/clis/twitter/reply-dm.js +181 -0
  65. package/dist/clis/twitter/search.js +30 -11
  66. package/dist/clis/weread/book.d.ts +1 -0
  67. package/dist/clis/weread/book.js +26 -0
  68. package/dist/clis/weread/highlights.d.ts +1 -0
  69. package/dist/clis/weread/highlights.js +23 -0
  70. package/dist/clis/weread/notebooks.d.ts +1 -0
  71. package/dist/clis/weread/notebooks.js +21 -0
  72. package/dist/clis/weread/notes.d.ts +1 -0
  73. package/dist/clis/weread/notes.js +29 -0
  74. package/dist/clis/weread/ranking.d.ts +1 -0
  75. package/dist/clis/weread/ranking.js +28 -0
  76. package/dist/clis/weread/search.d.ts +1 -0
  77. package/dist/clis/weread/search.js +25 -0
  78. package/dist/clis/weread/shelf.d.ts +1 -0
  79. package/dist/clis/weread/shelf.js +24 -0
  80. package/dist/clis/weread/utils.d.ts +20 -0
  81. package/dist/clis/weread/utils.js +72 -0
  82. package/dist/clis/weread/utils.test.d.ts +1 -0
  83. package/dist/clis/weread/utils.test.js +85 -0
  84. package/dist/clis/xiaohongshu/download.d.ts +1 -1
  85. package/dist/clis/xiaohongshu/download.js +1 -1
  86. package/dist/daemon.js +2 -2
  87. package/dist/doctor.d.ts +0 -21
  88. package/dist/doctor.js +2 -24
  89. package/dist/engine.js +24 -13
  90. package/dist/explore.js +46 -101
  91. package/dist/main.js +4 -203
  92. package/dist/output.d.ts +1 -1
  93. package/dist/registry.d.ts +3 -3
  94. package/dist/runtime.d.ts +1 -4
  95. package/dist/runtime.js +1 -4
  96. package/dist/scripts/framework.d.ts +4 -0
  97. package/dist/scripts/framework.js +21 -0
  98. package/dist/scripts/interact.d.ts +4 -0
  99. package/dist/scripts/interact.js +20 -0
  100. package/dist/scripts/store.d.ts +9 -0
  101. package/dist/scripts/store.js +44 -0
  102. package/dist/setup.js +2 -2
  103. package/dist/synthesize.js +1 -1
  104. package/extension/dist/background.js +392 -0
  105. package/extension/manifest.json +3 -3
  106. package/extension/package.json +1 -1
  107. package/extension/src/background.ts +101 -24
  108. package/extension/src/protocol.ts +1 -1
  109. package/package.json +1 -1
  110. package/src/browser/cdp.ts +295 -0
  111. package/src/browser/daemon-client.ts +1 -1
  112. package/src/browser/index.ts +5 -6
  113. package/src/browser/mcp.ts +14 -15
  114. package/src/browser/page.ts +25 -41
  115. package/src/browser/utils.ts +27 -0
  116. package/src/browser.test.ts +52 -6
  117. package/src/chaoxing.test.ts +45 -0
  118. package/src/chaoxing.ts +268 -0
  119. package/src/cli.ts +185 -0
  120. package/src/clis/antigravity/SKILL.md +5 -0
  121. package/src/clis/apple-podcasts/episodes.ts +28 -0
  122. package/src/clis/apple-podcasts/search.ts +29 -0
  123. package/src/clis/apple-podcasts/top.ts +34 -0
  124. package/src/clis/apple-podcasts/utils.test.ts +72 -0
  125. package/src/clis/apple-podcasts/utils.ts +37 -0
  126. package/src/clis/boss/chatlist.ts +50 -0
  127. package/src/clis/boss/chatmsg.ts +70 -0
  128. package/src/clis/boss/send.ts +193 -0
  129. package/src/clis/chaoxing/README.md +36 -0
  130. package/src/clis/chaoxing/README.zh-CN.md +35 -0
  131. package/src/clis/chaoxing/assignments.ts +88 -0
  132. package/src/clis/chaoxing/exams.ts +88 -0
  133. package/src/clis/chatgpt/ask.ts +14 -15
  134. package/src/clis/chatgpt/ax.ts +81 -0
  135. package/src/clis/chatgpt/read.ts +5 -7
  136. package/src/clis/chatwise/history.ts +15 -1
  137. package/src/clis/discord-app/channels.ts +33 -21
  138. package/src/clis/twitter/accept.ts +213 -0
  139. package/src/clis/twitter/followers.ts +36 -29
  140. package/src/clis/twitter/following.ts +25 -20
  141. package/src/clis/twitter/notifications.ts +34 -27
  142. package/src/clis/twitter/post.ts +9 -2
  143. package/src/clis/twitter/reply-dm.ts +193 -0
  144. package/src/clis/twitter/search.ts +34 -12
  145. package/src/clis/weread/book.ts +28 -0
  146. package/src/clis/weread/highlights.ts +25 -0
  147. package/src/clis/weread/notebooks.ts +23 -0
  148. package/src/clis/weread/notes.ts +31 -0
  149. package/src/clis/weread/ranking.ts +29 -0
  150. package/src/clis/weread/search.ts +26 -0
  151. package/src/clis/weread/shelf.ts +26 -0
  152. package/src/clis/weread/utils.test.ts +104 -0
  153. package/src/clis/weread/utils.ts +74 -0
  154. package/src/clis/xiaohongshu/download.ts +1 -1
  155. package/src/daemon.ts +2 -2
  156. package/src/doctor.ts +2 -19
  157. package/src/engine.ts +20 -13
  158. package/src/explore.ts +51 -100
  159. package/src/main.ts +4 -186
  160. package/src/output.ts +12 -12
  161. package/src/registry.ts +3 -3
  162. package/src/runtime.ts +2 -6
  163. package/src/scripts/framework.ts +20 -0
  164. package/src/scripts/interact.ts +22 -0
  165. package/src/scripts/store.ts +40 -0
  166. package/src/setup.ts +2 -2
  167. package/src/synthesize.ts +1 -1
  168. package/tests/e2e/public-commands.test.ts +68 -1
  169. package/dist/clis/grok/debug.d.ts +0 -1
  170. package/dist/clis/grok/debug.js +0 -45
  171. package/src/clis/grok/debug.ts +0 -49
@@ -0,0 +1,62 @@
1
+ name: Build Chrome Extension
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ tags: [ "v*.*.*" ]
7
+ pull_request:
8
+ branches: [ "main" ]
9
+
10
+ permissions:
11
+ contents: write
12
+
13
+ jobs:
14
+ build:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout Code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: 20
24
+
25
+ - name: Create Extension ZIP
26
+ run: |
27
+ cd extension
28
+ zip -r ../opencli-extension.zip .
29
+
30
+ - name: Create Extension CRX
31
+ run: |
32
+ npm install -g crx3
33
+ if [ -n "${{ secrets.CRX_PRIVATE_KEY }}" ]; then
34
+ echo "Found CRX_PRIVATE_KEY, signing extension..."
35
+ echo "${{ secrets.CRX_PRIVATE_KEY }}" > crx-key.pem
36
+ crx3 pack extension -o opencli-extension.crx -p crx-key.pem
37
+ rm crx-key.pem
38
+ else
39
+ echo "No CRX_PRIVATE_KEY configured. Generating CRX with a temporary random key..."
40
+ crx3 pack extension -o opencli-extension.crx
41
+ fi
42
+
43
+ - name: Upload Artifacts (Action Run)
44
+ uses: actions/upload-artifact@v4
45
+ with:
46
+ name: opencli-extension-build
47
+ path: |
48
+ opencli-extension.zip
49
+ opencli-extension.crx
50
+ retention-days: 7
51
+
52
+ - name: Attach to GitHub Release
53
+ if: startsWith(github.ref, 'refs/tags/')
54
+ uses: softprops/action-gh-release@v2
55
+ with:
56
+ files: |
57
+ opencli-extension.zip
58
+ opencli-extension.crx
59
+ draft: false
60
+ prerelease: false
61
+ env:
62
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -18,9 +18,9 @@ jobs:
18
18
  build:
19
19
  runs-on: ubuntu-latest
20
20
  steps:
21
- - uses: actions/checkout@v6
21
+ - uses: actions/checkout@v4
22
22
 
23
- - uses: actions/setup-node@v6
23
+ - uses: actions/setup-node@v4
24
24
  with:
25
25
  node-version: '22'
26
26
  cache: 'npm'
@@ -43,9 +43,9 @@ jobs:
43
43
  node-version: ['20', '22']
44
44
  shard: [1, 2]
45
45
  steps:
46
- - uses: actions/checkout@v6
46
+ - uses: actions/checkout@v4
47
47
 
48
- - uses: actions/setup-node@v6
48
+ - uses: actions/setup-node@v4
49
49
  with:
50
50
  node-version: ${{ matrix.node-version }}
51
51
  cache: 'npm'
@@ -62,9 +62,9 @@ jobs:
62
62
  needs: build
63
63
  runs-on: ubuntu-latest
64
64
  steps:
65
- - uses: actions/checkout@v6
65
+ - uses: actions/checkout@v4
66
66
 
67
- - uses: actions/setup-node@v6
67
+ - uses: actions/setup-node@v4
68
68
  with:
69
69
  node-version: '22'
70
70
  cache: 'npm'
@@ -16,9 +16,9 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  timeout-minutes: 20
18
18
  steps:
19
- - uses: actions/checkout@v6
19
+ - uses: actions/checkout@v4
20
20
 
21
- - uses: actions/setup-node@v6
21
+ - uses: actions/setup-node@v4
22
22
  with:
23
23
  node-version: '22'
24
24
  cache: 'npm'
@@ -13,9 +13,9 @@ jobs:
13
13
  if: ${{ vars.PKG_PR_NEW_ENABLED == 'true' }}
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v6
16
+ - uses: actions/checkout@v4
17
17
 
18
- - uses: actions/setup-node@v6
18
+ - uses: actions/setup-node@v4
19
19
  with:
20
20
  node-version: '22'
21
21
  cache: 'npm'
@@ -13,9 +13,9 @@ jobs:
13
13
  release:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v6
16
+ - uses: actions/checkout@v4
17
17
 
18
- - uses: actions/setup-node@v6
18
+ - uses: actions/setup-node@v4
19
19
  with:
20
20
  node-version: '22'
21
21
  registry-url: 'https://registry.npmjs.org'
@@ -26,9 +26,6 @@ jobs:
26
26
  - name: Type check
27
27
  run: npx tsc --noEmit
28
28
 
29
- - name: Build
30
- run: npm run build
31
-
32
29
  - name: Create GitHub Release
33
30
  uses: softprops/action-gh-release@v2
34
31
  with:
@@ -19,9 +19,9 @@ jobs:
19
19
  audit:
20
20
  runs-on: ubuntu-latest
21
21
  steps:
22
- - uses: actions/checkout@v6
22
+ - uses: actions/checkout@v4
23
23
 
24
- - uses: actions/setup-node@v6
24
+ - uses: actions/setup-node@v4
25
25
  with:
26
26
  node-version: '22'
27
27
  cache: 'npm'
package/CDP.md CHANGED
@@ -98,6 +98,6 @@ opencli doctor # Verify connection
98
98
  opencli bilibili hot --limit 5 # Test a command
99
99
  ```
100
100
 
101
- > *Tip: OpenCLI automatically requests the `/json/version` HTTP endpoint to discover the underlying WebSocket URL if you provide a standard HTTP/HTTPS address.*
101
+ > *Tip: If you provide a standard HTTP/HTTPS CDP endpoint, OpenCLI requests the `/json` target list and picks the most likely inspectable app/page target automatically. If multiple app targets exist, you can further narrow selection with `OPENCLI_CDP_TARGET` (for example `antigravity` or `codex`).*
102
102
 
103
103
  If you plan to use this setup frequently, you can persist the environment variable by adding the `export` line to your `~/.bashrc` or `~/.zshrc` on the server.
package/CDP.zh-CN.md CHANGED
@@ -98,6 +98,6 @@ opencli doctor # 查看并验证连接是否通畅
98
98
  opencli bilibili hot --limit 5 # 执行目标命令
99
99
  ```
100
100
 
101
- > *Tip: 如果你填写的是一个普通 HTTP/HTTPS 的 URL 地址,OpenCLI 会自动尝试抓取该地址下的 `/json/version` 节点,来动态解析并连接真正底层依赖的 WebSocket 地址。*
101
+ > *Tip: 如果你填写的是一个普通 HTTP/HTTPS 的 CDP 地址,OpenCLI 会自动请求 `/json` target 列表,并挑选最可能的 app/page target;如果同一个端口下暴露了多个应用 target,还可以通过 `OPENCLI_CDP_TARGET`(例如 `antigravity`、`codex`)进一步缩小匹配范围。*
102
102
 
103
103
  如果你想在此服务器上永久启用该配置,可以将对应的 `export` 语句追加进入你的 `~/.bashrc` 或 `~/.zshrc` 配置文件中。
package/README.md CHANGED
@@ -22,6 +22,7 @@ Turn ANY Electron application into a CLI tool! Recombine, script, and extend app
22
22
  - [Prerequisites](#prerequisites)
23
23
  - [Quick Start](#quick-start)
24
24
  - [Built-in Commands](#built-in-commands)
25
+ - [Desktop App Adapters](#desktop-app-adapters)
25
26
  - [Download Support](#download-support)
26
27
  - [Output Formats](#output-formats)
27
28
  - [For AI Agents (Developer Guide)](#for-ai-agents-developer-guide)
@@ -38,7 +39,7 @@ Turn ANY Electron application into a CLI tool! Recombine, script, and extend app
38
39
  - **CLI All Electron** — CLI-ify apps like Antigravity Ultra! Now AI can control itself natively using cc/openclaw!
39
40
  - **Account-safe** — Reuses Chrome's logged-in state; your credentials never leave the browser.
40
41
  - **AI Agent ready** — `explore` discovers APIs, `synthesize` generates adapters, `cascade` finds auth strategies.
41
- - **Self-healing setup** — `opencli setup` auto-discovers tokens; `opencli doctor` diagnoses config across 10+ tools; `--fix` repairs them all.
42
+ - **Self-healing setup** — `opencli setup` verifies Browser Bridge connectivity; `opencli doctor` diagnoses daemon, extension, and live browser connectivity.
42
43
  - **Dynamic Loader** — Simply drop `.ts` or `.yaml` adapters into the `clis/` folder for auto-registration.
43
44
  - **Dual-Engine Architecture** — Supports both YAML declarative data pipelines and robust browser runtime TypeScript injections.
44
45
 
@@ -53,10 +54,18 @@ OpenCLI connects to your browser through a lightweight **Browser Bridge** Chrome
53
54
 
54
55
  ### Browser Bridge Extension Setup
55
56
 
56
- 1. Install the **opencli Browser Bridge** extension in Chrome:
57
- - Open `chrome://extensions`, enable **Developer mode** (top-right toggle)
58
- - Click **Load unpacked**, select the `extension/` folder from this repo
59
- 2. That's it! The daemon auto-starts when you run any browser command. No tokens, no manual configuration.
57
+ You can install the extension via either method:
58
+
59
+ **Method 1: Download Pre-built Release (Recommended)**
60
+ 1. Go to the GitHub [Releases page](https://github.com/jackwener/opencli/releases) and download the latest `opencli-extension.zip` or `opencli-extension.crx`.
61
+ 2. Open `chrome://extensions` and enable **Developer mode** (top-right toggle).
62
+ 3. Drag and drop the `.crx` file or the unzipped folder into the extensions page.
63
+
64
+ **Method 2: Load Unpacked Source (For Developers)**
65
+ 1. Open `chrome://extensions` and enable **Developer mode**.
66
+ 2. Click **Load unpacked** and select the `extension/` directory from this repository.
67
+
68
+ That's it! The daemon auto-starts when you run any browser command. No tokens, no manual configuration.
60
69
 
61
70
  > **Tip**: Use `opencli doctor` for ongoing diagnosis:
62
71
  > ```bash
@@ -106,7 +115,7 @@ Run `opencli list` for the live registry.
106
115
 
107
116
  | Site | Commands | Mode |
108
117
  |------|----------|------|
109
- | **twitter** | `trending` `bookmarks` `profile` `search` `timeline` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` | 🔐 Browser |
118
+ | **twitter** | `trending` `bookmarks` `profile` `search` `timeline` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` `accept` `reply-dm` | 🔐 Browser |
110
119
  | **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` | 🔐 Browser |
111
120
  | **cursor** | `status` `send` `read` `new` `dump` `composer` `model` `extract-code` `ask` `screenshot` `history` `export` | 🖥️ Desktop |
112
121
  | **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 🔐 Browser |
@@ -116,9 +125,10 @@ Run `opencli list` for the live registry.
116
125
  | **discord-app** | `status` `send` `read` `channels` `servers` `search` `members` | 🖥️ Desktop |
117
126
  | **v2ex** | `hot` `latest` `topic` `daily` `me` `notifications` | 🌐 / 🔐 |
118
127
  | **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` | 🔐 Browser |
119
- | **antigravity** | `status` `send` `read` `new` `evaluate` | 🖥️ Desktop |
128
+ | **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` | 🖥️ Desktop |
120
129
  | **chatgpt** | `status` `new` `send` `read` `ask` | 🖥️ Desktop |
121
130
  | **xiaohongshu** | `search` `notifications` `feed` `me` `user` `download` | 🔐 Browser |
131
+ | **apple-podcasts** | `search` `episodes` `top` | 🌐 Public |
122
132
  | **xiaoyuzhou** | `podcast` `podcast-episodes` `episode` | 🌐 Public |
123
133
  | **zhihu** | `hot` `search` `question` `download` | 🔐 Browser |
124
134
  | **youtube** | `search` `video` `transcript` | 🔐 Browser |
@@ -134,6 +144,23 @@ Run `opencli list` for the live registry.
134
144
  | **weibo** | `hot` | 🔐 Browser |
135
145
  | **yahoo-finance** | `quote` | 🔐 Browser |
136
146
 
147
+ ### Desktop App Adapters
148
+
149
+ Each desktop adapter has its own detailed documentation with commands reference, setup guide, and examples:
150
+
151
+ | App | Description | Doc |
152
+ |-----|-------------|-----|
153
+ | **Cursor** | Control Cursor IDE — Composer, chat, code extraction | [README](./src/clis/cursor/README.md) |
154
+ | **Codex** | Drive OpenAI Codex CLI agent headlessly | [README](./src/clis/codex/README.md) |
155
+ | **Antigravity** | Control Antigravity Ultra from terminal | [README](./src/clis/antigravity/README.md) |
156
+ | **ChatGPT** | Automate ChatGPT macOS desktop app | [README](./src/clis/chatgpt/README.md) |
157
+ | **ChatWise** | Multi-LLM client (GPT-4, Claude, Gemini) | [README](./src/clis/chatwise/README.md) |
158
+ | **Notion** | Search, read, write Notion pages | [README](./src/clis/notion/README.md) |
159
+ | **Discord** | Discord Desktop — messages, channels, servers | [README](./src/clis/discord-app/README.md) |
160
+ | **Feishu** | 飞书/Lark Desktop via AppleScript | [README](./src/clis/feishu/README.md) |
161
+ | **WeChat** | 微信 Desktop via AppleScript + Accessibility | [README](./src/clis/wechat/README.md) |
162
+ | **NeteaseMusic** | 网易云音乐 Desktop via CEF/CDP | [README](./src/clis/neteasemusic/README.md) |
163
+
137
164
  ## Download Support
138
165
 
139
166
  OpenCLI supports downloading images, videos, and articles from supported platforms.
@@ -162,7 +189,7 @@ brew install yt-dlp
162
189
 
163
190
  ```bash
164
191
  # Download images/videos from Xiaohongshu note
165
- opencli xiaohongshu download --note-id abc123 --output ./xhs
192
+ opencli xiaohongshu download --note_id abc123 --output ./xhs
166
193
 
167
194
  # Download Bilibili video (requires yt-dlp)
168
195
  opencli bilibili download --bvid BV1xxx --output ./bilibili
package/README.zh-CN.md CHANGED
@@ -24,6 +24,7 @@ CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合
24
24
  - [前置要求](#前置要求)
25
25
  - [快速开始](#快速开始)
26
26
  - [内置命令](#内置命令)
27
+ - [桌面应用适配器](#桌面应用适配器)
27
28
  - [下载支持](#下载支持)
28
29
  - [输出格式](#输出格式)
29
30
  - [致 AI Agent(开发者指南)](#致-ai-agent开发者指南)
@@ -39,7 +40,7 @@ CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合
39
40
  - **CLI All Electron** — 支持把所有 electron 应用(如 Antigravity Ultra)CLI 化,让 AI 控制自己!
40
41
  - **多站点覆盖** — 覆盖 B站、知乎、小红书、Twitter、Reddit,以及多种桌面应用
41
42
  - **零风控** — 复用 Chrome 登录态,无需存储任何凭证
42
- - **自修复配置** — `opencli setup` 自动发现 Token;`opencli doctor` 诊断 10+ 工具配置;`--fix` 一键修复
43
+ - **自修复配置** — `opencli setup` 检查 Browser Bridge 连通性;`opencli doctor` 诊断 daemon、扩展和浏览器连接状态
43
44
  - **AI 原生** — `explore` 自动发现 API,`synthesize` 生成适配器,`cascade` 探测认证策略
44
45
  - **动态加载引擎** — 声明式的 `.yaml` 或者底层定制的 `.ts` 适配器,放入 `clis/` 文件夹即可自动注册生效
45
46
 
@@ -54,10 +55,18 @@ OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与
54
55
 
55
56
  ### Browser Bridge 扩展配置
56
57
 
57
- 1. 在 Chrome 中安装 **opencli Browser Bridge** 扩展:
58
- - 打开 `chrome://extensions`,启用右上角的 **开发者模式**
59
- - 点击 **加载已解压的扩展程序**,选择本仓库的 `extension/` 文件夹
60
- 2. 完成!运行任何浏览器命令时 daemon 会自动启动。无需 token,无需手动配置。
58
+ 你可以选择以下任一方式安装扩展:
59
+
60
+ **方式一:下载构建好的安装包(推荐)**
61
+ 1. GitHub [Releases 页面](https://github.com/jackwener/opencli/releases) 下载最新的 `opencli-extension.zip` 或 `opencli-extension.crx`。
62
+ 2. 打开 Chrome 的 `chrome://extensions`,启用右上角的 **开发者模式**。
63
+ 3. 将 `.crx` 拖入浏览器窗口,或将解压后的文件夹拖入即可完成安装。
64
+
65
+ **方式二:加载源码(针对开发者)**
66
+ 1. 同样在 `chrome://extensions` 开启 **开发者模式**。
67
+ 2. 点击 **加载已解压的扩展程序**,选择本仓库代码树中的 `extension/` 文件夹。
68
+
69
+ 完成!运行任何 opencli 浏览器命令时,后台微型 daemon 会自动启动与浏览器通信。无需配 API Token,零代码配置。
61
70
 
62
71
  > **Tip**:后续诊断用 `opencli doctor`:
63
72
  > ```bash
@@ -107,7 +116,7 @@ npm install -g @jackwener/opencli@latest
107
116
 
108
117
  | 站点 | 命令 | 模式 |
109
118
  |------|------|------|
110
- | **twitter** | `trending` `bookmarks` `profile` `search` `timeline` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` | 🔐 浏览器 |
119
+ | **twitter** | `trending` `bookmarks` `profile` `search` `timeline` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` `accept` `reply-dm` | 🔐 浏览器 |
111
120
  | **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` | 🔐 浏览器 |
112
121
  | **cursor** | `status` `send` `read` `new` `dump` `composer` `model` `extract-code` `ask` `screenshot` `history` `export` | 🖥️ 桌面端 |
113
122
  | **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 🔐 浏览器 |
@@ -117,9 +126,10 @@ npm install -g @jackwener/opencli@latest
117
126
  | **discord-app** | `status` `send` `read` `channels` `servers` `search` `members` | 🖥️ 桌面端 |
118
127
  | **v2ex** | `hot` `latest` `topic` `daily` `me` `notifications` | 🌐 / 🔐 |
119
128
  | **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` | 🔐 浏览器 |
120
- | **antigravity** | `status` `send` `read` `new` `evaluate` | 🖥️ 桌面端 |
129
+ | **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` | 🖥️ 桌面端 |
121
130
  | **chatgpt** | `status` `new` `send` `read` `ask` | 🖥️ 桌面端 |
122
131
  | **xiaohongshu** | `search` `notifications` `feed` `me` `user` `download` | 🔐 浏览器 |
132
+ | **apple-podcasts** | `search` `episodes` `top` | 🌐 公开 |
123
133
  | **xiaoyuzhou** | `podcast` `podcast-episodes` `episode` | 🌐 公开 |
124
134
  | **zhihu** | `hot` `search` `question` `download` | 🔐 浏览器 |
125
135
  | **youtube** | `search` `video` `transcript` | 🔐 浏览器 |
@@ -135,6 +145,23 @@ npm install -g @jackwener/opencli@latest
135
145
  | **weibo** | `hot` | 🔐 浏览器 |
136
146
  | **yahoo-finance** | `quote` | 🔐 浏览器 |
137
147
 
148
+ ### 桌面应用适配器
149
+
150
+ 每个桌面适配器都有自己详细的文档说明,包括命令参考、启动配置与使用示例:
151
+
152
+ | 应用 | 描述 | 文档 |
153
+ |-----|-------------|-----|
154
+ | **Cursor** | 控制 Cursor IDE — Composer、对话、代码提取等 | [README](./src/clis/cursor/README.md) |
155
+ | **Codex** | 在后台(无头)驱动 OpenAI Codex CLI Agent | [README](./src/clis/codex/README.md) |
156
+ | **Antigravity** | 在终端直接控制 Antigravity Ultra | [README](./src/clis/antigravity/README.md) |
157
+ | **ChatGPT** | 自动化操作 ChatGPT macOS 桌面客户端 | [README](./src/clis/chatgpt/README.md) |
158
+ | **ChatWise** | 多 LLM 客户端(GPT-4、Claude、Gemini) | [README](./src/clis/chatwise/README.md) |
159
+ | **Notion** | 搜索、读取、写入 Notion 页面 | [README](./src/clis/notion/README.md) |
160
+ | **Discord** | Discord 桌面版 — 消息、频道、服务器 | [README](./src/clis/discord-app/README.md) |
161
+ | **Feishu** | 飞书/Lark 桌面版 (AppleScript 驱动) | [README](./src/clis/feishu/README.md) |
162
+ | **WeChat** | 微信 Mac 桌面端 (AppleScript + 无障碍接口) | [README](./src/clis/wechat/README.md) |
163
+ | **NeteaseMusic** | 网易云音乐 (CEF/CDP 驱动) | [README](./src/clis/neteasemusic/README.md) |
164
+
138
165
  ## 下载支持
139
166
 
140
167
  OpenCLI 支持从各平台下载图片、视频和文章。
@@ -163,7 +190,7 @@ brew install yt-dlp
163
190
 
164
191
  ```bash
165
192
  # 下载小红书笔记中的图片/视频
166
- opencli xiaohongshu download --note-id abc123 --output ./xhs
193
+ opencli xiaohongshu download --note_id abc123 --output ./xhs
167
194
 
168
195
  # 下载B站视频(需要 yt-dlp)
169
196
  opencli bilibili download --bvid BV1xxx --output ./bilibili
package/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: opencli
3
3
  description: "OpenCLI — Make any website or Electron App your CLI. Zero risk, AI-powered, reuse Chrome login. 80+ commands across 19 sites."
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  author: jackwener
6
6
  tags: [cli, browser, web, chrome-extension, cdp, bilibili, zhihu, twitter, github, v2ex, hackernews, reddit, xiaohongshu, xueqiu, youtube, boss, coupang, AI, agent]
7
7
  ---
@@ -170,11 +170,9 @@ opencli list --json # JSON output
170
170
  opencli list -f yaml # YAML output
171
171
  opencli validate # Validate all CLI definitions
172
172
  opencli validate bilibili # Validate specific site
173
- opencli setup # Interactive token setup (auto-discover + TUI checkbox)
174
- opencli doctor # Diagnose token & extension config across all tools
173
+ opencli setup # Interactive Browser Bridge setup and connectivity check
174
+ opencli doctor # Diagnose daemon, extension, and browser connectivity
175
175
  opencli doctor --live # Also test live browser connectivity
176
- opencli doctor --fix # Fix mismatched configs (interactive confirmation)
177
- opencli doctor --fix -y # Fix all configs non-interactively
178
176
  ```
179
177
 
180
178
  ### AI Agent Workflow
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CDP client — implements IPage by connecting directly to a Chrome/Electron CDP WebSocket.
3
+ */
4
+ import type { IPage } from '../types.js';
5
+ export interface CDPTarget {
6
+ type?: string;
7
+ url?: string;
8
+ title?: string;
9
+ webSocketDebuggerUrl?: string;
10
+ }
11
+ export declare class CDPBridge {
12
+ private _ws;
13
+ private _idCounter;
14
+ private _pending;
15
+ connect(opts?: {
16
+ timeout?: number;
17
+ }): Promise<IPage>;
18
+ close(): Promise<void>;
19
+ send(method: string, params?: any): Promise<any>;
20
+ }
21
+ declare function selectCDPTarget(targets: CDPTarget[]): CDPTarget | undefined;
22
+ declare function scoreCDPTarget(target: CDPTarget, preferredPattern?: RegExp): number;
23
+ export declare const __test__: {
24
+ selectCDPTarget: typeof selectCDPTarget;
25
+ scoreCDPTarget: typeof scoreCDPTarget;
26
+ };
27
+ export {};