@jackwener/opencli 1.0.5 → 1.1.0
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/CHANGELOG.md +8 -0
- package/README.md +36 -10
- package/README.zh-CN.md +3 -0
- package/SKILL.md +7 -2
- package/dist/bilibili.js +4 -2
- package/dist/cli-manifest.json +506 -6
- package/dist/cli.js +51 -1
- package/dist/clis/antigravity/serve.js +296 -47
- package/dist/clis/arxiv/paper.d.ts +1 -0
- package/dist/clis/arxiv/paper.js +21 -0
- package/dist/clis/arxiv/search.d.ts +1 -0
- package/dist/clis/arxiv/search.js +24 -0
- package/dist/clis/arxiv/utils.d.ts +18 -0
- package/dist/clis/arxiv/utils.js +49 -0
- package/dist/clis/boss/batchgreet.d.ts +1 -0
- package/dist/clis/boss/batchgreet.js +147 -0
- package/dist/clis/boss/exchange.d.ts +1 -0
- package/dist/clis/boss/exchange.js +111 -0
- package/dist/clis/boss/greet.d.ts +1 -0
- package/dist/clis/boss/greet.js +175 -0
- package/dist/clis/boss/invite.d.ts +1 -0
- package/dist/clis/boss/invite.js +158 -0
- package/dist/clis/boss/joblist.d.ts +1 -0
- package/dist/clis/boss/joblist.js +55 -0
- package/dist/clis/boss/mark.d.ts +1 -0
- package/dist/clis/boss/mark.js +141 -0
- package/dist/clis/boss/recommend.d.ts +1 -0
- package/dist/clis/boss/recommend.js +83 -0
- package/dist/clis/boss/stats.d.ts +1 -0
- package/dist/clis/boss/stats.js +116 -0
- package/dist/clis/sinafinance/news.d.ts +7 -0
- package/dist/clis/sinafinance/news.js +61 -0
- package/dist/clis/wikipedia/search.d.ts +1 -0
- package/dist/clis/wikipedia/search.js +30 -0
- package/dist/clis/wikipedia/summary.d.ts +1 -0
- package/dist/clis/wikipedia/summary.js +28 -0
- package/dist/clis/wikipedia/utils.d.ts +8 -0
- package/dist/clis/wikipedia/utils.js +18 -0
- package/dist/clis/xiaohongshu/creator-note-detail.d.ts +64 -5
- package/dist/clis/xiaohongshu/creator-note-detail.js +258 -69
- package/dist/clis/xiaohongshu/creator-note-detail.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-note-detail.test.js +211 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.d.ts +28 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.js +92 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.test.js +49 -0
- package/dist/clis/xiaohongshu/creator-notes.d.ts +18 -5
- package/dist/clis/xiaohongshu/creator-notes.js +159 -71
- package/dist/clis/xiaohongshu/creator-notes.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-notes.test.js +162 -0
- package/dist/external.d.ts +20 -0
- package/dist/external.js +159 -0
- package/docs/.vitepress/config.mts +1 -0
- package/docs/public/CNAME +1 -0
- package/package.json +1 -1
- package/src/bilibili.ts +4 -2
- package/src/browser/cdp.ts +3 -3
- package/src/cli.ts +56 -1
- package/src/clis/antigravity/README.md +3 -46
- package/src/clis/antigravity/serve.ts +323 -50
- package/src/clis/arxiv/paper.ts +21 -0
- package/src/clis/arxiv/search.ts +24 -0
- package/src/clis/arxiv/utils.ts +63 -0
- package/src/clis/boss/batchgreet.ts +167 -0
- package/src/clis/boss/exchange.ts +126 -0
- package/src/clis/boss/greet.ts +198 -0
- package/src/clis/boss/invite.ts +177 -0
- package/src/clis/boss/joblist.ts +63 -0
- package/src/clis/boss/mark.ts +155 -0
- package/src/clis/boss/recommend.ts +94 -0
- package/src/clis/boss/stats.ts +130 -0
- package/src/clis/chaoxing/README.md +2 -24
- package/src/clis/chatgpt/README.md +3 -42
- package/src/clis/chatwise/README.md +3 -36
- package/src/clis/codex/README.md +3 -32
- package/src/clis/cursor/README.md +3 -31
- package/src/clis/discord-app/README.md +2 -25
- package/src/clis/feishu/README.md +2 -17
- package/src/clis/neteasemusic/README.md +3 -29
- package/src/clis/notion/README.md +2 -26
- package/src/clis/sinafinance/news.ts +76 -0
- package/src/clis/wechat/README.md +2 -25
- package/src/clis/wikipedia/search.ts +32 -0
- package/src/clis/wikipedia/summary.ts +28 -0
- package/src/clis/wikipedia/utils.ts +20 -0
- package/src/clis/xiaohongshu/creator-note-detail.test.ts +223 -0
- package/src/clis/xiaohongshu/creator-note-detail.ts +340 -72
- package/src/clis/xiaohongshu/creator-notes-summary.test.ts +54 -0
- package/src/clis/xiaohongshu/creator-notes-summary.ts +120 -0
- package/src/clis/xiaohongshu/creator-notes.test.ts +178 -0
- package/src/clis/xiaohongshu/creator-notes.ts +215 -75
- package/src/daemon.ts +3 -3
- package/src/external-clis.yaml +39 -0
- package/src/external.ts +182 -0
- package/CDP.md +0 -103
- package/CDP.zh-CN.md +0 -103
- package/CLI-ELECTRON.md +0 -125
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.0.6](https://github.com/jackwener/opencli/compare/v1.0.5...v1.0.6) (2026-03-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* use %20 instead of + for spaces in Bilibili WBI signed requests ([#126](https://github.com/jackwener/opencli/issues/126)) ([4cabca1](https://github.com/jackwener/opencli/commit/4cabca12dfa6ca027b938b80ee6b940b5e89ea5c)), closes [#125](https://github.com/jackwener/opencli/issues/125)
|
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ Turn ANY Electron application into a CLI tool! Recombine, script, and extend app
|
|
|
39
39
|
- **CLI All Electron** — CLI-ify apps like Antigravity Ultra! Now AI can control itself natively using cc/openclaw!
|
|
40
40
|
- **Account-safe** — Reuses Chrome's logged-in state; your credentials never leave the browser.
|
|
41
41
|
- **AI Agent ready** — `explore` discovers APIs, `synthesize` generates adapters, `cascade` finds auth strategies.
|
|
42
|
+
- **External CLI Hub** — Discover, auto-install, and passthrough commands to any external CLI (gh, obsidian, docker, kubectl, etc). Zero setup.
|
|
42
43
|
- **Self-healing setup** — `opencli setup` verifies Browser Bridge connectivity; `opencli doctor` diagnoses daemon, extension, and live browser connectivity.
|
|
43
44
|
- **Dynamic Loader** — Simply drop `.ts` or `.yaml` adapters into the `clis/` folder for auto-registration.
|
|
44
45
|
- **Dual-Engine Architecture** — Supports both YAML declarative data pipelines and robust browser runtime TypeScript injections.
|
|
@@ -137,12 +138,37 @@ Run `opencli list` for the live registry.
|
|
|
137
138
|
| **bbc** | `news` | Public |
|
|
138
139
|
| **ctrip** | `search` | Browser |
|
|
139
140
|
| **github** | `search` | Public |
|
|
141
|
+
| **arxiv** | `search` `paper` | Public |
|
|
142
|
+
| **wikipedia** | `search` `summary` | Public |
|
|
140
143
|
| **hackernews** | `top` | Public |
|
|
141
144
|
| **linkedin** | `search` | Browser |
|
|
142
145
|
| **reuters** | `search` | Browser |
|
|
143
146
|
| **smzdm** | `search` | Browser |
|
|
144
147
|
| **weibo** | `hot` | Browser |
|
|
145
148
|
| **yahoo-finance** | `quote` | Browser |
|
|
149
|
+
| **sinafinance** | `news` | 🌐 Public |
|
|
150
|
+
|
|
151
|
+
### External CLI Hub
|
|
152
|
+
|
|
153
|
+
OpenCLI acts as a universal hub for your existing command-line tools. It provides unified discovery, automatic installation, and pure passthrough execution.
|
|
154
|
+
|
|
155
|
+
| External CLI | Description | Commands Example |
|
|
156
|
+
|--------------|-------------|------------------|
|
|
157
|
+
| **gh** | GitHub CLI | `opencli gh pr list --limit 5` |
|
|
158
|
+
| **obsidian** | Obsidian vault management | `opencli obsidian search query="AI"` |
|
|
159
|
+
| **docker** | Docker command-line interface | `opencli docker ps` |
|
|
160
|
+
| **kubectl** | Kubernetes command-line tool | `opencli kubectl get pods` |
|
|
161
|
+
| **readwise** | Readwise & Reader CLI | `opencli readwise login` |
|
|
162
|
+
|
|
163
|
+
**Zero Configuration**: OpenCLI purely passes your inputs to the underlying binary via standard I/O streams. The external CLI works exactly as it naturally would, maintaining its standard output formats.
|
|
164
|
+
|
|
165
|
+
**Auto-Installation**: If you run `opencli gh ...` and `gh` is not installed on your system, OpenCLI will automatically try to install it using your system's package manager (e.g., `brew install gh`) before seamlessly re-running the command.
|
|
166
|
+
|
|
167
|
+
**Register Your Own**:
|
|
168
|
+
Add any local CLI to your OpenCLI registry so AI agents can automatically discover it via the `opencli list` command.
|
|
169
|
+
```bash
|
|
170
|
+
opencli register mycli
|
|
171
|
+
```
|
|
146
172
|
|
|
147
173
|
### Desktop App Adapters
|
|
148
174
|
|
|
@@ -150,16 +176,16 @@ Each desktop adapter has its own detailed documentation with commands reference,
|
|
|
150
176
|
|
|
151
177
|
| App | Description | Doc |
|
|
152
178
|
|-----|-------------|-----|
|
|
153
|
-
| **Cursor** | Control Cursor IDE — Composer, chat, code extraction | [
|
|
154
|
-
| **Codex** | Drive OpenAI Codex CLI agent headlessly | [
|
|
155
|
-
| **Antigravity** | Control Antigravity Ultra from terminal | [
|
|
156
|
-
| **ChatGPT** | Automate ChatGPT macOS desktop app | [
|
|
157
|
-
| **ChatWise** | Multi-LLM client (GPT-4, Claude, Gemini) | [
|
|
158
|
-
| **Notion** | Search, read, write Notion pages | [
|
|
159
|
-
| **Discord** | Discord Desktop — messages, channels, servers | [
|
|
160
|
-
| **Feishu** | 飞书/Lark Desktop via AppleScript | [
|
|
161
|
-
| **WeChat** | 微信 Desktop via AppleScript + Accessibility | [
|
|
162
|
-
| **NeteaseMusic** | 网易云音乐 Desktop via CEF/CDP | [
|
|
179
|
+
| **Cursor** | Control Cursor IDE — Composer, chat, code extraction | [Doc](./docs/adapters/desktop/cursor.md) |
|
|
180
|
+
| **Codex** | Drive OpenAI Codex CLI agent headlessly | [Doc](./docs/adapters/desktop/codex.md) |
|
|
181
|
+
| **Antigravity** | Control Antigravity Ultra from terminal | [Doc](./docs/adapters/desktop/antigravity.md) |
|
|
182
|
+
| **ChatGPT** | Automate ChatGPT macOS desktop app | [Doc](./docs/adapters/desktop/chatgpt.md) |
|
|
183
|
+
| **ChatWise** | Multi-LLM client (GPT-4, Claude, Gemini) | [Doc](./docs/adapters/desktop/chatwise.md) |
|
|
184
|
+
| **Notion** | Search, read, write Notion pages | [Doc](./docs/adapters/desktop/notion.md) |
|
|
185
|
+
| **Discord** | Discord Desktop — messages, channels, servers | [Doc](./docs/adapters/desktop/discord.md) |
|
|
186
|
+
| **Feishu** | 飞书/Lark Desktop via AppleScript | [Doc](./docs/adapters/desktop/feishu.md) |
|
|
187
|
+
| **WeChat** | 微信 Desktop via AppleScript + Accessibility | [Doc](./docs/adapters/desktop/wechat.md) |
|
|
188
|
+
| **NeteaseMusic** | 网易云音乐 Desktop via CEF/CDP | [Doc](./docs/adapters/desktop/neteasemusic.md) |
|
|
163
189
|
|
|
164
190
|
## Download Support
|
|
165
191
|
|
package/README.zh-CN.md
CHANGED
|
@@ -138,12 +138,15 @@ npm install -g @jackwener/opencli@latest
|
|
|
138
138
|
| **bbc** | `news` | 公共 API |
|
|
139
139
|
| **ctrip** | `search` | 浏览器 |
|
|
140
140
|
| **github** | `search` | 公共 API |
|
|
141
|
+
| **arxiv** | `search` `paper` | 公开 |
|
|
142
|
+
| **wikipedia** | `search` `summary` | 公开 |
|
|
141
143
|
| **hackernews** | `top` | 公共 API |
|
|
142
144
|
| **linkedin** | `search` | 浏览器 |
|
|
143
145
|
| **reuters** | `search` | 浏览器 |
|
|
144
146
|
| **smzdm** | `search` | 浏览器 |
|
|
145
147
|
| **weibo** | `hot` | 浏览器 |
|
|
146
148
|
| **yahoo-finance** | `quote` | 浏览器 |
|
|
149
|
+
| **sinafinance** | `news` | 🌐 公开 |
|
|
147
150
|
|
|
148
151
|
### 桌面应用适配器
|
|
149
152
|
|
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:
|
|
4
|
+
version: 1.1.0
|
|
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
|
---
|
|
@@ -143,6 +143,9 @@ opencli youtube transcript --url "xxx" --lang zh-Hans --mode raw # 指定语言
|
|
|
143
143
|
# Yahoo Finance (browser)
|
|
144
144
|
opencli yahoo-finance quote --symbol AAPL # 股票行情
|
|
145
145
|
|
|
146
|
+
# Sina Finance
|
|
147
|
+
opencli sinafinance news --limit 10 --type 1 # 7x24实时快讯 (0=全部 1=A股 2=宏观 3=公司 4=数据 5=市场 6=国际 7=观点 8=央行 9=其它)
|
|
148
|
+
|
|
146
149
|
# Reuters (browser)
|
|
147
150
|
opencli reuters search --query "AI" # 路透社搜索
|
|
148
151
|
|
|
@@ -165,9 +168,11 @@ opencli antigravity watch # 流式监听增量消息
|
|
|
165
168
|
### Management Commands
|
|
166
169
|
|
|
167
170
|
```bash
|
|
168
|
-
opencli list # List all commands
|
|
171
|
+
opencli list # List all commands (including External CLIs)
|
|
169
172
|
opencli list --json # JSON output
|
|
170
173
|
opencli list -f yaml # YAML output
|
|
174
|
+
opencli install <name> # Auto-install an external CLI (e.g., gh, obsidian)
|
|
175
|
+
opencli register <name> # Register a local custom CLI for unified discovery
|
|
171
176
|
opencli validate # Validate all CLI definitions
|
|
172
177
|
opencli validate bilibili # Validate specific site
|
|
173
178
|
opencli setup # Interactive Browser Bridge setup and connectivity check
|
package/dist/bilibili.js
CHANGED
|
@@ -47,7 +47,9 @@ export async function wbiSign(page, params) {
|
|
|
47
47
|
for (const key of Object.keys(allParams).sort()) {
|
|
48
48
|
sorted[key] = String(allParams[key]).replace(/[!'()*]/g, '');
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
// Bilibili WBI verification expects %20 for spaces, not + (URLSearchParams default).
|
|
51
|
+
// Using + causes signature mismatch → CORS-blocked error response → TypeError: Failed to fetch.
|
|
52
|
+
const query = new URLSearchParams(sorted).toString().replace(/\+/g, '%20');
|
|
51
53
|
const wRid = await md5(query + mixinKey);
|
|
52
54
|
sorted.w_rid = wRid;
|
|
53
55
|
return sorted;
|
|
@@ -58,7 +60,7 @@ export async function apiGet(page, path, opts = {}) {
|
|
|
58
60
|
if (opts.signed) {
|
|
59
61
|
params = await wbiSign(page, params);
|
|
60
62
|
}
|
|
61
|
-
const qs = new URLSearchParams(Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)])));
|
|
63
|
+
const qs = new URLSearchParams(Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))).toString().replace(/\+/g, '%20');
|
|
62
64
|
const url = `${baseUrl}${path}?${qs}`;
|
|
63
65
|
return fetchJson(page, url);
|
|
64
66
|
}
|