@jackwener/opencli 1.5.7 → 1.5.9
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 +29 -0
- package/README.md +17 -1
- package/README.zh-CN.md +17 -1
- package/dist/browser/base-page.d.ts +48 -0
- package/dist/browser/base-page.js +160 -0
- package/dist/browser/cdp.js +4 -106
- package/dist/browser/daemon-client.d.ts +1 -7
- package/dist/browser/daemon-client.js +2 -9
- package/dist/browser/discover.d.ts +1 -4
- package/dist/browser/discover.js +1 -4
- package/dist/browser/errors.d.ts +4 -0
- package/dist/browser/errors.js +20 -0
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/page.d.ts +6 -35
- package/dist/browser/page.js +10 -189
- package/dist/browser/tabs.js +5 -5
- package/dist/browser.test.js +15 -15
- package/dist/cli-manifest.json +294 -22
- package/dist/clis/amazon/bestsellers.d.ts +21 -0
- package/dist/clis/amazon/bestsellers.js +130 -0
- package/dist/clis/amazon/bestsellers.test.js +20 -0
- package/dist/clis/amazon/discussion.d.ts +20 -0
- package/dist/clis/amazon/discussion.js +91 -0
- package/dist/clis/amazon/discussion.test.js +36 -0
- package/dist/clis/amazon/offer.d.ts +23 -0
- package/dist/clis/amazon/offer.js +140 -0
- package/dist/clis/amazon/offer.test.d.ts +1 -0
- package/dist/clis/amazon/offer.test.js +29 -0
- package/dist/clis/amazon/product.d.ts +18 -0
- package/dist/clis/amazon/product.js +92 -0
- package/dist/clis/amazon/product.test.d.ts +1 -0
- package/dist/clis/amazon/product.test.js +24 -0
- package/dist/clis/amazon/search.d.ts +18 -0
- package/dist/clis/amazon/search.js +87 -0
- package/dist/clis/amazon/search.test.d.ts +1 -0
- package/dist/clis/amazon/search.test.js +22 -0
- package/dist/clis/amazon/shared.d.ts +64 -0
- package/dist/clis/amazon/shared.js +255 -0
- package/dist/clis/amazon/shared.test.d.ts +1 -0
- package/dist/clis/amazon/shared.test.js +33 -0
- package/dist/clis/gemini/ask.d.ts +1 -0
- package/dist/clis/gemini/ask.js +40 -0
- package/dist/clis/gemini/image.d.ts +1 -0
- package/dist/clis/gemini/image.js +105 -0
- package/dist/clis/gemini/new.d.ts +1 -0
- package/dist/clis/gemini/new.js +20 -0
- package/dist/clis/gemini/utils.d.ts +34 -0
- package/dist/clis/gemini/utils.js +463 -0
- package/dist/clis/gemini/utils.test.d.ts +1 -0
- package/dist/clis/gemini/utils.test.js +31 -0
- package/dist/clis/notebooklm/compat.test.d.ts +1 -1
- package/dist/clis/notebooklm/compat.test.js +3 -3
- package/dist/clis/notebooklm/current.js +2 -3
- package/dist/clis/notebooklm/get.js +2 -3
- package/dist/clis/notebooklm/history.js +2 -3
- package/dist/clis/notebooklm/note-list.js +2 -3
- package/dist/clis/notebooklm/notes-get.js +2 -3
- package/dist/clis/notebooklm/open.d.ts +1 -0
- package/dist/clis/notebooklm/open.js +41 -0
- package/dist/clis/notebooklm/open.test.d.ts +1 -0
- package/dist/clis/notebooklm/open.test.js +63 -0
- package/dist/clis/notebooklm/source-fulltext.js +2 -3
- package/dist/clis/notebooklm/source-get.js +2 -3
- package/dist/clis/notebooklm/source-guide.js +2 -3
- package/dist/clis/notebooklm/source-list.js +2 -3
- package/dist/clis/notebooklm/status.js +1 -2
- package/dist/clis/notebooklm/summary.js +2 -3
- package/dist/clis/notebooklm/utils.d.ts +2 -1
- package/dist/clis/notebooklm/utils.js +20 -21
- package/dist/clis/xiaohongshu/creator-note-detail.test.js +11 -11
- package/dist/clis/xiaohongshu/creator-notes-summary.test.js +6 -6
- package/dist/clis/xiaohongshu/creator-notes.test.js +22 -22
- package/dist/commanderAdapter.js +6 -3
- package/dist/commanderAdapter.test.js +33 -0
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/daemon.test.js +1 -1
- package/dist/doctor.d.ts +1 -2
- package/dist/doctor.js +7 -8
- package/dist/explore.js +1 -1
- package/dist/extension-manifest-regression.test.js +1 -0
- package/dist/output.js +28 -0
- package/dist/output.test.js +15 -0
- package/dist/pipeline/executor.js +2 -7
- package/dist/pipeline/steps/browser.js +1 -1
- package/dist/pipeline/template.js +25 -3
- package/dist/record.d.ts +50 -0
- package/dist/record.js +298 -57
- package/dist/record.test.d.ts +1 -0
- package/dist/record.test.js +293 -0
- package/dist/registry.d.ts +2 -0
- package/dist/registry.js +1 -0
- package/dist/registry.test.js +10 -0
- package/dist/runtime.js +3 -3
- package/dist/snapshotFormatter.d.ts +1 -1
- package/dist/snapshotFormatter.js +4 -4
- package/dist/snapshotFormatter.test.d.ts +1 -1
- package/dist/snapshotFormatter.test.js +2 -2
- package/dist/types.d.ts +3 -1
- package/dist/types.js +1 -1
- package/docs/.vitepress/config.mts +2 -0
- package/docs/adapters/browser/amazon.md +53 -0
- package/docs/adapters/browser/gemini.md +72 -0
- package/docs/adapters/browser/notebooklm.md +5 -5
- package/docs/adapters/index.md +3 -1
- package/extension/dist/background.js +614 -794
- package/extension/manifest.json +2 -1
- package/extension/src/background.test.ts +7 -163
- package/extension/src/background.ts +7 -156
- package/extension/src/cdp.test.ts +75 -0
- package/extension/src/cdp.ts +77 -3
- package/extension/src/protocol.ts +1 -5
- package/package.json +1 -1
- package/skills/opencli-explorer/SKILL.md +847 -0
- package/skills/opencli-oneshot/SKILL.md +216 -0
- package/skills/opencli-usage/SKILL.md +71 -0
- package/skills/opencli-usage/browser.md +429 -0
- package/skills/opencli-usage/desktop.md +118 -0
- package/skills/opencli-usage/plugins.md +82 -0
- package/skills/opencli-usage/public-api.md +149 -0
- package/src/browser/base-page.ts +197 -0
- package/src/browser/cdp.ts +7 -131
- package/src/browser/daemon-client.ts +3 -14
- package/src/browser/discover.ts +1 -4
- package/src/browser/errors.ts +22 -0
- package/src/browser/index.ts +1 -1
- package/src/browser/page.ts +13 -212
- package/src/browser/tabs.ts +5 -5
- package/src/browser.test.ts +15 -15
- package/src/clis/amazon/bestsellers.test.ts +22 -0
- package/src/clis/amazon/bestsellers.ts +180 -0
- package/src/clis/amazon/discussion.test.ts +38 -0
- package/src/clis/amazon/discussion.ts +131 -0
- package/src/clis/amazon/offer.test.ts +35 -0
- package/src/clis/amazon/offer.ts +185 -0
- package/src/clis/amazon/product.test.ts +26 -0
- package/src/clis/amazon/product.ts +131 -0
- package/src/clis/amazon/search.test.ts +24 -0
- package/src/clis/amazon/search.ts +128 -0
- package/src/clis/amazon/shared.test.ts +37 -0
- package/src/clis/amazon/shared.ts +316 -0
- package/src/clis/gemini/ask.ts +46 -0
- package/src/clis/gemini/image.ts +115 -0
- package/src/clis/gemini/new.ts +22 -0
- package/src/clis/gemini/utils.test.ts +36 -0
- package/src/clis/gemini/utils.ts +523 -0
- package/src/clis/notebooklm/compat.test.ts +3 -3
- package/src/clis/notebooklm/current.ts +2 -3
- package/src/clis/notebooklm/get.ts +1 -3
- package/src/clis/notebooklm/history.ts +1 -3
- package/src/clis/notebooklm/note-list.ts +1 -3
- package/src/clis/notebooklm/notes-get.ts +1 -3
- package/src/clis/notebooklm/open.test.ts +78 -0
- package/src/clis/notebooklm/open.ts +61 -0
- package/src/clis/notebooklm/source-fulltext.ts +1 -3
- package/src/clis/notebooklm/source-get.ts +1 -3
- package/src/clis/notebooklm/source-guide.ts +1 -3
- package/src/clis/notebooklm/source-list.ts +1 -3
- package/src/clis/notebooklm/status.ts +1 -2
- package/src/clis/notebooklm/summary.ts +1 -3
- package/src/clis/notebooklm/utils.ts +29 -20
- package/src/clis/xiaohongshu/creator-note-detail.test.ts +11 -11
- package/src/clis/xiaohongshu/creator-notes-summary.test.ts +6 -6
- package/src/clis/xiaohongshu/creator-notes.test.ts +22 -22
- package/src/commanderAdapter.test.ts +47 -0
- package/src/commanderAdapter.ts +7 -3
- package/src/commands/daemon.test.ts +1 -1
- package/src/commands/daemon.ts +1 -1
- package/src/doctor.ts +7 -8
- package/src/explore.ts +1 -1
- package/src/extension-manifest-regression.test.ts +1 -0
- package/src/output.test.ts +17 -0
- package/src/output.ts +27 -0
- package/src/pipeline/executor.ts +2 -7
- package/src/pipeline/steps/browser.ts +1 -1
- package/src/pipeline/template.ts +27 -4
- package/src/record.test.ts +362 -0
- package/src/record.ts +341 -62
- package/src/registry.test.ts +12 -0
- package/src/registry.ts +3 -0
- package/src/runtime.ts +3 -3
- package/src/snapshotFormatter.test.ts +2 -2
- package/src/snapshotFormatter.ts +4 -4
- package/src/types.ts +3 -1
- package/.agents/skills/cross-project-adapter-migration/SKILL.md +0 -249
- package/.agents/workflows/cross-project-adapter-migration.md +0 -54
- package/SKILL.md +0 -879
- package/dist/clis/notebooklm/bind-current.js +0 -29
- package/dist/clis/notebooklm/bind-current.test.d.ts +0 -1
- package/dist/clis/notebooklm/bind-current.test.js +0 -35
- package/dist/clis/notebooklm/binding.test.js +0 -44
- package/src/clis/notebooklm/bind-current.test.ts +0 -43
- package/src/clis/notebooklm/bind-current.ts +0 -36
- package/src/clis/notebooklm/binding.test.ts +0 -53
- /package/dist/browser/{mcp.d.ts → bridge.d.ts} +0 -0
- /package/dist/browser/{mcp.js → bridge.js} +0 -0
- /package/dist/clis/{notebooklm/bind-current.d.ts → amazon/bestsellers.test.d.ts} +0 -0
- /package/dist/clis/{notebooklm/binding.test.d.ts → amazon/discussion.test.d.ts} +0 -0
- /package/src/browser/{mcp.ts → bridge.ts} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# CLI-ONESHOT — 单点快速 CLI 生成
|
|
2
|
+
|
|
3
|
+
> 给一个 URL + 一句话描述,4 步生成一个 CLI 命令。
|
|
4
|
+
> 完整探索式开发请看 [CLI-EXPLORER.md](./CLI-EXPLORER.md)。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 输入
|
|
9
|
+
|
|
10
|
+
| 项目 | 示例 |
|
|
11
|
+
|------|------|
|
|
12
|
+
| **URL** | `https://x.com/jakevin7/lists` |
|
|
13
|
+
| **Goal** | 获取我的 Twitter Lists |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 流程
|
|
18
|
+
|
|
19
|
+
### Step 1: 打开页面 + 抓包
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
1. browser_navigate → 打开目标 URL
|
|
23
|
+
2. 等待 3-5 秒(让页面加载完、API 请求触发)
|
|
24
|
+
3. browser_network_requests → 筛选 JSON API
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**关键**:只关注返回 `application/json` 的请求,忽略静态资源。
|
|
28
|
+
如果没有自动触发 API,手动点击目标按钮/标签再抓一次。
|
|
29
|
+
|
|
30
|
+
### Step 2: 锁定一个接口
|
|
31
|
+
|
|
32
|
+
从抓包结果中找到**那个**目标 API。看这几个字段:
|
|
33
|
+
|
|
34
|
+
| 字段 | 关注什么 |
|
|
35
|
+
|------|----------|
|
|
36
|
+
| URL | API 路径 pattern(如 `/i/api/graphql/xxx/ListsManagePinTimeline`) |
|
|
37
|
+
| Method | GET / POST |
|
|
38
|
+
| Headers | 有 Cookie? Bearer? CSRF? 自定义签名? |
|
|
39
|
+
| Response | 数据在哪个路径(如 `data.list.lists`) |
|
|
40
|
+
|
|
41
|
+
### Step 3: 验证接口能复现
|
|
42
|
+
|
|
43
|
+
在 `browser_evaluate` 中用 `fetch` 复现请求:
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// Tier 2 (Cookie): 大多数情况
|
|
47
|
+
fetch('/api/endpoint', { credentials: 'include' }).then(r => r.json())
|
|
48
|
+
|
|
49
|
+
// Tier 3 (Header): 如 Twitter 需要额外 header
|
|
50
|
+
const ct0 = document.cookie.match(/ct0=([^;]+)/)?.[1];
|
|
51
|
+
fetch('/api/endpoint', {
|
|
52
|
+
headers: { 'Authorization': 'Bearer ...', 'X-Csrf-Token': ct0 },
|
|
53
|
+
credentials: 'include'
|
|
54
|
+
}).then(r => r.json())
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
如果 fetch 能拿到数据 → 用 YAML 或简单 TS adapter。
|
|
58
|
+
如果 fetch 拿不到(签名/风控)→ 用 intercept 策略。
|
|
59
|
+
|
|
60
|
+
### Step 4: 套模板,生成 adapter
|
|
61
|
+
|
|
62
|
+
根据 Step 3 判定的策略,选一个模板生成文件。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 认证速查
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
fetch(url) 直接能拿到? → Tier 1: public (YAML, browser: false)
|
|
70
|
+
fetch(url, {credentials:'include'})? → Tier 2: cookie (YAML)
|
|
71
|
+
加 Bearer/CSRF header 后拿到? → Tier 3: header (TS)
|
|
72
|
+
都不行,但页面自己能请求成功? → Tier 4: intercept (TS, installInterceptor)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 模板
|
|
78
|
+
|
|
79
|
+
### YAML — Cookie/Public(最简)
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
# src/clis/<site>/<name>.yaml
|
|
83
|
+
site: mysite
|
|
84
|
+
name: mycommand
|
|
85
|
+
description: "一句话描述"
|
|
86
|
+
domain: www.example.com
|
|
87
|
+
strategy: cookie # 或 public (加 browser: false)
|
|
88
|
+
|
|
89
|
+
args:
|
|
90
|
+
limit:
|
|
91
|
+
type: int
|
|
92
|
+
default: 20
|
|
93
|
+
|
|
94
|
+
pipeline:
|
|
95
|
+
- navigate: https://www.example.com/target-page
|
|
96
|
+
|
|
97
|
+
- evaluate: |
|
|
98
|
+
(async () => {
|
|
99
|
+
const res = await fetch('/api/target', { credentials: 'include' });
|
|
100
|
+
const d = await res.json();
|
|
101
|
+
return (d.data?.items || []).map(item => ({
|
|
102
|
+
title: item.title,
|
|
103
|
+
value: item.value,
|
|
104
|
+
}));
|
|
105
|
+
})()
|
|
106
|
+
|
|
107
|
+
- map:
|
|
108
|
+
rank: ${{ index + 1 }}
|
|
109
|
+
title: ${{ item.title }}
|
|
110
|
+
value: ${{ item.value }}
|
|
111
|
+
|
|
112
|
+
- limit: ${{ args.limit }}
|
|
113
|
+
|
|
114
|
+
columns: [rank, title, value]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### TS — Intercept(抓包模式)
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// src/clis/<site>/<name>.ts
|
|
121
|
+
import { cli, Strategy } from '../../registry.js';
|
|
122
|
+
|
|
123
|
+
cli({
|
|
124
|
+
site: 'mysite',
|
|
125
|
+
name: 'mycommand',
|
|
126
|
+
description: '一句话描述',
|
|
127
|
+
domain: 'www.example.com',
|
|
128
|
+
strategy: Strategy.INTERCEPT,
|
|
129
|
+
browser: true,
|
|
130
|
+
args: [
|
|
131
|
+
{ name: 'limit', type: 'int', default: 20 },
|
|
132
|
+
],
|
|
133
|
+
columns: ['rank', 'title', 'value'],
|
|
134
|
+
func: async (page, kwargs) => {
|
|
135
|
+
// 1. 导航
|
|
136
|
+
await page.goto('https://www.example.com/target-page');
|
|
137
|
+
await page.wait(3);
|
|
138
|
+
|
|
139
|
+
// 2. 注入拦截器(URL 子串匹配)
|
|
140
|
+
await page.installInterceptor('target-api-keyword');
|
|
141
|
+
|
|
142
|
+
// 3. 触发 API(滚动/点击)
|
|
143
|
+
await page.autoScroll({ times: 2, delayMs: 2000 });
|
|
144
|
+
|
|
145
|
+
// 4. 读取拦截的响应
|
|
146
|
+
const requests = await page.getInterceptedRequests();
|
|
147
|
+
if (!requests?.length) return [];
|
|
148
|
+
|
|
149
|
+
let results: any[] = [];
|
|
150
|
+
for (const req of requests) {
|
|
151
|
+
const items = req.data?.data?.items || [];
|
|
152
|
+
results.push(...items);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return results.slice(0, kwargs.limit).map((item, i) => ({
|
|
156
|
+
rank: i + 1,
|
|
157
|
+
title: item.title || '',
|
|
158
|
+
value: item.value || '',
|
|
159
|
+
}));
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### TS — Header(如 Twitter GraphQL)
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
import { cli, Strategy } from '../../registry.js';
|
|
168
|
+
|
|
169
|
+
cli({
|
|
170
|
+
site: 'twitter',
|
|
171
|
+
name: 'mycommand',
|
|
172
|
+
description: '一句话描述',
|
|
173
|
+
domain: 'x.com',
|
|
174
|
+
strategy: Strategy.HEADER,
|
|
175
|
+
browser: true,
|
|
176
|
+
args: [
|
|
177
|
+
{ name: 'limit', type: 'int', default: 20 },
|
|
178
|
+
],
|
|
179
|
+
columns: ['rank', 'name', 'value'],
|
|
180
|
+
func: async (page, kwargs) => {
|
|
181
|
+
await page.goto('https://x.com');
|
|
182
|
+
const data = await page.evaluate(`(async () => {
|
|
183
|
+
const ct0 = document.cookie.match(/ct0=([^;]+)/)?.[1];
|
|
184
|
+
if (!ct0) return { error: 'Not logged in' };
|
|
185
|
+
const bearer = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D...';
|
|
186
|
+
const res = await fetch('/i/api/graphql/QUERY_ID/Endpoint', {
|
|
187
|
+
headers: {
|
|
188
|
+
'Authorization': 'Bearer ' + decodeURIComponent(bearer),
|
|
189
|
+
'X-Csrf-Token': ct0,
|
|
190
|
+
'X-Twitter-Auth-Type': 'OAuth2Session',
|
|
191
|
+
},
|
|
192
|
+
credentials: 'include',
|
|
193
|
+
});
|
|
194
|
+
return res.json();
|
|
195
|
+
})()`);
|
|
196
|
+
// 解析 data...
|
|
197
|
+
return [];
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 测试(必做)
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
npm run build # 语法检查
|
|
208
|
+
opencli list | grep mysite # 确认注册
|
|
209
|
+
opencli mysite mycommand --limit 3 -v # 实际运行
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 就这样,没了
|
|
215
|
+
|
|
216
|
+
写完文件 → build → run → 提交。有问题再看 [CLI-EXPLORER.md](./CLI-EXPLORER.md)。
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opencli-usage
|
|
3
|
+
description: "OpenCLI usage guide — installation, prerequisites, and command reference organized by platform"
|
|
4
|
+
version: 1.5.9
|
|
5
|
+
author: jackwener
|
|
6
|
+
tags: [cli, browser, web, chrome-extension, cdp, AI, agent]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# OpenCLI Usage Guide
|
|
10
|
+
|
|
11
|
+
> Make any website or Electron App your CLI. Reuse Chrome login, zero risk, AI-powered discovery.
|
|
12
|
+
|
|
13
|
+
## Install & Run
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# npm global install (recommended)
|
|
17
|
+
npm install -g @jackwener/opencli
|
|
18
|
+
opencli <command>
|
|
19
|
+
|
|
20
|
+
# Or from source
|
|
21
|
+
cd ~/code/opencli && npm install
|
|
22
|
+
npx tsx src/main.ts <command>
|
|
23
|
+
|
|
24
|
+
# Update to latest
|
|
25
|
+
npm update -g @jackwener/opencli
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Prerequisites
|
|
29
|
+
|
|
30
|
+
Browser commands require:
|
|
31
|
+
1. Chrome browser running **(logged into target sites)**
|
|
32
|
+
2. **opencli Browser Bridge** Chrome extension installed (load `extension/` as unpacked in `chrome://extensions`)
|
|
33
|
+
3. No further setup needed — the daemon auto-starts on first browser command
|
|
34
|
+
|
|
35
|
+
> **Note**: You must be logged into the target website in Chrome before running commands. Tabs opened during command execution are auto-closed afterwards.
|
|
36
|
+
|
|
37
|
+
Public API commands (`hackernews`, `v2ex`) need no browser.
|
|
38
|
+
|
|
39
|
+
## Command Categories
|
|
40
|
+
|
|
41
|
+
OpenCLI commands are organized by platform type:
|
|
42
|
+
|
|
43
|
+
### 📱 Browser-based Commands
|
|
44
|
+
Commands that require Chrome browser with login state. See [browser.md](./browser.md) for full reference.
|
|
45
|
+
|
|
46
|
+
**Supported platforms:**
|
|
47
|
+
- Bilibili (哔哩哔哩), Zhihu (知乎), Xiaohongshu (小红书), Xueqiu (雪球)
|
|
48
|
+
- Twitter/X, Reddit, Facebook, Instagram, TikTok, LinkedIn
|
|
49
|
+
- YouTube, Medium, Substack, Sinablog (新浪博客)
|
|
50
|
+
- V2EX (browser features), Weibo (微博), Jike (即刻), Linux.do (browser features)
|
|
51
|
+
- BOSS直聘, Coupang (쿠팡), JD (京东), SMZDM (什么值得买), Ctrip (携程)
|
|
52
|
+
- Yahoo Finance, Sina Finance, Reuters, Barchart, Bloomberg (full article)
|
|
53
|
+
- Douban (豆瓣), Chaoxing (超星学习通), WeRead (微信读书), Pixiv
|
|
54
|
+
- Yollomi, Jimeng (即梦 AI), Web, Weixin (微信公众号)
|
|
55
|
+
- Grok, Doubao Web (豆包), Kimi, DeepSeek, Qwen (通义千问)
|
|
56
|
+
|
|
57
|
+
### 🖥️ Desktop Adapter Commands
|
|
58
|
+
Commands that interact with desktop applications via CDP or external CLI tools. See [desktop.md](./desktop.md) for full reference.
|
|
59
|
+
|
|
60
|
+
**Supported platforms:**
|
|
61
|
+
- GitHub (via gh CLI), Cursor, Codex, ChatGPT, ChatWise
|
|
62
|
+
- Notion, Discord App, Doubao App (豆包桌面版), Antigravity
|
|
63
|
+
|
|
64
|
+
### 🌐 Public API Commands
|
|
65
|
+
Commands that work without browser or authentication. See [public-api.md](./public-api.md) for full reference.
|
|
66
|
+
|
|
67
|
+
**Supported platforms:**
|
|
68
|
+
- Hacker News, V2EX (public features), BBC News, Sina Finance
|
|
69
|
+
- Lobsters, Google, DEV.to, Steam, Apple Podcasts
|
|
70
|
+
- arXiv, Bloomberg (RSS), Dictionary, HuggingFace
|
|
71
|
+
- StackOverflow, Xiaoyuzhou (小宇宙), Wikipedia, Product Hunt
|