@zenalexa/unicli 0.209.0 → 0.211.2

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.
Files changed (399) hide show
  1. package/AGENTS.md +75 -20
  2. package/README.md +832 -285
  3. package/dist/adapters/cursor/cursor.d.ts +2 -1
  4. package/dist/adapters/cursor/cursor.d.ts.map +1 -1
  5. package/dist/adapters/cursor/cursor.js +87 -1
  6. package/dist/adapters/cursor/cursor.js.map +1 -1
  7. package/dist/adapters/discord-app/discord-app.d.ts +1 -1
  8. package/dist/adapters/discord-app/discord-app.js +94 -1
  9. package/dist/adapters/discord-app/discord-app.js.map +1 -1
  10. package/dist/browser/bridge.d.ts +45 -0
  11. package/dist/browser/bridge.d.ts.map +1 -1
  12. package/dist/browser/bridge.js +94 -1
  13. package/dist/browser/bridge.js.map +1 -1
  14. package/dist/browser/cdp-client.d.ts +24 -1
  15. package/dist/browser/cdp-client.d.ts.map +1 -1
  16. package/dist/browser/cdp-client.js +56 -2
  17. package/dist/browser/cdp-client.js.map +1 -1
  18. package/dist/browser/launcher.d.ts +5 -0
  19. package/dist/browser/launcher.d.ts.map +1 -1
  20. package/dist/browser/launcher.js +7 -0
  21. package/dist/browser/launcher.js.map +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +72 -2
  24. package/dist/cli.js.map +1 -1
  25. package/dist/commands/agents.d.ts +14 -3
  26. package/dist/commands/agents.d.ts.map +1 -1
  27. package/dist/commands/agents.js +369 -140
  28. package/dist/commands/agents.js.map +1 -1
  29. package/dist/commands/browser.d.ts.map +1 -1
  30. package/dist/commands/browser.js +79 -1
  31. package/dist/commands/browser.js.map +1 -1
  32. package/dist/commands/ext.d.ts +11 -0
  33. package/dist/commands/ext.d.ts.map +1 -0
  34. package/dist/commands/ext.js +122 -0
  35. package/dist/commands/ext.js.map +1 -0
  36. package/dist/commands/mcp.d.ts +3 -4
  37. package/dist/commands/mcp.d.ts.map +1 -1
  38. package/dist/commands/mcp.js +47 -62
  39. package/dist/commands/mcp.js.map +1 -1
  40. package/dist/commands/schema.d.ts +12 -0
  41. package/dist/commands/schema.d.ts.map +1 -0
  42. package/dist/commands/schema.js +72 -0
  43. package/dist/commands/schema.js.map +1 -0
  44. package/dist/commands/search.d.ts +12 -0
  45. package/dist/commands/search.d.ts.map +1 -0
  46. package/dist/commands/search.js +47 -0
  47. package/dist/commands/search.js.map +1 -0
  48. package/dist/commands/skills.d.ts +2 -3
  49. package/dist/commands/skills.d.ts.map +1 -1
  50. package/dist/commands/skills.js +2 -3
  51. package/dist/commands/skills.js.map +1 -1
  52. package/dist/commands/status.d.ts +12 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +137 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/discovery/aliases.d.ts +31 -0
  57. package/dist/discovery/aliases.d.ts.map +1 -0
  58. package/dist/discovery/aliases.js +477 -0
  59. package/dist/discovery/aliases.js.map +1 -0
  60. package/dist/discovery/loader.d.ts.map +1 -1
  61. package/dist/discovery/loader.js +25 -0
  62. package/dist/discovery/loader.js.map +1 -1
  63. package/dist/discovery/search.d.ts +73 -0
  64. package/dist/discovery/search.d.ts.map +1 -0
  65. package/dist/discovery/search.js +355 -0
  66. package/dist/discovery/search.js.map +1 -0
  67. package/dist/engine/yaml-runner.d.ts +10 -0
  68. package/dist/engine/yaml-runner.d.ts.map +1 -1
  69. package/dist/engine/yaml-runner.js +51 -3
  70. package/dist/engine/yaml-runner.js.map +1 -1
  71. package/dist/hub/index.d.ts +37 -0
  72. package/dist/hub/index.d.ts.map +1 -0
  73. package/dist/hub/index.js +98 -0
  74. package/dist/hub/index.js.map +1 -0
  75. package/dist/hub/passthrough.d.ts +21 -0
  76. package/dist/hub/passthrough.d.ts.map +1 -0
  77. package/dist/hub/passthrough.js +71 -0
  78. package/dist/hub/passthrough.js.map +1 -0
  79. package/dist/manifest-compact.txt +15 -0
  80. package/dist/manifest-search.json +1 -0
  81. package/dist/manifest.json +2163 -268
  82. package/dist/mcp/oauth.d.ts +33 -0
  83. package/dist/mcp/oauth.d.ts.map +1 -0
  84. package/dist/mcp/oauth.js +220 -0
  85. package/dist/mcp/oauth.js.map +1 -0
  86. package/dist/mcp/schema.d.ts +65 -0
  87. package/dist/mcp/schema.d.ts.map +1 -0
  88. package/dist/mcp/schema.js +136 -0
  89. package/dist/mcp/schema.js.map +1 -0
  90. package/dist/mcp/server.d.ts +23 -10
  91. package/dist/mcp/server.d.ts.map +1 -1
  92. package/dist/mcp/server.js +350 -182
  93. package/dist/mcp/server.js.map +1 -1
  94. package/dist/mcp/sse-transport.d.ts +34 -0
  95. package/dist/mcp/sse-transport.d.ts.map +1 -0
  96. package/dist/mcp/sse-transport.js +182 -0
  97. package/dist/mcp/sse-transport.js.map +1 -0
  98. package/dist/mcp/streamable-http.d.ts +64 -0
  99. package/dist/mcp/streamable-http.d.ts.map +1 -0
  100. package/dist/mcp/streamable-http.js +312 -0
  101. package/dist/mcp/streamable-http.js.map +1 -0
  102. package/dist/permissions/sensitive-paths.js +2 -2
  103. package/dist/permissions/sensitive-paths.js.map +1 -1
  104. package/dist/types.d.ts +15 -0
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js.map +1 -1
  107. package/package.json +8 -7
  108. package/src/adapters/1688/_site.json +9 -0
  109. package/src/adapters/36kr/latest.yaml +36 -0
  110. package/src/adapters/arxiv/trending.yaml +37 -0
  111. package/src/adapters/baidu/hot.yaml +37 -0
  112. package/src/adapters/baidu/search.yaml +41 -0
  113. package/src/adapters/barchart/_site.json +10 -0
  114. package/src/adapters/bbc/technology.yaml +26 -0
  115. package/src/adapters/bbc/top.yaml +26 -0
  116. package/src/adapters/bbc/world.yaml +26 -0
  117. package/src/adapters/bilibili/coin.yaml +33 -0
  118. package/src/adapters/bilibili/later.yaml +31 -0
  119. package/src/adapters/bilibili/live.yaml +41 -0
  120. package/src/adapters/bilibili/trending.yaml +29 -0
  121. package/src/adapters/binance/hot.yaml +39 -0
  122. package/src/adapters/binance/kline.yaml +35 -0
  123. package/src/adapters/binance/ticker.yaml +33 -0
  124. package/src/adapters/bluesky/likes.yaml +35 -0
  125. package/src/adapters/bluesky/notifications.yaml +30 -0
  126. package/src/adapters/bluesky/post.yaml +25 -0
  127. package/src/adapters/chrome/bookmarks.yaml +26 -0
  128. package/src/adapters/chrome/tabs.yaml +25 -0
  129. package/src/adapters/cnki/search.yaml +40 -0
  130. package/src/adapters/cnn/technology.yaml +26 -0
  131. package/src/adapters/cocoapods/info.yaml +33 -0
  132. package/src/adapters/coinbase/prices.yaml +27 -0
  133. package/src/adapters/coinbase/rates.yaml +24 -0
  134. package/src/adapters/coupang/hot.yaml +29 -0
  135. package/src/adapters/crates-io/info.yaml +29 -0
  136. package/src/adapters/crates-io/versions.yaml +33 -0
  137. package/src/adapters/ctrip/hot.yaml +28 -0
  138. package/src/adapters/cursor/cursor.ts +91 -1
  139. package/src/adapters/dangdang/hot.yaml +38 -0
  140. package/src/adapters/dangdang/search.yaml +43 -0
  141. package/src/adapters/deepseek/chat.yaml +33 -0
  142. package/src/adapters/deepseek/models.yaml +18 -0
  143. package/src/adapters/devto/latest.yaml +29 -0
  144. package/src/adapters/devto/search.yaml +34 -0
  145. package/src/adapters/dianping/hot.yaml +43 -0
  146. package/src/adapters/dianping/search.yaml +48 -0
  147. package/src/adapters/discord-app/discord-app.ts +99 -1
  148. package/src/adapters/docker/networks.yaml +20 -0
  149. package/src/adapters/docker/volumes.yaml +19 -0
  150. package/src/adapters/docker-hub/info.yaml +26 -0
  151. package/src/adapters/docker-hub/tags.yaml +34 -0
  152. package/src/adapters/douban/group-hot.yaml +29 -0
  153. package/src/adapters/douban/new-movies.yaml +32 -0
  154. package/src/adapters/douban/tv-hot.yaml +32 -0
  155. package/src/adapters/doubao/ask.yaml +64 -0
  156. package/src/adapters/doubao/new.yaml +18 -0
  157. package/src/adapters/doubao/status.yaml +21 -0
  158. package/src/adapters/douyu/hot.yaml +34 -0
  159. package/src/adapters/douyu/search.yaml +42 -0
  160. package/src/adapters/eastmoney/fund.yaml +36 -0
  161. package/src/adapters/eastmoney/market.yaml +26 -0
  162. package/src/adapters/ele/hot.yaml +40 -0
  163. package/src/adapters/ele/search.yaml +47 -0
  164. package/src/adapters/exchangerate/list.yaml +25 -0
  165. package/src/adapters/facebook/marketplace.yaml +43 -0
  166. package/src/adapters/facebook/post.yaml +29 -0
  167. package/src/adapters/futu/hot.yaml +49 -0
  168. package/src/adapters/futu/quote.yaml +46 -0
  169. package/src/adapters/gitee/repos.yaml +34 -0
  170. package/src/adapters/github-trending/developers.yaml +33 -0
  171. package/src/adapters/github-trending/weekly.yaml +34 -0
  172. package/src/adapters/gitlab/projects.yaml +34 -0
  173. package/src/adapters/godot/scene-export.yaml +1 -1
  174. package/src/adapters/hackernews/comments.yaml +36 -0
  175. package/src/adapters/hackernews/item.yaml +28 -0
  176. package/src/adapters/hf/datasets.yaml +34 -0
  177. package/src/adapters/hf/spaces.yaml +34 -0
  178. package/src/adapters/homebrew/search.yaml +27 -0
  179. package/src/adapters/huggingface-papers/search.yaml +33 -0
  180. package/src/adapters/imdb/box-office.yaml +28 -0
  181. package/src/adapters/infoq/latest.yaml +26 -0
  182. package/src/adapters/instagram/activity.yaml +45 -0
  183. package/src/adapters/instagram/highlights.yaml +48 -0
  184. package/src/adapters/instagram/reels-trending.yaml +51 -0
  185. package/src/adapters/instagram/reels.yaml +34 -0
  186. package/src/adapters/instagram/stories.yaml +29 -0
  187. package/src/adapters/instagram/suggested.yaml +40 -0
  188. package/src/adapters/instagram/tags.yaml +52 -0
  189. package/src/adapters/itch-io/search.yaml +35 -0
  190. package/src/adapters/itch-io/top.yaml +31 -0
  191. package/src/adapters/ithome/hot.yaml +27 -0
  192. package/src/adapters/ithome/latest.yaml +26 -0
  193. package/src/adapters/jd/_site.json +9 -0
  194. package/src/adapters/jianyu/search.yaml +42 -0
  195. package/src/adapters/ke/ershoufang.yaml +75 -0
  196. package/src/adapters/ke/xiaoqu.yaml +73 -0
  197. package/src/adapters/kuaishou/hot.yaml +39 -0
  198. package/src/adapters/kuaishou/search.yaml +44 -0
  199. package/src/adapters/linkedin/_site.json +10 -0
  200. package/src/adapters/linkedin/jobs.yaml +47 -0
  201. package/src/adapters/lobsters/search.yaml +35 -0
  202. package/src/adapters/macos/active-app.yaml +16 -0
  203. package/src/adapters/macos/apps-list.yaml +14 -0
  204. package/src/adapters/macos/apps.yaml +31 -0
  205. package/src/adapters/macos/battery.yaml +26 -0
  206. package/src/adapters/macos/bluetooth.yaml +14 -0
  207. package/src/adapters/macos/brightness.yaml +22 -0
  208. package/src/adapters/macos/caffeinate.yaml +25 -0
  209. package/src/adapters/macos/calendar-create.yaml +81 -0
  210. package/src/adapters/macos/calendar-list.yaml +53 -0
  211. package/src/adapters/macos/calendar-today.yaml +30 -0
  212. package/src/adapters/macos/clipboard.yaml +23 -0
  213. package/src/adapters/macos/contacts-search.yaml +59 -0
  214. package/src/adapters/macos/dark-mode.yaml +19 -0
  215. package/src/adapters/macos/disk-info.yaml +31 -0
  216. package/src/adapters/macos/disk-usage.yaml +14 -0
  217. package/src/adapters/macos/do-not-disturb.yaml +21 -0
  218. package/src/adapters/macos/empty-trash.yaml +16 -0
  219. package/src/adapters/macos/finder-copy.yaml +40 -0
  220. package/src/adapters/macos/finder-move.yaml +40 -0
  221. package/src/adapters/macos/finder-new-folder.yaml +36 -0
  222. package/src/adapters/macos/finder-recent.yaml +24 -0
  223. package/src/adapters/macos/finder-selection.yaml +22 -0
  224. package/src/adapters/macos/finder-tags.yaml +40 -0
  225. package/src/adapters/macos/lock-screen.yaml +16 -0
  226. package/src/adapters/macos/mail-send.yaml +54 -0
  227. package/src/adapters/macos/mail-status.yaml +38 -0
  228. package/src/adapters/macos/messages-send.yaml +42 -0
  229. package/src/adapters/macos/music-control.yaml +43 -0
  230. package/src/adapters/macos/music-now.yaml +34 -0
  231. package/src/adapters/macos/notes-list.yaml +30 -0
  232. package/src/adapters/macos/notes-search.yaml +45 -0
  233. package/src/adapters/macos/notification.yaml +27 -0
  234. package/src/adapters/macos/notify.yaml +46 -0
  235. package/src/adapters/macos/open-app.yaml +21 -0
  236. package/src/adapters/macos/open.yaml +24 -0
  237. package/src/adapters/macos/photos-search.yaml +44 -0
  238. package/src/adapters/macos/processes.yaml +14 -0
  239. package/src/adapters/macos/reminder-create.yaml +75 -0
  240. package/src/adapters/macos/reminders-complete.yaml +33 -0
  241. package/src/adapters/macos/reminders-list.yaml +28 -0
  242. package/src/adapters/macos/safari-history.yaml +23 -0
  243. package/src/adapters/macos/safari-tabs.yaml +26 -0
  244. package/src/adapters/macos/safari-url.yaml +22 -0
  245. package/src/adapters/macos/say.yaml +36 -0
  246. package/src/adapters/macos/screen-lock.yaml +16 -0
  247. package/src/adapters/macos/screen-recording.yaml +32 -0
  248. package/src/adapters/macos/screenshot.yaml +34 -0
  249. package/src/adapters/macos/shortcuts-list.yaml +14 -0
  250. package/src/adapters/macos/shortcuts-run.yaml +28 -0
  251. package/src/adapters/macos/sleep.yaml +14 -0
  252. package/src/adapters/macos/spotlight.yaml +43 -0
  253. package/src/adapters/macos/system-info.yaml +32 -0
  254. package/src/adapters/macos/trash.yaml +32 -0
  255. package/src/adapters/macos/uptime.yaml +14 -0
  256. package/src/adapters/macos/volume.yaml +19 -0
  257. package/src/adapters/macos/wallpaper.yaml +33 -0
  258. package/src/adapters/macos/wifi-info.yaml +14 -0
  259. package/src/adapters/macos/wifi.yaml +63 -0
  260. package/src/adapters/maimai/search.yaml +62 -0
  261. package/src/adapters/maoyan/hot.yaml +33 -0
  262. package/src/adapters/maoyan/search.yaml +40 -0
  263. package/src/adapters/mastodon/timeline.yaml +33 -0
  264. package/src/adapters/mastodon/user.yaml +32 -0
  265. package/src/adapters/medium/article.yaml +22 -0
  266. package/src/adapters/medium/trending.yaml +30 -0
  267. package/src/adapters/meituan/hot.yaml +26 -0
  268. package/src/adapters/mubu/list.yaml +36 -0
  269. package/src/adapters/mubu/search.yaml +54 -0
  270. package/src/adapters/netease-music/playlist.yaml +34 -0
  271. package/src/adapters/netease-music/top.yaml +33 -0
  272. package/src/adapters/notion/databases.yaml +41 -0
  273. package/src/adapters/notion/pages.yaml +44 -0
  274. package/src/adapters/notion/search.yaml +41 -0
  275. package/src/adapters/npm/downloads.yaml +28 -0
  276. package/src/adapters/npm/info.yaml +25 -0
  277. package/src/adapters/npm/search.yaml +35 -0
  278. package/src/adapters/npm/versions.yaml +33 -0
  279. package/src/adapters/npm-trends/trending.yaml +17 -0
  280. package/src/adapters/nytimes/search.yaml +35 -0
  281. package/src/adapters/obsidian/daily.yaml +23 -0
  282. package/src/adapters/obsidian/open.yaml +26 -0
  283. package/src/adapters/obsidian/search.yaml +28 -0
  284. package/src/adapters/ollama/generate.yaml +33 -0
  285. package/src/adapters/ollama/models.yaml +29 -0
  286. package/src/adapters/ollama/ps.yaml +20 -0
  287. package/src/adapters/openrouter/search.yaml +31 -0
  288. package/src/adapters/perplexity/ask.yaml +33 -0
  289. package/src/adapters/pexels/curated.yaml +31 -0
  290. package/src/adapters/pinduoduo/search.yaml +36 -0
  291. package/src/adapters/producthunt/search.yaml +41 -0
  292. package/src/adapters/pypi/search.yaml +37 -0
  293. package/src/adapters/pypi/versions.yaml +31 -0
  294. package/src/adapters/quark/ls.yaml +39 -0
  295. package/src/adapters/quark/search.yaml +39 -0
  296. package/src/adapters/qweather/forecast.yaml +37 -0
  297. package/src/adapters/reddit/new.yaml +34 -0
  298. package/src/adapters/reddit/rising.yaml +33 -0
  299. package/src/adapters/reddit/top.yaml +40 -0
  300. package/src/adapters/reddit/trending.yaml +25 -0
  301. package/src/adapters/replicate/run.yaml +39 -0
  302. package/src/adapters/reuters/_site.json +9 -0
  303. package/src/adapters/reuters/latest.yaml +26 -0
  304. package/src/adapters/sinablog/_site.json +9 -0
  305. package/src/adapters/sinafinance/market.yaml +21 -0
  306. package/src/adapters/slack/messages.yaml +41 -0
  307. package/src/adapters/slack/post.yaml +32 -0
  308. package/src/adapters/slack/search.yaml +28 -0
  309. package/src/adapters/slack/send.yaml +35 -0
  310. package/src/adapters/slack/status.yaml +19 -0
  311. package/src/adapters/slack/users.yaml +37 -0
  312. package/src/adapters/slock/servers.yaml +32 -0
  313. package/src/adapters/smzdm/_site.json +9 -0
  314. package/src/adapters/spotify/now-playing.yaml +28 -0
  315. package/src/adapters/spotify/playlists.yaml +37 -0
  316. package/src/adapters/spotify/top-tracks.yaml +42 -0
  317. package/src/adapters/stackoverflow/question.yaml +34 -0
  318. package/src/adapters/stackoverflow/tags.yaml +30 -0
  319. package/src/adapters/steam/app-details.yaml +32 -0
  320. package/src/adapters/steam/new-releases.yaml +28 -0
  321. package/src/adapters/steam/search.yaml +36 -0
  322. package/src/adapters/steam/specials.yaml +29 -0
  323. package/src/adapters/steam/wishlist.yaml +36 -0
  324. package/src/adapters/substack/trending.yaml +28 -0
  325. package/src/adapters/taobao/hot.yaml +31 -0
  326. package/src/adapters/taobao/search.yaml +44 -0
  327. package/src/adapters/techcrunch/search.yaml +33 -0
  328. package/src/adapters/theverge/search.yaml +33 -0
  329. package/src/adapters/threads/hot.yaml +44 -0
  330. package/src/adapters/threads/search.yaml +47 -0
  331. package/src/adapters/tiktok/trending.yaml +28 -0
  332. package/src/adapters/toutiao/hot.yaml +31 -0
  333. package/src/adapters/toutiao/search.yaml +47 -0
  334. package/src/adapters/twitch/games.yaml +31 -0
  335. package/src/adapters/twitch/search.yaml +39 -0
  336. package/src/adapters/twitch/streams.yaml +38 -0
  337. package/src/adapters/twitter/lists.yaml +49 -0
  338. package/src/adapters/twitter/media.yaml +48 -0
  339. package/src/adapters/twitter/mentions.yaml +38 -0
  340. package/src/adapters/twitter/mute.yaml +42 -0
  341. package/src/adapters/twitter/pin.yaml +43 -0
  342. package/src/adapters/twitter/quotes.yaml +43 -0
  343. package/src/adapters/twitter/retweets.yaml +44 -0
  344. package/src/adapters/twitter/spaces.yaml +43 -0
  345. package/src/adapters/twitter/unmute.yaml +42 -0
  346. package/src/adapters/unsplash/random.yaml +27 -0
  347. package/src/adapters/v2ex/search.yaml +36 -0
  348. package/src/adapters/vscode/extensions.yaml +23 -0
  349. package/src/adapters/vscode/install-ext.yaml +26 -0
  350. package/src/adapters/vscode/open.yaml +25 -0
  351. package/src/adapters/wechat-channels/hot.yaml +39 -0
  352. package/src/adapters/wechat-channels/search.yaml +57 -0
  353. package/src/adapters/weibo/trending.yaml +28 -0
  354. package/src/adapters/weixin/_site.json +9 -0
  355. package/src/adapters/weixin/hot.yaml +22 -0
  356. package/src/adapters/wikipedia/today.yaml +25 -0
  357. package/src/adapters/xiaohongshu/follow.yaml +35 -0
  358. package/src/adapters/xiaohongshu/hashtag.yaml +44 -0
  359. package/src/adapters/xiaohongshu/hot.yaml +34 -0
  360. package/src/adapters/xiaohongshu/like.yaml +27 -0
  361. package/src/adapters/xiaohongshu/profile.yaml +39 -0
  362. package/src/adapters/xiaohongshu/save.yaml +27 -0
  363. package/src/adapters/xiaohongshu/suggest.yaml +34 -0
  364. package/src/adapters/xiaohongshu/trending.yaml +35 -0
  365. package/src/adapters/xiaohongshu/unfollow.yaml +40 -0
  366. package/src/adapters/xueqiu/market.yaml +25 -0
  367. package/src/adapters/yahoo-finance/quote.yaml +35 -0
  368. package/src/adapters/yahoo-finance/search.yaml +42 -0
  369. package/src/adapters/yahoo-finance/trending.yaml +30 -0
  370. package/src/adapters/youtube/playlist.yaml +43 -0
  371. package/src/adapters/youtube/shorts.yaml +42 -0
  372. package/src/adapters/youtube/trending.yaml +41 -0
  373. package/src/adapters/zhihu/answer.yaml +29 -0
  374. package/src/adapters/zhihu/answers.yaml +38 -0
  375. package/src/adapters/zhihu/article.yaml +27 -0
  376. package/src/adapters/zhihu/articles.yaml +38 -0
  377. package/src/adapters/zhihu/collections.yaml +37 -0
  378. package/src/adapters/zhihu/columns.yaml +38 -0
  379. package/src/adapters/zhihu/comment.yaml +42 -0
  380. package/src/adapters/zhihu/followers.yaml +37 -0
  381. package/src/adapters/zhihu/following.yaml +37 -0
  382. package/src/adapters/zhihu/pins.yaml +37 -0
  383. package/src/adapters/zhihu/topic.yaml +35 -0
  384. package/src/adapters/zhihu/topics.yaml +37 -0
  385. package/src/adapters/zhihu/trending.yaml +36 -0
  386. package/src/adapters/zhihu/user.yaml +30 -0
  387. package/src/adapters/zoom/join.yaml +24 -0
  388. package/src/adapters/zoom/start.yaml +17 -0
  389. package/src/hub/external-clis.yaml +343 -0
  390. package/src/hub/index.ts +128 -0
  391. package/src/hub/passthrough.ts +85 -0
  392. package/src/adapters/1688/manifest.yaml +0 -7
  393. package/src/adapters/barchart/manifest.yaml +0 -8
  394. package/src/adapters/jd/manifest.yaml +0 -7
  395. package/src/adapters/linkedin/manifest.yaml +0 -8
  396. package/src/adapters/reuters/manifest.yaml +0 -7
  397. package/src/adapters/sinablog/manifest.yaml +0 -7
  398. package/src/adapters/smzdm/manifest.yaml +0 -7
  399. package/src/adapters/weixin/manifest.yaml +0 -7
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import chalk from "chalk";
10
10
  import { findChrome, isCDPAvailable, launchChrome, getCDPPort, } from "../browser/launcher.js";
