@zenalexa/unicli 0.208.0 → 0.210.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +56 -15
- package/README.md +228 -278
- package/dist/adapters/cursor/cursor.d.ts +2 -1
- package/dist/adapters/cursor/cursor.d.ts.map +1 -1
- package/dist/adapters/cursor/cursor.js +87 -1
- package/dist/adapters/cursor/cursor.js.map +1 -1
- package/dist/adapters/discord-app/discord-app.d.ts +1 -1
- package/dist/adapters/discord-app/discord-app.js +94 -1
- package/dist/adapters/discord-app/discord-app.js.map +1 -1
- package/dist/browser/bridge.d.ts +45 -0
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +94 -1
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/cdp-client.d.ts +24 -1
- package/dist/browser/cdp-client.d.ts.map +1 -1
- package/dist/browser/cdp-client.js +56 -2
- package/dist/browser/cdp-client.js.map +1 -1
- package/dist/browser/launcher.d.ts +5 -0
- package/dist/browser/launcher.d.ts.map +1 -1
- package/dist/browser/launcher.js +7 -0
- package/dist/browser/launcher.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +73 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +82 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/browser.d.ts.map +1 -1
- package/dist/commands/browser.js +79 -1
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/ext.d.ts +11 -0
- package/dist/commands/ext.d.ts.map +1 -0
- package/dist/commands/ext.js +122 -0
- package/dist/commands/ext.js.map +1 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +20 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/hub.d.ts +13 -0
- package/dist/commands/hub.d.ts.map +1 -0
- package/dist/commands/hub.js +232 -0
- package/dist/commands/hub.js.map +1 -0
- package/dist/commands/research.d.ts +17 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +257 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/skills.d.ts +2 -3
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +2 -3
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +12 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +137 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-gen.d.ts +10 -0
- package/dist/commands/test-gen.d.ts.map +1 -0
- package/dist/commands/test-gen.js +124 -0
- package/dist/commands/test-gen.js.map +1 -0
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +3 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/engine/capability.d.ts +40 -0
- package/dist/engine/capability.d.ts.map +1 -0
- package/dist/engine/capability.js +191 -0
- package/dist/engine/capability.js.map +1 -0
- package/dist/engine/endpoint.d.ts +47 -0
- package/dist/engine/endpoint.d.ts.map +1 -0
- package/dist/engine/endpoint.js +295 -0
- package/dist/engine/endpoint.js.map +1 -0
- package/dist/engine/framework.d.ts +28 -0
- package/dist/engine/framework.d.ts.map +1 -0
- package/dist/engine/framework.js +66 -0
- package/dist/engine/framework.js.map +1 -0
- package/dist/engine/probe.d.ts +19 -0
- package/dist/engine/probe.d.ts.map +1 -0
- package/dist/engine/probe.js +85 -0
- package/dist/engine/probe.js.map +1 -0
- package/dist/engine/research.d.ts +38 -0
- package/dist/engine/research.d.ts.map +1 -0
- package/dist/engine/research.js +414 -0
- package/dist/engine/research.js.map +1 -0
- package/dist/engine/yaml-runner.d.ts +10 -0
- package/dist/engine/yaml-runner.d.ts.map +1 -1
- package/dist/engine/yaml-runner.js +131 -8
- package/dist/engine/yaml-runner.js.map +1 -1
- package/dist/hub/index.d.ts +37 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +98 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/passthrough.d.ts +21 -0
- package/dist/hub/passthrough.d.ts.map +1 -0
- package/dist/hub/passthrough.js +71 -0
- package/dist/hub/passthrough.js.map +1 -0
- package/dist/manifest.json +2242 -134
- package/dist/mcp/server.js +59 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/src/adapters/36kr/latest.yaml +36 -0
- package/src/adapters/arxiv/trending.yaml +37 -0
- package/src/adapters/baidu/hot.yaml +37 -0
- package/src/adapters/baidu/search.yaml +41 -0
- package/src/adapters/bbc/technology.yaml +26 -0
- package/src/adapters/bbc/top.yaml +26 -0
- package/src/adapters/bbc/world.yaml +26 -0
- package/src/adapters/bilibili/coin.yaml +33 -0
- package/src/adapters/bilibili/later.yaml +31 -0
- package/src/adapters/bilibili/live.yaml +41 -0
- package/src/adapters/bilibili/trending.yaml +29 -0
- package/src/adapters/binance/hot.yaml +39 -0
- package/src/adapters/binance/kline.yaml +35 -0
- package/src/adapters/binance/ticker.yaml +33 -0
- package/src/adapters/bluesky/likes.yaml +35 -0
- package/src/adapters/bluesky/notifications.yaml +30 -0
- package/src/adapters/bluesky/post.yaml +25 -0
- package/src/adapters/chrome/bookmarks.yaml +26 -0
- package/src/adapters/chrome/tabs.yaml +25 -0
- package/src/adapters/cnki/search.yaml +40 -0
- package/src/adapters/cnn/technology.yaml +26 -0
- package/src/adapters/cnn/top.yaml +21 -0
- package/src/adapters/cocoapods/info.yaml +33 -0
- package/src/adapters/cocoapods/search.yaml +16 -0
- package/src/adapters/coinbase/prices.yaml +27 -0
- package/src/adapters/coinbase/rates.yaml +24 -0
- package/src/adapters/coupang/hot.yaml +29 -0
- package/src/adapters/crates-io/info.yaml +29 -0
- package/src/adapters/crates-io/search.yaml +27 -0
- package/src/adapters/crates-io/versions.yaml +33 -0
- package/src/adapters/ctrip/hot.yaml +28 -0
- package/src/adapters/cursor/cursor.ts +91 -1
- package/src/adapters/dangdang/hot.yaml +38 -0
- package/src/adapters/dangdang/search.yaml +43 -0
- package/src/adapters/deepseek/chat.yaml +33 -0
- package/src/adapters/deepseek/models.yaml +18 -0
- package/src/adapters/devto/latest.yaml +29 -0
- package/src/adapters/devto/search.yaml +34 -0
- package/src/adapters/dianping/hot.yaml +43 -0
- package/src/adapters/dianping/search.yaml +48 -0
- package/src/adapters/discord-app/discord-app.ts +99 -1
- package/src/adapters/docker/networks.yaml +20 -0
- package/src/adapters/docker/volumes.yaml +19 -0
- package/src/adapters/docker-hub/info.yaml +26 -0
- package/src/adapters/docker-hub/search.yaml +26 -0
- package/src/adapters/docker-hub/tags.yaml +34 -0
- package/src/adapters/douban/group-hot.yaml +29 -0
- package/src/adapters/douban/new-movies.yaml +32 -0
- package/src/adapters/douban/tv-hot.yaml +32 -0
- package/src/adapters/doubao/ask.yaml +64 -0
- package/src/adapters/doubao/new.yaml +18 -0
- package/src/adapters/doubao/status.yaml +21 -0
- package/src/adapters/douyu/hot.yaml +34 -0
- package/src/adapters/douyu/search.yaml +42 -0
- package/src/adapters/eastmoney/fund.yaml +36 -0
- package/src/adapters/eastmoney/hot.yaml +23 -0
- package/src/adapters/eastmoney/market.yaml +26 -0
- package/src/adapters/eastmoney/search.yaml +25 -0
- package/src/adapters/ele/hot.yaml +40 -0
- package/src/adapters/ele/search.yaml +47 -0
- package/src/adapters/exchangerate/convert.yaml +19 -0
- package/src/adapters/exchangerate/list.yaml +25 -0
- package/src/adapters/facebook/marketplace.yaml +43 -0
- package/src/adapters/facebook/post.yaml +29 -0
- package/src/adapters/feishu/calendar.yaml +24 -0
- package/src/adapters/feishu/docs.yaml +17 -0
- package/src/adapters/feishu/send.yaml +29 -0
- package/src/adapters/feishu/tasks.yaml +24 -0
- package/src/adapters/futu/hot.yaml +49 -0
- package/src/adapters/futu/quote.yaml +46 -0
- package/src/adapters/gitee/repos.yaml +34 -0
- package/src/adapters/gitee/search.yaml +25 -0
- package/src/adapters/gitee/trending.yaml +22 -0
- package/src/adapters/github-trending/developers.yaml +33 -0
- package/src/adapters/github-trending/weekly.yaml +34 -0
- package/src/adapters/gitlab/projects.yaml +34 -0
- package/src/adapters/gitlab/search.yaml +24 -0
- package/src/adapters/gitlab/trending.yaml +22 -0
- package/src/adapters/godot/scene-export.yaml +1 -1
- package/src/adapters/hackernews/comments.yaml +36 -0
- package/src/adapters/hackernews/item.yaml +28 -0
- package/src/adapters/hf/datasets.yaml +34 -0
- package/src/adapters/hf/spaces.yaml +34 -0
- package/src/adapters/homebrew/info.yaml +15 -0
- package/src/adapters/homebrew/search.yaml +27 -0
- package/src/adapters/huggingface-papers/daily.yaml +21 -0
- package/src/adapters/huggingface-papers/search.yaml +33 -0
- package/src/adapters/imdb/box-office.yaml +28 -0
- package/src/adapters/infoq/articles.yaml +29 -0
- package/src/adapters/infoq/latest.yaml +26 -0
- package/src/adapters/instagram/activity.yaml +45 -0
- package/src/adapters/instagram/highlights.yaml +48 -0
- package/src/adapters/instagram/reels-trending.yaml +51 -0
- package/src/adapters/instagram/reels.yaml +34 -0
- package/src/adapters/instagram/stories.yaml +29 -0
- package/src/adapters/instagram/suggested.yaml +40 -0
- package/src/adapters/instagram/tags.yaml +52 -0
- package/src/adapters/ip-info/lookup.yaml +15 -0
- package/src/adapters/itch-io/popular.yaml +22 -0
- package/src/adapters/itch-io/search.yaml +35 -0
- package/src/adapters/itch-io/top.yaml +31 -0
- package/src/adapters/ithome/hot.yaml +27 -0
- package/src/adapters/ithome/latest.yaml +26 -0
- package/src/adapters/ithome/news.yaml +21 -0
- package/src/adapters/jianyu/search.yaml +42 -0
- package/src/adapters/ke/ershoufang.yaml +75 -0
- package/src/adapters/ke/xiaoqu.yaml +73 -0
- package/src/adapters/kuaishou/hot.yaml +39 -0
- package/src/adapters/kuaishou/search.yaml +44 -0
- package/src/adapters/linkedin/jobs.yaml +47 -0
- package/src/adapters/lobsters/search.yaml +35 -0
- package/src/adapters/macos/active-app.yaml +16 -0
- package/src/adapters/macos/apps-list.yaml +14 -0
- package/src/adapters/macos/apps.yaml +31 -0
- package/src/adapters/macos/battery.yaml +26 -0
- package/src/adapters/macos/bluetooth.yaml +14 -0
- package/src/adapters/macos/brightness.yaml +22 -0
- package/src/adapters/macos/caffeinate.yaml +25 -0
- package/src/adapters/macos/calendar-create.yaml +81 -0
- package/src/adapters/macos/calendar-list.yaml +53 -0
- package/src/adapters/macos/calendar-today.yaml +30 -0
- package/src/adapters/macos/clipboard.yaml +23 -0
- package/src/adapters/macos/contacts-search.yaml +59 -0
- package/src/adapters/macos/dark-mode.yaml +19 -0
- package/src/adapters/macos/disk-info.yaml +31 -0
- package/src/adapters/macos/disk-usage.yaml +14 -0
- package/src/adapters/macos/do-not-disturb.yaml +21 -0
- package/src/adapters/macos/empty-trash.yaml +16 -0
- package/src/adapters/macos/finder-recent.yaml +24 -0
- package/src/adapters/macos/finder-selection.yaml +22 -0
- package/src/adapters/macos/finder-tags.yaml +40 -0
- package/src/adapters/macos/lock-screen.yaml +16 -0
- package/src/adapters/macos/mail-send.yaml +54 -0
- package/src/adapters/macos/mail-status.yaml +38 -0
- package/src/adapters/macos/messages-send.yaml +42 -0
- package/src/adapters/macos/music-control.yaml +43 -0
- package/src/adapters/macos/music-now.yaml +34 -0
- package/src/adapters/macos/notes-list.yaml +30 -0
- package/src/adapters/macos/notes-search.yaml +45 -0
- package/src/adapters/macos/notification.yaml +27 -0
- package/src/adapters/macos/notify.yaml +46 -0
- package/src/adapters/macos/open-app.yaml +21 -0
- package/src/adapters/macos/open.yaml +24 -0
- package/src/adapters/macos/photos-search.yaml +44 -0
- package/src/adapters/macos/processes.yaml +14 -0
- package/src/adapters/macos/reminder-create.yaml +75 -0
- package/src/adapters/macos/reminders-complete.yaml +33 -0
- package/src/adapters/macos/reminders-list.yaml +28 -0
- package/src/adapters/macos/safari-tabs.yaml +26 -0
- package/src/adapters/macos/say.yaml +36 -0
- package/src/adapters/macos/screen-lock.yaml +16 -0
- package/src/adapters/macos/screenshot.yaml +34 -0
- package/src/adapters/macos/shortcuts-list.yaml +14 -0
- package/src/adapters/macos/shortcuts-run.yaml +28 -0
- package/src/adapters/macos/sleep.yaml +14 -0
- package/src/adapters/macos/spotlight.yaml +43 -0
- package/src/adapters/macos/system-info.yaml +32 -0
- package/src/adapters/macos/trash.yaml +32 -0
- package/src/adapters/macos/uptime.yaml +14 -0
- package/src/adapters/macos/volume.yaml +19 -0
- package/src/adapters/macos/wifi-info.yaml +14 -0
- package/src/adapters/macos/wifi.yaml +63 -0
- package/src/adapters/maimai/search.yaml +62 -0
- package/src/adapters/maoyan/hot.yaml +33 -0
- package/src/adapters/maoyan/search.yaml +40 -0
- package/src/adapters/mastodon/search.yaml +29 -0
- package/src/adapters/mastodon/timeline.yaml +33 -0
- package/src/adapters/mastodon/trending.yaml +27 -0
- package/src/adapters/mastodon/user.yaml +32 -0
- package/src/adapters/medium/article.yaml +22 -0
- package/src/adapters/medium/trending.yaml +30 -0
- package/src/adapters/meituan/hot.yaml +26 -0
- package/src/adapters/meituan/search.yaml +30 -0
- package/src/adapters/minimax/chat.yaml +33 -0
- package/src/adapters/minimax/models.yaml +18 -0
- package/src/adapters/minimax/tts.yaml +33 -0
- package/src/adapters/mubu/list.yaml +36 -0
- package/src/adapters/mubu/search.yaml +54 -0
- package/src/adapters/netease-music/hot.yaml +24 -0
- package/src/adapters/netease-music/playlist.yaml +34 -0
- package/src/adapters/netease-music/search.yaml +29 -0
- package/src/adapters/netease-music/top.yaml +33 -0
- package/src/adapters/notion/databases.yaml +41 -0
- package/src/adapters/notion/pages.yaml +44 -0
- package/src/adapters/notion/search.yaml +41 -0
- package/src/adapters/npm/downloads.yaml +28 -0
- package/src/adapters/npm/info.yaml +25 -0
- package/src/adapters/npm/search.yaml +35 -0
- package/src/adapters/npm/versions.yaml +33 -0
- package/src/adapters/npm-trends/compare.yaml +19 -0
- package/src/adapters/npm-trends/trending.yaml +17 -0
- package/src/adapters/nytimes/search.yaml +35 -0
- package/src/adapters/nytimes/top.yaml +26 -0
- package/src/adapters/obsidian/daily.yaml +23 -0
- package/src/adapters/obsidian/open.yaml +26 -0
- package/src/adapters/obsidian/search.yaml +28 -0
- package/src/adapters/ollama/generate.yaml +33 -0
- package/src/adapters/ollama/models.yaml +29 -0
- package/src/adapters/ollama/ps.yaml +20 -0
- package/src/adapters/openrouter/models.yaml +22 -0
- package/src/adapters/openrouter/search.yaml +31 -0
- package/src/adapters/perplexity/ask.yaml +33 -0
- package/src/adapters/pexels/curated.yaml +31 -0
- package/src/adapters/pexels/search.yaml +28 -0
- package/src/adapters/pinduoduo/hot.yaml +20 -0
- package/src/adapters/pinduoduo/search.yaml +36 -0
- package/src/adapters/producthunt/search.yaml +41 -0
- package/src/adapters/pypi/info.yaml +16 -0
- package/src/adapters/pypi/search.yaml +37 -0
- package/src/adapters/pypi/versions.yaml +31 -0
- package/src/adapters/quark/ls.yaml +39 -0
- package/src/adapters/quark/search.yaml +39 -0
- package/src/adapters/qweather/forecast.yaml +37 -0
- package/src/adapters/qweather/now.yaml +16 -0
- package/src/adapters/reddit/new.yaml +34 -0
- package/src/adapters/reddit/rising.yaml +33 -0
- package/src/adapters/reddit/top.yaml +40 -0
- package/src/adapters/reddit/trending.yaml +25 -0
- package/src/adapters/replicate/run.yaml +39 -0
- package/src/adapters/replicate/search.yaml +25 -0
- package/src/adapters/replicate/trending.yaml +22 -0
- package/src/adapters/reuters/latest.yaml +26 -0
- package/src/adapters/sinafinance/market.yaml +21 -0
- package/src/adapters/slack/messages.yaml +41 -0
- package/src/adapters/slack/post.yaml +32 -0
- package/src/adapters/slack/search.yaml +28 -0
- package/src/adapters/slack/send.yaml +35 -0
- package/src/adapters/slack/status.yaml +19 -0
- package/src/adapters/slack/users.yaml +37 -0
- package/src/adapters/slock/servers.yaml +32 -0
- package/src/adapters/spotify/now-playing.yaml +28 -0
- package/src/adapters/spotify/playlists.yaml +37 -0
- package/src/adapters/spotify/top-tracks.yaml +42 -0
- package/src/adapters/sspai/hot.yaml +21 -0
- package/src/adapters/sspai/latest.yaml +22 -0
- package/src/adapters/stackoverflow/question.yaml +34 -0
- package/src/adapters/stackoverflow/tags.yaml +30 -0
- package/src/adapters/steam/app-details.yaml +32 -0
- package/src/adapters/steam/new-releases.yaml +28 -0
- package/src/adapters/steam/search.yaml +36 -0
- package/src/adapters/steam/specials.yaml +29 -0
- package/src/adapters/steam/wishlist.yaml +36 -0
- package/src/adapters/substack/trending.yaml +28 -0
- package/src/adapters/taobao/hot.yaml +31 -0
- package/src/adapters/taobao/search.yaml +44 -0
- package/src/adapters/techcrunch/latest.yaml +22 -0
- package/src/adapters/techcrunch/search.yaml +33 -0
- package/src/adapters/theverge/latest.yaml +21 -0
- package/src/adapters/theverge/search.yaml +33 -0
- package/src/adapters/threads/hot.yaml +44 -0
- package/src/adapters/threads/search.yaml +47 -0
- package/src/adapters/tiktok/trending.yaml +28 -0
- package/src/adapters/toutiao/hot.yaml +31 -0
- package/src/adapters/toutiao/search.yaml +47 -0
- package/src/adapters/twitch/games.yaml +31 -0
- package/src/adapters/twitch/search.yaml +39 -0
- package/src/adapters/twitch/streams.yaml +38 -0
- package/src/adapters/twitch/top.yaml +26 -0
- package/src/adapters/twitter/lists.yaml +49 -0
- package/src/adapters/twitter/media.yaml +48 -0
- package/src/adapters/twitter/mentions.yaml +38 -0
- package/src/adapters/twitter/mute.yaml +42 -0
- package/src/adapters/twitter/pin.yaml +43 -0
- package/src/adapters/twitter/quotes.yaml +43 -0
- package/src/adapters/twitter/retweets.yaml +44 -0
- package/src/adapters/twitter/spaces.yaml +43 -0
- package/src/adapters/twitter/unmute.yaml +42 -0
- package/src/adapters/unsplash/random.yaml +27 -0
- package/src/adapters/unsplash/search.yaml +28 -0
- package/src/adapters/v2ex/search.yaml +36 -0
- package/src/adapters/vscode/extensions.yaml +23 -0
- package/src/adapters/vscode/install-ext.yaml +26 -0
- package/src/adapters/vscode/open.yaml +25 -0
- package/src/adapters/wechat-channels/hot.yaml +39 -0
- package/src/adapters/wechat-channels/search.yaml +57 -0
- package/src/adapters/weibo/trending.yaml +28 -0
- package/src/adapters/weixin/hot.yaml +22 -0
- package/src/adapters/wikipedia/today.yaml +25 -0
- package/src/adapters/xiaohongshu/follow.yaml +35 -0
- package/src/adapters/xiaohongshu/hashtag.yaml +44 -0
- package/src/adapters/xiaohongshu/hot.yaml +34 -0
- package/src/adapters/xiaohongshu/like.yaml +27 -0
- package/src/adapters/xiaohongshu/profile.yaml +39 -0
- package/src/adapters/xiaohongshu/save.yaml +27 -0
- package/src/adapters/xiaohongshu/suggest.yaml +34 -0
- package/src/adapters/xiaohongshu/trending.yaml +35 -0
- package/src/adapters/xiaohongshu/unfollow.yaml +40 -0
- package/src/adapters/xueqiu/market.yaml +25 -0
- package/src/adapters/yahoo-finance/quote.yaml +35 -0
- package/src/adapters/yahoo-finance/search.yaml +42 -0
- package/src/adapters/yahoo-finance/trending.yaml +30 -0
- package/src/adapters/ycombinator/launches.yaml +20 -0
- package/src/adapters/youtube/playlist.yaml +43 -0
- package/src/adapters/youtube/shorts.yaml +42 -0
- package/src/adapters/youtube/trending.yaml +41 -0
- package/src/adapters/zhihu/answer.yaml +29 -0
- package/src/adapters/zhihu/answers.yaml +38 -0
- package/src/adapters/zhihu/article.yaml +27 -0
- package/src/adapters/zhihu/articles.yaml +38 -0
- package/src/adapters/zhihu/collections.yaml +37 -0
- package/src/adapters/zhihu/columns.yaml +38 -0
- package/src/adapters/zhihu/comment.yaml +42 -0
- package/src/adapters/zhihu/followers.yaml +37 -0
- package/src/adapters/zhihu/following.yaml +37 -0
- package/src/adapters/zhihu/pins.yaml +37 -0
- package/src/adapters/zhihu/topic.yaml +35 -0
- package/src/adapters/zhihu/topics.yaml +37 -0
- package/src/adapters/zhihu/trending.yaml +36 -0
- package/src/adapters/zhihu/user.yaml +30 -0
- package/src/adapters/zoom/join.yaml +24 -0
- package/src/adapters/zoom/start.yaml +17 -0
- package/src/hub/external-clis.yaml +343 -0
- package/src/hub/index.ts +128 -0
- package/src/hub/passthrough.ts +85 -0
package/README.md
CHANGED
|
@@ -1,342 +1,286 @@
|
|
|
1
|
-
<!-- AGENT: npm install -g @zenalexa/unicli && unicli list |
|
|
1
|
+
<!-- AGENT: npm install -g @zenalexa/unicli && unicli list | 957 commands across 195 sites. JSON when piped. Self-repairing YAML adapters. unicli repair --loop for autonomous fix. See AGENTS.md -->
|
|
2
2
|
|
|
3
3
|
<h1 align="center">Uni-CLI</h1>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<strong>
|
|
6
|
+
<strong>CLI is all agents need.</strong><br>
|
|
7
|
+
<sub>One command to control any website, desktop app, or local tool — with structured JSON output and self-repairing adapters.</sub>
|
|
7
8
|
</p>
|
|
8
9
|
|
|
9
10
|
<p align="center">
|
|
10
|
-
<a href="https://
|
|
11
|
-
<a href="https://
|
|
12
|
-
<a href="
|
|
11
|
+
<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=flat-square&label=CI" alt="CI"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square&color=cb3837" alt="npm"></a>
|
|
13
|
+
<a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/dm/@zenalexa/unicli?style=flat-square" alt="downloads"></a>
|
|
14
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/@zenalexa/unicli?style=flat-square&color=339933" alt="node"></a>
|
|
15
|
+
<a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=flat-square" alt="license"></a>
|
|
16
|
+
<img src="https://img.shields.io/badge/TypeScript-strict-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
|
|
13
17
|
</p>
|
|
14
18
|
|
|
15
19
|
<p align="center">
|
|
16
|
-
|
|
20
|
+
<code>npm install -g @zenalexa/unicli</code>
|
|
17
21
|
</p>
|
|
18
22
|
|
|
19
23
|
---
|
|
20
24
|
|
|
21
|
-
Agents cannot draw in SolidWorks. Cannot design PCBs. Cannot run CFD simulations. Cannot send Outlook emails. Cannot access most websites.
|
|
22
|
-
|
|
23
|
-
Uni-CLI fixes this. One command, structured JSON output, self-repairing YAML adapters. **~80 tokens per invocation** — two orders of magnitude cheaper than MCP.
|
|
24
|
-
|
|
25
25
|
```bash
|
|
26
|
-
|
|
27
|
-
unicli
|
|
28
|
-
unicli bilibili hot #
|
|
29
|
-
unicli
|
|
30
|
-
unicli
|
|
31
|
-
unicli
|
|
26
|
+
unicli hackernews top --limit 5 # Hacker News front page
|
|
27
|
+
unicli twitter search "AI agents" # Twitter (authenticated)
|
|
28
|
+
unicli bilibili hot # Bilibili trending
|
|
29
|
+
unicli blender render scene.blend # Render a 3D scene
|
|
30
|
+
unicli cursor ask "explain this code" # Talk to Cursor IDE
|
|
31
|
+
unicli notion search "meeting notes" # Search Notion
|
|
32
|
+
unicli obs scene set "Camera 2" # Switch OBS scene
|
|
33
|
+
unicli ffmpeg compress video.mp4 # Compress video
|
|
32
34
|
```
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
Every command outputs **structured JSON when piped** — zero flags needed. Every error emits structured JSON to stderr with the adapter path, the failing step, and a fix suggestion. **~80 tokens per call.**
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
## Key Ideas
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
| ----------------------------- | ---------------------------------- | ----------------------------------- | ---------------------------------------------------- |
|
|
40
|
-
| **opencli** (14K) | TypeScript adapter hub | The genome — Uni-CLI extends it | Uni-CLI = 35 pipeline steps vs 15, +eval, +repair |
|
|
41
|
-
| **CLI-Anything** (29K, HKUDS) | Python adapter hub + skill gen | Desktop-app coverage (44 harnesses) | Uni-CLI = 134 sites web breadth, single-binary |
|
|
42
|
-
| **browser-use** (86K) | Python library, LLM per step | Open-ended browser tasks | Different shape — embed vs invoke |
|
|
43
|
-
| **goose** (38K, MCP-first) | MCP-host runtime | MCP-only environments | `unicli mcp serve` mounts as MCP server |
|
|
44
|
-
| **hermes-agent** (30K) | Agent w/ memory + multi-platform | Long-running personal agent | Different category — hermes is agent, Uni-CLI = tool |
|
|
45
|
-
| **Stagehand** | Browser-only `observe/act/extract` | Vision-grounded web tasks | Uni-CLI v0.208 ships `unicli operate observe` |
|
|
40
|
+
**Universal** — 195 sites, 30+ desktop apps, 8 Electron apps, 35 CLI bridges, 30 macOS system commands. One interface: `unicli <site> <command>`.
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
**Self-repairing** — When a site changes its API, the agent reads the ~20 line YAML adapter, fixes it, retries. No human in the loop. Fixes persist across updates.
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
| ------------------- | --------------------------------------- | ---------------------------------------- |
|
|
51
|
-
| Cost per invocation | 550–1,400 tokens (tool definition) | ~80 tokens |
|
|
52
|
-
| Context overhead | 3 servers = 72% of 200K window consumed | Zero |
|
|
53
|
-
| Composability | Single-tool calls | Unix pipes, `jq`, shell scripts |
|
|
54
|
-
| Self-repair | Agents cannot read server source | Agent reads 20-line YAML, edits, retries |
|
|
55
|
-
| Universality | Requires MCP client support | Every agent has Bash |
|
|
56
|
-
| Auth reuse | Per-server configuration | Chrome login sessions via daemon |
|
|
44
|
+
**Agent-native** — Piped output auto-switches to JSON. Errors are machine-parseable. Exit codes follow `sysexits.h`. The agent doesn't need flags or special handling.
|
|
57
45
|
|
|
58
|
-
|
|
46
|
+
**Cheap** — ~80 tokens per CLI invocation vs 550–1,400 tokens for an MCP tool definition. Two orders of magnitude cheaper in context window cost.
|
|
59
47
|
|
|
60
|
-
##
|
|
48
|
+
## Self-Repair
|
|
49
|
+
|
|
50
|
+
The core differentiator. When a command breaks, agents fix it themselves:
|
|
61
51
|
|
|
52
|
+
```mermaid
|
|
53
|
+
flowchart LR
|
|
54
|
+
A["unicli site cmd\n❌ fails"] --> B["Structured error\n{adapter_path, step, suggestion}"]
|
|
55
|
+
B --> C["Agent reads\n20-line YAML"]
|
|
56
|
+
C --> D["Agent edits\nthe adapter"]
|
|
57
|
+
D --> E["unicli site cmd\n✅ works"]
|
|
58
|
+
E --> F["Fix persists in\n~/.unicli/adapters/"]
|
|
62
59
|
```
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
(20 lines) (complex logic) (gh, docker, vercel)
|
|
69
|
-
│ │ │
|
|
70
|
-
▼ ▼ ▼
|
|
71
|
-
┌─────────────────────────────────────────┐
|
|
72
|
-
│ Pipeline Engine (30 steps) │
|
|
73
|
-
│ fetch · navigate · evaluate · click │
|
|
74
|
-
│ type · press · scroll · wait · tap │
|
|
75
|
-
│ intercept · snapshot · download │
|
|
76
|
-
│ websocket · exec · write_temp · ... │
|
|
77
|
-
└─────────┬───────────────┬───────────────┘
|
|
78
|
-
│ │
|
|
79
|
-
┌─────────▼─────┐ ┌───────▼───────┐
|
|
80
|
-
│ Direct CDP │ │ Daemon │
|
|
81
|
-
│ (fast, local)│ │ (persistent, │
|
|
82
|
-
│ │ │ reuses Chrome │
|
|
83
|
-
│ │ │ login state) │
|
|
84
|
-
└───────────────┘ └───────────────┘
|
|
85
|
-
│ │
|
|
86
|
-
┌─────────▼───────────────▼───────┐
|
|
87
|
-
│ Output Formatter │
|
|
88
|
-
│ table · json · yaml · csv · md │
|
|
89
|
-
│ (auto-JSON when piped) │
|
|
90
|
-
└─────────────────────────────────┘
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
unicli repair hackernews top # Diagnose + suggest fix
|
|
63
|
+
unicli test hackernews # Validate adapter
|
|
64
|
+
unicli repair --loop # Autonomous fix loop
|
|
91
65
|
```
|
|
92
66
|
|
|
93
|
-
|
|
67
|
+
Fixes are saved to `~/.unicli/adapters/` and survive `npm update`.
|
|
94
68
|
|
|
95
|
-
|
|
69
|
+
## Coverage
|
|
96
70
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
71
|
+
<details open>
|
|
72
|
+
<summary><strong>Web Platforms — 95 sites</strong></summary>
|
|
73
|
+
|
|
74
|
+
| Category | Sites |
|
|
75
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
76
|
+
| **Tech / Dev** | hackernews, stackoverflow, devto, lobsters, producthunt, hf, github-trending, substack, lesswrong, npm, pypi, crates-io, cocoapods, homebrew, gitlab, gitee, npm-trends, ollama |
|
|
77
|
+
| **Social** | twitter (35 cmds), reddit (20), instagram (24), tiktok (15), facebook (10), bluesky (12), medium, threads |
|
|
78
|
+
| **Chinese Social** | bilibili (18), weibo, zhihu (20), xiaohongshu (24), douyin (13), jike, douban, weread, tieba, v2ex, linux-do, zsxq, xiaoyuzhou, baidu, toutiao |
|
|
79
|
+
| **Video / Media** | youtube (5), bilibili, douyin, tiktok, kuaishou, douyu, wechat-channels, twitch |
|
|
80
|
+
| **Finance** | xueqiu, sinafinance, barchart, yahoo-finance, binance, futu, coinbase, eastmoney |
|
|
81
|
+
| **News** | bbc, bloomberg (10), reuters, 36kr, google news, cnn, nytimes, techcrunch, theverge, infoq, ithome |
|
|
82
|
+
| **Shopping** | amazon (8), xianyu, coupang, smzdm, jd, maoyan, ele, dianping, dangdang, pinduoduo, meituan |
|
|
83
|
+
| **Jobs** | boss (14), linkedin |
|
|
84
|
+
| **AI Platforms** | gemini (5), grok, doubao-web (9), notebooklm (15), yollomi (12), jimeng, yuanbao, deepseek, perplexity |
|
|
85
|
+
| **Education** | chaoxing, arxiv, wikipedia |
|
|
86
|
+
| **Other** | ones (11), band, xiaoe, pixiv (6), hupu (7), ctrip, sinablog, steam |
|
|
87
|
+
|
|
88
|
+
</details>
|
|
89
|
+
|
|
90
|
+
<details>
|
|
91
|
+
<summary><strong>Desktop Software — 32 apps</strong></summary>
|
|
92
|
+
|
|
93
|
+
| Category | Apps |
|
|
94
|
+
| ----------------- | ------------------------------------------------------------------- |
|
|
95
|
+
| **3D / CAD** | blender (13 cmds), freecad (15), cloudcompare (4), openscad |
|
|
96
|
+
| **Image** | gimp (12), inkscape, imagemagick (6), krita (4) |
|
|
97
|
+
| **Video / Audio** | ffmpeg (11), kdenlive (3), shotcut (3), audacity (8), musescore (5) |
|
|
98
|
+
| **Diagram** | drawio, mermaid |
|
|
99
|
+
| **Document** | libreoffice, pandoc |
|
|
100
|
+
| **Streaming** | obs (8, WebSocket) |
|
|
101
|
+
| **Productivity** | zotero (8), vscode (3), obsidian (3) |
|
|
102
|
+
| **Dev Services** | wiremock (5), adguardhome (5), novita (3) |
|
|
103
|
+
| **Browser** | chrome (2), zoom (2) |
|
|
104
|
+
| **Other** | slay-the-spire-ii (6), sketch (3) |
|
|
105
|
+
|
|
106
|
+
</details>
|
|
107
|
+
|
|
108
|
+
<details>
|
|
109
|
+
<summary><strong>Electron Apps — 8 apps, 70 commands</strong></summary>
|
|
110
|
+
|
|
111
|
+
All via Chrome DevTools Protocol — no extensions, no hacks.
|
|
112
|
+
|
|
113
|
+
| App | Commands | Port |
|
|
114
|
+
| --------------- | ---------------------------------------------------------------------------------------------- | ---- |
|
|
115
|
+
| **Cursor** | ask, send, read, model, composer, extract-code, new, status, screenshot, dump, history, export | 9226 |
|
|
116
|
+
| **Codex** | ask, send, read, model, extract-diff, new, status, screenshot, dump, history, export | 9222 |
|
|
117
|
+
| **ChatGPT** | ask, send, read, model, new, status, screenshot, dump | 9236 |
|
|
118
|
+
| **Notion** | search, read, write, new, status, sidebar, favorites, export, screenshot | 9230 |
|
|
119
|
+
| **Discord** | servers, channels, read, send, search, members, status, delete | 9232 |
|
|
120
|
+
| **ChatWise** | ask, send, read, model, new, status, screenshot, dump | 9228 |
|
|
121
|
+
| **Doubao** | ask, send, read, new, status, screenshot, dump | 9225 |
|
|
122
|
+
| **Antigravity** | ask, send, read, model, new, status, screenshot, dump | 9234 |
|
|
123
|
+
|
|
124
|
+
</details>
|
|
125
|
+
|
|
126
|
+
<details>
|
|
127
|
+
<summary><strong>CLI Bridges — 35 tools</strong></summary>
|
|
128
|
+
|
|
129
|
+
Passthrough wrappers that normalize output to JSON:
|
|
130
|
+
|
|
131
|
+
docker, gh, jq, yt-dlp, vercel, supabase, wrangler, lark, dingtalk, hf, claude-code, codex-cli, opencode, aws, gcloud, az, doctl, netlify, railway, flyctl, pscale, neonctl, slack, kimi-cli, gws, deepagents, stripe, firebase, mmx-cli, wecom, mem0, dws, hermes, openclaw, opencode-cli
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><strong>macOS System — 30 commands</strong></summary>
|
|
137
|
+
|
|
138
|
+
| Category | Commands |
|
|
139
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
140
|
+
| **Audio/Display** | volume, dark-mode, brightness, say |
|
|
141
|
+
| **Power/System** | battery, lock-screen, caffeinate, sleep, uptime, system-info |
|
|
142
|
+
| **Files/Search** | spotlight, disk-info, trash, empty-trash, open, finder-tags, finder-recent, finder-selection |
|
|
143
|
+
| **Network** | wifi, wifi-info, bluetooth |
|
|
144
|
+
| **Notifications** | notify, notification, do-not-disturb |
|
|
145
|
+
| **Apps** | apps, apps-list, active-app, open-app, safari-tabs, shortcuts-list, shortcuts-run |
|
|
146
|
+
| **PIM** | calendar-list, calendar-create, calendar-today, contacts-search, mail-status, mail-send, messages-send, reminders-list, reminders-create, reminders-complete |
|
|
147
|
+
| **Media** | music-now, music-control, photos-search, notes-list, notes-search, screenshot, clipboard, processes |
|
|
148
|
+
|
|
149
|
+
</details>
|
|
150
|
+
|
|
151
|
+
## Architecture
|
|
152
|
+
|
|
153
|
+
```mermaid
|
|
154
|
+
graph TB
|
|
155
|
+
CMD["unicli <site> <command> [args]"]
|
|
156
|
+
|
|
157
|
+
CMD --> YAML["YAML Adapter<br/><i>~20 lines, agent-editable</i>"]
|
|
158
|
+
CMD --> TS["TS Adapter<br/><i>complex logic</i>"]
|
|
159
|
+
CMD --> BRIDGE["Bridge<br/><i>passthrough to CLI</i>"]
|
|
160
|
+
|
|
161
|
+
YAML --> ENGINE
|
|
162
|
+
TS --> ENGINE
|
|
163
|
+
BRIDGE --> ENGINE
|
|
164
|
+
|
|
165
|
+
subgraph ENGINE ["Pipeline Engine — 35 steps"]
|
|
166
|
+
direction LR
|
|
167
|
+
API["fetch fetch_text<br/>parse_rss html_to_md"]
|
|
168
|
+
TRANSFORM["select map filter<br/>sort limit"]
|
|
169
|
+
BROWSER["navigate evaluate<br/>click type press<br/>scroll intercept<br/>snapshot tap extract"]
|
|
170
|
+
CONTROL["set if each<br/>parallel append<br/>rate_limit assert retry"]
|
|
171
|
+
OTHER["exec write_temp<br/>download websocket"]
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
ENGINE --> CDP["Direct CDP"]
|
|
175
|
+
ENGINE --> DAEMON["Browser Daemon<br/><i>reuses Chrome logins</i>"]
|
|
176
|
+
|
|
177
|
+
CDP --> OUT["Output Formatter<br/><i>table · json · yaml · csv · md</i>"]
|
|
178
|
+
DAEMON --> OUT
|
|
104
179
|
```
|
|
105
180
|
|
|
106
|
-
|
|
181
|
+
Remote browser support via `UNICLI_CDP_ENDPOINT` — connect to any CDP WebSocket (Cloudflare Browser Rendering, Browserless, or self-hosted).
|
|
107
182
|
|
|
108
|
-
##
|
|
183
|
+
## Write an Adapter
|
|
109
184
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
| Category | Sites |
|
|
113
|
-
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
-
| **Tech / Dev** | hackernews, stackoverflow, devto, lobsters, producthunt, hf, github-trending, substack, lesswrong |
|
|
115
|
-
| **Social — International** | twitter (25 cmds), reddit (16), instagram (19), tiktok (15), facebook (10), bluesky, medium |
|
|
116
|
-
| **Social — Chinese** | bilibili (13), weibo, zhihu, xiaohongshu (13), douyin (13), jike, douban, weread, tieba, v2ex, linux-do, zsxq, xiaoyuzhou |
|
|
117
|
-
| **Video / Media** | youtube (5), bilibili, douyin, tiktok |
|
|
118
|
-
| **Finance** | xueqiu, sinafinance, barchart, yahoo-finance |
|
|
119
|
-
| **News** | bbc, bloomberg (10), reuters, 36kr, google news |
|
|
120
|
-
| **Shopping** | amazon (8), xianyu, coupang, smzdm, jd |
|
|
121
|
-
| **Jobs** | boss (14), linkedin |
|
|
122
|
-
| **AI Platforms** | gemini (5), grok, doubao-web (9), notebooklm (15), yollomi (12), jimeng, yuanbao |
|
|
123
|
-
| **Education** | chaoxing, arxiv, wikipedia |
|
|
124
|
-
| **Other** | ones (11), band, xiaoe, pixiv (6), hupu (7), ctrip, sinablog, steam, lobsters |
|
|
125
|
-
|
|
126
|
-
### Desktop Software (28 apps)
|
|
127
|
-
|
|
128
|
-
| Category | Apps |
|
|
129
|
-
| ---------------- | ----------------------------------------------------------- |
|
|
130
|
-
| **3D / CAD** | blender (13 cmds), freecad (15), cloudcompare (4), openscad |
|
|
131
|
-
| **Image** | gimp (12), inkscape, imagemagick (6), krita (4) |
|
|
132
|
-
| **Video** | ffmpeg (11), kdenlive (3), shotcut (3), musescore (5) |
|
|
133
|
-
| **Diagram** | drawio, mermaid |
|
|
134
|
-
| **Document** | libreoffice, pandoc |
|
|
135
|
-
| **Audio** | audacity (8) |
|
|
136
|
-
| **Streaming** | obs (8, WebSocket) |
|
|
137
|
-
| **Productivity** | zotero (8) |
|
|
138
|
-
| **Dev Services** | wiremock (5), adguardhome (5), novita (3) |
|
|
139
|
-
| **Game** | slay-the-spire-ii (6, HTTP bridge mod) |
|
|
140
|
-
| **Design** | sketch (3) |
|
|
141
|
-
|
|
142
|
-
### Electron Apps (8 apps, 66 commands)
|
|
143
|
-
|
|
144
|
-
| App | Commands | Method |
|
|
145
|
-
| --------------- | ---------------------------------------------------------------------------------------------- | --------- |
|
|
146
|
-
| **Cursor** | ask, send, read, model, composer, extract-code, new, status, screenshot, dump, history, export | CDP :9226 |
|
|
147
|
-
| **Codex** | ask, send, read, model, extract-diff, new, status, screenshot, dump, history, export | CDP :9222 |
|
|
148
|
-
| **ChatGPT** | ask, send, read, model, new, status, screenshot, dump | CDP :9236 |
|
|
149
|
-
| **Notion** | search, read, write, new, status, sidebar, favorites, export, screenshot | CDP :9230 |
|
|
150
|
-
| **Discord** | servers, channels, read, send, search, members, status | CDP :9232 |
|
|
151
|
-
| **ChatWise** | ask, send, read, model, new, status, screenshot, dump | CDP :9228 |
|
|
152
|
-
| **Doubao** | ask, send, read, new, status, screenshot, dump | CDP :9225 |
|
|
153
|
-
| **Antigravity** | ask, send, read, model, new, status, screenshot, dump | CDP :9234 |
|
|
154
|
-
|
|
155
|
-
### Bridge (passthrough to existing CLIs)
|
|
156
|
-
|
|
157
|
-
docker, gh, jq, yt-dlp, vercel, supabase, wrangler, lark, dingtalk, hf, claude-code, codex-cli, opencode, aws, gcloud, az, doctl, netlify, railway, flyctl, pscale, neonctl, slack
|
|
158
|
-
|
|
159
|
-
## Pipeline Engine
|
|
160
|
-
|
|
161
|
-
30 steps execute in sequence. Each YAML adapter is a pipeline of these steps.
|
|
162
|
-
|
|
163
|
-
| Step | Type | What it does |
|
|
164
|
-
| ------------ | --------- | ----------------------------------------------------------------------------- |
|
|
165
|
-
| `fetch` | API | HTTP JSON with retry, backoff, cookie injection, concurrent fan-out (limit=5) |
|
|
166
|
-
| `fetch_text` | API | HTTP raw text (RSS, HTML, XML) |
|
|
167
|
-
| `parse_rss` | API | RSS 2.0 + Atom feed parser |
|
|
168
|
-
| `html_to_md` | API | HTML → Markdown via Turndown |
|
|
169
|
-
| `select` | Transform | Navigate JSON by dot-path (`data.items[]`) |
|
|
170
|
-
| `map` | Transform | Transform each item via `${{ }}` templates |
|
|
171
|
-
| `filter` | Transform | Keep items matching expression |
|
|
172
|
-
| `sort` | Transform | Sort by field (numeric-aware) |
|
|
173
|
-
| `limit` | Transform | Cap result count |
|
|
174
|
-
| `exec` | Desktop | Run subprocess with stdin, env, file output |
|
|
175
|
-
| `write_temp` | Desktop | Create ephemeral script file |
|
|
176
|
-
| `navigate` | Browser | Navigate Chrome to URL via CDP |
|
|
177
|
-
| `evaluate` | Browser | Execute JS in page context |
|
|
178
|
-
| `click` | Browser | Click element by CSS selector |
|
|
179
|
-
| `type` | Browser | Type text into input |
|
|
180
|
-
| `press` | Browser | Keyboard key with modifiers (Ctrl+A, Enter) |
|
|
181
|
-
| `wait` | Browser | Wait for time, selector, or text |
|
|
182
|
-
| `scroll` | Browser | Direction scroll, auto-scroll to bottom |
|
|
183
|
-
| `intercept` | Browser | Capture fetch + XHR responses (dual-patched, stealthed) |
|
|
184
|
-
| `snapshot` | Browser | DOM accessibility tree with interactive refs |
|
|
185
|
-
| `tap` | Browser | Vue Store Action Bridge (Pinia/Vuex → capture network) |
|
|
186
|
-
| `download` | Media | HTTP + yt-dlp, batch concurrent, skip_existing |
|
|
187
|
-
| `websocket` | Service | WebSocket connect/send/receive (OBS auth support) |
|
|
188
|
-
| `set` | Control | Store variables into `vars` context for templates |
|
|
189
|
-
| `if` | Control | Conditional execution of sub-pipeline branches |
|
|
190
|
-
| `append` | Control | Push ctx.data into vars array for accumulation |
|
|
191
|
-
| `each` | Control | Loop sub-pipeline with do-while + max iteration limit |
|
|
192
|
-
| `parallel` | Control | Run sub-pipelines concurrently with merge strategies |
|
|
193
|
-
| `rate_limit` | Control | Per-domain token bucket request throttling |
|
|
194
|
-
|
|
195
|
-
### Template Expressions
|
|
196
|
-
|
|
197
|
-
29 pipe filters: `join`, `urlencode`, `urldecode`, `slice`, `replace`, `lowercase`, `uppercase`, `trim`, `default`, `split`, `first`, `last`, `length`, `strip_html`, `truncate`, `slugify`, `sanitize`, `ext`, `basename`, `keys`, `json`, `abs`, `round`, `ceil`, `floor`, `int`, `float`, `str`, `reverse`, `unique`
|
|
185
|
+
Most adapters are ~20 lines of YAML:
|
|
198
186
|
|
|
199
187
|
```yaml
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
188
|
+
site: hackernews
|
|
189
|
+
name: top
|
|
190
|
+
type: web-api
|
|
191
|
+
strategy: public
|
|
192
|
+
pipeline:
|
|
193
|
+
- fetch:
|
|
194
|
+
url: "https://hacker-news.firebaseio.com/v0/topstories.json"
|
|
195
|
+
- limit: { count: "${{ args.limit | default(30) }}" }
|
|
196
|
+
- each:
|
|
197
|
+
do:
|
|
198
|
+
- fetch:
|
|
199
|
+
url: "https://hacker-news.firebaseio.com/v0/item/${{ item }}.json"
|
|
200
|
+
max: "${{ args.limit | default(30) }}"
|
|
201
|
+
- map:
|
|
202
|
+
title: "${{ item.title }}"
|
|
203
|
+
score: "${{ item.score }}"
|
|
204
|
+
url: "${{ item.url }}"
|
|
205
|
+
by: "${{ item.by }}"
|
|
206
|
+
columns: [title, score, by, url]
|
|
205
207
|
```
|
|
206
208
|
|
|
207
|
-
|
|
209
|
+
Five adapter types: `web-api`, `desktop`, `browser`, `bridge`, `service`.
|
|
208
210
|
|
|
209
|
-
|
|
211
|
+
29 template filters in a sandboxed VM: `join`, `urlencode`, `truncate`, `slugify`, `sanitize`, `basename`, `strip_html`, `default`, `split`, `first`, `last`, `length`, `keys`, `json`, `replace`, `lowercase`, `uppercase`, `trim`, `slice`, `reverse`, `unique`, `abs`, `round`, `ceil`, `floor`, `int`, `float`, `str`, `ext`.
|
|
210
212
|
|
|
211
|
-
|
|
212
|
-
| ----------- | ------------- | -------------------------------------------------------- |
|
|
213
|
-
| `public` | None | Direct HTTP fetch |
|
|
214
|
-
| `cookie` | Cookie file | `~/.unicli/cookies/<site>.json` injected into headers |
|
|
215
|
-
| `header` | Cookie + CSRF | Cookie + auto-extracted CSRF token (ct0, bili_jct, etc.) |
|
|
216
|
-
| `intercept` | Browser | Navigate page, capture XHR/fetch responses |
|
|
217
|
-
| `ui` | Browser | Direct DOM interaction (click, type, submit) |
|
|
213
|
+
## Authentication
|
|
218
214
|
|
|
219
|
-
|
|
215
|
+
Five strategies, auto-detected via cascade (`PUBLIC → COOKIE → HEADER`):
|
|
220
216
|
|
|
221
|
-
|
|
217
|
+
| Strategy | How |
|
|
218
|
+
| ----------- | -------------------------------------------------------- |
|
|
219
|
+
| `public` | Direct HTTP — no credentials |
|
|
220
|
+
| `cookie` | Injects cookies from `~/.unicli/cookies/<site>.json` |
|
|
221
|
+
| `header` | Cookie + auto-extracted CSRF token (ct0, bili_jct, etc.) |
|
|
222
|
+
| `intercept` | Navigates page in Chrome, captures XHR/fetch responses |
|
|
223
|
+
| `ui` | Direct DOM interaction (click, type, submit) |
|
|
222
224
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
unicli
|
|
227
|
-
unicli daemon stop # Graceful shutdown (auto-exits after 4h idle)
|
|
228
|
-
|
|
229
|
-
unicli operate open <url> # Navigate browser
|
|
230
|
-
unicli operate state # DOM snapshot (accessibility tree)
|
|
231
|
-
unicli operate click <ref> # Click by ref from snapshot
|
|
232
|
-
unicli operate type <ref> <text> # Type into element
|
|
233
|
-
unicli operate eval <js> # Execute JavaScript
|
|
234
|
-
unicli operate screenshot [path] # Capture page
|
|
235
|
-
unicli operate network # View captured requests
|
|
236
|
-
|
|
237
|
-
unicli record <url> # Auto-generate adapter from page traffic
|
|
225
|
+
```bash
|
|
226
|
+
unicli auth setup twitter # Show required cookies + template
|
|
227
|
+
unicli auth check twitter # Validate cookie file
|
|
228
|
+
unicli auth list # List configured sites
|
|
238
229
|
```
|
|
239
230
|
|
|
240
|
-
##
|
|
231
|
+
## Browser Daemon
|
|
232
|
+
|
|
233
|
+
Persistent background process that reuses your Chrome login sessions — no cookie export, no extension install:
|
|
241
234
|
|
|
242
235
|
```bash
|
|
243
|
-
unicli
|
|
244
|
-
unicli
|
|
245
|
-
unicli
|
|
246
|
-
unicli
|
|
236
|
+
unicli daemon status # Check daemon
|
|
237
|
+
unicli operate open <url> # Navigate
|
|
238
|
+
unicli operate state # DOM accessibility snapshot
|
|
239
|
+
unicli operate click <ref> # Click by ref
|
|
240
|
+
unicli operate type <ref> <text> # Type into element
|
|
241
|
+
unicli operate eval <js> # Execute JavaScript
|
|
242
|
+
unicli operate screenshot # Capture page
|
|
243
|
+
unicli record <url> # Auto-generate adapter from traffic
|
|
247
244
|
```
|
|
248
245
|
|
|
249
|
-
|
|
246
|
+
13-layer anti-detection stealth: webdriver removal, `chrome.runtime` mock, CDP marker cleanup, `Error.stack` filtering, iframe consistency, and more. Auto-exits after 4h idle.
|
|
250
247
|
|
|
251
|
-
|
|
252
|
-
import { onBeforeExecute, onAfterExecute } from "unicli/hooks";
|
|
253
|
-
onBeforeExecute(async (ctx) => {
|
|
254
|
-
/* rate limiting, logging */
|
|
255
|
-
});
|
|
256
|
-
onAfterExecute(async (ctx, result) => {
|
|
257
|
-
/* analytics, caching */
|
|
258
|
-
});
|
|
259
|
-
```
|
|
248
|
+
## MCP Server
|
|
260
249
|
|
|
261
|
-
|
|
250
|
+
For MCP-only environments:
|
|
262
251
|
|
|
263
252
|
```bash
|
|
264
|
-
unicli
|
|
265
|
-
unicli completion zsh >> ~/.zshrc
|
|
266
|
-
unicli completion fish > ~/.config/fish/completions/unicli.fish
|
|
253
|
+
unicli mcp serve # All 957 commands become MCP tools
|
|
267
254
|
```
|
|
268
255
|
|
|
269
|
-
## Anti-Detection
|
|
270
|
-
|
|
271
|
-
13-layer stealth injection for browser automation:
|
|
272
|
-
|
|
273
|
-
1. `navigator.webdriver` removal
|
|
274
|
-
2. `window.chrome.runtime` mock
|
|
275
|
-
3. Plugin array normalization
|
|
276
|
-
4. Language header consistency
|
|
277
|
-
5. Permissions API notification fix
|
|
278
|
-
6. `Function.prototype.toString` spoofing
|
|
279
|
-
7. CDP global cleanup (`cdc_`, `__playwright`, `__puppeteer`)
|
|
280
|
-
8. `Error.stack` frame filtering
|
|
281
|
-
9. `outerWidth`/`outerHeight` normalization
|
|
282
|
-
10. Performance API entry filtering
|
|
283
|
-
11. Document-level CDP marker cleanup
|
|
284
|
-
12. iframe `contentWindow.chrome` consistency
|
|
285
|
-
13. Reserved (debugger trap neutralization)
|
|
286
|
-
|
|
287
|
-
## Exit Codes
|
|
288
|
-
|
|
289
|
-
Following `sysexits.h`:
|
|
290
|
-
|
|
291
|
-
| Code | Meaning | When |
|
|
292
|
-
| ---- | ----------- | ----------------------------- |
|
|
293
|
-
| `0` | Success | Command completed |
|
|
294
|
-
| `1` | Error | Unexpected failure |
|
|
295
|
-
| `2` | Usage | Bad arguments |
|
|
296
|
-
| `66` | Empty | No data returned |
|
|
297
|
-
| `69` | Unavailable | Browser/service not connected |
|
|
298
|
-
| `75` | Temporary | Timeout — retry |
|
|
299
|
-
| `77` | Auth | Not logged in |
|
|
300
|
-
| `78` | Config | Missing credentials |
|
|
301
|
-
|
|
302
256
|
## Development
|
|
303
257
|
|
|
304
258
|
```bash
|
|
305
259
|
git clone https://github.com/olo-dot-io/Uni-CLI.git && cd Uni-CLI
|
|
306
|
-
npm install
|
|
307
|
-
npm run dev -- list # Test adapter loading
|
|
308
|
-
npm run verify # format + typecheck + lint + test + build
|
|
309
|
-
npm run test:adapter # Validate all 601 YAML/TS adapters
|
|
260
|
+
npm install && npm run verify
|
|
310
261
|
```
|
|
311
262
|
|
|
312
|
-
| Command | Purpose
|
|
313
|
-
| ---------------------- |
|
|
314
|
-
| `npm run dev` |
|
|
315
|
-
| `npm run build` | Production build
|
|
316
|
-
| `npm run typecheck` | TypeScript strict
|
|
317
|
-
| `npm run lint` | Oxlint
|
|
318
|
-
| `npm run test` | Unit tests (
|
|
319
|
-
| `npm run test:adapter` |
|
|
320
|
-
| `npm run verify` | Full pipeline
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
| Layer | Technology |
|
|
325
|
-
| -------- | ---------------------------------------------------------- |
|
|
326
|
-
| Language | TypeScript (strict) |
|
|
327
|
-
| Runtime | Node.js ≥ 20 |
|
|
328
|
-
| CLI | Commander |
|
|
329
|
-
| Browser | Raw CDP via `ws` (WebSocket) — no Puppeteer, no Playwright |
|
|
330
|
-
| Test | Vitest |
|
|
331
|
-
| Lint | Oxlint |
|
|
332
|
-
| Format | Prettier |
|
|
333
|
-
| Template | VM sandbox (null-prototype, 50ms timeout) |
|
|
334
|
-
|
|
335
|
-
Zero production dependencies beyond: `chalk`, `cli-table3`, `commander`, `js-yaml`, `turndown`, `undici`, `ws`.
|
|
263
|
+
| Command | Purpose |
|
|
264
|
+
| ---------------------- | ------------------------- |
|
|
265
|
+
| `npm run dev` | Dev run |
|
|
266
|
+
| `npm run build` | Production build |
|
|
267
|
+
| `npm run typecheck` | TypeScript strict |
|
|
268
|
+
| `npm run lint` | Oxlint |
|
|
269
|
+
| `npm run test` | Unit tests (788) |
|
|
270
|
+
| `npm run test:adapter` | Validate all 601 adapters |
|
|
271
|
+
| `npm run verify` | Full pipeline |
|
|
272
|
+
|
|
273
|
+
7 production dependencies: `chalk`, `cli-table3`, `commander`, `js-yaml`, `turndown`, `undici`, `ws`.
|
|
336
274
|
|
|
337
275
|
## Contributing
|
|
338
276
|
|
|
339
|
-
|
|
277
|
+
The fastest way to contribute: write a [20-line YAML adapter](./CONTRIBUTING.md) for a site you use.
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
unicli init <site> <command> # Scaffold new adapter
|
|
281
|
+
unicli dev <path> # Hot-reload during dev
|
|
282
|
+
unicli test <site> # Validate
|
|
283
|
+
```
|
|
340
284
|
|
|
341
285
|
## License
|
|
342
286
|
|
|
@@ -345,6 +289,12 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md). The fastest way to contribute: write a
|
|
|
345
289
|
---
|
|
346
290
|
|
|
347
291
|
<p align="center">
|
|
348
|
-
<
|
|
349
|
-
|
|
292
|
+
<a href="https://github.com/olo-dot-io/Uni-CLI/graphs/contributors">
|
|
293
|
+
<img src="https://contrib.rocks/image?repo=olo-dot-io/Uni-CLI" alt="Contributors">
|
|
294
|
+
</a>
|
|
295
|
+
</p>
|
|
296
|
+
|
|
297
|
+
<p align="center">
|
|
298
|
+
<sub>v0.210.0 — Vostok · Komarov</sub><br>
|
|
299
|
+
<sub>195 sites · 957 commands · 35 pipeline steps · 29 filters · 788 tests</sub>
|
|
350
300
|
</p>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cursor IDE adapter -- AI chat + composer + code extraction.
|
|
3
3
|
*
|
|
4
|
-
* Commands: ask, send, read, model, status, new, screenshot, dump,
|
|
4
|
+
* Commands: ask, send, read, model, status, new, screenshot, dump,
|
|
5
|
+
* composer, extract-code, export, history
|
|
5
6
|
*/
|
|
6
7
|
export {};
|
|
7
8
|
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/adapters/cursor/cursor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/adapters/cursor/cursor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|