@zenalexa/unicli 0.213.3 → 0.215.1
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/AGENTS.md +16 -14
- package/README.md +206 -61
- package/README.zh-CN.md +166 -69
- package/dist/adapters/_electron/desktop-shared.d.ts +12 -0
- package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -0
- package/dist/adapters/_electron/desktop-shared.js +312 -0
- package/dist/adapters/_electron/desktop-shared.js.map +1 -0
- package/dist/adapters/electron-desktop/electron-desktop.d.ts +9 -0
- package/dist/adapters/electron-desktop/electron-desktop.d.ts.map +1 -0
- package/dist/adapters/electron-desktop/electron-desktop.js +56 -0
- package/dist/adapters/electron-desktop/electron-desktop.js.map +1 -0
- package/dist/agents/backends.d.ts +42 -0
- package/dist/agents/backends.d.ts.map +1 -0
- package/dist/agents/backends.js +598 -0
- package/dist/agents/backends.js.map +1 -0
- package/dist/agents/editor-backends.d.ts +3 -0
- package/dist/agents/editor-backends.d.ts.map +1 -0
- package/dist/agents/editor-backends.js +70 -0
- package/dist/agents/editor-backends.js.map +1 -0
- package/dist/browser/adapter-authoring.d.ts +20 -0
- package/dist/browser/adapter-authoring.d.ts.map +1 -0
- package/dist/browser/adapter-authoring.js +68 -0
- package/dist/browser/adapter-authoring.js.map +1 -0
- package/dist/browser/analyze.d.ts +54 -0
- package/dist/browser/analyze.d.ts.map +1 -0
- package/dist/browser/analyze.js +205 -0
- package/dist/browser/analyze.js.map +1 -0
- package/dist/browser/bridge.d.ts +1 -1
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +2 -0
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/daemon-client.d.ts.map +1 -1
- package/dist/browser/daemon-client.js +12 -1
- package/dist/browser/daemon-client.js.map +1 -1
- package/dist/browser/network-cache.d.ts +58 -0
- package/dist/browser/network-cache.d.ts.map +1 -0
- package/dist/browser/network-cache.js +146 -0
- package/dist/browser/network-cache.js.map +1 -0
- package/dist/browser/page.d.ts +1 -1
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +2 -1
- package/dist/browser/page.js.map +1 -1
- package/dist/browser/protocol.d.ts +6 -2
- package/dist/browser/protocol.d.ts.map +1 -1
- package/dist/browser/site-memory.d.ts +57 -0
- package/dist/browser/site-memory.d.ts.map +1 -0
- package/dist/browser/site-memory.js +127 -0
- package/dist/browser/site-memory.js.map +1 -0
- package/dist/browser/verify-fixture.d.ts +30 -0
- package/dist/browser/verify-fixture.d.ts.map +1 -0
- package/dist/browser/verify-fixture.js +168 -0
- package/dist/browser/verify-fixture.js.map +1 -0
- package/dist/browser/workspace.d.ts +8 -0
- package/dist/browser/workspace.d.ts.map +1 -0
- package/dist/browser/workspace.js +15 -0
- package/dist/browser/workspace.js.map +1 -0
- package/dist/commands/acp.d.ts +5 -0
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +20 -17
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/agents-backends.d.ts +6 -0
- package/dist/commands/agents-backends.d.ts.map +1 -0
- package/dist/commands/agents-backends.js +49 -0
- package/dist/commands/agents-backends.js.map +1 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +3 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/browser-adapter-authoring.d.ts +3 -0
- package/dist/commands/browser-adapter-authoring.d.ts.map +1 -0
- package/dist/commands/browser-adapter-authoring.js +206 -0
- package/dist/commands/browser-adapter-authoring.js.map +1 -0
- package/dist/commands/browser-authoring-operator.d.ts +3 -0
- package/dist/commands/browser-authoring-operator.d.ts.map +1 -0
- package/dist/commands/browser-authoring-operator.js +110 -0
- package/dist/commands/browser-authoring-operator.js.map +1 -0
- package/dist/commands/browser-operator-runtime.d.ts +38 -0
- package/dist/commands/browser-operator-runtime.d.ts.map +1 -0
- package/dist/commands/browser-operator-runtime.js +281 -0
- package/dist/commands/browser-operator-runtime.js.map +1 -0
- package/dist/commands/browser-operator.d.ts +6 -0
- package/dist/commands/browser-operator.d.ts.map +1 -0
- package/dist/commands/browser-operator.js +374 -0
- package/dist/commands/browser-operator.js.map +1 -0
- package/dist/commands/browser.d.ts.map +1 -1
- package/dist/commands/browser.js +72 -1
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +40 -4
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/explore.d.ts.map +1 -1
- package/dist/commands/explore.js +4 -1
- package/dist/commands/explore.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +4 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +14 -14
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate-schema.d.ts.map +1 -1
- package/dist/commands/migrate-schema.js +10 -0
- package/dist/commands/migrate-schema.js.map +1 -1
- package/dist/commands/operate.d.ts +4 -3
- package/dist/commands/operate.d.ts.map +1 -1
- package/dist/commands/operate.js +8 -483
- package/dist/commands/operate.js.map +1 -1
- package/dist/commands/record.d.ts.map +1 -1
- package/dist/commands/record.js +2 -1
- package/dist/commands/record.js.map +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/skills.js +1 -1
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/synthesize.d.ts.map +1 -1
- package/dist/commands/synthesize.js +33 -3
- package/dist/commands/synthesize.js.map +1 -1
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +76 -1
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +3 -1
- package/dist/discovery/loader.js.map +1 -1
- package/dist/electron-apps.d.ts +22 -0
- package/dist/electron-apps.d.ts.map +1 -1
- package/dist/electron-apps.js +324 -0
- package/dist/electron-apps.js.map +1 -1
- package/dist/engine/download.d.ts.map +1 -1
- package/dist/engine/download.js +12 -5
- package/dist/engine/download.js.map +1 -1
- package/dist/engine/repair/engine.js +2 -2
- package/dist/engine/repair/engine.js.map +1 -1
- package/dist/engine/steps/desktop-ax.d.ts +10 -0
- package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
- package/dist/engine/steps/desktop-ax.js +20 -0
- package/dist/engine/steps/desktop-ax.js.map +1 -1
- package/dist/engine/steps/exec.d.ts +1 -1
- package/dist/engine/steps/exec.d.ts.map +1 -1
- package/dist/engine/steps/exec.js +20 -1
- package/dist/engine/steps/exec.js.map +1 -1
- package/dist/engine/steps/write-temp.js +1 -1
- package/dist/engine/steps/write-temp.js.map +1 -1
- package/dist/engine/template.d.ts.map +1 -1
- package/dist/engine/template.js +10 -2
- package/dist/engine/template.js.map +1 -1
- package/dist/main.js +12 -3
- package/dist/main.js.map +1 -1
- package/dist/manifest-compact.txt +8 -7
- package/dist/manifest-search.json +1 -1
- package/dist/manifest.json +2161 -171
- package/dist/mcp/http-transport.d.ts.map +1 -1
- package/dist/mcp/http-transport.js +3 -6
- package/dist/mcp/http-transport.js.map +1 -1
- package/dist/mcp/streamable-http/handle-post.js +1 -1
- package/dist/mcp/tools.d.ts +2 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +8 -4
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/envelope.d.ts +1 -5
- package/dist/output/envelope.d.ts.map +1 -1
- package/dist/output/envelope.js +1 -5
- package/dist/output/envelope.js.map +1 -1
- package/dist/output/formatter.d.ts +2 -2
- package/dist/output/formatter.js +3 -3
- package/dist/output/formatter.js.map +1 -1
- package/dist/transport/adapters/cua.d.ts +9 -10
- package/dist/transport/adapters/cua.d.ts.map +1 -1
- package/dist/transport/adapters/cua.js +22 -24
- package/dist/transport/adapters/cua.js.map +1 -1
- package/dist/transport/adapters/desktop-atspi.d.ts +1 -1
- package/dist/transport/adapters/desktop-atspi.js +2 -2
- package/dist/transport/adapters/desktop-atspi.js.map +1 -1
- package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts +11 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.js +136 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click.d.ts +4 -0
- package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click.js +70 -0
- package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts +56 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-swift.js +458 -0
- package/dist/transport/adapters/desktop-ax-swift.js.map +1 -0
- package/dist/transport/adapters/desktop-ax.d.ts +14 -0
- package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-ax.js +262 -32
- package/dist/transport/adapters/desktop-ax.js.map +1 -1
- package/dist/transport/adapters/desktop-uia.d.ts +1 -1
- package/dist/transport/adapters/desktop-uia.js +2 -2
- package/dist/transport/adapters/desktop-uia.js.map +1 -1
- package/dist/transport/adapters/http.js +1 -1
- package/dist/transport/adapters/http.js.map +1 -1
- package/dist/transport/capability.d.ts +1 -1
- package/dist/transport/capability.d.ts.map +1 -1
- package/dist/transport/capability.js +6 -1
- package/dist/transport/capability.js.map +1 -1
- package/package.json +6 -2
- package/src/adapters/_electron/desktop-shared.ts +383 -0
- package/src/adapters/docker/build.yaml +1 -1
- package/src/adapters/docker/images.yaml +1 -1
- package/src/adapters/docker/logs.yaml +1 -1
- package/src/adapters/docker/networks.yaml +1 -1
- package/src/adapters/docker/ps.yaml +1 -1
- package/src/adapters/docker/run.yaml +1 -1
- package/src/adapters/docker/volumes.yaml +1 -1
- package/src/adapters/electron-desktop/electron-desktop.ts +57 -0
- package/src/adapters/macos/caffeinate.yaml +2 -2
- package/src/adapters/macos/processes.yaml +3 -3
- package/src/adapters/macos/screen-recording.yaml +2 -2
- package/src/adapters/substack/trending.yaml +2 -1
- package/src/hub/external-clis.yaml +175 -0
package/AGENTS.md
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
<!-- IF YOU ARE AN AI AGENT: Read this file. It tells you everything you need.
|
|
4
4
|
Install: npm install -g @zenalexa/unicli
|
|
5
5
|
Discover: unicli search "your intent" (bilingual EN/ZH)
|
|
6
|
+
Agent routing: unicli agents matrix && unicli agents recommend <agent>
|
|
6
7
|
Run: unicli <site> <command> [args]
|
|
7
8
|
Output is structured Markdown by default (non-TTY + agent UA auto-detected). Use -f json for JSON. Errors are structured envelopes to stderr.
|
|
8
9
|
You can fix broken adapters yourself — read the Self-Repair section. -->
|
|
9
10
|
|
|
10
11
|
<!-- BEGIN COUNTS -->
|
|
11
12
|
|
|
12
|
-
> <!-- STATS:site_count -->
|
|
13
|
+
> <!-- STATS:site_count -->220<!-- /STATS --> sites, <!-- STATS:command_count -->1283<!-- /STATS --> commands, <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps, BM25 bilingual search. `npm install -g @zenalexa/unicli`
|
|
13
14
|
|
|
14
15
|
<!-- END COUNTS -->
|
|
15
16
|
|
|
@@ -34,29 +35,29 @@ npm install -g @zenalexa/unicli
|
|
|
34
35
|
|
|
35
36
|
## What You Can Do
|
|
36
37
|
|
|
37
|
-
### Web (
|
|
38
|
+
### Web (138+ sites)
|
|
38
39
|
|
|
39
|
-
**Chinese**: xiaohongshu (22), zhihu (21), bilibili (17), douyin (13), douban (12), v2ex (12), jike (10), linux-do (10), +
|
|
40
|
+
**Chinese**: xiaohongshu (22), zhihu (21), bilibili (17), douyin (13), douban (12), v2ex (12), jike (10), linux-do (10), +31 more (`unicli list`)
|
|
40
41
|
|
|
41
|
-
**International**: twitter (34), instagram (26), reddit (20), tiktok (16),
|
|
42
|
+
**International**: twitter (34), instagram (26), reddit (20), tiktok (16), discord-app (15), lesswrong (15), slack (14), boss (14), +36 more (`unicli list`)
|
|
42
43
|
|
|
43
|
-
**AI / ML**: notebooklm (15),
|
|
44
|
+
**AI / ML**: notebooklm (15), antigravity (14), chatgpt (14), chatwise (14), doubao-app (13), doubao-web (9), perplexity (8), claude (7), +13 more (`unicli list`)
|
|
44
45
|
|
|
45
46
|
**Finance**: xueqiu (12), sinafinance (5), barchart (4), eastmoney (4), binance (3), yahoo-finance (3), coinbase (2), futu (2)
|
|
46
47
|
|
|
47
|
-
**Developer**:
|
|
48
|
+
**Developer**: cursor (18), codex (15), vscode (10), docker-desktop (7), github-desktop (7), gitkraken (7), insomnia (7), postman (7), +16 more (`unicli list`)
|
|
48
49
|
|
|
49
50
|
**News**: bloomberg (10), hackernews (10), 36kr (5), bbc (4), reuters (4), ithome (3), cnn (2), infoq (2), +3 more (`unicli list`)
|
|
50
51
|
|
|
51
|
-
**Reference**:
|
|
52
|
+
**Reference**: netease-music (17), spotify (17), linear (10), imdb (7), bitwarden (7), todoist (7), wikipedia (5), google (4), +11 more (`unicli list`)
|
|
52
53
|
|
|
53
54
|
### macOS (58 cmds)
|
|
54
55
|
|
|
55
56
|
active-app, apps, apps-list, battery, bluetooth, brightness, caffeinate, calendar-create, calendar-list, calendar-today, clipboard, contacts-search, … (`unicli list --site macos`)
|
|
56
57
|
|
|
57
|
-
### Desktop (
|
|
58
|
+
### Desktop (25 apps)
|
|
58
59
|
|
|
59
|
-
freecad (15 cmds), blender (13 cmds), gimp (12 cmds), ffmpeg (11 cmds), audacity (8 cmds),
|
|
60
|
+
freecad (15 cmds), blender (13 cmds), gimp (12 cmds), ffmpeg (11 cmds), audacity (8 cmds), figma (8 cmds), docker (7 cmds), imagemagick (6 cmds), +17 more (`unicli list --category desktop`)
|
|
60
61
|
|
|
61
62
|
### Bridge (3 CLIs)
|
|
62
63
|
|
|
@@ -80,7 +81,7 @@ Sites requiring auth: bilibili, weibo, zhihu, twitter, xueqiu, zsxq, jike, werea
|
|
|
80
81
|
|
|
81
82
|
## Output Contract
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
Commands return v2 `AgentEnvelope` on stdout across adapter, core, ext/dev, and admin surfaces (`agents matrix/recommend/generate`, `auth`, `mcp`, `repair`, etc.). `mcp serve` and `acp` stay raw stdio protocol servers. Format auto-selected — pipe or set an agent UA env var for Markdown.
|
|
84
85
|
|
|
85
86
|
### Format auto-selection
|
|
86
87
|
|
|
@@ -193,21 +194,22 @@ Default tools: `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore`. A
|
|
|
193
194
|
## ACP (avante.nvim / Zed)
|
|
194
195
|
|
|
195
196
|
```bash
|
|
196
|
-
unicli acp #
|
|
197
|
+
unicli acp # ACP compatibility over stdio
|
|
197
198
|
```
|
|
198
199
|
|
|
199
|
-
|
|
200
|
+
ACP is an editor compatibility gateway, not the core runtime. Prefer `unicli agents recommend <agent>` for Claude Code, Codex, Cursor, OpenCode, Gemini, Qwen, Kiro, Aider, Goose, Cline, Roo, AgentAPI, etc.
|
|
200
201
|
|
|
201
202
|
## External CLI Passthrough
|
|
202
203
|
|
|
203
|
-
|
|
204
|
+
58 registered external CLIs. If installed on your system, they're available as top-level commands:
|
|
204
205
|
|
|
205
206
|
```bash
|
|
206
207
|
unicli ext list # Show all external CLIs + install status
|
|
208
|
+
unicli ext list --tag agent # Show coding-agent CLIs
|
|
207
209
|
unicli ext install <name> # Install an external CLI
|
|
208
210
|
unicli lark-cli calendar +agenda # Direct passthrough
|
|
209
211
|
```
|
|
210
212
|
|
|
211
213
|
## Version
|
|
212
214
|
|
|
213
|
-
0.
|
|
215
|
+
0.215.1 — Agent Backend Matrix
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- AGENT: npm install -g @zenalexa/unicli && unicli search "your intent" —
|
|
1
|
+
<!-- AGENT: npm install -g @zenalexa/unicli && unicli search "your intent" — 1283 commands across 220 sites. Markdown envelope by default; use -f json for JSON. Self-repairing YAML adapters. Bilingual EN/ZH search. See AGENTS.md for live counts. -->
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
|
|
@@ -10,23 +10,135 @@
|
|
|
10
10
|
|
|
11
11
|
<br><br>
|
|
12
12
|
|
|
13
|
-
**CLI
|
|
13
|
+
**One CLI that lets agents use websites, apps, and your computer.**
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Uni-CLI turns a plain-language task into a real command. Agents search, run it, get Markdown/JSON back, and can fix broken site adapters themselves.
|
|
16
16
|
|
|
17
17
|
<br>
|
|
18
18
|
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
<img src="https://img.shields.io/
|
|
19
|
+
<img src="https://readme-typing-svg.demolab.com?font=JetBrains+Mono&duration=2200&pause=700&color=6A5ACD¢er=true&vCenter=true&width=720&lines=Find+the+right+command;Run+real+sites+and+apps;Get+JSON+or+Markdown+back;Fix+adapters+without+waiting" alt="Find the right command. Run real sites and apps. Get JSON or Markdown back. Fix adapters without waiting.">
|
|
20
|
+
|
|
21
|
+
<br>
|
|
22
|
+
|
|
23
|
+
<a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=for-the-badge&color=cb3837&label=npm" alt="npm"></a>
|
|
24
|
+
<a href="https://github.com/olo-dot-io/Uni-CLI/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/olo-dot-io/Uni-CLI/ci.yml?style=for-the-badge&label=CI" alt="CI"></a>
|
|
25
|
+
<a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=for-the-badge" alt="license"></a>
|
|
26
|
+
<img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7160<!-- /STATS -->-44cc11?style=for-the-badge" alt="tests">
|
|
27
|
+
<img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=for-the-badge" alt="agent-reach ally">
|
|
28
|
+
|
|
29
|
+
<br>
|
|
30
|
+
|
|
31
|
+
<img src="https://img.shields.io/badge/<!-- STATS:site_count -->220<!-- /STATS -->_sites-111827?style=for-the-badge" alt="220 sites">
|
|
32
|
+
<img src="https://img.shields.io/badge/<!-- STATS:command_count -->1283<!-- /STATS -->_commands-0f766e?style=for-the-badge" alt="1283 commands">
|
|
33
|
+
<img src="https://img.shields.io/badge/58_CLI_bridges-7c3aed?style=for-the-badge" alt="58 CLI bridges">
|
|
34
|
+
<img src="https://img.shields.io/badge/v2_AgentEnvelope-2563eb?style=for-the-badge" alt="v2 AgentEnvelope">
|
|
35
|
+
<img src="https://img.shields.io/badge/self--repairing_YAML-f97316?style=for-the-badge" alt="self-repairing YAML">
|
|
24
36
|
|
|
25
37
|
<br><br>
|
|
26
38
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
<pre><code>npm install -g @zenalexa/unicli
|
|
40
|
+
unicli search "your intent"
|
|
41
|
+
unicli <site> <command> -f json</code></pre>
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<strong>Web / Social / Knowledge</strong><br>
|
|
47
|
+
<img src="https://img.shields.io/badge/X-000000?style=flat-square&logo=x&logoColor=white" alt="X">
|
|
48
|
+
<img src="https://img.shields.io/badge/Reddit-FF4500?style=flat-square&logo=reddit&logoColor=white" alt="Reddit">
|
|
49
|
+
<img src="https://img.shields.io/badge/Instagram-E4405F?style=flat-square&logo=instagram&logoColor=white" alt="Instagram">
|
|
50
|
+
<img src="https://img.shields.io/badge/TikTok-000000?style=flat-square&logo=tiktok&logoColor=white" alt="TikTok">
|
|
51
|
+
<img src="https://img.shields.io/badge/YouTube-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube">
|
|
52
|
+
<img src="https://img.shields.io/badge/Bilibili-00A1D6?style=flat-square&logo=bilibili&logoColor=white" alt="Bilibili">
|
|
53
|
+
<img src="https://img.shields.io/badge/Zhihu-0084FF?style=flat-square&logo=zhihu&logoColor=white" alt="Zhihu">
|
|
54
|
+
<img src="https://img.shields.io/badge/Weibo-E6162D?style=flat-square&logo=sinaweibo&logoColor=white" alt="Weibo">
|
|
55
|
+
<img src="https://img.shields.io/badge/Xiaohongshu-FF2442?style=flat-square&logoColor=white" alt="Xiaohongshu">
|
|
56
|
+
<img src="https://img.shields.io/badge/Douyin-000000?style=flat-square&logo=tiktok&logoColor=white" alt="Douyin">
|
|
57
|
+
<img src="https://img.shields.io/badge/Hacker%20News-FF6600?style=flat-square&logo=ycombinator&logoColor=white" alt="Hacker News">
|
|
58
|
+
<img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub">
|
|
59
|
+
<img src="https://img.shields.io/badge/Stack%20Overflow-F58025?style=flat-square&logo=stackoverflow&logoColor=white" alt="Stack Overflow">
|
|
60
|
+
<img src="https://img.shields.io/badge/Product%20Hunt-DA552F?style=flat-square&logo=producthunt&logoColor=white" alt="Product Hunt">
|
|
61
|
+
<img src="https://img.shields.io/badge/npm-CB3837?style=flat-square&logo=npm&logoColor=white" alt="npm">
|
|
62
|
+
<img src="https://img.shields.io/badge/PyPI-3775A9?style=flat-square&logo=pypi&logoColor=white" alt="PyPI">
|
|
63
|
+
<img src="https://img.shields.io/badge/Wikipedia-000000?style=flat-square&logo=wikipedia&logoColor=white" alt="Wikipedia">
|
|
64
|
+
<img src="https://img.shields.io/badge/Spotify-1DB954?style=flat-square&logo=spotify&logoColor=white" alt="Spotify">
|
|
65
|
+
<img src="https://img.shields.io/badge/IMDb-F5C518?style=flat-square&logo=imdb&logoColor=black" alt="IMDb">
|
|
66
|
+
<img src="https://img.shields.io/badge/Bloomberg-000000?style=flat-square&logoColor=white" alt="Bloomberg">
|
|
67
|
+
<img src="https://img.shields.io/badge/Reuters-FF8000?style=flat-square&logo=reuters&logoColor=white" alt="Reuters">
|
|
68
|
+
<img src="https://img.shields.io/badge/BBC-B80000?style=flat-square&logo=bbc&logoColor=white" alt="BBC">
|
|
69
|
+
<img src="https://img.shields.io/badge/Binance-F0B90B?style=flat-square&logo=binance&logoColor=black" alt="Binance">
|
|
70
|
+
<img src="https://img.shields.io/badge/Coinbase-0052FF?style=flat-square&logo=coinbase&logoColor=white" alt="Coinbase">
|
|
71
|
+
<img src="https://img.shields.io/badge/Yahoo%20Finance-6001D2?style=flat-square&logo=yahoo&logoColor=white" alt="Yahoo Finance">
|
|
72
|
+
<img src="https://img.shields.io/badge/Hugging%20Face-FFD21F?style=flat-square&logo=huggingface&logoColor=black" alt="Hugging Face">
|
|
73
|
+
</p>
|
|
74
|
+
|
|
75
|
+
<p align="center">
|
|
76
|
+
<strong>Agent / IDE / Coding Surfaces</strong><br>
|
|
77
|
+
<img src="https://img.shields.io/badge/Claude%20Code-D97757?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code">
|
|
78
|
+
<img src="https://img.shields.io/badge/Codex-111111?style=flat-square&logo=openai&logoColor=white" alt="Codex">
|
|
79
|
+
<img src="https://img.shields.io/badge/OpenCode-101010?style=flat-square&logoColor=white" alt="OpenCode">
|
|
80
|
+
<img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logoColor=white" alt="Cursor">
|
|
81
|
+
<img src="https://img.shields.io/badge/Kiro-FF9900?style=flat-square&logo=amazon&logoColor=black" alt="Kiro">
|
|
82
|
+
<img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=googlegemini&logoColor=white" alt="Gemini">
|
|
83
|
+
<img src="https://img.shields.io/badge/Qwen-1E88E5?style=flat-square&logoColor=white" alt="Qwen">
|
|
84
|
+
<img src="https://img.shields.io/badge/Kimi-6C5CE7?style=flat-square&logoColor=white" alt="Kimi">
|
|
85
|
+
<img src="https://img.shields.io/badge/MiniMax-00A6FB?style=flat-square&logoColor=white" alt="MiniMax">
|
|
86
|
+
<img src="https://img.shields.io/badge/Cline-6E56CF?style=flat-square&logoColor=white" alt="Cline">
|
|
87
|
+
<img src="https://img.shields.io/badge/Roo%20Code-2E7D32?style=flat-square&logoColor=white" alt="Roo Code">
|
|
88
|
+
<img src="https://img.shields.io/badge/Windsurf-00C2FF?style=flat-square&logoColor=white" alt="Windsurf">
|
|
89
|
+
<img src="https://img.shields.io/badge/Continue-000000?style=flat-square&logoColor=white" alt="Continue">
|
|
90
|
+
<img src="https://img.shields.io/badge/Aider-6F42C1?style=flat-square&logo=python&logoColor=white" alt="Aider">
|
|
91
|
+
<img src="https://img.shields.io/badge/Goose-111827?style=flat-square&logoColor=white" alt="Goose">
|
|
92
|
+
<img src="https://img.shields.io/badge/OpenHands-FF6B00?style=flat-square&logoColor=white" alt="OpenHands">
|
|
93
|
+
<img src="https://img.shields.io/badge/SWE--agent-0F172A?style=flat-square&logoColor=white" alt="SWE-agent">
|
|
94
|
+
<img src="https://img.shields.io/badge/GitHub%20Copilot-181717?style=flat-square&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
|
|
95
|
+
<img src="https://img.shields.io/badge/Amp-5B5BD6?style=flat-square&logoColor=white" alt="Amp">
|
|
96
|
+
<img src="https://img.shields.io/badge/Auggie-0EA5E9?style=flat-square&logoColor=white" alt="Auggie">
|
|
97
|
+
<img src="https://img.shields.io/badge/Crush-E11D48?style=flat-square&logoColor=white" alt="Crush">
|
|
98
|
+
<img src="https://img.shields.io/badge/AgentAPI-334155?style=flat-square&logoColor=white" alt="AgentAPI">
|
|
99
|
+
<img src="https://img.shields.io/badge/acpx-475569?style=flat-square&logoColor=white" alt="acpx">
|
|
100
|
+
</p>
|
|
101
|
+
|
|
102
|
+
<p align="center">
|
|
103
|
+
<strong>Desktop / Media / DevOps / Cloud</strong><br>
|
|
104
|
+
<img src="https://img.shields.io/badge/macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS">
|
|
105
|
+
<img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white" alt="Chrome">
|
|
106
|
+
<img src="https://img.shields.io/badge/Blender-F5792A?style=flat-square&logo=blender&logoColor=white" alt="Blender">
|
|
107
|
+
<img src="https://img.shields.io/badge/FFmpeg-007808?style=flat-square&logo=ffmpeg&logoColor=white" alt="FFmpeg">
|
|
108
|
+
<img src="https://img.shields.io/badge/ImageMagick-0074C1?style=flat-square&logoColor=white" alt="ImageMagick">
|
|
109
|
+
<img src="https://img.shields.io/badge/GIMP-5C5543?style=flat-square&logo=gimp&logoColor=white" alt="GIMP">
|
|
110
|
+
<img src="https://img.shields.io/badge/FreeCAD-729FCF?style=flat-square&logo=freecad&logoColor=white" alt="FreeCAD">
|
|
111
|
+
<img src="https://img.shields.io/badge/Audacity-0000CC?style=flat-square&logo=audacity&logoColor=white" alt="Audacity">
|
|
112
|
+
<img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
|
|
113
|
+
<img src="https://img.shields.io/badge/GitHub%20CLI-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub CLI">
|
|
114
|
+
<img src="https://img.shields.io/badge/jq-C7254E?style=flat-square&logo=json&logoColor=white" alt="jq">
|
|
115
|
+
<img src="https://img.shields.io/badge/yt--dlp-4A5568?style=flat-square&logo=youtube&logoColor=white" alt="yt-dlp">
|
|
116
|
+
<img src="https://img.shields.io/badge/AWS-232F3E?style=flat-square&logo=amazonaws&logoColor=white" alt="AWS">
|
|
117
|
+
<img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=vercel&logoColor=white" alt="Vercel">
|
|
118
|
+
<img src="https://img.shields.io/badge/Supabase-3ECF8E?style=flat-square&logo=supabase&logoColor=black" alt="Supabase">
|
|
119
|
+
<img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" alt="Cloudflare">
|
|
120
|
+
<img src="https://img.shields.io/badge/Stripe-635BFF?style=flat-square&logo=stripe&logoColor=white" alt="Stripe">
|
|
121
|
+
<img src="https://img.shields.io/badge/Firebase-FFCA28?style=flat-square&logo=firebase&logoColor=black" alt="Firebase">
|
|
122
|
+
<img src="https://img.shields.io/badge/Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white" alt="Netlify">
|
|
123
|
+
<img src="https://img.shields.io/badge/Railway-0B0D0E?style=flat-square&logo=railway&logoColor=white" alt="Railway">
|
|
124
|
+
<img src="https://img.shields.io/badge/Azure-0078D4?style=flat-square&logo=microsoftazure&logoColor=white" alt="Azure">
|
|
125
|
+
<img src="https://img.shields.io/badge/Google%20Cloud-4285F4?style=flat-square&logo=googlecloud&logoColor=white" alt="Google Cloud">
|
|
126
|
+
<img src="https://img.shields.io/badge/Twilio-F22F46?style=flat-square&logo=twilio&logoColor=white" alt="Twilio">
|
|
127
|
+
<img src="https://img.shields.io/badge/Resend-000000?style=flat-square&logo=resend&logoColor=white" alt="Resend">
|
|
128
|
+
<img src="https://img.shields.io/badge/Algolia-003DFF?style=flat-square&logo=algolia&logoColor=white" alt="Algolia">
|
|
129
|
+
<img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack">
|
|
130
|
+
<img src="https://img.shields.io/badge/Notion-000000?style=flat-square&logo=notion&logoColor=white" alt="Notion">
|
|
131
|
+
<img src="https://img.shields.io/badge/Linear-5E6AD2?style=flat-square&logo=linear&logoColor=white" alt="Linear">
|
|
132
|
+
<img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=figma&logoColor=white" alt="Figma">
|
|
133
|
+
</p>
|
|
134
|
+
|
|
135
|
+
<table>
|
|
136
|
+
<tr>
|
|
137
|
+
<td><strong>For people</strong><br>Install one binary and use hundreds of sites, apps, CLIs, and OS actions from the terminal.</td>
|
|
138
|
+
<td><strong>For agents</strong><br>Search for a task, run one command, parse one envelope, and repair the YAML when a site changes.</td>
|
|
139
|
+
<td><strong>For maintainers</strong><br>Keep adapters small, readable, testable, and overrideable in <code>~/.unicli/adapters/</code>.</td>
|
|
140
|
+
</tr>
|
|
141
|
+
</table>
|
|
30
142
|
|
|
31
143
|
<br>
|
|
32
144
|
|
|
@@ -38,17 +150,19 @@ npm install -g @zenalexa/unicli
|
|
|
38
150
|
|
|
39
151
|
## What
|
|
40
152
|
|
|
41
|
-
Uni-CLI is a universal interface that compiles agent intent into deterministic CLI programs. One binary reaches <!-- STATS:site_count -->
|
|
153
|
+
Uni-CLI is a universal interface that compiles agent intent into deterministic CLI programs. One binary reaches <!-- STATS:site_count -->220<!-- /STATS --> sites, 30+ desktop apps, 58 CLI bridges, and the local OS — <!-- STATS:command_count -->1283<!-- /STATS --> commands in total. Every adapter is a 20-line YAML pipeline, so agents can read, edit, and re-run them without a compiler.
|
|
42
154
|
|
|
43
|
-
Coverage is cross-cutting: web APIs and browser automation, desktop subprocesses (ffmpeg, Blender, LibreOffice), macOS system calls (screenshot, clipboard, Calendar), and
|
|
155
|
+
Coverage is cross-cutting: web APIs and browser automation, desktop subprocesses (ffmpeg, Blender, LibreOffice), macOS system calls (screenshot, clipboard, Calendar), macOS AX, and a pluggable CUA contract with mock/provider stubs — all behind the same `unicli <site> <command>` surface. Output is a v2 AgentEnvelope in Markdown by default; use `-f json` for JSON, `-f yaml` for YAML, or legacy `csv` / `compact` when needed. Errors include the adapter path, the failing step, and a suggestion — enough directional feedback for an agent to fix the adapter and retry.
|
|
44
156
|
|
|
45
157
|
Self-repair is a first-class capability. When a site changes its API, an agent reads the 20-line YAML, edits the selector or endpoint, saves to `~/.unicli/adapters/`, and retries. Fixes survive `npm update`. No human in the loop.
|
|
46
158
|
|
|
47
159
|
## Why
|
|
48
160
|
|
|
49
|
-
|
|
161
|
+
Large tool catalogs make agents pay before they act: descriptions, schemas, examples, auth notes, and edge cases all compete with task context. Uni-CLI keeps the catalog out of context by default. The agent searches by intent, receives one executable command, then gets a small v2 envelope with enough structure to retry or repair.
|
|
50
162
|
|
|
51
|
-
|
|
163
|
+
The agent stack is not converging on one universal runtime. It is converging on mixed native CLIs, JSON streams, MCP tool buses, editor-owned sessions, bridge control planes, and watchlist runtimes. Uni-CLI treats those as routes, not factions: native CLI/JSON/MCP first, editor gateways only where they are the right compatibility edge.
|
|
164
|
+
|
|
165
|
+
Uni-CLI is the execution layer for that world. The MCP server exposes 4 meta-tools (~200 tokens cold-start) — `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore` — and the agent pulls the exact tool it needs via BM25 bilingual search over a 50KB index. Direct shell access costs no tool-catalog tokens and one deterministic subprocess per call.
|
|
52
166
|
|
|
53
167
|
## Quick start
|
|
54
168
|
|
|
@@ -64,7 +178,7 @@ unicli search "推特热门" # → twitter trending (bilin
|
|
|
64
178
|
|
|
65
179
|
# 3. Run
|
|
66
180
|
unicli reddit hot --limit 3 # zero-config web API
|
|
67
|
-
unicli hackernews top
|
|
181
|
+
unicli hackernews top -f json | jq '.data[].title' # pipe + transform
|
|
68
182
|
|
|
69
183
|
# 4. Wire into an agent
|
|
70
184
|
claude mcp add unicli -- npx @zenalexa/unicli mcp serve # Claude Code (MCP stdio)
|
|
@@ -77,28 +191,43 @@ Full walkthrough with 5 worked examples: [`docs/QUICKSTART.md`](docs/QUICKSTART.
|
|
|
77
191
|
## Architecture
|
|
78
192
|
|
|
79
193
|
```mermaid
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
194
|
+
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Inter, ui-sans-serif, system-ui, sans-serif","primaryColor":"#eef2ff","primaryTextColor":"#111827","primaryBorderColor":"#6366f1","lineColor":"#64748b","secondaryColor":"#ecfeff","tertiaryColor":"#fff7ed"},"flowchart":{"curve":"basis","nodeSpacing":42,"rankSpacing":54}}}%%
|
|
195
|
+
flowchart LR
|
|
196
|
+
Intent["Agent intent<br/><code>推特热门</code> · <code>render scene</code>"]:::entry
|
|
197
|
+
Search["Intent search<br/>BM25 + TF-IDF<br/>50KB bilingual index"]:::core
|
|
198
|
+
Command["One command<br/><code>unicli <site> <command></code>"]:::core
|
|
199
|
+
Adapter["Adapter layer<br/><!-- STATS:adapter_count_yaml -->896<!-- /STATS --> YAML · <!-- STATS:adapter_count_ts -->77<!-- /STATS --> TS<br/>58 CLI bridges"]:::core
|
|
200
|
+
Engine["Pipeline engine<br/><!-- STATS:pipeline_step_count -->59<!-- /STATS --> steps<br/>fetch · navigate · exec · extract"]:::core
|
|
201
|
+
Envelope["v2 AgentEnvelope<br/>md · json · yaml · csv"]:::out
|
|
202
|
+
Repair["Self-repair loop<br/><code>adapter_path</code> · <code>step</code> · <code>suggestion</code>"]:::repair
|
|
203
|
+
|
|
204
|
+
subgraph Transports["Transport adapters"]
|
|
205
|
+
HTTP["HTTP / APIs"]:::transport
|
|
206
|
+
Browser["CDP browser"]:::transport
|
|
207
|
+
Process["Subprocess CLIs"]:::transport
|
|
208
|
+
Desktop["Desktop AX"]:::transport
|
|
209
|
+
CUA["CUA contract"]:::transport
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
Intent --> Search --> Command --> Adapter --> Engine
|
|
213
|
+
Engine --> HTTP
|
|
214
|
+
Engine --> Browser
|
|
215
|
+
Engine --> Process
|
|
216
|
+
Engine --> Desktop
|
|
217
|
+
Engine --> CUA
|
|
218
|
+
HTTP --> Envelope
|
|
219
|
+
Browser --> Envelope
|
|
220
|
+
Process --> Envelope
|
|
221
|
+
Desktop --> Envelope
|
|
222
|
+
CUA --> Envelope
|
|
223
|
+
Envelope -. failure gives direction .-> Repair
|
|
224
|
+
Repair -. persistent override .-> Adapter
|
|
225
|
+
|
|
226
|
+
classDef entry fill:#111827,color:#ffffff,stroke:#111827,stroke-width:2px;
|
|
227
|
+
classDef core fill:#eef2ff,color:#111827,stroke:#6366f1,stroke-width:1.5px;
|
|
228
|
+
classDef transport fill:#ecfeff,color:#0f172a,stroke:#0891b2,stroke-width:1.2px;
|
|
229
|
+
classDef out fill:#f0fdf4,color:#052e16,stroke:#16a34a,stroke-width:1.5px;
|
|
230
|
+
classDef repair fill:#fff7ed,color:#7c2d12,stroke:#f97316,stroke-width:1.5px;
|
|
102
231
|
```
|
|
103
232
|
|
|
104
233
|
Seven TransportAdapters, one adapter layer, one formatter. Adapters are declarative YAML by default (Rice-decidable, no imports) and TypeScript when a site genuinely needs it. The full step reference lives in [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md).
|
|
@@ -109,7 +238,7 @@ When a command breaks:
|
|
|
109
238
|
|
|
110
239
|
```
|
|
111
240
|
unicli <site> <cmd> fails
|
|
112
|
-
→ structured
|
|
241
|
+
→ structured error envelope on stderr
|
|
113
242
|
{ adapter_path, step, action, suggestion }
|
|
114
243
|
→ agent opens the ~20-line YAML
|
|
115
244
|
→ agent edits the selector / URL / auth
|
|
@@ -127,21 +256,22 @@ Exit codes follow `sysexits.h`: `0` ok, `66` empty, `69` unavailable, `75` tempo
|
|
|
127
256
|
|
|
128
257
|
## Feature matrix
|
|
129
258
|
|
|
130
|
-
| Capability | What it means
|
|
131
|
-
| ------------------------ |
|
|
132
|
-
| **CUA
|
|
133
|
-
| **MCP transports** | stdio · Streamable HTTP (spec 2025-11-25) · SSE · OAuth 2.1 PKCE
|
|
134
|
-
| **
|
|
135
|
-
| **
|
|
136
|
-
| **
|
|
137
|
-
| **
|
|
138
|
-
| **
|
|
259
|
+
| Capability | What it means |
|
|
260
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
261
|
+
| **CUA contract** | Stable screenshot/action interface with mock backend and explicit provider stubs; not marketed as real computer-use yet |
|
|
262
|
+
| **MCP transports** | stdio · Streamable HTTP (spec 2025-11-25) · SSE · OAuth 2.1 PKCE |
|
|
263
|
+
| **Agent backend matrix** | `unicli agents matrix/recommend` covers native CLIs, JSON streams, MCP sessions, bridges, editors, and watchlist agents |
|
|
264
|
+
| **ACP gateway** | `unicli acp` remains available for avante.nvim/Zed-style clients, not the core runtime |
|
|
265
|
+
| **Cross-vendor skills** | Skills in `skills/` work in Claude Code, OpenCode, Codex, Cursor, Cline |
|
|
266
|
+
| **Self-repair envelope** | Every error ships `adapter_path` + `step` + `suggestion` (Banach-convergent) |
|
|
267
|
+
| **Bilingual search** | BM25 + TF-IDF, 50KB index, <10ms queries, 200-entry ZH↔EN alias table |
|
|
268
|
+
| **Browser operator** | Extension-backed browser daemon with shared or isolated workspaces, background mode, bind/sessions |
|
|
139
269
|
|
|
140
|
-
|
|
270
|
+
Reproducible local benchmarks (p50/p95 token and latency by route): [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
|
|
141
271
|
|
|
142
272
|
## Platform coverage
|
|
143
273
|
|
|
144
|
-
<!-- STATS:site_count -->
|
|
274
|
+
<!-- STATS:site_count -->220<!-- /STATS --> sites · <!-- STATS:command_count -->1283<!-- /STATS --> commands — the live list is auto-generated in [`AGENTS.md`](AGENTS.md) and split by domain:
|
|
145
275
|
|
|
146
276
|
| Domain | Highlights |
|
|
147
277
|
| --------------------- | ----------------------------------------------------------------------- |
|
|
@@ -152,7 +282,7 @@ Detailed benchmarks (p50/p95 token cost per category, vs GitHub MCP cold-start):
|
|
|
152
282
|
| **AI / ML (14)** | huggingface, ollama, replicate, perplexity, deepseek, doubao |
|
|
153
283
|
| **Desktop (30+)** | blender, ffmpeg, imagemagick, gimp, freecad, musescore, kdenlive |
|
|
154
284
|
| **macOS system (58)** | screenshot, clipboard, Calendar, Mail, Reminders, Shortcuts, Safari |
|
|
155
|
-
| **CLI bridges (
|
|
285
|
+
| **CLI bridges (58)** | claude, codex, gemini, qwen, kiro, opencode, aider, goose, mini, amp |
|
|
156
286
|
|
|
157
287
|
Run `unicli list` for the live catalog, or `unicli list --category=<domain>` to filter.
|
|
158
288
|
|
|
@@ -167,11 +297,14 @@ Every major agent platform works out of the box:
|
|
|
167
297
|
| **Cursor** | MCP Settings → `unicli` → `npx @zenalexa/unicli mcp serve` | Bilingual search works inside Cursor chat |
|
|
168
298
|
| **avante.nvim** | `type = "acp", command = "unicli", args = { "acp" }` | See [`docs/AVANTE.md`](docs/AVANTE.md) |
|
|
169
299
|
| **OpenCode** | MCP via `opencode.jsonc` — `command: "unicli mcp serve"` | AGENTS.md auto-loaded |
|
|
170
|
-
| **
|
|
300
|
+
| **Kiro CLI** | Add `npx @zenalexa/unicli mcp serve` as an MCP server | Amazon Q CLI successor path |
|
|
301
|
+
| **Cline / Roo** | Add Uni-CLI in MCP settings | Editor owns the session |
|
|
171
302
|
|
|
172
303
|
Direct shell access (any agent with Bash or exec):
|
|
173
304
|
|
|
174
305
|
```bash
|
|
306
|
+
unicli agents matrix
|
|
307
|
+
unicli agents recommend cursor
|
|
175
308
|
unicli twitter search "AI agents"
|
|
176
309
|
unicli blender render scene.blend --output /tmp/frame.png
|
|
177
310
|
unicli macos screenshot --region 0,0,1920,1080
|
|
@@ -195,7 +328,20 @@ unicli auth check twitter # Validate cookie file
|
|
|
195
328
|
unicli auth list # All configured sites
|
|
196
329
|
```
|
|
197
330
|
|
|
198
|
-
The browser
|
|
331
|
+
The browser operator has two layers:
|
|
332
|
+
|
|
333
|
+
- `unicli browser start` manages a local Chrome/CDP launch path for cookie extraction and direct CDP use.
|
|
334
|
+
- `unicli browser ...` / `unicli daemon ...` route through the local browser daemon plus Browser Bridge extension, with explicit workspace reuse, `--daemon-port` multi-profile routing, background/focus controls, and live session diagnostics.
|
|
335
|
+
|
|
336
|
+
For agent-style interactive browsing, prefer:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
unicli browser open https://example.com
|
|
340
|
+
unicli browser state
|
|
341
|
+
unicli browser find --css "button, a"
|
|
342
|
+
unicli browser network --raw
|
|
343
|
+
unicli browser extract
|
|
344
|
+
```
|
|
199
345
|
|
|
200
346
|
## Write an adapter
|
|
201
347
|
|
|
@@ -232,7 +378,7 @@ unicli test <site> # Validate
|
|
|
232
378
|
unicli record <url> # Auto-generate adapter from traffic
|
|
233
379
|
```
|
|
234
380
|
|
|
235
|
-
Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md).
|
|
381
|
+
Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md). Existing YAML adapters can be imported with `unicli import opencli-yaml`.
|
|
236
382
|
|
|
237
383
|
## Search
|
|
238
384
|
|
|
@@ -247,9 +393,9 @@ unicli search --category finance # browse by category
|
|
|
247
393
|
|
|
248
394
|
BM25 + TF-IDF scoring with a 200-entry ZH↔EN alias table. The index is 50KB, queries complete in under 10ms.
|
|
249
395
|
|
|
250
|
-
##
|
|
396
|
+
## Design principles + benchmarks
|
|
251
397
|
|
|
252
|
-
The design rests on five principles
|
|
398
|
+
The design rests on five operational principles:
|
|
253
399
|
|
|
254
400
|
1. **Rice's restriction** — every adapter has decidable semantics (YAML pipeline, no Turing-complete logic).
|
|
255
401
|
2. **Lehman's mandate** — no adapter is permanent; self-repair is first-class.
|
|
@@ -257,7 +403,7 @@ The design rests on five principles, each tied to a citation in [`docs/refs.bib`
|
|
|
257
403
|
4. **Agent tool trilemma (original)** — coverage × accuracy × performance, pick two. We choose accuracy × performance.
|
|
258
404
|
5. **Banach convergence** — structured errors must provide directional feedback (`adapter_path` + `step` + `suggestion`) so repair iterations converge.
|
|
259
405
|
|
|
260
|
-
Full treatment
|
|
406
|
+
Full treatment: [`docs/THEORY.md`](docs/THEORY.md). Reproducible local benchmarks: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
|
|
261
407
|
|
|
262
408
|
## Development
|
|
263
409
|
|
|
@@ -273,11 +419,11 @@ npm run verify # typecheck + lint + test + build + stats check
|
|
|
273
419
|
| `npm run build` | Production build |
|
|
274
420
|
| `npm run typecheck` | TypeScript strict |
|
|
275
421
|
| `npm run lint` | Oxlint |
|
|
276
|
-
| `npm run test` | Unit tests (<!-- STATS:test_count -->
|
|
422
|
+
| `npm run test` | Unit tests (<!-- STATS:test_count -->7160<!-- /STATS -->) |
|
|
277
423
|
| `npm run test:adapter` | Validate all adapters |
|
|
278
424
|
| `npm run verify` | Full pipeline (7 gates) |
|
|
279
425
|
|
|
280
|
-
|
|
426
|
+
Eleven production dependencies: `ajv`, `ajv-formats`, `chalk`, `cli-table3`, `commander`, `js-yaml`, `jsonpath-plus`, `turndown`, `undici`, `ws`, `zod`.
|
|
281
427
|
|
|
282
428
|
## Release cadence
|
|
283
429
|
|
|
@@ -316,6 +462,5 @@ Repo: <https://github.com/olo-dot-io/Uni-CLI> · npm: [`@zenalexa/unicli`](https
|
|
|
316
462
|
</p>
|
|
317
463
|
|
|
318
464
|
<p align="center">
|
|
319
|
-
<sub>v0.
|
|
320
|
-
<sub><!-- STATS:site_count -->200<!-- /STATS --> sites · <!-- STATS:command_count -->968<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->54<!-- /STATS --> pipeline steps · BM25+TF-IDF bilingual search · MCP 2025-11-25 · <!-- STATS:test_count -->7083<!-- /STATS --> tests</sub>
|
|
465
|
+
<sub>v0.215.1</sub>
|
|
321
466
|
</p>
|