@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
@@ -0,0 +1,42 @@
1
+ # Desktop adapter — send iMessage via JXA (injection-safe)
2
+ site: macos
3
+ name: messages-send
4
+ description: Send an iMessage to a contact
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ to:
11
+ type: str
12
+ required: true
13
+ description: Recipient phone number or email
14
+ text:
15
+ type: str
16
+ required: true
17
+ description: Message text to send
18
+
19
+ pipeline:
20
+ - exec:
21
+ command: osascript
22
+ args:
23
+ - "-l"
24
+ - "JavaScript"
25
+ - "-e"
26
+ - |
27
+ ObjC.import('Foundation');
28
+ var env = $.NSProcessInfo.processInfo.environment;
29
+ var to = ObjC.unwrap(env.objectForKey('UNICLI_MSG_TO')) || '';
30
+ var text = ObjC.unwrap(env.objectForKey('UNICLI_MSG_TEXT')) || '';
31
+ var msg = Application('Messages');
32
+ var svc = msg.services.whose({serviceType: 'iMessage'})[0];
33
+ var buddy = svc.buddies.whose({handle: to})[0];
34
+ msg.send(text, {to: buddy});
35
+ JSON.stringify([{sent: true, to: to}]);
36
+ env:
37
+ UNICLI_MSG_TO: "${{ args.to }}"
38
+ UNICLI_MSG_TEXT: "${{ args.text }}"
39
+ parse: json
40
+ timeout: 15000
41
+
42
+ columns: [sent, to]
@@ -0,0 +1,43 @@
1
+ # Desktop adapter — Apple Music playback control via JXA (injection-safe)
2
+ site: macos
3
+ name: music-control
4
+ description: Control Apple Music playback (play, pause, next, prev, toggle)
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ action:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ choices: [play, pause, next, prev, toggle]
15
+ description: Playback action to perform
16
+
17
+ pipeline:
18
+ - exec:
19
+ command: osascript
20
+ args:
21
+ - "-l"
22
+ - "JavaScript"
23
+ - "-e"
24
+ - |
25
+ ObjC.import('Foundation');
26
+ var env = $.NSProcessInfo.processInfo.environment;
27
+ var action = ObjC.unwrap(env.objectForKey('UNICLI_ACTION')) || '';
28
+ var music = Application('Music');
29
+ var result = {action: action, success: true};
30
+ if (action === 'play') { music.play(); }
31
+ else if (action === 'pause') { music.pause(); }
32
+ else if (action === 'next') { music.nextTrack(); }
33
+ else if (action === 'prev') { music.previousTrack(); }
34
+ else if (action === 'toggle') { music.playpause(); }
35
+ else { result.success = false; result.error = 'unknown action'; }
36
+ result.state = music.playerState();
37
+ JSON.stringify([result]);
38
+ env:
39
+ UNICLI_ACTION: "${{ args.action }}"
40
+ parse: json
41
+ timeout: 10000
42
+
43
+ columns: [action, success, state]
@@ -0,0 +1,34 @@
1
+ # Desktop adapter — Apple Music now playing via JXA
2
+ site: macos
3
+ name: music-now
4
+ description: Get currently playing track from Apple Music
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ pipeline:
10
+ - exec:
11
+ command: osascript
12
+ args:
13
+ - "-l"
14
+ - "JavaScript"
15
+ - "-e"
16
+ - |
17
+ var music = Application('Music');
18
+ if (music.playerState() === 'playing' || music.playerState() === 'paused') {
19
+ var t = music.currentTrack;
20
+ JSON.stringify([{
21
+ name: t.name(),
22
+ artist: t.artist(),
23
+ album: t.album(),
24
+ position: music.playerPosition(),
25
+ duration: t.duration(),
26
+ state: music.playerState()
27
+ }]);
28
+ } else {
29
+ JSON.stringify([{state: 'stopped'}]);
30
+ }
31
+ parse: json
32
+ timeout: 10000
33
+
34
+ columns: [name, artist, album, state]
@@ -0,0 +1,30 @@
1
+ # Desktop adapter — list Apple Notes via JXA
2
+ site: macos
3
+ name: notes-list
4
+ description: List recent Apple Notes with folder and modification date
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ pipeline:
10
+ - exec:
11
+ command: osascript
12
+ args:
13
+ - "-l"
14
+ - "JavaScript"
15
+ - "-e"
16
+ - |
17
+ var notes = Application('Notes');
18
+ var items = notes.notes().slice(0, 20);
19
+ JSON.stringify(items.map(function(n) {
20
+ return {
21
+ name: n.name(),
22
+ body: n.plaintext().substring(0, 200),
23
+ folder: n.container().name(),
24
+ modified: n.modificationDate().toISOString()
25
+ };
26
+ }));
27
+ parse: json
28
+ timeout: 30000
29
+
30
+ columns: [name, folder, modified]
@@ -0,0 +1,45 @@
1
+ # Desktop adapter — search Apple Notes via JXA (injection-safe)
2
+ site: macos
3
+ name: notes-search
4
+ description: Search Apple Notes by title or content
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ query:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Search query string
15
+
16
+ pipeline:
17
+ - exec:
18
+ command: osascript
19
+ args:
20
+ - "-l"
21
+ - "JavaScript"
22
+ - "-e"
23
+ - |
24
+ ObjC.import('Foundation');
25
+ var notes = Application('Notes');
26
+ var q = ObjC.unwrap($.NSProcessInfo.processInfo.environment.objectForKey('UNICLI_QUERY'));
27
+ var all = notes.notes();
28
+ var results = [];
29
+ for (var i = 0; i < all.length && results.length < 20; i++) {
30
+ var n = all[i];
31
+ if (n.name().toLowerCase().includes(q.toLowerCase()) || n.plaintext().toLowerCase().includes(q.toLowerCase())) {
32
+ results.push({
33
+ name: n.name(),
34
+ folder: n.container().name(),
35
+ snippet: n.plaintext().substring(0, 150)
36
+ });
37
+ }
38
+ }
39
+ JSON.stringify(results);
40
+ env:
41
+ UNICLI_QUERY: "${{ args.query }}"
42
+ parse: json
43
+ timeout: 30000
44
+
45
+ columns: [name, folder, snippet]
@@ -0,0 +1,27 @@
1
+ site: macos
2
+ name: notification
3
+ description: Send a macOS notification
4
+ type: desktop
5
+ binary: osascript
6
+ detect: which osascript
7
+
8
+ args:
9
+ title:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Notification title
14
+ message:
15
+ type: str
16
+ required: true
17
+ description: Notification message
18
+
19
+ pipeline:
20
+ - exec:
21
+ command: osascript
22
+ args:
23
+ - "-e"
24
+ - 'display notification "${{ args.message }}" with title "${{ args.title }}"'
25
+ parse: text
26
+
27
+ columns: [result]
@@ -0,0 +1,46 @@
1
+ # Desktop adapter — send a macOS notification via JXA (injection-safe)
2
+ site: macos
3
+ name: notify
4
+ description: Send a macOS notification with title and optional subtitle
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ message:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Notification message text
15
+ title:
16
+ type: str
17
+ default: "Uni-CLI"
18
+ description: Notification title
19
+ subtitle:
20
+ type: str
21
+ default: ""
22
+ description: Notification subtitle
23
+
24
+ pipeline:
25
+ - exec:
26
+ command: osascript
27
+ args:
28
+ - "-l"
29
+ - "JavaScript"
30
+ - "-e"
31
+ - |
32
+ var app = Application.currentApplication();
33
+ app.includeStandardAdditions = true;
34
+ var env = $.NSProcessInfo.processInfo.environment;
35
+ var msg = ObjC.unwrap(env.objectForKey('UNICLI_NOTIFY_MSG')) || 'notification';
36
+ var title = ObjC.unwrap(env.objectForKey('UNICLI_NOTIFY_TITLE')) || 'Uni-CLI';
37
+ var sub = ObjC.unwrap(env.objectForKey('UNICLI_NOTIFY_SUB')) || '';
38
+ app.displayNotification(msg, {withTitle: title, subtitle: sub});
39
+ JSON.stringify([{sent: true, message: msg, title: title}]);
40
+ env:
41
+ UNICLI_NOTIFY_MSG: "${{ args.message }}"
42
+ UNICLI_NOTIFY_TITLE: "${{ args.title }}"
43
+ UNICLI_NOTIFY_SUB: "${{ args.subtitle }}"
44
+ parse: json
45
+
46
+ columns: [sent, message, title]
@@ -0,0 +1,21 @@
1
+ site: macos
2
+ name: open-app
3
+ description: Open a macOS application
4
+ type: desktop
5
+ binary: open
6
+ detect: which open
7
+
8
+ args:
9
+ app:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Application name (e.g. Safari, Finder, Terminal)
14
+
15
+ pipeline:
16
+ - exec:
17
+ command: open
18
+ args: ["-a", "${{ args.app }}"]
19
+ parse: text
20
+
21
+ columns: [result]
@@ -0,0 +1,24 @@
1
+ # Desktop adapter — open files, URLs, or apps via macOS open command
2
+ site: macos
3
+ name: open
4
+ description: Open a file, URL, or application using macOS open command
5
+ type: desktop
6
+ binary: open
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ target:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: File path, URL, or application name to open
15
+
16
+ pipeline:
17
+ - exec:
18
+ command: open
19
+ args:
20
+ - "${{ args.target }}"
21
+ parse: text
22
+ timeout: 10000
23
+
24
+ columns: []
@@ -0,0 +1,44 @@
1
+ # Desktop adapter — search Apple Photos via JXA (injection-safe)
2
+ site: macos
3
+ name: photos-search
4
+ description: Search Apple Photos library by keyword
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ query:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Search keyword for photos
15
+
16
+ pipeline:
17
+ - exec:
18
+ command: osascript
19
+ args:
20
+ - "-l"
21
+ - "JavaScript"
22
+ - "-e"
23
+ - |
24
+ ObjC.import('Foundation');
25
+ var env = $.NSProcessInfo.processInfo.environment;
26
+ var q = ObjC.unwrap(env.objectForKey('UNICLI_QUERY')) || '';
27
+ var photos = Application('Photos');
28
+ var items = photos.search({for: q}).slice(0, 20);
29
+ JSON.stringify(items.map(function(p) {
30
+ return {
31
+ name: p.name() || p.filename(),
32
+ filename: p.filename(),
33
+ date: p.date().toISOString(),
34
+ width: p.width(),
35
+ height: p.height(),
36
+ favorite: p.favorite()
37
+ };
38
+ }));
39
+ env:
40
+ UNICLI_QUERY: "${{ args.query }}"
41
+ parse: json
42
+ timeout: 30000
43
+
44
+ columns: [name, filename, date, width, height, favorite]
@@ -0,0 +1,14 @@
1
+ site: macos
2
+ name: processes
3
+ description: List top processes by CPU usage
4
+ type: desktop
5
+ binary: ps
6
+ detect: which ps
7
+
8
+ pipeline:
9
+ - exec:
10
+ command: ps
11
+ args: ["aux", "--sort=-%cpu"]
12
+ parse: text
13
+
14
+ columns: [result]
@@ -0,0 +1,75 @@
1
+ # Desktop adapter — create a macOS Reminder via JXA (injection-safe)
2
+ site: macos
3
+ name: reminder-create
4
+ description: Create a new reminder in Reminders.app
5
+ type: desktop
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ title:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Reminder title
15
+ list:
16
+ type: str
17
+ default: ""
18
+ description: Reminders list name (uses default if empty)
19
+ due:
20
+ type: str
21
+ default: ""
22
+ description: "Due date (YYYY-MM-DD or YYYY-MM-DD HH:MM)"
23
+ notes:
24
+ type: str
25
+ default: ""
26
+ description: Additional notes for the reminder
27
+
28
+ pipeline:
29
+ - exec:
30
+ command: osascript
31
+ args:
32
+ - "-l"
33
+ - "JavaScript"
34
+ - "-e"
35
+ - |
36
+ ObjC.import('Foundation');
37
+ var env = $.NSProcessInfo.processInfo.environment;
38
+ var title = ObjC.unwrap(env.objectForKey('UNICLI_TITLE')) || 'Reminder';
39
+ var listName = ObjC.unwrap(env.objectForKey('UNICLI_LIST')) || '';
40
+ var dueStr = ObjC.unwrap(env.objectForKey('UNICLI_DUE')) || '';
41
+ var notes = ObjC.unwrap(env.objectForKey('UNICLI_NOTES')) || '';
42
+
43
+ var reminders = Application('Reminders');
44
+ var targetList;
45
+ if (listName) {
46
+ var lists = reminders.lists.whose({name: listName})();
47
+ targetList = lists.length > 0 ? lists[0] : reminders.defaultList();
48
+ } else {
49
+ targetList = reminders.defaultList();
50
+ }
51
+
52
+ var props = {name: title, body: notes};
53
+ if (dueStr) {
54
+ var parts = dueStr.split(/[\s-:T]+/);
55
+ var due;
56
+ if (parts.length >= 5) {
57
+ due = new Date(parseInt(parts[0]), parseInt(parts[1])-1, parseInt(parts[2]), parseInt(parts[3]), parseInt(parts[4]));
58
+ } else {
59
+ due = new Date(parseInt(parts[0]), parseInt(parts[1])-1, parseInt(parts[2]), 9, 0);
60
+ }
61
+ props.dueDate = due;
62
+ }
63
+
64
+ var reminder = reminders.Reminder(props);
65
+ targetList.reminders.push(reminder);
66
+ JSON.stringify([{created: true, title: title, list: targetList.name(), due: dueStr || 'none'}]);
67
+ env:
68
+ UNICLI_TITLE: "${{ args.title }}"
69
+ UNICLI_LIST: "${{ args.list }}"
70
+ UNICLI_DUE: "${{ args.due }}"
71
+ UNICLI_NOTES: "${{ args.notes }}"
72
+ parse: json
73
+ timeout: 15000
74
+
75
+ columns: [created, title, list, due]
@@ -0,0 +1,33 @@
1
+ site: macos
2
+ name: reminders-complete
3
+ description: Mark a reminder as complete in macOS Reminders.app
4
+ type: desktop
5
+ binary: osascript
6
+ detect: which osascript
7
+
8
+ args:
9
+ title:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Reminder title to mark complete
14
+
15
+ pipeline:
16
+ - exec:
17
+ command: osascript
18
+ args:
19
+ - "-l"
20
+ - "JavaScript"
21
+ - "-e"
22
+ - |
23
+ const app = Application('Reminders');
24
+ const title = '${{ args.title }}';
25
+ let found = false;
26
+ for (const list of app.lists()) {
27
+ const rems = list.reminders.whose({name: title})();
28
+ for (const r of rems) { r.completed = true; found = true; }
29
+ }
30
+ JSON.stringify({ completed: found, title: title });
31
+ parse: json
32
+
33
+ columns: [completed, title]
@@ -0,0 +1,28 @@
1
+ site: macos
2
+ name: reminders-list
3
+ description: List all reminders from macOS Reminders.app
4
+ type: desktop
5
+ binary: osascript
6
+ detect: which osascript
7
+
8
+ pipeline:
9
+ - exec:
10
+ command: osascript
11
+ args:
12
+ - "-l"
13
+ - "JavaScript"
14
+ - "-e"
15
+ - |
16
+ const app = Application('Reminders');
17
+ const lists = app.lists();
18
+ const out = [];
19
+ for (const list of lists) {
20
+ const rems = list.reminders.whose({completed: false})();
21
+ for (const r of rems) {
22
+ out.push({ list: list.name(), name: r.name(), dueDate: r.dueDate() ? r.dueDate().toISOString() : '', priority: r.priority() });
23
+ }
24
+ }
25
+ JSON.stringify(out);
26
+ parse: json
27
+
28
+ columns: [list, name, dueDate, priority]
@@ -0,0 +1,23 @@
1
+ site: macos
2
+ name: safari-history
3
+ description: Get recent Safari browsing history via SQLite
4
+ type: desktop
5
+ binary: sqlite3
6
+ detect: "test $(uname) = Darwin"
7
+
8
+ args:
9
+ limit:
10
+ type: int
11
+ default: 20
12
+ description: Number of recent history entries to return
13
+
14
+ pipeline:
15
+ - exec:
16
+ command: sqlite3
17
+ args:
18
+ - "-json"
19
+ - "$HOME/Library/Safari/History.db"
20
+ - "SELECT hi.url, hv.title, datetime(hv.visit_time + 978307200, 'unixepoch', 'localtime') AS visited_at FROM history_visits hv JOIN history_items hi ON hv.history_item = hi.id ORDER BY hv.visit_time DESC LIMIT ${{ args.limit | int | default(20) }};"
21
+ parse: json
22
+
23
+ columns: [title, url, visited_at]
@@ -0,0 +1,26 @@
1
+ site: macos
2
+ name: safari-tabs
3
+ description: List all open Safari tabs
4
+ type: desktop
5
+ binary: osascript
6
+ detect: which osascript
7
+
8
+ pipeline:
9
+ - exec:
10
+ command: osascript
11
+ args:
12
+ - "-l"
13
+ - "JavaScript"
14
+ - "-e"
15
+ - |
16
+ const safari = Application('Safari');
17
+ const out = [];
18
+ for (const win of safari.windows()) {
19
+ for (const tab of win.tabs()) {
20
+ out.push({ title: tab.name(), url: tab.url() });
21
+ }
22
+ }
23
+ JSON.stringify(out);
24
+ parse: json
25
+
26
+ columns: [title, url]
@@ -0,0 +1,22 @@
1
+ site: macos
2
+ name: safari-url
3
+ description: Get the URL and title of the active Safari tab
4
+ type: desktop
5
+ binary: osascript
6
+ detect: "test $(uname) = Darwin"
7
+
8
+ pipeline:
9
+ - exec:
10
+ command: osascript
11
+ args:
12
+ - "-l"
13
+ - "JavaScript"
14
+ - "-e"
15
+ - |
16
+ const app = Application('Safari');
17
+ const win = app.windows[0];
18
+ const tab = win.currentTab();
19
+ JSON.stringify([{ url: tab.url(), title: tab.name() }]);
20
+ parse: json
21
+
22
+ columns: [url, title]
@@ -0,0 +1,36 @@
1
+ # Desktop adapter — macOS text-to-speech via say
2
+ site: macos
3
+ name: say
4
+ description: Speak text aloud using macOS text-to-speech
5
+ type: desktop
6
+ binary: say
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ text:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Text to speak
15
+ voice:
16
+ type: str
17
+ default: "Alex"
18
+ description: Voice name (e.g. Alex, Samantha, Daniel)
19
+ rate:
20
+ type: int
21
+ default: 200
22
+ description: Speech rate in words per minute
23
+
24
+ pipeline:
25
+ - exec:
26
+ command: say
27
+ args:
28
+ - "-v"
29
+ - "${{ args.voice }}"
30
+ - "-r"
31
+ - "${{ args.rate }}"
32
+ - "${{ args.text }}"
33
+ parse: text
34
+ timeout: 60000
35
+
36
+ columns: []
@@ -0,0 +1,16 @@
1
+ site: macos
2
+ name: screen-lock
3
+ description: Lock the macOS screen
4
+ type: desktop
5
+ binary: osascript
6
+ detect: which osascript
7
+
8
+ pipeline:
9
+ - exec:
10
+ command: osascript
11
+ args:
12
+ - "-e"
13
+ - 'tell application "System Events" to keystroke "q" using {command down, control down}'
14
+ parse: text
15
+
16
+ columns: [result]
@@ -0,0 +1,32 @@
1
+ site: macos
2
+ name: screen-recording
3
+ description: Record the screen to a video file using screencapture
4
+ type: desktop
5
+ binary: screencapture
6
+ detect: "test $(uname) = Darwin"
7
+
8
+ args:
9
+ file:
10
+ type: str
11
+ default: "/tmp/recording.mov"
12
+ description: Output file path for the recording (must end in .mov or .mp4)
13
+ duration:
14
+ type: int
15
+ default: 10
16
+ description: Recording duration in seconds
17
+
18
+ pipeline:
19
+ - exec:
20
+ command: screencapture
21
+ args:
22
+ - "-x"
23
+ - "-v"
24
+ - "-V"
25
+ - "${{ args.duration | default(10) }}"
26
+ - "${{ args.file | default('/tmp/recording.mov') }}"
27
+ parse: text
28
+ timeout: "${{ (args.duration + 5) * 1000 }}"
29
+
30
+ - evaluate: "JSON.stringify([{ file: ${{ args.file | json }}, duration: ${{ args.duration }}, status: 'recorded' }])"
31
+
32
+ columns: [file, duration, status]