@zenalexa/unicli 0.215.0 → 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 +7 -5
- package/README.md +178 -46
- package/README.zh-CN.md +147 -50
- 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/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/main.js +12 -3
- package/dist/main.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/package.json +5 -1
- package/src/hub/external-clis.yaml +175 -0
package/AGENTS.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
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. -->
|
|
@@ -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.
|
|
215
|
+
0.215.1 — Agent Backend Matrix
|
package/README.md
CHANGED
|
@@ -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,7 +150,7 @@ 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 -->220<!-- /STATS --> sites, 30+ desktop apps,
|
|
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
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
|
|
|
@@ -46,9 +158,11 @@ Self-repair is a first-class capability. When a site changes its API, an agent r
|
|
|
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.
|
|
162
|
+
|
|
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.
|
|
50
164
|
|
|
51
|
-
Uni-CLI is the execution
|
|
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
|
|
|
@@ -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).
|
|
@@ -131,13 +260,14 @@ Exit codes follow `sysexits.h`: `0` ok, `66` empty, `69` unavailable, `75` tempo
|
|
|
131
260
|
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
132
261
|
| **CUA contract** | Stable screenshot/action interface with mock backend and explicit provider stubs; not marketed as real computer-use yet |
|
|
133
262
|
| **MCP transports** | stdio · Streamable HTTP (spec 2025-11-25) · SSE · OAuth 2.1 PKCE |
|
|
134
|
-
| **
|
|
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 |
|
|
135
265
|
| **Cross-vendor skills** | Skills in `skills/` work in Claude Code, OpenCode, Codex, Cursor, Cline |
|
|
136
266
|
| **Self-repair envelope** | Every error ships `adapter_path` + `step` + `suggestion` (Banach-convergent) |
|
|
137
267
|
| **Bilingual search** | BM25 + TF-IDF, 50KB index, <10ms queries, 200-entry ZH↔EN alias table |
|
|
138
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
|
|
|
@@ -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
|
|
@@ -245,7 +378,7 @@ unicli test <site> # Validate
|
|
|
245
378
|
unicli record <url> # Auto-generate adapter from traffic
|
|
246
379
|
```
|
|
247
380
|
|
|
248
|
-
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`.
|
|
249
382
|
|
|
250
383
|
## Search
|
|
251
384
|
|
|
@@ -260,9 +393,9 @@ unicli search --category finance # browse by category
|
|
|
260
393
|
|
|
261
394
|
BM25 + TF-IDF scoring with a 200-entry ZH↔EN alias table. The index is 50KB, queries complete in under 10ms.
|
|
262
395
|
|
|
263
|
-
##
|
|
396
|
+
## Design principles + benchmarks
|
|
264
397
|
|
|
265
|
-
The design rests on five principles
|
|
398
|
+
The design rests on five operational principles:
|
|
266
399
|
|
|
267
400
|
1. **Rice's restriction** — every adapter has decidable semantics (YAML pipeline, no Turing-complete logic).
|
|
268
401
|
2. **Lehman's mandate** — no adapter is permanent; self-repair is first-class.
|
|
@@ -270,7 +403,7 @@ The design rests on five principles, each tied to a citation in [`docs/refs.bib`
|
|
|
270
403
|
4. **Agent tool trilemma (original)** — coverage × accuracy × performance, pick two. We choose accuracy × performance.
|
|
271
404
|
5. **Banach convergence** — structured errors must provide directional feedback (`adapter_path` + `step` + `suggestion`) so repair iterations converge.
|
|
272
405
|
|
|
273
|
-
Full treatment
|
|
406
|
+
Full treatment: [`docs/THEORY.md`](docs/THEORY.md). Reproducible local benchmarks: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
|
|
274
407
|
|
|
275
408
|
## Development
|
|
276
409
|
|
|
@@ -286,7 +419,7 @@ npm run verify # typecheck + lint + test + build + stats check
|
|
|
286
419
|
| `npm run build` | Production build |
|
|
287
420
|
| `npm run typecheck` | TypeScript strict |
|
|
288
421
|
| `npm run lint` | Oxlint |
|
|
289
|
-
| `npm run test` | Unit tests (<!-- STATS:test_count -->
|
|
422
|
+
| `npm run test` | Unit tests (<!-- STATS:test_count -->7160<!-- /STATS -->) |
|
|
290
423
|
| `npm run test:adapter` | Validate all adapters |
|
|
291
424
|
| `npm run verify` | Full pipeline (7 gates) |
|
|
292
425
|
|
|
@@ -329,6 +462,5 @@ Repo: <https://github.com/olo-dot-io/Uni-CLI> · npm: [`@zenalexa/unicli`](https
|
|
|
329
462
|
</p>
|
|
330
463
|
|
|
331
464
|
<p align="center">
|
|
332
|
-
<sub>v0.215.
|
|
333
|
-
<sub><!-- STATS:site_count -->220<!-- /STATS --> sites · <!-- STATS:command_count -->1283<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps · BM25+TF-IDF bilingual search · MCP 2025-11-25 · <!-- STATS:test_count -->7145<!-- /STATS --> tests</sub>
|
|
465
|
+
<sub>v0.215.1</sub>
|
|
334
466
|
</p>
|