11
- import { CDPClient } from "../browser/cdp-client.js";
11
+ import { CDPClient, getRemoteEndpoint } from "../browser/cdp-client.js";
12
12
  export function registerBrowserCommands(program) {
13
13
  const browser = program
14
14
  .command("browser")
@@ -66,6 +66,84 @@ export function registerBrowserCommands(program) {
66
66
  console.log(chalk.green(`Chrome CDP connected on port ${String(port)}`));
67
67
  await printTargetSummary(port);
68
68
  });
69
+ // unicli browser remote
70
+ browser
71
+ .command("remote")
72
+ .description("Manage remote CDP browser endpoint (Cloudflare, etc.)")
73
+ .option("--status", "Show remote endpoint info and connectivity")
74
+ .option("--connect <endpoint>", "Test connection to a remote CDP endpoint")
75
+ .action(async (opts) => {
76
+ if (opts.connect) {
77
+ // Test connection to a specific endpoint
78
+ console.log(chalk.dim(`Testing connection to: ${opts.connect}`));
79
+ const client = new CDPClient();
80
+ try {
81
+ await client.connect(opts.connect);
82
+ console.log(chalk.green("Connected successfully"));
83
+ // Try to get browser version info
84
+ try {
85
+ const info = (await client.send("Browser.getVersion"));
86
+ if (info.product) {
87
+ console.log(chalk.dim(` Browser: ${info.product}`));
88
+ }
89
+ if (info.userAgent) {
90
+ console.log(chalk.dim(` User-Agent: ${info.userAgent.slice(0, 80)}${info.userAgent.length > 80 ? "..." : ""}`));
91
+ }
92
+ }
93
+ catch {
94
+ // Non-fatal — version info is optional
95
+ }
96
+ await client.close();
97
+ }
98
+ catch (err) {
99
+ console.error(chalk.red(`Connection failed: ${err instanceof Error ? err.message : String(err)}`));
100
+ process.exitCode = 1;
101
+ }
102
+ return;
103
+ }
104
+ // Default: --status behavior
105
+ const remote = getRemoteEndpoint();
106
+ if (!remote) {
107
+ console.log(chalk.yellow("No remote CDP endpoint configured"));
108
+ console.log(chalk.dim("Set UNICLI_CDP_ENDPOINT to a WebSocket URL (e.g., wss://browser.example.com)"));
109
+ console.log(chalk.dim("Optional: set UNICLI_CDP_HEADERS to a JSON string of auth headers"));
110
+ return;
111
+ }
112
+ console.log(chalk.green("Remote CDP endpoint configured"));
113
+ console.log(chalk.dim(` Endpoint: ${remote.endpoint}`));
114
+ const headerCount = Object.keys(remote.headers).length;
115
+ if (headerCount > 0) {
116
+ console.log(chalk.dim(` Headers: ${String(headerCount)} configured`));
117
+ for (const key of Object.keys(remote.headers)) {
118
+ console.log(chalk.dim(` ${key}: ****`));
119
+ }
120
+ }
121
+ else {
122
+ console.log(chalk.dim(" Headers: none"));
123
+ }
124
+ // Test connectivity
125
+ console.log(chalk.dim(" Testing connection..."));
126
+ const client = new CDPClient();
127
+ try {
128
+ await client.connect(remote.endpoint, Object.keys(remote.headers).length > 0
129
+ ? { headers: remote.headers }
130
+ : undefined);
131
+ console.log(chalk.green(" Status: connected"));
132
+ try {
133
+ const info = (await client.send("Browser.getVersion"));
134
+ if (info.product) {
135
+ console.log(chalk.dim(` Browser: ${info.product}`));
136
+ }
137
+ }
138
+ catch {
139
+ // Non-fatal
140
+ }
141
+ await client.close();
142
+ }
143
+ catch (err) {
144
+ console.log(chalk.red(` Status: unreachable (${err instanceof Error ? err.message : String(err)})`));
145
+ }
146
+ });
69
147
  // unicli browser cookies <domain>
