@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
|
@@ -38,6 +38,91 @@
|
|
|
38
38
|
|
|
39
39
|
# ── Tier 1 — AI Agent CLIs ──────────────────────────────────────────────
|
|
40
40
|
|
|
41
|
+
- name: claude-code
|
|
42
|
+
binary: claude
|
|
43
|
+
description: "Claude Code — Anthropic coding agent CLI"
|
|
44
|
+
homepage: "https://www.anthropic.com/claude-code"
|
|
45
|
+
tags: [ai, agent, coding, claude, mcp]
|
|
46
|
+
json_flag: "--output-format stream-json"
|
|
47
|
+
install:
|
|
48
|
+
default: "npm install -g @anthropic-ai/claude-code"
|
|
49
|
+
|
|
50
|
+
- name: codex-cli
|
|
51
|
+
binary: codex
|
|
52
|
+
description: "Codex CLI — OpenAI coding agent CLI"
|
|
53
|
+
homepage: "https://github.com/openai/codex"
|
|
54
|
+
tags: [ai, agent, coding, openai, codex, mcp]
|
|
55
|
+
json_flag: "--json"
|
|
56
|
+
install:
|
|
57
|
+
default: "npm install -g @openai/codex"
|
|
58
|
+
|
|
59
|
+
- name: opencode-cli
|
|
60
|
+
binary: opencode
|
|
61
|
+
description: "OpenCode — coding agent CLI with ACP and native TUI surfaces"
|
|
62
|
+
homepage: "https://opencode.ai"
|
|
63
|
+
tags: [ai, agent, coding, opencode, acp, mcp]
|
|
64
|
+
json_flag: "--json"
|
|
65
|
+
install:
|
|
66
|
+
default: "npm install -g opencode-ai"
|
|
67
|
+
|
|
68
|
+
- name: openclaw
|
|
69
|
+
binary: openclaw
|
|
70
|
+
description: "OpenClaw — multi-channel AI gateway"
|
|
71
|
+
homepage: "https://openclaw.ai"
|
|
72
|
+
tags: [ai, gateway, openclaw, acp]
|
|
73
|
+
install:
|
|
74
|
+
default: "npm install -g openclaw"
|
|
75
|
+
|
|
76
|
+
- name: acpx
|
|
77
|
+
binary: acpx
|
|
78
|
+
description: "acpx — ACP bridge and workflow runner for coding agents"
|
|
79
|
+
homepage: "https://github.com/openclaw/acpx"
|
|
80
|
+
tags: [ai, agent, coding, openclaw, acp, bridge]
|
|
81
|
+
json_flag: "--json"
|
|
82
|
+
install:
|
|
83
|
+
default: "npm install -g acpx"
|
|
84
|
+
|
|
85
|
+
- name: hermes-agent
|
|
86
|
+
binary: hermes
|
|
87
|
+
description: "Hermes Agent — local skills and session-oriented agent CLI"
|
|
88
|
+
homepage: "https://github.com/NousResearch/hermes-agent"
|
|
89
|
+
tags: [ai, agent, coding, hermes, skills]
|
|
90
|
+
json_flag: "--json"
|
|
91
|
+
install:
|
|
92
|
+
default: "curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash"
|
|
93
|
+
|
|
94
|
+
- name: cursor-agent
|
|
95
|
+
binary: cursor-agent
|
|
96
|
+
description: "Cursor Agent — Cursor coding agent CLI"
|
|
97
|
+
homepage: "https://cursor.com"
|
|
98
|
+
tags: [ai, agent, coding, cursor, acp]
|
|
99
|
+
|
|
100
|
+
- name: gemini-cli
|
|
101
|
+
binary: gemini
|
|
102
|
+
description: "Gemini CLI — Google open-source terminal coding agent"
|
|
103
|
+
homepage: "https://github.com/google-gemini/gemini-cli"
|
|
104
|
+
tags: [ai, agent, coding, google, gemini, mcp]
|
|
105
|
+
install:
|
|
106
|
+
default: "npm install -g @google/gemini-cli"
|
|
107
|
+
|
|
108
|
+
- name: qwen-code
|
|
109
|
+
binary: qwen
|
|
110
|
+
description: "Qwen Code — open-source terminal coding agent"
|
|
111
|
+
homepage: "https://github.com/QwenLM/qwen-code"
|
|
112
|
+
tags: [ai, agent, coding, qwen, alibaba]
|
|
113
|
+
install:
|
|
114
|
+
default: "npm install -g @qwen-code/qwen-code"
|
|
115
|
+
|
|
116
|
+
- name: kiro-cli
|
|
117
|
+
binary: kiro-cli
|
|
118
|
+
description: "Kiro CLI — Amazon Q successor terminal coding agent"
|
|
119
|
+
homepage: "https://kiro.dev/docs/cli"
|
|
120
|
+
tags: [ai, agent, coding, aws, kiro, mcp]
|
|
121
|
+
install:
|
|
122
|
+
mac: "curl -fsSL https://cli.kiro.dev/install | bash"
|
|
123
|
+
linux: "curl -fsSL https://cli.kiro.dev/install | bash"
|
|
124
|
+
default: "curl -fsSL https://cli.kiro.dev/install | bash"
|
|
125
|
+
|
|
41
126
|
- name: kimi-cli
|
|
42
127
|
binary: kimi
|
|
43
128
|
description: "Kimi Code — Moonshot AI coding agent CLI, 8K★"
|
|
@@ -56,6 +141,96 @@
|
|
|
56
141
|
install:
|
|
57
142
|
default: "pip install deepagents-cli"
|
|
58
143
|
|
|
144
|
+
- name: aider
|
|
145
|
+
binary: aider
|
|
146
|
+
description: "Aider — mature AI pair-programming CLI"
|
|
147
|
+
homepage: "https://github.com/Aider-AI/aider"
|
|
148
|
+
tags: [ai, agent, coding, aider, git]
|
|
149
|
+
install:
|
|
150
|
+
default: "pipx install aider-chat"
|
|
151
|
+
|
|
152
|
+
- name: goose
|
|
153
|
+
binary: goose
|
|
154
|
+
description: "Goose — open-source extensible coding agent"
|
|
155
|
+
homepage: "https://github.com/aaif-goose/goose"
|
|
156
|
+
tags: [ai, agent, coding, goose, mcp]
|
|
157
|
+
|
|
158
|
+
- name: amp
|
|
159
|
+
binary: amp
|
|
160
|
+
description: "Amp — Sourcegraph frontier coding agent"
|
|
161
|
+
homepage: "https://ampcode.com"
|
|
162
|
+
tags: [ai, agent, coding, sourcegraph, amp]
|
|
163
|
+
install:
|
|
164
|
+
default: "npm install -g @sourcegraph/amp"
|
|
165
|
+
|
|
166
|
+
- name: github-copilot-cli
|
|
167
|
+
binary: copilot
|
|
168
|
+
description: "GitHub Copilot CLI — Copilot from the terminal"
|
|
169
|
+
homepage: "https://github.com/features/copilot"
|
|
170
|
+
tags: [ai, agent, coding, github, copilot]
|
|
171
|
+
install:
|
|
172
|
+
default: "npm install -g @github/copilot"
|
|
173
|
+
|
|
174
|
+
- name: auggie
|
|
175
|
+
binary: auggie
|
|
176
|
+
description: "Auggie CLI — Augment Code agentic terminal"
|
|
177
|
+
homepage: "https://augmentcode.com"
|
|
178
|
+
tags: [ai, agent, coding, augment, auggie]
|
|
179
|
+
install:
|
|
180
|
+
default: "npm install -g @augmentcode/auggie"
|
|
181
|
+
|
|
182
|
+
- name: crush
|
|
183
|
+
binary: crush
|
|
184
|
+
description: "Charm Crush — open-source terminal coding agent"
|
|
185
|
+
homepage: "https://github.com/charmbracelet/crush"
|
|
186
|
+
tags: [ai, agent, coding, charm, crush]
|
|
187
|
+
|
|
188
|
+
- name: openhands
|
|
189
|
+
binary: openhands
|
|
190
|
+
description: "OpenHands — AI-driven development agent and sandbox"
|
|
191
|
+
homepage: "https://github.com/OpenHands/OpenHands"
|
|
192
|
+
tags: [ai, agent, coding, openhands, sandbox]
|
|
193
|
+
install:
|
|
194
|
+
default: "pipx install openhands-ai"
|
|
195
|
+
|
|
196
|
+
- name: mini-swe-agent
|
|
197
|
+
binary: mini
|
|
198
|
+
description: "mini-SWE-agent — small reproducible software-engineering agent"
|
|
199
|
+
homepage: "https://github.com/SWE-agent/mini-swe-agent"
|
|
200
|
+
tags: [ai, agent, coding, swe, benchmark]
|
|
201
|
+
install:
|
|
202
|
+
default: "pipx install mini-swe-agent"
|
|
203
|
+
|
|
204
|
+
- name: swe-agent
|
|
205
|
+
binary: sweagent
|
|
206
|
+
description: "SWE-agent — reproducible software-engineering agent harness"
|
|
207
|
+
homepage: "https://github.com/SWE-agent/SWE-agent"
|
|
208
|
+
tags: [ai, agent, coding, swe, benchmark]
|
|
209
|
+
|
|
210
|
+
- name: agentapi
|
|
211
|
+
binary: agentapi
|
|
212
|
+
description: "AgentAPI — HTTP/SSE control plane for native coding-agent CLIs"
|
|
213
|
+
homepage: "https://github.com/coder/agentapi"
|
|
214
|
+
tags: [ai, agent, coding, bridge, http]
|
|
215
|
+
|
|
216
|
+
- name: droid-cli
|
|
217
|
+
binary: droid
|
|
218
|
+
description: "Droid CLI — Factory AI terminal coding agent"
|
|
219
|
+
homepage: "https://factory.ai"
|
|
220
|
+
tags: [ai, agent, coding, factory, droid]
|
|
221
|
+
|
|
222
|
+
- name: forgecode
|
|
223
|
+
binary: forge
|
|
224
|
+
description: "ForgeCode — terminal AI pair-programming agent"
|
|
225
|
+
homepage: "https://antinomy.ai/"
|
|
226
|
+
tags: [ai, agent, coding, forgecode]
|
|
227
|
+
|
|
228
|
+
- name: rovo-dev
|
|
229
|
+
binary: rovo
|
|
230
|
+
description: "Rovo Dev CLI — Atlassian team coding agent"
|
|
231
|
+
homepage: "https://www.atlassian.com/software/rovo"
|
|
232
|
+
tags: [ai, agent, coding, atlassian, rovo]
|
|
233
|
+
|
|
59
234
|
# ── Tier 1 — Essential ──────────────────────────────────────────────────
|
|
60
235
|
|
|
61
236
|
- name: vercel
|
package/src/hub/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External CLI Hub — registry and auto-discovery for third-party CLIs.
|
|
3
3
|
*
|
|
4
|
-
* Reads
|
|
4
|
+
* Reads the external CLI registries at startup, checks which binaries are
|
|
5
5
|
* installed on $PATH, and exposes lookup helpers for the rest of the
|
|
6
6
|
* system (Commander registration, `unicli ext` subcommands, AGENTS.md).
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { readFileSync } from "node:fs";
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
10
|
import { join, dirname } from "node:path";
|
|
11
11
|
import { fileURLToPath } from "node:url";
|
|
12
12
|
import { execFileSync } from "node:child_process";
|
|
@@ -30,6 +30,7 @@ export interface ExternalCli {
|
|
|
30
30
|
|
|
31
31
|
let _cache: ExternalCli[] | null = null;
|
|
32
32
|
const _installedCache = new Map<string, boolean>();
|
|
33
|
+
const REGISTRY_FILES = ["external-clis.yaml", "external-clis-harness.yaml"];
|
|
33
34
|
|
|
34
35
|
// ── Loader ──────────────────────────────────────────────────────────────
|
|
35
36
|
|
|
@@ -40,26 +41,35 @@ const _installedCache = new Map<string, boolean>();
|
|
|
40
41
|
* At runtime we may be executing from `dist/hub/`, so we try the source
|
|
41
42
|
* sibling first (`../../src/hub/`) then fall back to the co-located path.
|
|
42
43
|
*/
|
|
43
|
-
function resolveYamlPath(): string {
|
|
44
|
+
function resolveYamlPath(fileName: string): string | null {
|
|
44
45
|
// Running from dist/hub/index.js → ../../src/hub/external-clis.yaml
|
|
45
|
-
const fromDist = join(
|
|
46
|
-
__dirname,
|
|
47
|
-
"..",
|
|
48
|
-
"..",
|
|
49
|
-
"src",
|
|
50
|
-
"hub",
|
|
51
|
-
"external-clis.yaml",
|
|
52
|
-
);
|
|
46
|
+
const fromDist = join(__dirname, "..", "..", "src", "hub", fileName);
|
|
53
47
|
// Running from src/hub/index.ts (dev via tsx)
|
|
54
|
-
const fromSrc = join(__dirname,
|
|
48
|
+
const fromSrc = join(__dirname, fileName);
|
|
55
49
|
|
|
56
50
|
// Prefer the source copy (always present in both dev & installed package)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
if (existsSync(fromSrc)) return fromSrc;
|
|
52
|
+
if (existsSync(fromDist)) return fromDist;
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function readRegistryFile(fileName: string): ExternalCli[] {
|
|
57
|
+
const path = resolveYamlPath(fileName);
|
|
58
|
+
if (!path) return [];
|
|
59
|
+
|
|
60
|
+
const raw = readFileSync(path, "utf-8");
|
|
61
|
+
const parsed = yaml.load(raw);
|
|
62
|
+
return Array.isArray(parsed) ? (parsed as ExternalCli[]) : [];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function dedupeRegistry(entries: ExternalCli[]): ExternalCli[] {
|
|
66
|
+
const seen = new Set<string>();
|
|
67
|
+
return entries.filter((entry) => {
|
|
68
|
+
const key = `${entry.name}\0${entry.binary}`;
|
|
69
|
+
if (seen.has(key)) return false;
|
|
70
|
+
seen.add(key);
|
|
71
|
+
return true;
|
|
72
|
+
});
|
|
63
73
|
}
|
|
64
74
|
|
|
65
75
|
/**
|
|
@@ -70,13 +80,7 @@ export function loadExternalClis(): ExternalCli[] {
|
|
|
70
80
|
if (_cache) return _cache;
|
|
71
81
|
|
|
72
82
|
try {
|
|
73
|
-
|
|
74
|
-
const parsed = yaml.load(raw);
|
|
75
|
-
if (!Array.isArray(parsed)) {
|
|
76
|
-
_cache = [];
|
|
77
|
-
return _cache;
|
|
78
|
-
}
|
|
79
|
-
_cache = parsed as ExternalCli[];
|
|
83
|
+
_cache = dedupeRegistry(REGISTRY_FILES.flatMap(readRegistryFile));
|
|
80
84
|
return _cache;
|
|
81
85
|
} catch {
|
|
82
86
|
_cache = [];
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
site: linux-do
|
|
2
|
-
name: search
|
|
3
|
-
description: Search Linux.do forum topics
|
|
4
|
-
domain: linux.do
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
query:
|
|
10
|
-
required: true
|
|
11
|
-
positional: true
|
|
12
|
-
description: Search query
|
|
13
|
-
limit:
|
|
14
|
-
type: int
|
|
15
|
-
default: 20
|
|
16
|
-
description: Number of results
|
|
17
|
-
|
|
18
|
-
pipeline:
|
|
19
|
-
- fetch:
|
|
20
|
-
url: https://linux.do/search.json
|
|
21
|
-
params:
|
|
22
|
-
q: "${{ args.query }}"
|
|
23
|
-
|
|
24
|
-
- select: topics
|
|
25
|
-
|
|
26
|
-
- map:
|
|
27
|
-
rank: ${{ index + 1 }}
|
|
28
|
-
title: ${{ item.title }}
|
|
29
|
-
views: ${{ item.views }}
|
|
30
|
-
likes: ${{ item.like_count }}
|
|
31
|
-
replies: ${{ (item.posts_count || 1) - 1 }}
|
|
32
|
-
url: ${{ 'https://linux.do/t/topic/' + item.id }}
|
|
33
|
-
|
|
34
|
-
- limit: ${{ args.limit }}
|
|
35
|
-
|
|
36
|
-
columns: [rank, title, views, likes, replies, url]
|
|
37
|
-
|
|
38
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
39
|
-
capabilities: ["http.fetch"]
|
|
40
|
-
minimum_capability: http.fetch
|
|
41
|
-
trust: public
|
|
42
|
-
confidentiality: public
|
|
43
|
-
quarantine: false
|
|
44
|
-
schema_version: v2
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
site: meituan
|
|
2
|
-
name: hot
|
|
3
|
-
description: Meituan hot search keywords
|
|
4
|
-
domain: apimobile.meituan.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
limit:
|
|
10
|
-
type: int
|
|
11
|
-
default: 20
|
|
12
|
-
|
|
13
|
-
pipeline:
|
|
14
|
-
- fetch:
|
|
15
|
-
url: https://apimobile.meituan.com/group/v1/recommend/hotword/1
|
|
16
|
-
|
|
17
|
-
- select: data.hotSearchWords
|
|
18
|
-
|
|
19
|
-
- map:
|
|
20
|
-
rank: ${{ index + 1 }}
|
|
21
|
-
keyword: "${{ item.word || item }}"
|
|
22
|
-
count: "${{ item.count || '' }}"
|
|
23
|
-
|
|
24
|
-
- limit: ${{ args.limit }}
|
|
25
|
-
|
|
26
|
-
columns: [rank, keyword, count]
|
|
27
|
-
|
|
28
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
29
|
-
capabilities: ["http.fetch"]
|
|
30
|
-
minimum_capability: http.fetch
|
|
31
|
-
trust: public
|
|
32
|
-
confidentiality: public
|
|
33
|
-
quarantine: false
|
|
34
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit frontpage", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "frontpage");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["rank", "title", "subreddit", "score", "comments", "author"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
site: reddit
|
|
2
|
-
name: frontpage
|
|
3
|
-
description: Reddit front page / r/all
|
|
4
|
-
domain: www.reddit.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
limit:
|
|
10
|
-
type: int
|
|
11
|
-
default: 20
|
|
12
|
-
description: Number of posts
|
|
13
|
-
|
|
14
|
-
pipeline:
|
|
15
|
-
- fetch:
|
|
16
|
-
url: https://www.reddit.com/r/all.json
|
|
17
|
-
params:
|
|
18
|
-
limit: ${{ args.limit }}
|
|
19
|
-
raw_json: "1"
|
|
20
|
-
- select: data.children
|
|
21
|
-
|
|
22
|
-
- map:
|
|
23
|
-
rank: ${{ index + 1 }}
|
|
24
|
-
title: ${{ item.data.title }}
|
|
25
|
-
subreddit: ${{ item.data.subreddit_name_prefixed }}
|
|
26
|
-
score: ${{ item.data.score }}
|
|
27
|
-
comments: ${{ item.data.num_comments }}
|
|
28
|
-
author: ${{ item.data.author }}
|
|
29
|
-
url: ${{ item.data.url }}
|
|
30
|
-
|
|
31
|
-
- limit: ${{ args.limit }}
|
|
32
|
-
|
|
33
|
-
columns: [rank, title, subreddit, score, comments, author]
|
|
34
|
-
|
|
35
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
36
|
-
capabilities: ["http.fetch"]
|
|
37
|
-
minimum_capability: http.fetch
|
|
38
|
-
trust: public
|
|
39
|
-
confidentiality: public
|
|
40
|
-
quarantine: false
|
|
41
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit hot", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "hot");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["rank", "title", "subreddit", "score", "comments", "author"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
site: reddit
|
|
2
|
-
name: hot
|
|
3
|
-
description: Reddit front page hot posts
|
|
4
|
-
domain: www.reddit.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
browser: false
|
|
8
|
-
|
|
9
|
-
args:
|
|
10
|
-
limit:
|
|
11
|
-
type: int
|
|
12
|
-
default: 20
|
|
13
|
-
description: Number of posts
|
|
14
|
-
|
|
15
|
-
pipeline:
|
|
16
|
-
- fetch:
|
|
17
|
-
url: https://www.reddit.com/r/all/hot.json
|
|
18
|
-
params:
|
|
19
|
-
limit: ${{ args.limit }}
|
|
20
|
-
- select: data.children
|
|
21
|
-
|
|
22
|
-
- map:
|
|
23
|
-
rank: ${{ index + 1 }}
|
|
24
|
-
title: ${{ item.data.title }}
|
|
25
|
-
subreddit: ${{ item.data.subreddit_name_prefixed }}
|
|
26
|
-
score: ${{ item.data.score }}
|
|
27
|
-
comments: ${{ item.data.num_comments }}
|
|
28
|
-
author: ${{ item.data.author }}
|
|
29
|
-
url: ${{ item.data.url }}
|
|
30
|
-
|
|
31
|
-
- limit: ${{ args.limit }}
|
|
32
|
-
|
|
33
|
-
columns: [rank, title, subreddit, score, comments, author]
|
|
34
|
-
|
|
35
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
36
|
-
capabilities: ["http.fetch"]
|
|
37
|
-
minimum_capability: http.fetch
|
|
38
|
-
trust: public
|
|
39
|
-
confidentiality: public
|
|
40
|
-
quarantine: false
|
|
41
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit new", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "new");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["title", "author", "subreddit", "score", "comments"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
site: reddit
|
|
2
|
-
name: new
|
|
3
|
-
description: Reddit newest posts from all subreddits
|
|
4
|
-
domain: www.reddit.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
subreddit:
|
|
10
|
-
type: str
|
|
11
|
-
description: Subreddit name (without r/)
|
|
12
|
-
limit:
|
|
13
|
-
type: int
|
|
14
|
-
default: 20
|
|
15
|
-
|
|
16
|
-
pipeline:
|
|
17
|
-
- fetch:
|
|
18
|
-
url: "https://www.reddit.com/${{ args.subreddit ? 'r/' + args.subreddit + '/' : '' }}new.json"
|
|
19
|
-
params:
|
|
20
|
-
limit: "${{ args.limit }}"
|
|
21
|
-
|
|
22
|
-
- select: data.children
|
|
23
|
-
|
|
24
|
-
- map:
|
|
25
|
-
title: "${{ item.data.title }}"
|
|
26
|
-
author: "${{ item.data.author }}"
|
|
27
|
-
subreddit: "${{ item.data.subreddit }}"
|
|
28
|
-
score: "${{ item.data.score }}"
|
|
29
|
-
comments: "${{ item.data.num_comments }}"
|
|
30
|
-
url: "${{ 'https://www.reddit.com' + item.data.permalink }}"
|
|
31
|
-
|
|
32
|
-
- limit: ${{ args.limit }}
|
|
33
|
-
|
|
34
|
-
columns: [title, author, subreddit, score, comments]
|
|
35
|
-
|
|
36
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
37
|
-
capabilities: ["http.fetch"]
|
|
38
|
-
minimum_capability: http.fetch
|
|
39
|
-
trust: public
|
|
40
|
-
confidentiality: public
|
|
41
|
-
quarantine: false
|
|
42
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit popular", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "popular");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["rank", "title", "subreddit", "score", "comments", "author"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
site: reddit
|
|
2
|
-
name: popular
|
|
3
|
-
description: Reddit popular posts (/r/popular)
|
|
4
|
-
domain: www.reddit.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
limit:
|
|
10
|
-
type: int
|
|
11
|
-
default: 20
|
|
12
|
-
description: Number of posts
|
|
13
|
-
|
|
14
|
-
pipeline:
|
|
15
|
-
- fetch:
|
|
16
|
-
url: https://www.reddit.com/r/popular.json
|
|
17
|
-
params:
|
|
18
|
-
limit: ${{ args.limit }}
|
|
19
|
-
raw_json: "1"
|
|
20
|
-
- select: data.children
|
|
21
|
-
|
|
22
|
-
- map:
|
|
23
|
-
rank: ${{ index + 1 }}
|
|
24
|
-
title: ${{ item.data.title }}
|
|
25
|
-
subreddit: ${{ item.data.subreddit_name_prefixed }}
|
|
26
|
-
score: ${{ item.data.score }}
|
|
27
|
-
comments: ${{ item.data.num_comments }}
|
|
28
|
-
author: ${{ item.data.author }}
|
|
29
|
-
url: ${{ item.data.url }}
|
|
30
|
-
|
|
31
|
-
- limit: ${{ args.limit }}
|
|
32
|
-
|
|
33
|
-
columns: [rank, title, subreddit, score, comments, author]
|
|
34
|
-
|
|
35
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
36
|
-
capabilities: ["http.fetch"]
|
|
37
|
-
minimum_capability: http.fetch
|
|
38
|
-
trust: public
|
|
39
|
-
confidentiality: public
|
|
40
|
-
quarantine: false
|
|
41
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit rising", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "rising");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["title", "author", "subreddit", "score", "comments"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
site: reddit
|
|
2
|
-
name: rising
|
|
3
|
-
description: Reddit rising posts
|
|
4
|
-
domain: www.reddit.com
|
|
5
|
-
type: web-api
|
|
6
|
-
strategy: public
|
|
7
|
-
|
|
8
|
-
args:
|
|
9
|
-
subreddit:
|
|
10
|
-
type: str
|
|
11
|
-
description: Subreddit name (without r/)
|
|
12
|
-
limit:
|
|
13
|
-
type: int
|
|
14
|
-
default: 20
|
|
15
|
-
|
|
16
|
-
pipeline:
|
|
17
|
-
- fetch:
|
|
18
|
-
url: "https://www.reddit.com/${{ args.subreddit ? 'r/' + args.subreddit + '/' : '' }}rising.json"
|
|
19
|
-
params:
|
|
20
|
-
limit: "${{ args.limit }}"
|
|
21
|
-
|
|
22
|
-
- select: data.children
|
|
23
|
-
|
|
24
|
-
- map:
|
|
25
|
-
title: "${{ item.data.title }}"
|
|
26
|
-
author: "${{ item.data.author }}"
|
|
27
|
-
subreddit: "${{ item.data.subreddit }}"
|
|
28
|
-
score: "${{ item.data.score }}"
|
|
29
|
-
comments: "${{ item.data.num_comments }}"
|
|
30
|
-
|
|
31
|
-
- limit: ${{ args.limit }}
|
|
32
|
-
|
|
33
|
-
columns: [title, author, subreddit, score, comments]
|
|
34
|
-
|
|
35
|
-
# schema-v2 metadata — injected by `unicli migrate schema-v2`
|
|
36
|
-
capabilities: ["http.fetch"]
|
|
37
|
-
minimum_capability: http.fetch
|
|
38
|
-
trust: public
|
|
39
|
-
confidentiality: public
|
|
40
|
-
quarantine: false
|
|
41
|
-
schema_version: v2
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
runAdapterWithFixture,
|
|
4
|
-
expectAdapterShape,
|
|
5
|
-
} from "../../../tests/adapter-runner.js";
|
|
6
|
-
|
|
7
|
-
describe("reddit search", () => {
|
|
8
|
-
it("returns rows with declared columns against fixture", async () => {
|
|
9
|
-
const { output } = await runAdapterWithFixture("reddit", "search");
|
|
10
|
-
expectAdapterShape(output, {
|
|
11
|
-
columns: ["rank", "title", "subreddit", "score", "comments", "author"],
|
|
12
|
-
minItems: 1,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
});
|