@zenalexa/unicli 0.215.0 → 0.216.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 +21 -19
- package/README.md +237 -261
- package/README.zh-CN.md +239 -269
- package/dist/adapters/1688/assets.d.ts +2 -0
- package/dist/adapters/1688/assets.d.ts.map +1 -0
- package/dist/adapters/1688/assets.js +102 -0
- package/dist/adapters/1688/assets.js.map +1 -0
- package/dist/adapters/51job/jobs.d.ts +2 -0
- package/dist/adapters/51job/jobs.d.ts.map +1 -0
- package/dist/adapters/51job/jobs.js +292 -0
- package/dist/adapters/51job/jobs.js.map +1 -0
- package/dist/adapters/_shared/browser-tools.d.ts +10 -0
- package/dist/adapters/_shared/browser-tools.d.ts.map +1 -0
- package/dist/adapters/_shared/browser-tools.js +42 -0
- package/dist/adapters/_shared/browser-tools.js.map +1 -0
- package/dist/adapters/antigravity/extra.d.ts +2 -0
- package/dist/adapters/antigravity/extra.d.ts.map +1 -0
- package/dist/adapters/antigravity/extra.js +52 -0
- package/dist/adapters/antigravity/extra.js.map +1 -0
- package/dist/adapters/baidu-scholar/search.d.ts +2 -0
- package/dist/adapters/baidu-scholar/search.d.ts.map +1 -0
- package/dist/adapters/baidu-scholar/search.js +34 -0
- package/dist/adapters/baidu-scholar/search.js.map +1 -0
- package/dist/adapters/bilibili/compat.d.ts +2 -0
- package/dist/adapters/bilibili/compat.d.ts.map +1 -0
- package/dist/adapters/bilibili/compat.js +114 -0
- package/dist/adapters/bilibili/compat.js.map +1 -0
- package/dist/adapters/chatgpt/image.d.ts +2 -0
- package/dist/adapters/chatgpt/image.d.ts.map +1 -0
- package/dist/adapters/chatgpt/image.js +81 -0
- package/dist/adapters/chatgpt/image.js.map +1 -0
- package/dist/adapters/chatgpt-app/chatgpt-app.d.ts +2 -0
- package/dist/adapters/chatgpt-app/chatgpt-app.d.ts.map +1 -0
- package/dist/adapters/chatgpt-app/chatgpt-app.js +9 -0
- package/dist/adapters/chatgpt-app/chatgpt-app.js.map +1 -0
- package/dist/adapters/chatwise/extra.d.ts +2 -0
- package/dist/adapters/chatwise/extra.d.ts.map +1 -0
- package/dist/adapters/chatwise/extra.js +35 -0
- package/dist/adapters/chatwise/extra.js.map +1 -0
- package/dist/adapters/codex/extra.d.ts +2 -0
- package/dist/adapters/codex/extra.d.ts.map +1 -0
- package/dist/adapters/codex/extra.js +35 -0
- package/dist/adapters/codex/extra.js.map +1 -0
- package/dist/adapters/deepseek/web.d.ts +2 -0
- package/dist/adapters/deepseek/web.d.ts.map +1 -0
- package/dist/adapters/deepseek/web.js +187 -0
- package/dist/adapters/deepseek/web.js.map +1 -0
- package/dist/adapters/doubao/web.d.ts +2 -0
- package/dist/adapters/doubao/web.d.ts.map +1 -0
- package/dist/adapters/doubao/web.js +138 -0
- package/dist/adapters/doubao/web.js.map +1 -0
- package/dist/adapters/eastmoney/market-data.d.ts +2 -0
- package/dist/adapters/eastmoney/market-data.d.ts.map +1 -0
- package/dist/adapters/eastmoney/market-data.js +753 -0
- package/dist/adapters/eastmoney/market-data.js.map +1 -0
- package/dist/adapters/gitee/user.d.ts +2 -0
- package/dist/adapters/gitee/user.d.ts.map +1 -0
- package/dist/adapters/gitee/user.js +54 -0
- package/dist/adapters/gitee/user.js.map +1 -0
- package/dist/adapters/google-scholar/cite.d.ts +2 -0
- package/dist/adapters/google-scholar/cite.d.ts.map +1 -0
- package/dist/adapters/google-scholar/cite.js +82 -0
- package/dist/adapters/google-scholar/cite.js.map +1 -0
- package/dist/adapters/google-scholar/profile.d.ts +2 -0
- package/dist/adapters/google-scholar/profile.d.ts.map +1 -0
- package/dist/adapters/google-scholar/profile.js +80 -0
- package/dist/adapters/google-scholar/profile.js.map +1 -0
- package/dist/adapters/google-scholar/search.d.ts +2 -0
- package/dist/adapters/google-scholar/search.d.ts.map +1 -0
- package/dist/adapters/google-scholar/search.js +54 -0
- package/dist/adapters/google-scholar/search.js.map +1 -0
- package/dist/adapters/gov-law/laws.d.ts +2 -0
- package/dist/adapters/gov-law/laws.d.ts.map +1 -0
- package/dist/adapters/gov-law/laws.js +58 -0
- package/dist/adapters/gov-law/laws.js.map +1 -0
- package/dist/adapters/gov-policy/policy.d.ts +2 -0
- package/dist/adapters/gov-policy/policy.d.ts.map +1 -0
- package/dist/adapters/gov-policy/policy.js +58 -0
- package/dist/adapters/gov-policy/policy.js.map +1 -0
- package/dist/adapters/jd/commerce.d.ts +2 -0
- package/dist/adapters/jd/commerce.d.ts.map +1 -0
- package/dist/adapters/jd/commerce.js +133 -0
- package/dist/adapters/jd/commerce.js.map +1 -0
- package/dist/adapters/jianyu/detail.d.ts +2 -0
- package/dist/adapters/jianyu/detail.d.ts.map +1 -0
- package/dist/adapters/jianyu/detail.js +27 -0
- package/dist/adapters/jianyu/detail.js.map +1 -0
- package/dist/adapters/jimeng/workspace.d.ts +2 -0
- package/dist/adapters/jimeng/workspace.d.ts.map +1 -0
- package/dist/adapters/jimeng/workspace.js +49 -0
- package/dist/adapters/jimeng/workspace.js.map +1 -0
- package/dist/adapters/ke/rent-transaction.d.ts +2 -0
- package/dist/adapters/ke/rent-transaction.d.ts.map +1 -0
- package/dist/adapters/ke/rent-transaction.js +63 -0
- package/dist/adapters/ke/rent-transaction.js.map +1 -0
- package/dist/adapters/linux-do/search.d.ts +2 -0
- package/dist/adapters/linux-do/search.d.ts.map +1 -0
- package/dist/adapters/linux-do/search.js +75 -0
- package/dist/adapters/linux-do/search.js.map +1 -0
- package/dist/adapters/linux-do/topic-content.d.ts +2 -0
- package/dist/adapters/linux-do/topic-content.d.ts.map +1 -0
- package/dist/adapters/linux-do/topic-content.js +32 -0
- package/dist/adapters/linux-do/topic-content.js.map +1 -0
- package/dist/adapters/maimai/talents.d.ts +2 -0
- package/dist/adapters/maimai/talents.d.ts.map +1 -0
- package/dist/adapters/maimai/talents.js +64 -0
- package/dist/adapters/maimai/talents.js.map +1 -0
- package/dist/adapters/mubu/docs.d.ts +2 -0
- package/dist/adapters/mubu/docs.d.ts.map +1 -0
- package/dist/adapters/mubu/docs.js +96 -0
- package/dist/adapters/mubu/docs.js.map +1 -0
- package/dist/adapters/nowcoder/nowcoder.d.ts +2 -0
- package/dist/adapters/nowcoder/nowcoder.d.ts.map +1 -0
- package/dist/adapters/nowcoder/nowcoder.js +480 -0
- package/dist/adapters/nowcoder/nowcoder.js.map +1 -0
- package/dist/adapters/powerchina/search.d.ts +2 -0
- package/dist/adapters/powerchina/search.d.ts.map +1 -0
- package/dist/adapters/powerchina/search.js +41 -0
- package/dist/adapters/powerchina/search.js.map +1 -0
- package/dist/adapters/quark/actions.d.ts +2 -0
- package/dist/adapters/quark/actions.d.ts.map +1 -0
- package/dist/adapters/quark/actions.js +151 -0
- package/dist/adapters/quark/actions.js.map +1 -0
- package/dist/adapters/reddit/browser-utils.d.ts +7 -0
- package/dist/adapters/reddit/browser-utils.d.ts.map +1 -0
- package/dist/adapters/reddit/browser-utils.js +68 -0
- package/dist/adapters/reddit/browser-utils.js.map +1 -0
- package/dist/adapters/reddit/listings.d.ts +2 -0
- package/dist/adapters/reddit/listings.d.ts.map +1 -0
- package/dist/adapters/reddit/listings.js +193 -0
- package/dist/adapters/reddit/listings.js.map +1 -0
- package/dist/adapters/reddit/search.d.ts +2 -0
- package/dist/adapters/reddit/search.d.ts.map +1 -0
- package/dist/adapters/reddit/search.js +66 -0
- package/dist/adapters/reddit/search.js.map +1 -0
- package/dist/adapters/spotify/api.d.ts +2 -0
- package/dist/adapters/spotify/api.d.ts.map +1 -0
- package/dist/adapters/spotify/api.js +252 -0
- package/dist/adapters/spotify/api.js.map +1 -0
- package/dist/adapters/taobao/commerce.d.ts +2 -0
- package/dist/adapters/taobao/commerce.d.ts.map +1 -0
- package/dist/adapters/taobao/commerce.js +130 -0
- package/dist/adapters/taobao/commerce.js.map +1 -0
- package/dist/adapters/tdx/hot-rank.d.ts +2 -0
- package/dist/adapters/tdx/hot-rank.d.ts.map +1 -0
- package/dist/adapters/tdx/hot-rank.js +34 -0
- package/dist/adapters/tdx/hot-rank.js.map +1 -0
- package/dist/adapters/ths/hot-rank.d.ts +2 -0
- package/dist/adapters/ths/hot-rank.d.ts.map +1 -0
- package/dist/adapters/ths/hot-rank.js +34 -0
- package/dist/adapters/ths/hot-rank.js.map +1 -0
- package/dist/adapters/toutiao/articles.d.ts +2 -0
- package/dist/adapters/toutiao/articles.d.ts.map +1 -0
- package/dist/adapters/toutiao/articles.js +41 -0
- package/dist/adapters/toutiao/articles.js.map +1 -0
- package/dist/adapters/twitter/lists-extra.d.ts +2 -0
- package/dist/adapters/twitter/lists-extra.d.ts.map +1 -0
- package/dist/adapters/twitter/lists-extra.js +125 -0
- package/dist/adapters/twitter/lists-extra.js.map +1 -0
- package/dist/adapters/uiverse/components.d.ts +2 -0
- package/dist/adapters/uiverse/components.d.ts.map +1 -0
- package/dist/adapters/uiverse/components.js +138 -0
- package/dist/adapters/uiverse/components.js.map +1 -0
- package/dist/adapters/wanfang/search.d.ts +2 -0
- package/dist/adapters/wanfang/search.d.ts.map +1 -0
- package/dist/adapters/wanfang/search.js +34 -0
- package/dist/adapters/wanfang/search.js.map +1 -0
- package/dist/adapters/weixin/drafts.d.ts +2 -0
- package/dist/adapters/weixin/drafts.d.ts.map +1 -0
- package/dist/adapters/weixin/drafts.js +69 -0
- package/dist/adapters/weixin/drafts.js.map +1 -0
- package/dist/adapters/weread/ai-outline.d.ts +2 -0
- package/dist/adapters/weread/ai-outline.d.ts.map +1 -0
- package/dist/adapters/weread/ai-outline.js +28 -0
- package/dist/adapters/weread/ai-outline.js.map +1 -0
- package/dist/adapters/xiaoyuzhou/media.d.ts +2 -0
- package/dist/adapters/xiaoyuzhou/media.d.ts.map +1 -0
- package/dist/adapters/xiaoyuzhou/media.js +105 -0
- package/dist/adapters/xiaoyuzhou/media.js.map +1 -0
- package/dist/adapters/xueqiu/extra.d.ts +2 -0
- package/dist/adapters/xueqiu/extra.d.ts.map +1 -0
- package/dist/adapters/xueqiu/extra.js +74 -0
- package/dist/adapters/xueqiu/extra.js.map +1 -0
- package/dist/adapters/youtube/personal.d.ts +2 -0
- package/dist/adapters/youtube/personal.d.ts.map +1 -0
- package/dist/adapters/youtube/personal.js +183 -0
- package/dist/adapters/youtube/personal.js.map +1 -0
- package/dist/adapters/zhihu/actions.d.ts +2 -0
- package/dist/adapters/zhihu/actions.d.ts.map +1 -0
- package/dist/adapters/zhihu/actions.js +110 -0
- package/dist/adapters/zhihu/actions.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.map +1 -1
- package/dist/browser/adapter-authoring.js +3 -3
- package/dist/browser/adapter-authoring.js.map +1 -1
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +2 -3
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/daemon-client.d.ts.map +1 -1
- package/dist/browser/daemon-client.js +17 -5
- package/dist/browser/daemon-client.js.map +1 -1
- package/dist/browser/network-cache.js +2 -2
- package/dist/browser/network-cache.js.map +1 -1
- package/dist/browser/site-memory.d.ts.map +1 -1
- package/dist/browser/site-memory.js +11 -8
- package/dist/browser/site-memory.js.map +1 -1
- package/dist/browser/target-errors.d.ts +2 -2
- package/dist/browser/target-errors.js +2 -2
- package/dist/browser/verify-fixture.d.ts.map +1 -1
- package/dist/browser/verify-fixture.js +2 -2
- package/dist/browser/verify-fixture.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -4
- package/dist/cli.js.map +1 -1
- 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 +8 -3
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +8 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
- package/dist/commands/browser-operator-runtime.js +2 -2
- package/dist/commands/browser-operator-runtime.js.map +1 -1
- package/dist/commands/browser-operator.d.ts.map +1 -1
- package/dist/commands/browser-operator.js +2 -2
- package/dist/commands/browser-operator.js.map +1 -1
- package/dist/commands/describe.d.ts +2 -2
- package/dist/commands/describe.d.ts.map +1 -1
- package/dist/commands/describe.js +14 -3
- package/dist/commands/describe.js.map +1 -1
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +7 -6
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/explore.js +2 -2
- package/dist/commands/explore.js.map +1 -1
- package/dist/commands/generate.js +3 -3
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +4 -10
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/migrate.d.ts +9 -9
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +22 -22
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/repair.d.ts.map +1 -1
- package/dist/commands/repair.js +9 -4
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/search.d.ts +3 -3
- package/dist/commands/search.js +4 -4
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +8 -4
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/synthesize.js +2 -2
- package/dist/commands/synthesize.js.map +1 -1
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +69 -0
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +130 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/engine/kernel/execute.d.ts.map +1 -1
- package/dist/engine/kernel/execute.js +27 -4
- package/dist/engine/kernel/execute.js.map +1 -1
- package/dist/engine/user-home.d.ts +9 -0
- package/dist/engine/user-home.d.ts.map +1 -0
- package/dist/engine/user-home.js +12 -0
- package/dist/engine/user-home.js.map +1 -0
- package/dist/fast-path.d.ts +14 -0
- package/dist/fast-path.d.ts.map +1 -0
- package/dist/fast-path.js +565 -0
- package/dist/fast-path.js.map +1 -0
- package/dist/hub/index.d.ts +1 -1
- package/dist/hub/index.d.ts.map +1 -1
- package/dist/hub/index.js +28 -17
- package/dist/hub/index.js.map +1 -1
- package/dist/main.js +15 -3
- package/dist/main.js.map +1 -1
- package/dist/manifest-compact.txt +11 -11
- package/dist/manifest-search.json +1 -1
- package/dist/manifest.json +27600 -1016
- package/dist/mcp/tools.js +1 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/error-map.d.ts.map +1 -1
- package/dist/output/error-map.js +16 -5
- package/dist/output/error-map.js.map +1 -1
- package/dist/protocol/acp.js +1 -1
- package/dist/protocol/acp.js.map +1 -1
- package/dist/registry.d.ts +3 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +34 -1
- package/dist/registry.js.map +1 -1
- package/dist/runtime/usage-ledger.d.ts +6 -7
- package/dist/runtime/usage-ledger.d.ts.map +1 -1
- package/dist/runtime/usage-ledger.js +6 -7
- package/dist/runtime/usage-ledger.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +61 -52
- package/src/adapters/1688/assets.ts +114 -0
- package/src/adapters/51job/jobs.ts +327 -0
- package/src/adapters/_shared/browser-tools.ts +59 -0
- package/src/adapters/antigravity/extra.ts +53 -0
- package/src/adapters/baidu-scholar/search.ts +38 -0
- package/src/adapters/bilibili/compat.ts +132 -0
- package/src/adapters/binance/asks.yaml +41 -0
- package/src/adapters/binance/depth.yaml +41 -0
- package/src/adapters/binance/gainers.yaml +42 -0
- package/src/adapters/binance/hot.yaml +1 -1
- package/src/adapters/binance/kline.yaml +1 -1
- package/src/adapters/binance/klines.yaml +46 -0
- package/src/adapters/binance/losers.yaml +42 -0
- package/src/adapters/binance/pairs.yaml +38 -0
- package/src/adapters/binance/price.yaml +32 -0
- package/src/adapters/binance/prices.yaml +30 -0
- package/src/adapters/binance/ticker.yaml +2 -2
- package/src/adapters/binance/top.yaml +46 -0
- package/src/adapters/binance/trades.yaml +42 -0
- package/src/adapters/chatgpt/image.ts +84 -0
- package/src/adapters/chatgpt-app/chatgpt-app.ts +11 -0
- package/src/adapters/chatwise/extra.ts +36 -0
- package/src/adapters/codex/extra.ts +36 -0
- package/src/adapters/deepseek/web.ts +203 -0
- package/src/adapters/doubao/web.ts +154 -0
- package/src/adapters/eastmoney/market-data.ts +829 -0
- package/src/adapters/excel/insert-image.yaml +80 -0
- package/src/adapters/excel/insert-link.yaml +90 -0
- package/src/adapters/excel/list.yaml +63 -0
- package/src/adapters/excel/read.yaml +74 -0
- package/src/adapters/excel/set-cell.yaml +77 -0
- package/src/adapters/excel/set-font.yaml +87 -0
- package/src/adapters/excel/status.yaml +29 -0
- package/src/adapters/gh/search-repos.yaml +62 -0
- package/src/adapters/gitee/user.ts +59 -0
- package/src/adapters/google-scholar/cite.ts +95 -0
- package/src/adapters/google-scholar/profile.ts +91 -0
- package/src/adapters/google-scholar/search.ts +58 -0
- package/src/adapters/gov-law/laws.ts +61 -0
- package/src/adapters/gov-policy/policy.ts +61 -0
- package/src/adapters/imessage/contact.yaml +7 -2
- package/src/adapters/imessage/recent.yaml +7 -2
- package/src/adapters/imessage/search.yaml +7 -2
- package/src/adapters/jd/commerce.ts +142 -0
- package/src/adapters/jianyu/detail.ts +28 -0
- package/src/adapters/jimeng/workspace.ts +53 -0
- package/src/adapters/ke/rent-transaction.ts +70 -0
- package/src/adapters/linux-do/search.ts +92 -0
- package/src/adapters/linux-do/topic-content.ts +45 -0
- package/src/adapters/maimai/talents.ts +65 -0
- package/src/adapters/mubu/docs.ts +107 -0
- package/src/adapters/nowcoder/nowcoder.ts +570 -0
- package/src/adapters/powerchina/search.ts +45 -0
- package/src/adapters/powerpoint/add-slide.yaml +93 -0
- package/src/adapters/powerpoint/insert-image.yaml +71 -0
- package/src/adapters/powerpoint/insert-link.yaml +94 -0
- package/src/adapters/powerpoint/list.yaml +58 -0
- package/src/adapters/powerpoint/set-font.yaml +101 -0
- package/src/adapters/powerpoint/slides.yaml +73 -0
- package/src/adapters/powerpoint/status.yaml +29 -0
- package/src/adapters/quark/actions.ts +169 -0
- package/src/adapters/reddit/browser-utils.ts +93 -0
- package/src/adapters/reddit/listings.ts +223 -0
- package/src/adapters/reddit/search.ts +74 -0
- package/src/adapters/spotify/api.ts +292 -0
- package/src/adapters/taobao/commerce.ts +134 -0
- package/src/adapters/tdx/hot-rank.ts +35 -0
- package/src/adapters/ths/hot-rank.ts +35 -0
- package/src/adapters/toutiao/articles.ts +45 -0
- package/src/adapters/twitter/lists-extra.ts +139 -0
- package/src/adapters/uiverse/components.ts +154 -0
- package/src/adapters/vercel/list.yaml +2 -1
- package/src/adapters/wanfang/search.ts +38 -0
- package/src/adapters/weixin/drafts.ts +74 -0
- package/src/adapters/weread/ai-outline.ts +32 -0
- package/src/adapters/word/insert-image.yaml +73 -0
- package/src/adapters/word/insert-link.yaml +82 -0
- package/src/adapters/word/insert-text.yaml +72 -0
- package/src/adapters/word/list.yaml +63 -0
- package/src/adapters/word/read.yaml +63 -0
- package/src/adapters/word/set-font.yaml +97 -0
- package/src/adapters/word/status.yaml +29 -0
- package/src/adapters/xiaoyuzhou/media.ts +139 -0
- package/src/adapters/xueqiu/extra.ts +78 -0
- package/src/adapters/youtube/personal.ts +215 -0
- package/src/adapters/zhihu/actions.ts +111 -0
- package/src/hub/external-clis-harness.yaml +211 -0
- package/src/hub/external-clis.yaml +175 -0
- package/src/hub/index.ts +29 -25
- package/src/adapters/linux-do/search.yaml +0 -44
- package/src/adapters/meituan/hot.yaml +0 -34
- package/src/adapters/reddit/frontpage.test.ts +0 -15
- package/src/adapters/reddit/frontpage.yaml +0 -41
- package/src/adapters/reddit/hot.test.ts +0 -15
- package/src/adapters/reddit/hot.yaml +0 -41
- package/src/adapters/reddit/new.test.ts +0 -15
- package/src/adapters/reddit/new.yaml +0 -42
- package/src/adapters/reddit/popular.test.ts +0 -15
- package/src/adapters/reddit/popular.yaml +0 -41
- package/src/adapters/reddit/rising.test.ts +0 -15
- package/src/adapters/reddit/rising.yaml +0 -41
- package/src/adapters/reddit/search.test.ts +0 -15
- package/src/adapters/reddit/search.yaml +0 -52
- package/src/adapters/reddit/subreddit.test.ts +0 -15
- package/src/adapters/reddit/subreddit.yaml +0 -50
- package/src/adapters/reddit/top.test.ts +0 -15
- package/src/adapters/reddit/top.yaml +0 -48
- package/src/adapters/reddit/trending.test.ts +0 -15
- package/src/adapters/reddit/trending.yaml +0 -33
package/README.md
CHANGED
|
@@ -1,334 +1,310 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<picture>
|
|
6
|
-
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
|
|
7
|
-
<source media="(prefers-color-scheme: light)" srcset="assets/logo-light.svg">
|
|
8
|
-
<img alt="Uni-CLI" src="assets/logo-light.svg" width="420">
|
|
9
|
-
</picture>
|
|
10
|
-
|
|
11
|
-
<br><br>
|
|
12
|
-
|
|
13
|
-
**CLI is all agents need.**
|
|
14
|
-
|
|
15
|
-
The execution layer for agent skills. Deterministic, editable, cross-vendor.
|
|
16
|
-
|
|
17
|
-
<br>
|
|
18
|
-
|
|
19
|
-
<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>
|
|
20
|
-
<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>
|
|
21
|
-
<a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=flat-square" alt="license"></a>
|
|
22
|
-
<img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7145<!-- /STATS -->-44cc11?style=flat-square" alt="tests">
|
|
23
|
-
<img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=flat-square" alt="agent-reach ally">
|
|
24
|
-
|
|
25
|
-
<br><br>
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
npm install -g @zenalexa/unicli
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
<br>
|
|
32
|
-
|
|
33
|
-
<img src="docs/demo/demo.svg" alt="Uni-CLI in 30 seconds" width="720">
|
|
34
|
-
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
---
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/mascot-otter.png" alt="Uni-CLI otter mascot" width="180">
|
|
3
|
+
</p>
|
|
38
4
|
|
|
39
|
-
|
|
5
|
+
<h1 align="center">Uni-CLI</h1>
|
|
40
6
|
|
|
41
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>One CLI surface for agents to operate websites, desktop apps, local tools, and other CLIs.</strong>
|
|
9
|
+
</p>
|
|
42
10
|
|
|
43
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://olo-dot-io.github.io/Uni-CLI/">Docs</a>
|
|
13
|
+
·
|
|
14
|
+
<a href="https://olo-dot-io.github.io/Uni-CLI/reference/sites">Sites catalog</a>
|
|
15
|
+
·
|
|
16
|
+
<a href="https://olo-dot-io.github.io/Uni-CLI/llms.txt">llms.txt</a>
|
|
17
|
+
</p>
|
|
44
18
|
|
|
45
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
Search by intent, run a real command, get a structured envelope back. If a site changes, the error points to the adapter file and step to repair.
|
|
21
|
+
</p>
|
|
46
22
|
|
|
47
|
-
|
|
23
|
+
<p align="center">
|
|
24
|
+
<a href="https://www.npmjs.com/package/@zenalexa/unicli"><img alt="npm" src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square"></a>
|
|
25
|
+
<a href="./LICENSE"><img alt="license" src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square"></a>
|
|
26
|
+
<img alt="Node 20+" src="https://img.shields.io/badge/node-20%2B-339933?style=flat-square&logo=node.js&logoColor=white">
|
|
27
|
+
<img alt="MCP" src="https://img.shields.io/badge/MCP-2025--11--25-6f42c1?style=flat-square">
|
|
28
|
+
</p>
|
|
48
29
|
|
|
49
|
-
|
|
30
|
+
<p align="center">
|
|
31
|
+
<sub><!-- STATS:site_count -->235<!-- /STATS --> sites · <!-- STATS:command_count -->1448<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps · <!-- STATS:test_count -->7394<!-- /STATS --> tests</sub>
|
|
32
|
+
</p>
|
|
50
33
|
|
|
51
|
-
|
|
34
|
+
<p align="center">
|
|
35
|
+
<strong>Web / Social / Knowledge</strong><br>
|
|
36
|
+
<img src="https://img.shields.io/badge/X-000000?style=flat-square&logo=x&logoColor=white" alt="X">
|
|
37
|
+
<img src="https://img.shields.io/badge/Reddit-FF4500?style=flat-square&logo=reddit&logoColor=white" alt="Reddit">
|
|
38
|
+
<img src="https://img.shields.io/badge/Instagram-E4405F?style=flat-square&logo=instagram&logoColor=white" alt="Instagram">
|
|
39
|
+
<img src="https://img.shields.io/badge/TikTok-000000?style=flat-square&logo=tiktok&logoColor=white" alt="TikTok">
|
|
40
|
+
<img src="https://img.shields.io/badge/YouTube-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube">
|
|
41
|
+
<img src="https://img.shields.io/badge/Bilibili-00A1D6?style=flat-square&logo=bilibili&logoColor=white" alt="Bilibili">
|
|
42
|
+
<img src="https://img.shields.io/badge/Zhihu-0084FF?style=flat-square&logo=zhihu&logoColor=white" alt="Zhihu">
|
|
43
|
+
<img src="https://img.shields.io/badge/Weibo-E6162D?style=flat-square&logo=sinaweibo&logoColor=white" alt="Weibo">
|
|
44
|
+
<img src="https://img.shields.io/badge/Xiaohongshu-FF2442?style=flat-square&logoColor=white" alt="Xiaohongshu">
|
|
45
|
+
<img src="https://img.shields.io/badge/Douyin-000000?style=flat-square&logo=tiktok&logoColor=white" alt="Douyin">
|
|
46
|
+
<img src="https://img.shields.io/badge/Hacker%20News-FF6600?style=flat-square&logo=ycombinator&logoColor=white" alt="Hacker News">
|
|
47
|
+
<img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub">
|
|
48
|
+
<img src="https://img.shields.io/badge/Stack%20Overflow-F58025?style=flat-square&logo=stackoverflow&logoColor=white" alt="Stack Overflow">
|
|
49
|
+
<img src="https://img.shields.io/badge/Product%20Hunt-DA552F?style=flat-square&logo=producthunt&logoColor=white" alt="Product Hunt">
|
|
50
|
+
<img src="https://img.shields.io/badge/npm-CB3837?style=flat-square&logo=npm&logoColor=white" alt="npm">
|
|
51
|
+
<img src="https://img.shields.io/badge/PyPI-3775A9?style=flat-square&logo=pypi&logoColor=white" alt="PyPI">
|
|
52
|
+
<img src="https://img.shields.io/badge/Wikipedia-000000?style=flat-square&logo=wikipedia&logoColor=white" alt="Wikipedia">
|
|
53
|
+
<img src="https://img.shields.io/badge/Spotify-1DB954?style=flat-square&logo=spotify&logoColor=white" alt="Spotify">
|
|
54
|
+
<img src="https://img.shields.io/badge/IMDb-F5C518?style=flat-square&logo=imdb&logoColor=black" alt="IMDb">
|
|
55
|
+
<img src="https://img.shields.io/badge/Bloomberg-000000?style=flat-square&logoColor=white" alt="Bloomberg">
|
|
56
|
+
<img src="https://img.shields.io/badge/Reuters-FF8000?style=flat-square&logo=reuters&logoColor=white" alt="Reuters">
|
|
57
|
+
<img src="https://img.shields.io/badge/BBC-B80000?style=flat-square&logo=bbc&logoColor=white" alt="BBC">
|
|
58
|
+
<img src="https://img.shields.io/badge/Binance-F0B90B?style=flat-square&logo=binance&logoColor=black" alt="Binance">
|
|
59
|
+
<img src="https://img.shields.io/badge/Coinbase-0052FF?style=flat-square&logo=coinbase&logoColor=white" alt="Coinbase">
|
|
60
|
+
<img src="https://img.shields.io/badge/Yahoo%20Finance-6001D2?style=flat-square&logo=yahoo&logoColor=white" alt="Yahoo Finance">
|
|
61
|
+
</p>
|
|
52
62
|
|
|
53
|
-
|
|
63
|
+
<p align="center">
|
|
64
|
+
<strong>Agent / IDE / Coding Surfaces</strong><br>
|
|
65
|
+
<img src="https://img.shields.io/badge/Claude%20Code-D97757?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code">
|
|
66
|
+
<img src="https://img.shields.io/badge/Codex-111111?style=flat-square&logo=openai&logoColor=white" alt="Codex">
|
|
67
|
+
<img src="https://img.shields.io/badge/OpenCode-101010?style=flat-square&logoColor=white" alt="OpenCode">
|
|
68
|
+
<img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logoColor=white" alt="Cursor">
|
|
69
|
+
<img src="https://img.shields.io/badge/Kiro-FF9900?style=flat-square&logo=amazon&logoColor=black" alt="Kiro">
|
|
70
|
+
<img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=googlegemini&logoColor=white" alt="Gemini">
|
|
71
|
+
<img src="https://img.shields.io/badge/Qwen-1E88E5?style=flat-square&logoColor=white" alt="Qwen">
|
|
72
|
+
<img src="https://img.shields.io/badge/Kimi-6C5CE7?style=flat-square&logoColor=white" alt="Kimi">
|
|
73
|
+
<img src="https://img.shields.io/badge/MiniMax-00A6FB?style=flat-square&logoColor=white" alt="MiniMax">
|
|
74
|
+
<img src="https://img.shields.io/badge/Cline-6E56CF?style=flat-square&logoColor=white" alt="Cline">
|
|
75
|
+
<img src="https://img.shields.io/badge/Roo%20Code-2E7D32?style=flat-square&logoColor=white" alt="Roo Code">
|
|
76
|
+
<img src="https://img.shields.io/badge/Windsurf-00C2FF?style=flat-square&logoColor=white" alt="Windsurf">
|
|
77
|
+
<img src="https://img.shields.io/badge/Aider-6F42C1?style=flat-square&logo=python&logoColor=white" alt="Aider">
|
|
78
|
+
<img src="https://img.shields.io/badge/Goose-111827?style=flat-square&logoColor=white" alt="Goose">
|
|
79
|
+
<img src="https://img.shields.io/badge/OpenHands-FF6B00?style=flat-square&logoColor=white" alt="OpenHands">
|
|
80
|
+
<img src="https://img.shields.io/badge/SWE--agent-0F172A?style=flat-square&logoColor=white" alt="SWE-agent">
|
|
81
|
+
<img src="https://img.shields.io/badge/GitHub%20Copilot-181717?style=flat-square&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
|
|
82
|
+
<img src="https://img.shields.io/badge/AgentAPI-334155?style=flat-square&logoColor=white" alt="AgentAPI">
|
|
83
|
+
<img src="https://img.shields.io/badge/acpx-475569?style=flat-square&logoColor=white" alt="acpx">
|
|
84
|
+
</p>
|
|
54
85
|
|
|
55
|
-
|
|
86
|
+
<p align="center">
|
|
87
|
+
<strong>Desktop / Media / DevOps / Cloud</strong><br>
|
|
88
|
+
<img src="https://img.shields.io/badge/macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS">
|
|
89
|
+
<img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white" alt="Chrome">
|
|
90
|
+
<img src="https://img.shields.io/badge/Blender-F5792A?style=flat-square&logo=blender&logoColor=white" alt="Blender">
|
|
91
|
+
<img src="https://img.shields.io/badge/FFmpeg-007808?style=flat-square&logo=ffmpeg&logoColor=white" alt="FFmpeg">
|
|
92
|
+
<img src="https://img.shields.io/badge/ImageMagick-0074C1?style=flat-square&logoColor=white" alt="ImageMagick">
|
|
93
|
+
<img src="https://img.shields.io/badge/GIMP-5C5543?style=flat-square&logo=gimp&logoColor=white" alt="GIMP">
|
|
94
|
+
<img src="https://img.shields.io/badge/FreeCAD-729FCF?style=flat-square&logo=freecad&logoColor=white" alt="FreeCAD">
|
|
95
|
+
<img src="https://img.shields.io/badge/Audacity-0000CC?style=flat-square&logo=audacity&logoColor=white" alt="Audacity">
|
|
96
|
+
<img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
|
|
97
|
+
<img src="https://img.shields.io/badge/GitHub%20CLI-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub CLI">
|
|
98
|
+
<img src="https://img.shields.io/badge/jq-C7254E?style=flat-square&logo=json&logoColor=white" alt="jq">
|
|
99
|
+
<img src="https://img.shields.io/badge/yt--dlp-4A5568?style=flat-square&logo=youtube&logoColor=white" alt="yt-dlp">
|
|
100
|
+
<img src="https://img.shields.io/badge/AWS-232F3E?style=flat-square&logo=amazonaws&logoColor=white" alt="AWS">
|
|
101
|
+
<img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=vercel&logoColor=white" alt="Vercel">
|
|
102
|
+
<img src="https://img.shields.io/badge/Supabase-3ECF8E?style=flat-square&logo=supabase&logoColor=black" alt="Supabase">
|
|
103
|
+
<img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" alt="Cloudflare">
|
|
104
|
+
<img src="https://img.shields.io/badge/Stripe-635BFF?style=flat-square&logo=stripe&logoColor=white" alt="Stripe">
|
|
105
|
+
<img src="https://img.shields.io/badge/Firebase-FFCA28?style=flat-square&logo=firebase&logoColor=black" alt="Firebase">
|
|
106
|
+
<img src="https://img.shields.io/badge/Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white" alt="Netlify">
|
|
107
|
+
<img src="https://img.shields.io/badge/Railway-0B0D0E?style=flat-square&logo=railway&logoColor=white" alt="Railway">
|
|
108
|
+
<img src="https://img.shields.io/badge/Azure-0078D4?style=flat-square&logo=microsoftazure&logoColor=white" alt="Azure">
|
|
109
|
+
<img src="https://img.shields.io/badge/Google%20Cloud-4285F4?style=flat-square&logo=googlecloud&logoColor=white" alt="Google Cloud">
|
|
110
|
+
<img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack">
|
|
111
|
+
<img src="https://img.shields.io/badge/Notion-000000?style=flat-square&logo=notion&logoColor=white" alt="Notion">
|
|
112
|
+
<img src="https://img.shields.io/badge/Linear-5E6AD2?style=flat-square&logo=linear&logoColor=white" alt="Linear">
|
|
113
|
+
<img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=figma&logoColor=white" alt="Figma">
|
|
114
|
+
</p>
|
|
56
115
|
|
|
57
116
|
```bash
|
|
58
|
-
# 1. Install
|
|
59
117
|
npm install -g @zenalexa/unicli
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
unicli list # all sites + commands
|
|
63
|
-
unicli search "推特热门" # → twitter trending (bilingual)
|
|
64
|
-
|
|
65
|
-
# 3. Run
|
|
66
|
-
unicli reddit hot --limit 3 # zero-config web API
|
|
67
|
-
unicli hackernews top -f json | jq '.data[].title' # pipe + transform
|
|
68
|
-
|
|
69
|
-
# 4. Wire into an agent
|
|
70
|
-
claude mcp add unicli -- npx @zenalexa/unicli mcp serve # Claude Code (MCP stdio)
|
|
71
|
-
unicli mcp serve --transport streamable --port 19826 # Any MCP client (HTTP)
|
|
72
|
-
unicli acp # avante.nvim / Zed (ACP)
|
|
118
|
+
unicli search "hacker news frontpage"
|
|
119
|
+
unicli hackernews top -f json
|
|
73
120
|
```
|
|
74
121
|
|
|
75
|
-
|
|
122
|
+
<!-- IF YOU ARE AN AI AGENT: Start here.
|
|
123
|
+
Install: npm install -g @zenalexa/unicli
|
|
124
|
+
Discover: unicli search "your intent"
|
|
125
|
+
Run: unicli <site> <command> [args] [-f json|md|yaml|csv|compact]
|
|
126
|
+
Repair: read the error envelope, edit the adapter_path, run unicli repair <site> <command>
|
|
127
|
+
Prefer native CLI / JSON stream / MCP for agent runtimes. Use ACP as an editor compatibility gateway.
|
|
128
|
+
-->
|
|
76
129
|
|
|
77
|
-
##
|
|
130
|
+
## What It Does
|
|
78
131
|
|
|
79
|
-
|
|
80
|
-
graph TB
|
|
81
|
-
CMD["unicli <site> <command>"]
|
|
132
|
+
Uni-CLI turns software surfaces into commands that agents can discover, run, and fix.
|
|
82
133
|
|
|
83
|
-
|
|
134
|
+
| Surface | What you get |
|
|
135
|
+
| ------------------ | -------------------------------------------------------------------------------------------------- |
|
|
136
|
+
| Websites and APIs | Declarative adapters for public, cookie, header, and browser-intercept workflows |
|
|
137
|
+
| Browser automation | CDP steps for navigate, click, type, intercept, snapshot, extract, wait, and related browser work |
|
|
138
|
+
| Desktop and macOS | System commands, app adapters, screenshots, clipboard, calendar, brightness, and local tools |
|
|
139
|
+
| External CLIs | 58 registered pass-through bridges with install/status discovery |
|
|
140
|
+
| Agent backends | Route matrix for native CLI, JSON stream, MCP, ACP, HTTP API, OpenAI-compatible, and bridge routes |
|
|
141
|
+
| Output | v2 `AgentEnvelope` in Markdown, JSON, YAML, CSV, or compact format |
|
|
142
|
+
| Repair | Structured errors with `adapter_path`, failing `step`, retryability, suggestions, and alternatives |
|
|
84
143
|
|
|
85
|
-
|
|
144
|
+
## For Agents
|
|
86
145
|
|
|
87
|
-
|
|
88
|
-
ENGINE --> T2["CDP Browser<br/>(raw WebSocket)"]
|
|
89
|
-
ENGINE --> T3["Subprocess<br/>(ffmpeg, yt-dlp, gh)"]
|
|
90
|
-
ENGINE --> T4["Desktop-AX<br/>(macOS AppleScript)"]
|
|
91
|
-
ENGINE --> T5["Desktop-UIA<br/>(Windows declared stub)"]
|
|
92
|
-
ENGINE --> T6["Desktop-AT-SPI<br/>(Linux declared stub)"]
|
|
93
|
-
ENGINE --> T7["CUA<br/>(contract · mock · provider stubs)"]
|
|
146
|
+
Use search first, then run the smallest matching command.
|
|
94
147
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
T5 --> OUT
|
|
100
|
-
T6 --> OUT
|
|
101
|
-
T7 --> OUT
|
|
148
|
+
```bash
|
|
149
|
+
unicli search "twitter trending" --limit 5
|
|
150
|
+
unicli twitter search "coding agents" -f json
|
|
151
|
+
unicli repair twitter search
|
|
102
152
|
```
|
|
103
153
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
## Self-repair
|
|
107
|
-
|
|
108
|
-
When a command breaks:
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
unicli <site> <cmd> fails
|
|
112
|
-
→ structured error envelope on stderr
|
|
113
|
-
{ adapter_path, step, action, suggestion }
|
|
114
|
-
→ agent opens the ~20-line YAML
|
|
115
|
-
→ agent edits the selector / URL / auth
|
|
116
|
-
→ unicli <site> <cmd> works
|
|
117
|
-
→ fix persists in ~/.unicli/adapters/ (survives npm update)
|
|
118
|
-
```
|
|
154
|
+
Output defaults to structured Markdown for non-TTY and agent-user-agent runs. Force a machine format when you need one:
|
|
119
155
|
|
|
120
156
|
```bash
|
|
121
|
-
unicli
|
|
122
|
-
unicli
|
|
123
|
-
unicli repair --loop # Autonomous fix loop
|
|
157
|
+
UNICLI_OUTPUT=json unicli reddit hot --limit 10
|
|
158
|
+
unicli hackernews top --limit 5 -f yaml
|
|
124
159
|
```
|
|
125
160
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
## Feature matrix
|
|
161
|
+
Protocol entry points:
|
|
129
162
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
| **Bilingual search** | BM25 + TF-IDF, 50KB index, <10ms queries, 200-entry ZH↔EN alias table |
|
|
138
|
-
| **Browser operator** | Extension-backed browser daemon with shared or isolated workspaces, background mode, bind/sessions |
|
|
163
|
+
```bash
|
|
164
|
+
npx @zenalexa/unicli mcp serve
|
|
165
|
+
npx @zenalexa/unicli mcp serve --transport streamable --port 19826
|
|
166
|
+
unicli acp
|
|
167
|
+
unicli agents recommend codex
|
|
168
|
+
unicli agents matrix
|
|
169
|
+
```
|
|
139
170
|
|
|
140
|
-
|
|
171
|
+
ACP is supported for editors and bridge tooling. The primary runtime path stays native CLI, JSON stream, or MCP when those routes are available.
|
|
141
172
|
|
|
142
|
-
##
|
|
173
|
+
## Coverage
|
|
143
174
|
|
|
144
|
-
|
|
175
|
+
The catalog is intentionally broad, but the important point is not the count. The important point is that every command is discoverable, typed, and repairable.
|
|
145
176
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
| **macOS system (58)** | screenshot, clipboard, Calendar, Mail, Reminders, Shortcuts, Safari |
|
|
155
|
-
| **CLI bridges (35)** | gh, yt-dlp, jq, aws, vercel, supabase, wrangler, stripe |
|
|
177
|
+
| Area | Examples |
|
|
178
|
+
| ----------------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
179
|
+
| Chinese platforms | xiaohongshu, zhihu, bilibili, douyin, douban, v2ex, jike, linux-do |
|
|
180
|
+
| International platforms | twitter, reddit, instagram, tiktok, discord, slack, hackernews, lesswrong |
|
|
181
|
+
| AI and developer tools | Claude, ChatGPT, Gemini, Codex, Cursor, VS Code, Docker Desktop, Postman |
|
|
182
|
+
| Finance and news | xueqiu, eastmoney, yahoo-finance, bloomberg, reuters, bbc, 36kr |
|
|
183
|
+
| Desktop apps | Blender, FreeCAD, GIMP, Audacity, Figma, Docker, ImageMagick, ffmpeg |
|
|
184
|
+
| Agent CLIs | Claude Code, Codex, OpenCode, Gemini CLI, Qwen Code, Aider, Goose, Cursor Agent, Kiro, OpenHands, SWE-agent |
|
|
156
185
|
|
|
157
|
-
|
|
186
|
+
See the live catalog:
|
|
158
187
|
|
|
159
|
-
|
|
188
|
+
```bash
|
|
189
|
+
unicli list
|
|
190
|
+
unicli list --site macos
|
|
191
|
+
unicli ext list
|
|
192
|
+
unicli ext list --tag agent
|
|
193
|
+
```
|
|
160
194
|
|
|
161
|
-
|
|
195
|
+
Browse the same generated catalog on the docs site:
|
|
196
|
+
<https://olo-dot-io.github.io/Uni-CLI/reference/sites>
|
|
162
197
|
|
|
163
|
-
|
|
164
|
-
| --------------- | ---------------------------------------------------------- | ----------------------------------------- |
|
|
165
|
-
| **Claude Code** | `claude mcp add unicli -- npx @zenalexa/unicli mcp serve` | 4 meta-tools, stdio |
|
|
166
|
-
| **Codex CLI** | Add `[mcp_servers.unicli]` to `~/.codex/config.toml` | First-class AGENTS.md citizen |
|
|
167
|
-
| **Cursor** | MCP Settings → `unicli` → `npx @zenalexa/unicli mcp serve` | Bilingual search works inside Cursor chat |
|
|
168
|
-
| **avante.nvim** | `type = "acp", command = "unicli", args = { "acp" }` | See [`docs/AVANTE.md`](docs/AVANTE.md) |
|
|
169
|
-
| **OpenCode** | MCP via `opencode.jsonc` — `command: "unicli mcp serve"` | AGENTS.md auto-loaded |
|
|
170
|
-
| **Cline** | Add MCP server in settings — stdio transport | Same 4 meta-tools, 200-token cold start |
|
|
198
|
+
## Output Contract
|
|
171
199
|
|
|
172
|
-
|
|
200
|
+
Every normal command returns a v2 envelope. `mcp serve` and `acp` are protocol servers and keep their raw stdio protocol.
|
|
173
201
|
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
202
|
+
```yaml
|
|
203
|
+
ok: true
|
|
204
|
+
schema_version: "2"
|
|
205
|
+
command: "twitter.search"
|
|
206
|
+
meta:
|
|
207
|
+
duration_ms: 412
|
|
208
|
+
count: 20
|
|
209
|
+
surface: web
|
|
210
|
+
data:
|
|
211
|
+
- { id: "...", text: "...", author: "..." }
|
|
212
|
+
error: null
|
|
178
213
|
```
|
|
179
214
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
Five auth strategies, auto-probed in a cascade (`public → cookie → header`):
|
|
215
|
+
Errors are meant to be acted on:
|
|
183
216
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
217
|
+
```yaml
|
|
218
|
+
ok: false
|
|
219
|
+
schema_version: "2"
|
|
220
|
+
command: "twitter.search"
|
|
221
|
+
meta:
|
|
222
|
+
duration_ms: 91
|
|
223
|
+
data: null
|
|
224
|
+
error:
|
|
225
|
+
code: auth_required
|
|
226
|
+
message: "401 Unauthorized"
|
|
227
|
+
adapter_path: "src/adapters/twitter/search.yaml"
|
|
228
|
+
step: 1
|
|
229
|
+
suggestion: "Run: unicli auth setup twitter"
|
|
230
|
+
retryable: false
|
|
231
|
+
alternatives: ["twitter.timeline", "twitter.profile"]
|
|
196
232
|
```
|
|
197
233
|
|
|
198
|
-
|
|
234
|
+
Exit codes: `0` ok, `66` empty, `69` unavailable, `75` temporary failure, `77` auth, `78` config.
|
|
199
235
|
|
|
200
|
-
-
|
|
201
|
-
- `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.
|
|
236
|
+
## Self-Repair
|
|
202
237
|
|
|
203
|
-
|
|
238
|
+
Adapters are small YAML files by default. A failed command gives an agent enough context to patch the broken part without waiting for a package release.
|
|
204
239
|
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
240
|
+
```text
|
|
241
|
+
1. Run the command.
|
|
242
|
+
2. Read the error envelope.
|
|
243
|
+
3. Open error.adapter_path.
|
|
244
|
+
4. Patch the failing step.
|
|
245
|
+
5. Save the override in ~/.unicli/adapters/<site>/<command>.yaml.
|
|
246
|
+
6. Verify with unicli repair <site> <command>.
|
|
211
247
|
```
|
|
212
248
|
|
|
213
|
-
|
|
249
|
+
Local overrides survive npm updates.
|
|
214
250
|
|
|
215
|
-
|
|
251
|
+
## Write An Adapter
|
|
216
252
|
|
|
217
253
|
```yaml
|
|
218
|
-
site:
|
|
219
|
-
name:
|
|
220
|
-
|
|
254
|
+
site: example
|
|
255
|
+
name: search
|
|
256
|
+
description: "Search example.com"
|
|
257
|
+
transport: http
|
|
221
258
|
strategy: public
|
|
259
|
+
capabilities: [fetch, select, map, limit]
|
|
260
|
+
minimum_capability: http.fetch
|
|
261
|
+
trust: public
|
|
262
|
+
confidentiality: public
|
|
263
|
+
quarantine: false
|
|
222
264
|
pipeline:
|
|
223
265
|
- fetch:
|
|
224
|
-
url: "https://
|
|
225
|
-
-
|
|
226
|
-
- each:
|
|
227
|
-
do:
|
|
228
|
-
- fetch:
|
|
229
|
-
url: "https://hacker-news.firebaseio.com/v0/item/${{ item }}.json"
|
|
266
|
+
url: "https://api.example.com/search?q=${{ args.query }}"
|
|
267
|
+
- select: data.results
|
|
230
268
|
- map:
|
|
231
269
|
title: "${{ item.title }}"
|
|
232
|
-
score: "${{ item.score }}"
|
|
233
270
|
url: "${{ item.url }}"
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
Scaffold, dev, test:
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
unicli init <site> <command> # Scaffold new adapter
|
|
243
|
-
unicli dev <path> # Hot-reload during dev
|
|
244
|
-
unicli test <site> # Validate
|
|
245
|
-
unicli record <url> # Auto-generate adapter from traffic
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md). Migrating from OpenCLI: [`docs/MIGRATING-FROM-OPENCLI.md`](docs/MIGRATING-FROM-OPENCLI.md) and the one-shot `unicli import opencli-yaml`.
|
|
249
|
-
|
|
250
|
-
## Search
|
|
251
|
-
|
|
252
|
-
Agents find commands by intent, bilingual:
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
unicli search "推特热门" # → twitter trending
|
|
256
|
-
unicli search "download video" # → bilibili download, yt-dlp download, twitter download
|
|
257
|
-
unicli search "股票行情" # → binance ticker, xueqiu quote, barchart quote
|
|
258
|
-
unicli search --category finance # browse by category
|
|
271
|
+
- limit: "${{ args.limit }}"
|
|
272
|
+
args:
|
|
273
|
+
- { name: query, type: string, required: true, positional: true }
|
|
274
|
+
- { name: limit, type: int, default: 20 }
|
|
275
|
+
columns: [title, url]
|
|
259
276
|
```
|
|
260
277
|
|
|
261
|
-
|
|
278
|
+
Docs:
|
|
262
279
|
|
|
263
|
-
|
|
280
|
+
- [Documentation site](https://olo-dot-io.github.io/Uni-CLI/)
|
|
281
|
+
- [Getting started](docs/guide/getting-started.md)
|
|
282
|
+
- [Integrations](docs/guide/integrations.md)
|
|
283
|
+
- [Adapter format](docs/ADAPTER-FORMAT.md)
|
|
284
|
+
- [Pipeline reference](docs/reference/pipeline.md)
|
|
285
|
+
- [Exit codes](docs/reference/exit-codes.md)
|
|
264
286
|
|
|
265
|
-
|
|
287
|
+
## Trust And Limits
|
|
266
288
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
Full treatment with 42 citations: [`docs/THEORY.md`](docs/THEORY.md). Reproducible benchmarks comparing Uni-CLI to GitHub MCP and Firecrawl MCP: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
|
|
289
|
+
- Auth-required sites use local cookie files under `~/.unicli/cookies/<site>.json`.
|
|
290
|
+
- Browser adapters require a reachable Chrome/CDP session.
|
|
291
|
+
- CUA routes require a configured real backend. Declared-but-unavailable providers fail closed with structured errors.
|
|
292
|
+
- User adapters and repairs live in `~/.unicli/adapters/`; committed adapters remain the package baseline.
|
|
293
|
+
- If a site blocks automation or changes a private API, the correct behavior is a clear failure envelope, not a fabricated success.
|
|
274
294
|
|
|
275
295
|
## Development
|
|
276
296
|
|
|
277
297
|
```bash
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
298
|
+
pnpm install
|
|
299
|
+
pnpm typecheck
|
|
300
|
+
pnpm lint
|
|
301
|
+
npm run verify
|
|
281
302
|
```
|
|
282
303
|
|
|
283
|
-
| Command | Purpose |
|
|
284
|
-
| ---------------------- | --------------------------------------------------------- |
|
|
285
|
-
| `npm run dev` | Run from source |
|
|
286
|
-
| `npm run build` | Production build |
|
|
287
|
-
| `npm run typecheck` | TypeScript strict |
|
|
288
|
-
| `npm run lint` | Oxlint |
|
|
289
|
-
| `npm run test` | Unit tests (<!-- STATS:test_count -->7145<!-- /STATS -->) |
|
|
290
|
-
| `npm run test:adapter` | Validate all adapters |
|
|
291
|
-
| `npm run verify` | Full pipeline (7 gates) |
|
|
292
|
-
|
|
293
|
-
Eleven production dependencies: `ajv`, `ajv-formats`, `chalk`, `cli-table3`, `commander`, `js-yaml`, `jsonpath-plus`, `turndown`, `undici`, `ws`, `zod`.
|
|
294
|
-
|
|
295
|
-
## Release cadence
|
|
296
|
-
|
|
297
|
-
Patches ship every **Friday 09:00 HKT** when substantive commits have landed since the last tag. Quiet weeks are recorded and skipped — silence is success, not failure. Dependabot bumps are grouped into one PR per Monday so they ride along in the Friday cut without flooding the commit log.
|
|
298
|
-
|
|
299
|
-
<a href="https://github.com/olo-dot-io/Uni-CLI/commits/main"><img src="https://img.shields.io/github/last-commit/olo-dot-io/Uni-CLI?style=flat-square&label=last-commit" alt="last commit"></a>
|
|
300
|
-
|
|
301
|
-
Full policy — manual overrides, cancellation procedure, escalation rules: [`docs/RELEASE-CADENCE.md`](docs/RELEASE-CADENCE.md).
|
|
302
|
-
|
|
303
|
-
## Contributing
|
|
304
|
-
|
|
305
|
-
The fastest path to a merged PR: write a 20-line YAML adapter for a site you use every day. Per-domain guides live in [`contributing/`](contributing/):
|
|
306
|
-
|
|
307
|
-
| Area | Guide |
|
|
308
|
-
| ---------------- | -------------------------------------------------------- |
|
|
309
|
-
| New adapter | [`contributing/adapter.md`](contributing/adapter.md) |
|
|
310
|
-
| New transport | [`contributing/transport.md`](contributing/transport.md) |
|
|
311
|
-
| CUA backend | [`contributing/cua.md`](contributing/cua.md) |
|
|
312
|
-
| MCP server | [`contributing/mcp.md`](contributing/mcp.md) |
|
|
313
|
-
| ACP integration | [`contributing/acp.md`](contributing/acp.md) |
|
|
314
|
-
| Release process | [`contributing/release.md`](contributing/release.md) |
|
|
315
|
-
| Schema migration | [`contributing/schema.md`](contributing/schema.md) |
|
|
316
|
-
|
|
317
304
|
## License
|
|
318
305
|
|
|
319
306
|
[Apache-2.0](./LICENSE)
|
|
320
307
|
|
|
321
|
-
Repo: <https://github.com/olo-dot-io/Uni-CLI> · npm: [`@zenalexa/unicli`](https://www.npmjs.com/package/@zenalexa/unicli) · Issues welcome.
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
<p align="center">
|
|
326
|
-
<a href="https://github.com/olo-dot-io/Uni-CLI/graphs/contributors">
|
|
327
|
-
<img src="https://contrib.rocks/image?repo=olo-dot-io/Uni-CLI" alt="Contributors">
|
|
328
|
-
</a>
|
|
329
|
-
</p>
|
|
330
|
-
|
|
331
308
|
<p align="center">
|
|
332
|
-
<sub>
|
|
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>
|
|
309
|
+
<sub>0.216.0 — OpenCLI Parity Harness</sub>
|
|
334
310
|
</p>
|