70
148
  browser
71
149
  .command("cookies <domain>")
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * External CLI commands — discover, install, and run third-party CLIs.
3
+ *
4
+ * Commands:
5
+ * unicli ext list — show all external CLIs with install status
6
+ * unicli ext install <name> — install an external CLI
7
+ * unicli ext run <name> [args] — explicitly run an external CLI
8
+ */
9
+ import { Command } from "commander";
10
+ export declare function registerExtCommand(program: Command): void;
11
+ //# sourceMappingURL=ext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/commands/ext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqJzD"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * External CLI commands — discover, install, and run third-party CLIs.
3
+ *
4
+ * Commands:
5
+ * unicli ext list — show all external CLIs with install status
6
+ * unicli ext install <name> — install an external CLI
7
+ * unicli ext run <name> [args] — explicitly run an external CLI
8
+ */
9
+ import chalk from "chalk";
10
+ import { execFileSync } from "node:child_process";
11
+ import { listExternalClis, getExternalCli, isInstalled } from "../hub/index.js";
12
+ import { executeExternal } from "../hub/passthrough.js";
13
+ import { format, detectFormat } from "../output/formatter.js";
14
+ // ── Command Registration ────────────────────────────────────────────────
15
+ export function registerExtCommand(program) {
16
+ const ext = program
17
+ .command("ext")
18
+ .description("External CLI passthrough — discover, install, run");
19
+ // ── list ──────────────────────────────────────────────────────────────
20
+ ext
21
+ .command("list")
22
+ .description("List all external CLIs with install status")
23
+ .option("--installed", "show only installed CLIs")
24
+ .option("--tag <tag>", "filter by tag")
25
+ .action((opts) => {
26
+ let clis = listExternalClis();
27
+ if (opts.installed) {
28
+ clis = clis.filter((c) => c.installed);
29
+ }
30
+ if (opts.tag) {
31
+ const tag = opts.tag.toLowerCase();
32
+ clis = clis.filter((c) => c.tags?.some((t) => t.toLowerCase() === tag));
33
+ }
34
+ const fmt = detectFormat(program.opts().format);
35
+ const rows = clis.map((c) => ({
36
+ name: c.name,
37
+ binary: c.binary,
38
+ description: c.description,
39
+ installed: c.installed ? "yes" : "no",
40
+ tags: (c.tags ?? []).join(", "),
41
+ }));
42
+ if (fmt === "json" || !process.stdout.isTTY) {
43
+ console.log(JSON.stringify(rows, null, 2));
44
+ return;
45
+ }
46
+ console.log(format(rows, ["name", "binary", "description", "installed"], fmt));
47
+ const installedCount = clis.filter((c) => c.installed).length;
48
+ console.log(chalk.dim(`\n ${installedCount}/${clis.length} installed. Run \`unicli ext install <name>\` to add more.`));
49
+ });
50
+ // ── install ───────────────────────────────────────────────────────────
51
+ ext
52
+ .command("install <name>")
53
+ .description("Install an external CLI tool")
54
+ .action((name) => {
55
+ const cli = getExternalCli(name);
56
+ if (!cli) {
57
+ console.error(chalk.red(`Unknown external CLI: ${name}. Run \`unicli ext list\` to see available CLIs.`));
58
+ process.exitCode = 1;
59
+ return;
60
+ }
61
+ if (isInstalled(cli.binary)) {
62
+ console.log(chalk.green(`${cli.name} is already installed (${cli.binary}).`));
63
+ return;
64
+ }
65
+ // Resolve platform-specific install command
66
+ const platform = process.platform === "darwin" ? "mac" : "linux";
67
+ const installCmd = cli.install?.[platform] ?? cli.install?.["default"];
68
+ if (!installCmd) {
69
+ console.error(chalk.yellow(`No install command for ${cli.name} on ${platform}.`));
70
+ if (cli.homepage) {
71
+ console.error(chalk.dim(` See: ${cli.homepage}`));
72
+ }
73
+ process.exitCode = 1;
74
+ return;
75
+ }
76
+ console.log(chalk.cyan(`Installing ${cli.name}...`));
77
+ console.log(chalk.dim(` $ ${installCmd}`));
78
+ // Split install command for safe execution
79
+ // Most install commands are "npm install -g ..." or "brew install ..."
80
+ const parts = installCmd.split(/\s+/);
81
+ const bin = parts[0];
82
+ const installArgs = parts.slice(1);
83
+ try {
84
+ execFileSync(bin, installArgs, {
85
+ stdio: "inherit",
86
+ timeout: 300_000, // 5 min for installs
87
+ });
88
+ console.log(chalk.green(`\n${cli.name} installed successfully.`));
89
+ }
90
+ catch (err) {
91
+ const msg = err instanceof Error ? err.message : String(err);
92
+ console.error(chalk.red(`Install failed: ${msg}`));
93
+ if (cli.homepage) {
94
+ console.error(chalk.dim(` Manual install: ${cli.homepage}`));
95
+ }
96
+ process.exitCode = 1;
97
+ }
98
+ });
99
+ // ── run ───────────────────────────────────────────────────────────────
100
+ ext
101
+ .command("run <name>")
102
+ .description("Run an external CLI command")
103
+ .allowUnknownOption()
104
+ .allowExcessArguments()
105
+ .action((name, _opts, cmd) => {
106
+ const cli = getExternalCli(name);
107
+ if (!cli) {
108
+ console.error(chalk.red(`Unknown external CLI: ${name}. Run \`unicli ext list\` to see available CLIs.`));
109
+ process.exitCode = 1;
110
+ return;
111
+ }
112
+ if (!isInstalled(cli.binary)) {
113
+ console.error(chalk.red(`${cli.name} is not installed. Run \`unicli ext install ${cli.name}\` first.`));
114
+ process.exitCode = 1;
115
+ return;
116
+ }
117
+ // Everything after the CLI name becomes passthrough args
118
+ const rawArgs = cmd.args.slice(1);
119
+ executeExternal(cli, rawArgs);
120
+ });
121
+ }
122
+ //# sourceMappingURL=ext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext.js","sourceRoot":"","sources":["../../src/commands/ext.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,14 @@
1
1
  /**
2
2
  * MCP gateway CLI — wrapper around src/mcp/server.ts.
3
3
  *
4
- * unicli mcp serve [--transport stdio|http] [--port 19826] [--lazy]
5
- * unicli mcp health # list registered tools (no server)
4
+ * unicli mcp serve [--transport stdio|http] [--port 19826] [--expanded]
5
+ * unicli mcp health # pre-flight check (no server)
6
6
  *
7
7
  * `serve` shells out to the same `src/mcp/server.ts` entry point as
8
8
  * `npm run mcp` so the two paths share exactly one implementation.
9
9
  *
10
10
  * `health` is intentionally fast and offline: it loads adapters into the
11
- * registry and prints the same tool list the server would build, without
12
- * binding stdio or HTTP. Useful as a Claude Desktop / Cursor pre-flight.
11
+ * registry and prints a structured health report. Exit 0 if healthy, 1 if not.
13
12
  */
