@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.
Files changed (97) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +36 -10
  3. package/README.zh-CN.md +3 -0
  4. package/SKILL.md +7 -2
  5. package/dist/bilibili.js +4 -2
  6. package/dist/cli-manifest.json +506 -6
  7. package/dist/cli.js +51 -1
  8. package/dist/clis/antigravity/serve.js +296 -47
  9. package/dist/clis/arxiv/paper.d.ts +1 -0
  10. package/dist/clis/arxiv/paper.js +21 -0
  11. package/dist/clis/arxiv/search.d.ts +1 -0
  12. package/dist/clis/arxiv/search.js +24 -0
  13. package/dist/clis/arxiv/utils.d.ts +18 -0
  14. package/dist/clis/arxiv/utils.js +49 -0
  15. package/dist/clis/boss/batchgreet.d.ts +1 -0
  16. package/dist/clis/boss/batchgreet.js +147 -0
  17. package/dist/clis/boss/exchange.d.ts +1 -0
  18. package/dist/clis/boss/exchange.js +111 -0
  19. package/dist/clis/boss/greet.d.ts +1 -0
  20. package/dist/clis/boss/greet.js +175 -0
  21. package/dist/clis/boss/invite.d.ts +1 -0
  22. package/dist/clis/boss/invite.js +158 -0
  23. package/dist/clis/boss/joblist.d.ts +1 -0
  24. package/dist/clis/boss/joblist.js +55 -0
  25. package/dist/clis/boss/mark.d.ts +1 -0
  26. package/dist/clis/boss/mark.js +141 -0
  27. package/dist/clis/boss/recommend.d.ts +1 -0
  28. package/dist/clis/boss/recommend.js +83 -0
  29. package/dist/clis/boss/stats.d.ts +1 -0
  30. package/dist/clis/boss/stats.js +116 -0
  31. package/dist/clis/sinafinance/news.d.ts +7 -0
  32. package/dist/clis/sinafinance/news.js +61 -0
  33. package/dist/clis/wikipedia/search.d.ts +1 -0
  34. package/dist/clis/wikipedia/search.js +30 -0
  35. package/dist/clis/wikipedia/summary.d.ts +1 -0
  36. package/dist/clis/wikipedia/summary.js +28 -0
  37. package/dist/clis/wikipedia/utils.d.ts +8 -0
  38. package/dist/clis/wikipedia/utils.js +18 -0
  39. package/dist/clis/xiaohongshu/creator-note-detail.d.ts +64 -5
  40. package/dist/clis/xiaohongshu/creator-note-detail.js +258 -69
  41. package/dist/clis/xiaohongshu/creator-note-detail.test.d.ts +1 -0
  42. package/dist/clis/xiaohongshu/creator-note-detail.test.js +211 -0
  43. package/dist/clis/xiaohongshu/creator-notes-summary.d.ts +28 -0
  44. package/dist/clis/xiaohongshu/creator-notes-summary.js +92 -0
  45. package/dist/clis/xiaohongshu/creator-notes-summary.test.d.ts +1 -0
  46. package/dist/clis/xiaohongshu/creator-notes-summary.test.js +49 -0
  47. package/dist/clis/xiaohongshu/creator-notes.d.ts +18 -5
  48. package/dist/clis/xiaohongshu/creator-notes.js +159 -71
  49. package/dist/clis/xiaohongshu/creator-notes.test.d.ts +1 -0
  50. package/dist/clis/xiaohongshu/creator-notes.test.js +162 -0
  51. package/dist/external.d.ts +20 -0
  52. package/dist/external.js +159 -0
  53. package/docs/.vitepress/config.mts +1 -0
  54. package/docs/public/CNAME +1 -0
  55. package/package.json +1 -1
  56. package/src/bilibili.ts +4 -2
  57. package/src/browser/cdp.ts +3 -3
  58. package/src/cli.ts +56 -1
  59. package/src/clis/antigravity/README.md +3 -46
  60. package/src/clis/antigravity/serve.ts +323 -50
  61. package/src/clis/arxiv/paper.ts +21 -0
  62. package/src/clis/arxiv/search.ts +24 -0
  63. package/src/clis/arxiv/utils.ts +63 -0
  64. package/src/clis/boss/batchgreet.ts +167 -0
  65. package/src/clis/boss/exchange.ts +126 -0
  66. package/src/clis/boss/greet.ts +198 -0
  67. package/src/clis/boss/invite.ts +177 -0
  68. package/src/clis/boss/joblist.ts +63 -0
  69. package/src/clis/boss/mark.ts +155 -0
  70. package/src/clis/boss/recommend.ts +94 -0
  71. package/src/clis/boss/stats.ts +130 -0
  72. package/src/clis/chaoxing/README.md +2 -24
  73. package/src/clis/chatgpt/README.md +3 -42
  74. package/src/clis/chatwise/README.md +3 -36
  75. package/src/clis/codex/README.md +3 -32
  76. package/src/clis/cursor/README.md +3 -31
  77. package/src/clis/discord-app/README.md +2 -25
  78. package/src/clis/feishu/README.md +2 -17
  79. package/src/clis/neteasemusic/README.md +3 -29
  80. package/src/clis/notion/README.md +2 -26
  81. package/src/clis/sinafinance/news.ts +76 -0
  82. package/src/clis/wechat/README.md +2 -25
  83. package/src/clis/wikipedia/search.ts +32 -0
  84. package/src/clis/wikipedia/summary.ts +28 -0
  85. package/src/clis/wikipedia/utils.ts +20 -0
  86. package/src/clis/xiaohongshu/creator-note-detail.test.ts +223 -0
  87. package/src/clis/xiaohongshu/creator-note-detail.ts +340 -72
  88. package/src/clis/xiaohongshu/creator-notes-summary.test.ts +54 -0
  89. package/src/clis/xiaohongshu/creator-notes-summary.ts +120 -0
  90. package/src/clis/xiaohongshu/creator-notes.test.ts +178 -0
  91. package/src/clis/xiaohongshu/creator-notes.ts +215 -75
  92. package/src/daemon.ts +3 -3
  93. package/src/external-clis.yaml +39 -0
  94. package/src/external.ts +182 -0
  95. package/CDP.md +0 -103
  96. package/CDP.zh-CN.md +0 -103
  97. 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 | [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) |
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: 0.7.4
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
- const query = new URLSearchParams(sorted).toString();
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
  }