14
13
  import type { Command } from "commander";
15
14
  export declare function registerMcpCommand(program: Command): void;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+GzD"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyGzD"}
@@ -1,15 +1,14 @@
1
1
  /**
2
2
  * MCP gateway CLI — wrapper around src/mcp/server.ts.
3
3
  *
4
- * unicli mcp serve [--transport stdio|http] [--port 19826] [--lazy]
5
- * unicli mcp health # list registered tools (no server)
4
+ * unicli mcp serve [--transport stdio|http] [--port 19826] [--expanded]
5
+ * unicli mcp health # pre-flight check (no server)
6
6
  *
7
7
  * `serve` shells out to the same `src/mcp/server.ts` entry point as
8
8
  * `npm run mcp` so the two paths share exactly one implementation.
9
9
  *
10
10
  * `health` is intentionally fast and offline: it loads adapters into the
11
- * registry and prints the same tool list the server would build, without
12
- * binding stdio or HTTP. Useful as a Claude Desktop / Cursor pre-flight.
11
+ * registry and prints a structured health report. Exit 0 if healthy, 1 if not.
13
12
  */
14
13
  import chalk from "chalk";
15
14
  import { spawn } from "node:child_process";
@@ -26,14 +25,8 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
26
25
  * stable relative position from this commands file.
27
26
  */
28
27
  function resolveServerEntry() {
29
- // After build: __dirname is dist/commands → ../mcp/server.js
30
- // In dev (tsx): __dirname is src/commands → ../mcp/server.ts
31
28
  const candidateJs = join(__dirname, "..", "mcp", "server.js");
32
29
  const candidateTs = join(__dirname, "..", "mcp", "server.ts");
33
- // Prefer TS if it exists (dev mode); otherwise JS.
34
- // We can't easily statSync here without importing fs, but join + spawn will
35
- // surface the error if neither exists. Use TS by default in dev.
36
- // The simpler heuristic: if __dirname contains "/dist/", we're built.
37
30
  if (__dirname.includes("/dist/")) {
38
31
  return { kind: "js", path: candidateJs };
39
32
  }
@@ -48,16 +41,12 @@ export function registerMcpCommand(program) {
48
41
  .description("Start the MCP server (stdio default, --transport http for HTTP/JSON-RPC)")
49
42
  .option("--transport <kind>", "stdio or http", "stdio")
50
43
  .option("--port <n>", "Port for http transport", "19826")
51
- .option("--lazy", "Register only list_adapters + run_command (compat mode)")
44
+ .option("--expanded", "Register one tool per adapter command (full catalog)")
52
45
  .action((opts) => {
53
46
  const entry = resolveServerEntry();
54
- const args = [];
55
- if (entry.kind === "ts")
56
- args.unshift(entry.path);
57
- else
58
- args.unshift(entry.path);
59
- if (opts.lazy)
60
- args.push("--lazy");
47
+ const args = [entry.path];
48
+ if (opts.expanded)
49
+ args.push("--expanded");
61
50
  if (opts.transport) {
62
51
  args.push("--transport", opts.transport);
63
52
  }
@@ -81,55 +70,51 @@ export function registerMcpCommand(program) {
81
70
  });
82
71
  mcp
83
72
  .command("health")
84
- .description("Pre-flight check — list tools the MCP server would expose")
85
- .option("--json", "Output as JSON")
73
+ .description("Pre-flight check — verify adapters load and report tool counts")
74
+ .option("--json", "Output as JSON (default when piped)")
86
75
  .action(async (opts) => {
87
- // Load adapters into the registry the same way the server does
88
- loadAllAdapters();
89
- await loadTsAdapters();
90
- const adapters = getAllAdapters();
91
- const commands = listCommands();
92
- const tools = [
93
- {
94
- name: "list_adapters",
95
- description: "List all Uni-CLI adapters and their commands",
96
- },
97
- ];
98
- for (const adapter of adapters) {
99
- for (const [cmdName, cmd] of Object.entries(adapter.commands)) {
100
- const toolName = `unicli_${adapter.name}_${cmdName}`.replace(/[^a-zA-Z0-9_]/g, "_");
101
- tools.push({
102
- name: toolName,
103
- description: cmd.description?.trim() ||
104
- adapter.description?.trim() ||
105
- `${cmdName} for ${adapter.name}`,
106
- });
76
+ const useJson = opts.json || !process.stdout.isTTY;
77
+ try {
78
+ // Load adapters into the registry the same way the server does
79
+ loadAllAdapters();
80
+ await loadTsAdapters();
81
+ const adapters = getAllAdapters();
82
+ const commands = listCommands();
83
+ // Count expanded tools (1 per command + 3 default)
84
+ let expandedToolCount = 3; // unicli_run, unicli_list, unicli_discover
85
+ for (const adapter of adapters) {
86
+ expandedToolCount += Object.keys(adapter.commands).length;
107
87
  }
108
- }
109
- if (opts.json) {
110
- console.log(JSON.stringify({
111
- version: VERSION,
112
- sites: adapters.length,
88
+ const health = {
89
+ status: "ok",
90
+ adapters: adapters.length,
113
91
  commands: commands.length,
114
- tools: tools.length,
115
- entries: tools,
116
- }, null, 2));
117
- return;
118
- }
119
- console.log(chalk.bold(`unicli MCP gateway v${VERSION}`));
120
- console.log(` sites: ${chalk.green(adapters.length)}`);
121
- console.log(` commands: ${chalk.green(commands.length)}`);
122
- console.log(` tools: ${chalk.green(tools.length)} (1 core + ${commands.length} per-command)`);
123
- console.log();
124
- console.log(chalk.dim("Sample tools:"));
125
- for (const t of tools.slice(0, 8)) {
126
- console.log(` ${chalk.cyan(t.name)}: ${t.description.slice(0, 60)}`);
92
+ tools: { default: 3, expanded: expandedToolCount },
93
+ version: VERSION,
94
+ };
95
+ if (useJson) {
96
+ console.log(JSON.stringify(health, null, 2));
97
+ return;
98
+ }
99
+ console.log(chalk.bold(`unicli MCP health v${VERSION}`));
100
+ console.log(` status: ${chalk.green("ok")}`);
101
+ console.log(` adapters: ${chalk.green(adapters.length)}`);
102
+ console.log(` commands: ${chalk.green(commands.length)}`);
103
+ console.log(` tools: ${chalk.green("3")} default, ${chalk.green(expandedToolCount)} expanded`);
104
+ console.log();
105
+ console.log(chalk.dim("Default tools: unicli_run, unicli_list, unicli_discover"));
106
+ console.log(chalk.dim("To start: unicli mcp serve [--expanded] [--transport http]"));
127
107
  }
128
- if (tools.length > 8) {
129
- console.log(chalk.dim(` … and ${tools.length - 8} more`));
108
+ catch (err) {
109
+ const message = err instanceof Error ? err.message : String(err);
110
+ if (useJson) {
111
+ console.log(JSON.stringify({ status: "error", error: message, version: VERSION }, null, 2));
112
+ }
113
+ else {
114
+ console.error(chalk.red(`Health check failed: ${message}`));
115
+ }
116
+ process.exit(1);
130
117
  }
131
- console.log();
132
- console.log(chalk.dim("To start: unicli mcp serve [--transport http]"));
133
118
  });
134
119
  }
135
120
  //# sourceMappingURL=mcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Schema command — output JSON Schema for adapter command input/output.
3
+ *
4
+ * Usage:
5
+ * unicli schema <site> <command> — Schema for a specific command
6
+ * unicli schema --all — Schema for ALL commands
7
+ *
8
+ * Output is always JSON, suitable for machine consumption.
9
+ */
10
+ import { Command } from "commander";
11
+ export declare function registerSchemaCommand(program: Command): void;
12
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkE5D"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Schema command — output JSON Schema for adapter command input/output.
3
+ *
4
+ * Usage:
5
+ * unicli schema <site> <command> — Schema for a specific command
6
+ * unicli schema --all — Schema for ALL commands
7
+ *
8
+ * Output is always JSON, suitable for machine consumption.
9
+ */
10
+ import chalk from "chalk";
11
+ import { getAllAdapters, resolveCommand } from "../registry.js";
12
+ import { ExitCode } from "../types.js";
13
+ import { buildInputSchema, buildOutputSchema, } from "../mcp/schema.js";
14
+ function buildCommandSchema(site, cmdName, cmd) {
15
+ return {
16
+ site,
17
+ command: cmdName,
18
+ description: cmd.description ?? "",
19
+ input: buildInputSchema(cmd),
20
+ output: buildOutputSchema(cmd, "flat"),
21
+ };
22
+ }
23
+ // ── Command registration ─────────────────────────────────────────────────
24
+ export function registerSchemaCommand(program) {
25
+ program
26
+ .command("schema [site] [command]")
27
+ .description("Output JSON Schema for adapter command input/output")
28
+ .option("--all", "output schema for ALL commands")
29
+ .action((site, command, opts) => {
30
+ if (opts.all) {
31
+ // Schema for all commands
32
+ const schemas = [];
33
+ for (const adapter of getAllAdapters()) {
34
+ for (const [cmdName, cmd] of Object.entries(adapter.commands)) {
35
+ schemas.push(buildCommandSchema(adapter.name, cmdName, cmd));
36
+ }
37
+ }
38
+ if (schemas.length === 0) {
39
+ console.error(chalk.red("No adapters loaded"));
40
+ process.exit(ExitCode.GENERIC_ERROR);
41
+ }
42
+ console.log(JSON.stringify(schemas, null, 2));
43
+ return;
44
+ }
45
+ if (!site || !command) {
46
+ console.error(chalk.red("Usage: unicli schema <site> <command> or unicli schema --all"));
47
+ process.exit(ExitCode.USAGE_ERROR);
48
+ }
49
+ const resolved = resolveCommand(site, command);
50
+ if (!resolved) {
51
+ // Try to suggest similar commands
52
+ const adapters = getAllAdapters();
53
+ const matching = adapters
54
+ .filter((a) => a.name.includes(site))
55
+ .map((a) => ({
56
+ site: a.name,
57
+ commands: Object.keys(a.commands),
58
+ }));
59
+ if (matching.length > 0) {
60
+ console.error(chalk.red(`Unknown command: ${site} ${command}`));
61
+ console.error(chalk.dim(`Available for matching sites: ${JSON.stringify(matching)}`));
62
+ }
63
+ else {
64
+ console.error(chalk.red(`Unknown site: ${site}`));
65
+ }
66
+ process.exit(ExitCode.USAGE_ERROR);
67
+ }
68
+ const schema = buildCommandSchema(site, command, resolved.command);
69
+ console.log(JSON.stringify(schema, null, 2));
70
+ });
71
+ }
72
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Search command — bilingual semantic search across all adapters.
3
+ *
4
+ * Usage:
5
+ * unicli search "推特热门" → finds twitter/trending
6
+ * unicli search "download video" → finds bilibili/download, youtube/download, ...
7
+ * unicli search "股票行情" → finds xueqiu/stock, eastmoney/stock, ...
8
+ * unicli search --category finance → lists all finance commands
9
+ */
10
+ import { Command } from "commander";
11
+ export declare function registerSearchCommand(program: Command): void;
12
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD5D"}