@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.
Files changed (424) hide show
  1. package/AGENTS.md +21 -19
  2. package/README.md +237 -261
  3. package/README.zh-CN.md +239 -269
  4. package/dist/adapters/1688/assets.d.ts +2 -0
  5. package/dist/adapters/1688/assets.d.ts.map +1 -0
  6. package/dist/adapters/1688/assets.js +102 -0
  7. package/dist/adapters/1688/assets.js.map +1 -0
  8. package/dist/adapters/51job/jobs.d.ts +2 -0
  9. package/dist/adapters/51job/jobs.d.ts.map +1 -0
  10. package/dist/adapters/51job/jobs.js +292 -0
  11. package/dist/adapters/51job/jobs.js.map +1 -0
  12. package/dist/adapters/_shared/browser-tools.d.ts +10 -0
  13. package/dist/adapters/_shared/browser-tools.d.ts.map +1 -0
  14. package/dist/adapters/_shared/browser-tools.js +42 -0
  15. package/dist/adapters/_shared/browser-tools.js.map +1 -0
  16. package/dist/adapters/antigravity/extra.d.ts +2 -0
  17. package/dist/adapters/antigravity/extra.d.ts.map +1 -0
  18. package/dist/adapters/antigravity/extra.js +52 -0
  19. package/dist/adapters/antigravity/extra.js.map +1 -0
  20. package/dist/adapters/baidu-scholar/search.d.ts +2 -0
  21. package/dist/adapters/baidu-scholar/search.d.ts.map +1 -0
  22. package/dist/adapters/baidu-scholar/search.js +34 -0
  23. package/dist/adapters/baidu-scholar/search.js.map +1 -0
  24. package/dist/adapters/bilibili/compat.d.ts +2 -0
  25. package/dist/adapters/bilibili/compat.d.ts.map +1 -0
  26. package/dist/adapters/bilibili/compat.js +114 -0
  27. package/dist/adapters/bilibili/compat.js.map +1 -0
  28. package/dist/adapters/chatgpt/image.d.ts +2 -0
  29. package/dist/adapters/chatgpt/image.d.ts.map +1 -0
  30. package/dist/adapters/chatgpt/image.js +81 -0
  31. package/dist/adapters/chatgpt/image.js.map +1 -0
  32. package/dist/adapters/chatgpt-app/chatgpt-app.d.ts +2 -0
  33. package/dist/adapters/chatgpt-app/chatgpt-app.d.ts.map +1 -0
  34. package/dist/adapters/chatgpt-app/chatgpt-app.js +9 -0
  35. package/dist/adapters/chatgpt-app/chatgpt-app.js.map +1 -0
  36. package/dist/adapters/chatwise/extra.d.ts +2 -0
  37. package/dist/adapters/chatwise/extra.d.ts.map +1 -0
  38. package/dist/adapters/chatwise/extra.js +35 -0
  39. package/dist/adapters/chatwise/extra.js.map +1 -0
  40. package/dist/adapters/codex/extra.d.ts +2 -0
  41. package/dist/adapters/codex/extra.d.ts.map +1 -0
  42. package/dist/adapters/codex/extra.js +35 -0
  43. package/dist/adapters/codex/extra.js.map +1 -0
  44. package/dist/adapters/deepseek/web.d.ts +2 -0
  45. package/dist/adapters/deepseek/web.d.ts.map +1 -0
  46. package/dist/adapters/deepseek/web.js +187 -0
  47. package/dist/adapters/deepseek/web.js.map +1 -0
  48. package/dist/adapters/doubao/web.d.ts +2 -0
  49. package/dist/adapters/doubao/web.d.ts.map +1 -0
  50. package/dist/adapters/doubao/web.js +138 -0
  51. package/dist/adapters/doubao/web.js.map +1 -0
  52. package/dist/adapters/eastmoney/market-data.d.ts +2 -0
  53. package/dist/adapters/eastmoney/market-data.d.ts.map +1 -0
  54. package/dist/adapters/eastmoney/market-data.js +753 -0
  55. package/dist/adapters/eastmoney/market-data.js.map +1 -0
  56. package/dist/adapters/gitee/user.d.ts +2 -0
  57. package/dist/adapters/gitee/user.d.ts.map +1 -0
  58. package/dist/adapters/gitee/user.js +54 -0
  59. package/dist/adapters/gitee/user.js.map +1 -0
  60. package/dist/adapters/google-scholar/cite.d.ts +2 -0
  61. package/dist/adapters/google-scholar/cite.d.ts.map +1 -0
  62. package/dist/adapters/google-scholar/cite.js +82 -0
  63. package/dist/adapters/google-scholar/cite.js.map +1 -0
  64. package/dist/adapters/google-scholar/profile.d.ts +2 -0
  65. package/dist/adapters/google-scholar/profile.d.ts.map +1 -0
  66. package/dist/adapters/google-scholar/profile.js +80 -0
  67. package/dist/adapters/google-scholar/profile.js.map +1 -0
  68. package/dist/adapters/google-scholar/search.d.ts +2 -0
  69. package/dist/adapters/google-scholar/search.d.ts.map +1 -0
  70. package/dist/adapters/google-scholar/search.js +54 -0
  71. package/dist/adapters/google-scholar/search.js.map +1 -0
  72. package/dist/adapters/gov-law/laws.d.ts +2 -0
  73. package/dist/adapters/gov-law/laws.d.ts.map +1 -0
  74. package/dist/adapters/gov-law/laws.js +58 -0
  75. package/dist/adapters/gov-law/laws.js.map +1 -0
  76. package/dist/adapters/gov-policy/policy.d.ts +2 -0
  77. package/dist/adapters/gov-policy/policy.d.ts.map +1 -0
  78. package/dist/adapters/gov-policy/policy.js +58 -0
  79. package/dist/adapters/gov-policy/policy.js.map +1 -0
  80. package/dist/adapters/jd/commerce.d.ts +2 -0
  81. package/dist/adapters/jd/commerce.d.ts.map +1 -0
  82. package/dist/adapters/jd/commerce.js +133 -0
  83. package/dist/adapters/jd/commerce.js.map +1 -0
  84. package/dist/adapters/jianyu/detail.d.ts +2 -0
  85. package/dist/adapters/jianyu/detail.d.ts.map +1 -0
  86. package/dist/adapters/jianyu/detail.js +27 -0
  87. package/dist/adapters/jianyu/detail.js.map +1 -0
  88. package/dist/adapters/jimeng/workspace.d.ts +2 -0
  89. package/dist/adapters/jimeng/workspace.d.ts.map +1 -0
  90. package/dist/adapters/jimeng/workspace.js +49 -0
  91. package/dist/adapters/jimeng/workspace.js.map +1 -0
  92. package/dist/adapters/ke/rent-transaction.d.ts +2 -0
  93. package/dist/adapters/ke/rent-transaction.d.ts.map +1 -0
  94. package/dist/adapters/ke/rent-transaction.js +63 -0
  95. package/dist/adapters/ke/rent-transaction.js.map +1 -0
  96. package/dist/adapters/linux-do/search.d.ts +2 -0
  97. package/dist/adapters/linux-do/search.d.ts.map +1 -0
  98. package/dist/adapters/linux-do/search.js +75 -0
  99. package/dist/adapters/linux-do/search.js.map +1 -0
  100. package/dist/adapters/linux-do/topic-content.d.ts +2 -0
  101. package/dist/adapters/linux-do/topic-content.d.ts.map +1 -0
  102. package/dist/adapters/linux-do/topic-content.js +32 -0
  103. package/dist/adapters/linux-do/topic-content.js.map +1 -0
  104. package/dist/adapters/maimai/talents.d.ts +2 -0
  105. package/dist/adapters/maimai/talents.d.ts.map +1 -0
  106. package/dist/adapters/maimai/talents.js +64 -0
  107. package/dist/adapters/maimai/talents.js.map +1 -0
  108. package/dist/adapters/mubu/docs.d.ts +2 -0
  109. package/dist/adapters/mubu/docs.d.ts.map +1 -0
  110. package/dist/adapters/mubu/docs.js +96 -0
  111. package/dist/adapters/mubu/docs.js.map +1 -0
  112. package/dist/adapters/nowcoder/nowcoder.d.ts +2 -0
  113. package/dist/adapters/nowcoder/nowcoder.d.ts.map +1 -0
  114. package/dist/adapters/nowcoder/nowcoder.js +480 -0
  115. package/dist/adapters/nowcoder/nowcoder.js.map +1 -0
  116. package/dist/adapters/powerchina/search.d.ts +2 -0
  117. package/dist/adapters/powerchina/search.d.ts.map +1 -0
  118. package/dist/adapters/powerchina/search.js +41 -0
  119. package/dist/adapters/powerchina/search.js.map +1 -0
  120. package/dist/adapters/quark/actions.d.ts +2 -0
  121. package/dist/adapters/quark/actions.d.ts.map +1 -0
  122. package/dist/adapters/quark/actions.js +151 -0
  123. package/dist/adapters/quark/actions.js.map +1 -0
  124. package/dist/adapters/reddit/browser-utils.d.ts +7 -0
  125. package/dist/adapters/reddit/browser-utils.d.ts.map +1 -0
  126. package/dist/adapters/reddit/browser-utils.js +68 -0
  127. package/dist/adapters/reddit/browser-utils.js.map +1 -0
  128. package/dist/adapters/reddit/listings.d.ts +2 -0
  129. package/dist/adapters/reddit/listings.d.ts.map +1 -0
  130. package/dist/adapters/reddit/listings.js +193 -0
  131. package/dist/adapters/reddit/listings.js.map +1 -0
  132. package/dist/adapters/reddit/search.d.ts +2 -0
  133. package/dist/adapters/reddit/search.d.ts.map +1 -0
  134. package/dist/adapters/reddit/search.js +66 -0
  135. package/dist/adapters/reddit/search.js.map +1 -0
  136. package/dist/adapters/spotify/api.d.ts +2 -0
  137. package/dist/adapters/spotify/api.d.ts.map +1 -0
  138. package/dist/adapters/spotify/api.js +252 -0
  139. package/dist/adapters/spotify/api.js.map +1 -0
  140. package/dist/adapters/taobao/commerce.d.ts +2 -0
  141. package/dist/adapters/taobao/commerce.d.ts.map +1 -0
  142. package/dist/adapters/taobao/commerce.js +130 -0
  143. package/dist/adapters/taobao/commerce.js.map +1 -0
  144. package/dist/adapters/tdx/hot-rank.d.ts +2 -0
  145. package/dist/adapters/tdx/hot-rank.d.ts.map +1 -0
  146. package/dist/adapters/tdx/hot-rank.js +34 -0
  147. package/dist/adapters/tdx/hot-rank.js.map +1 -0
  148. package/dist/adapters/ths/hot-rank.d.ts +2 -0
  149. package/dist/adapters/ths/hot-rank.d.ts.map +1 -0
  150. package/dist/adapters/ths/hot-rank.js +34 -0
  151. package/dist/adapters/ths/hot-rank.js.map +1 -0
  152. package/dist/adapters/toutiao/articles.d.ts +2 -0
  153. package/dist/adapters/toutiao/articles.d.ts.map +1 -0
  154. package/dist/adapters/toutiao/articles.js +41 -0
  155. package/dist/adapters/toutiao/articles.js.map +1 -0
  156. package/dist/adapters/twitter/lists-extra.d.ts +2 -0
  157. package/dist/adapters/twitter/lists-extra.d.ts.map +1 -0
  158. package/dist/adapters/twitter/lists-extra.js +125 -0
  159. package/dist/adapters/twitter/lists-extra.js.map +1 -0
  160. package/dist/adapters/uiverse/components.d.ts +2 -0
  161. package/dist/adapters/uiverse/components.d.ts.map +1 -0
  162. package/dist/adapters/uiverse/components.js +138 -0
  163. package/dist/adapters/uiverse/components.js.map +1 -0
  164. package/dist/adapters/wanfang/search.d.ts +2 -0
  165. package/dist/adapters/wanfang/search.d.ts.map +1 -0
  166. package/dist/adapters/wanfang/search.js +34 -0
  167. package/dist/adapters/wanfang/search.js.map +1 -0
  168. package/dist/adapters/weixin/drafts.d.ts +2 -0
  169. package/dist/adapters/weixin/drafts.d.ts.map +1 -0
  170. package/dist/adapters/weixin/drafts.js +69 -0
  171. package/dist/adapters/weixin/drafts.js.map +1 -0
  172. package/dist/adapters/weread/ai-outline.d.ts +2 -0
  173. package/dist/adapters/weread/ai-outline.d.ts.map +1 -0
  174. package/dist/adapters/weread/ai-outline.js +28 -0
  175. package/dist/adapters/weread/ai-outline.js.map +1 -0
  176. package/dist/adapters/xiaoyuzhou/media.d.ts +2 -0
  177. package/dist/adapters/xiaoyuzhou/media.d.ts.map +1 -0
  178. package/dist/adapters/xiaoyuzhou/media.js +105 -0
  179. package/dist/adapters/xiaoyuzhou/media.js.map +1 -0
  180. package/dist/adapters/xueqiu/extra.d.ts +2 -0
  181. package/dist/adapters/xueqiu/extra.d.ts.map +1 -0
  182. package/dist/adapters/xueqiu/extra.js +74 -0
  183. package/dist/adapters/xueqiu/extra.js.map +1 -0
  184. package/dist/adapters/youtube/personal.d.ts +2 -0
  185. package/dist/adapters/youtube/personal.d.ts.map +1 -0
  186. package/dist/adapters/youtube/personal.js +183 -0
  187. package/dist/adapters/youtube/personal.js.map +1 -0
  188. package/dist/adapters/zhihu/actions.d.ts +2 -0
  189. package/dist/adapters/zhihu/actions.d.ts.map +1 -0
  190. package/dist/adapters/zhihu/actions.js +110 -0
  191. package/dist/adapters/zhihu/actions.js.map +1 -0
  192. package/dist/agents/backends.d.ts +42 -0
  193. package/dist/agents/backends.d.ts.map +1 -0
  194. package/dist/agents/backends.js +598 -0
  195. package/dist/agents/backends.js.map +1 -0
  196. package/dist/agents/editor-backends.d.ts +3 -0
  197. package/dist/agents/editor-backends.d.ts.map +1 -0
  198. package/dist/agents/editor-backends.js +70 -0
  199. package/dist/agents/editor-backends.js.map +1 -0
  200. package/dist/browser/adapter-authoring.d.ts.map +1 -1
  201. package/dist/browser/adapter-authoring.js +3 -3
  202. package/dist/browser/adapter-authoring.js.map +1 -1
  203. package/dist/browser/bridge.d.ts.map +1 -1
  204. package/dist/browser/bridge.js +2 -3
  205. package/dist/browser/bridge.js.map +1 -1
  206. package/dist/browser/daemon-client.d.ts.map +1 -1
  207. package/dist/browser/daemon-client.js +17 -5
  208. package/dist/browser/daemon-client.js.map +1 -1
  209. package/dist/browser/network-cache.js +2 -2
  210. package/dist/browser/network-cache.js.map +1 -1
  211. package/dist/browser/site-memory.d.ts.map +1 -1
  212. package/dist/browser/site-memory.js +11 -8
  213. package/dist/browser/site-memory.js.map +1 -1
  214. package/dist/browser/target-errors.d.ts +2 -2
  215. package/dist/browser/target-errors.js +2 -2
  216. package/dist/browser/verify-fixture.d.ts.map +1 -1
  217. package/dist/browser/verify-fixture.js +2 -2
  218. package/dist/browser/verify-fixture.js.map +1 -1
  219. package/dist/cli.d.ts.map +1 -1
  220. package/dist/cli.js +9 -4
  221. package/dist/cli.js.map +1 -1
  222. package/dist/commands/acp.d.ts +5 -0
  223. package/dist/commands/acp.d.ts.map +1 -1
  224. package/dist/commands/acp.js +20 -17
  225. package/dist/commands/acp.js.map +1 -1
  226. package/dist/commands/agents-backends.d.ts +6 -0
  227. package/dist/commands/agents-backends.d.ts.map +1 -0
  228. package/dist/commands/agents-backends.js +49 -0
  229. package/dist/commands/agents-backends.js.map +1 -0
  230. package/dist/commands/agents.d.ts.map +1 -1
  231. package/dist/commands/agents.js +8 -3
  232. package/dist/commands/agents.js.map +1 -1
  233. package/dist/commands/auth.d.ts.map +1 -1
  234. package/dist/commands/auth.js +8 -2
  235. package/dist/commands/auth.js.map +1 -1
  236. package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
  237. package/dist/commands/browser-operator-runtime.js +2 -2
  238. package/dist/commands/browser-operator-runtime.js.map +1 -1
  239. package/dist/commands/browser-operator.d.ts.map +1 -1
  240. package/dist/commands/browser-operator.js +2 -2
  241. package/dist/commands/browser-operator.js.map +1 -1
  242. package/dist/commands/describe.d.ts +2 -2
  243. package/dist/commands/describe.d.ts.map +1 -1
  244. package/dist/commands/describe.js +14 -3
  245. package/dist/commands/describe.js.map +1 -1
  246. package/dist/commands/dispatch.d.ts.map +1 -1
  247. package/dist/commands/dispatch.js +7 -6
  248. package/dist/commands/dispatch.js.map +1 -1
  249. package/dist/commands/explore.js +2 -2
  250. package/dist/commands/explore.js.map +1 -1
  251. package/dist/commands/generate.js +3 -3
  252. package/dist/commands/generate.js.map +1 -1
  253. package/dist/commands/health.d.ts.map +1 -1
  254. package/dist/commands/health.js +4 -10
  255. package/dist/commands/health.js.map +1 -1
  256. package/dist/commands/migrate.d.ts +9 -9
  257. package/dist/commands/migrate.d.ts.map +1 -1
  258. package/dist/commands/migrate.js +22 -22
  259. package/dist/commands/migrate.js.map +1 -1
  260. package/dist/commands/repair.d.ts.map +1 -1
  261. package/dist/commands/repair.js +9 -4
  262. package/dist/commands/repair.js.map +1 -1
  263. package/dist/commands/search.d.ts +3 -3
  264. package/dist/commands/search.js +4 -4
  265. package/dist/commands/skills.d.ts +3 -0
  266. package/dist/commands/skills.d.ts.map +1 -1
  267. package/dist/commands/skills.js +8 -4
  268. package/dist/commands/skills.js.map +1 -1
  269. package/dist/commands/synthesize.js +2 -2
  270. package/dist/commands/synthesize.js.map +1 -1
  271. package/dist/discovery/aliases.d.ts.map +1 -1
  272. package/dist/discovery/aliases.js +69 -0
  273. package/dist/discovery/aliases.js.map +1 -1
  274. package/dist/discovery/loader.d.ts.map +1 -1
  275. package/dist/discovery/loader.js +130 -0
  276. package/dist/discovery/loader.js.map +1 -1
  277. package/dist/engine/kernel/execute.d.ts.map +1 -1
  278. package/dist/engine/kernel/execute.js +27 -4
  279. package/dist/engine/kernel/execute.js.map +1 -1
  280. package/dist/engine/user-home.d.ts +9 -0
  281. package/dist/engine/user-home.d.ts.map +1 -0
  282. package/dist/engine/user-home.js +12 -0
  283. package/dist/engine/user-home.js.map +1 -0
  284. package/dist/fast-path.d.ts +14 -0
  285. package/dist/fast-path.d.ts.map +1 -0
  286. package/dist/fast-path.js +565 -0
  287. package/dist/fast-path.js.map +1 -0
  288. package/dist/hub/index.d.ts +1 -1
  289. package/dist/hub/index.d.ts.map +1 -1
  290. package/dist/hub/index.js +28 -17
  291. package/dist/hub/index.js.map +1 -1
  292. package/dist/main.js +15 -3
  293. package/dist/main.js.map +1 -1
  294. package/dist/manifest-compact.txt +11 -11
  295. package/dist/manifest-search.json +1 -1
  296. package/dist/manifest.json +27600 -1016
  297. package/dist/mcp/tools.js +1 -1
  298. package/dist/mcp/tools.js.map +1 -1
  299. package/dist/output/error-map.d.ts.map +1 -1
  300. package/dist/output/error-map.js +16 -5
  301. package/dist/output/error-map.js.map +1 -1
  302. package/dist/protocol/acp.js +1 -1
  303. package/dist/protocol/acp.js.map +1 -1
  304. package/dist/registry.d.ts +3 -0
  305. package/dist/registry.d.ts.map +1 -1
  306. package/dist/registry.js +34 -1
  307. package/dist/registry.js.map +1 -1
  308. package/dist/runtime/usage-ledger.d.ts +6 -7
  309. package/dist/runtime/usage-ledger.d.ts.map +1 -1
  310. package/dist/runtime/usage-ledger.js +6 -7
  311. package/dist/runtime/usage-ledger.js.map +1 -1
  312. package/dist/types.d.ts +2 -0
  313. package/dist/types.d.ts.map +1 -1
  314. package/dist/types.js.map +1 -1
  315. package/package.json +61 -52
  316. package/src/adapters/1688/assets.ts +114 -0
  317. package/src/adapters/51job/jobs.ts +327 -0
  318. package/src/adapters/_shared/browser-tools.ts +59 -0
  319. package/src/adapters/antigravity/extra.ts +53 -0
  320. package/src/adapters/baidu-scholar/search.ts +38 -0
  321. package/src/adapters/bilibili/compat.ts +132 -0
  322. package/src/adapters/binance/asks.yaml +41 -0
  323. package/src/adapters/binance/depth.yaml +41 -0
  324. package/src/adapters/binance/gainers.yaml +42 -0
  325. package/src/adapters/binance/hot.yaml +1 -1
  326. package/src/adapters/binance/kline.yaml +1 -1
  327. package/src/adapters/binance/klines.yaml +46 -0
  328. package/src/adapters/binance/losers.yaml +42 -0
  329. package/src/adapters/binance/pairs.yaml +38 -0
  330. package/src/adapters/binance/price.yaml +32 -0
  331. package/src/adapters/binance/prices.yaml +30 -0
  332. package/src/adapters/binance/ticker.yaml +2 -2
  333. package/src/adapters/binance/top.yaml +46 -0
  334. package/src/adapters/binance/trades.yaml +42 -0
  335. package/src/adapters/chatgpt/image.ts +84 -0
  336. package/src/adapters/chatgpt-app/chatgpt-app.ts +11 -0
  337. package/src/adapters/chatwise/extra.ts +36 -0
  338. package/src/adapters/codex/extra.ts +36 -0
  339. package/src/adapters/deepseek/web.ts +203 -0
  340. package/src/adapters/doubao/web.ts +154 -0
  341. package/src/adapters/eastmoney/market-data.ts +829 -0
  342. package/src/adapters/excel/insert-image.yaml +80 -0
  343. package/src/adapters/excel/insert-link.yaml +90 -0
  344. package/src/adapters/excel/list.yaml +63 -0
  345. package/src/adapters/excel/read.yaml +74 -0
  346. package/src/adapters/excel/set-cell.yaml +77 -0
  347. package/src/adapters/excel/set-font.yaml +87 -0
  348. package/src/adapters/excel/status.yaml +29 -0
  349. package/src/adapters/gh/search-repos.yaml +62 -0
  350. package/src/adapters/gitee/user.ts +59 -0
  351. package/src/adapters/google-scholar/cite.ts +95 -0
  352. package/src/adapters/google-scholar/profile.ts +91 -0
  353. package/src/adapters/google-scholar/search.ts +58 -0
  354. package/src/adapters/gov-law/laws.ts +61 -0
  355. package/src/adapters/gov-policy/policy.ts +61 -0
  356. package/src/adapters/imessage/contact.yaml +7 -2
  357. package/src/adapters/imessage/recent.yaml +7 -2
  358. package/src/adapters/imessage/search.yaml +7 -2
  359. package/src/adapters/jd/commerce.ts +142 -0
  360. package/src/adapters/jianyu/detail.ts +28 -0
  361. package/src/adapters/jimeng/workspace.ts +53 -0
  362. package/src/adapters/ke/rent-transaction.ts +70 -0
  363. package/src/adapters/linux-do/search.ts +92 -0
  364. package/src/adapters/linux-do/topic-content.ts +45 -0
  365. package/src/adapters/maimai/talents.ts +65 -0
  366. package/src/adapters/mubu/docs.ts +107 -0
  367. package/src/adapters/nowcoder/nowcoder.ts +570 -0
  368. package/src/adapters/powerchina/search.ts +45 -0
  369. package/src/adapters/powerpoint/add-slide.yaml +93 -0
  370. package/src/adapters/powerpoint/insert-image.yaml +71 -0
  371. package/src/adapters/powerpoint/insert-link.yaml +94 -0
  372. package/src/adapters/powerpoint/list.yaml +58 -0
  373. package/src/adapters/powerpoint/set-font.yaml +101 -0
  374. package/src/adapters/powerpoint/slides.yaml +73 -0
  375. package/src/adapters/powerpoint/status.yaml +29 -0
  376. package/src/adapters/quark/actions.ts +169 -0
  377. package/src/adapters/reddit/browser-utils.ts +93 -0
  378. package/src/adapters/reddit/listings.ts +223 -0
  379. package/src/adapters/reddit/search.ts +74 -0
  380. package/src/adapters/spotify/api.ts +292 -0
  381. package/src/adapters/taobao/commerce.ts +134 -0
  382. package/src/adapters/tdx/hot-rank.ts +35 -0
  383. package/src/adapters/ths/hot-rank.ts +35 -0
  384. package/src/adapters/toutiao/articles.ts +45 -0
  385. package/src/adapters/twitter/lists-extra.ts +139 -0
  386. package/src/adapters/uiverse/components.ts +154 -0
  387. package/src/adapters/vercel/list.yaml +2 -1
  388. package/src/adapters/wanfang/search.ts +38 -0
  389. package/src/adapters/weixin/drafts.ts +74 -0
  390. package/src/adapters/weread/ai-outline.ts +32 -0
  391. package/src/adapters/word/insert-image.yaml +73 -0
  392. package/src/adapters/word/insert-link.yaml +82 -0
  393. package/src/adapters/word/insert-text.yaml +72 -0
  394. package/src/adapters/word/list.yaml +63 -0
  395. package/src/adapters/word/read.yaml +63 -0
  396. package/src/adapters/word/set-font.yaml +97 -0
  397. package/src/adapters/word/status.yaml +29 -0
  398. package/src/adapters/xiaoyuzhou/media.ts +139 -0
  399. package/src/adapters/xueqiu/extra.ts +78 -0
  400. package/src/adapters/youtube/personal.ts +215 -0
  401. package/src/adapters/zhihu/actions.ts +111 -0
  402. package/src/hub/external-clis-harness.yaml +211 -0
  403. package/src/hub/external-clis.yaml +175 -0
  404. package/src/hub/index.ts +29 -25
  405. package/src/adapters/linux-do/search.yaml +0 -44
  406. package/src/adapters/meituan/hot.yaml +0 -34
  407. package/src/adapters/reddit/frontpage.test.ts +0 -15
  408. package/src/adapters/reddit/frontpage.yaml +0 -41
  409. package/src/adapters/reddit/hot.test.ts +0 -15
  410. package/src/adapters/reddit/hot.yaml +0 -41
  411. package/src/adapters/reddit/new.test.ts +0 -15
  412. package/src/adapters/reddit/new.yaml +0 -42
  413. package/src/adapters/reddit/popular.test.ts +0 -15
  414. package/src/adapters/reddit/popular.yaml +0 -41
  415. package/src/adapters/reddit/rising.test.ts +0 -15
  416. package/src/adapters/reddit/rising.yaml +0 -41
  417. package/src/adapters/reddit/search.test.ts +0 -15
  418. package/src/adapters/reddit/search.yaml +0 -52
  419. package/src/adapters/reddit/subreddit.test.ts +0 -15
  420. package/src/adapters/reddit/subreddit.yaml +0 -50
  421. package/src/adapters/reddit/top.test.ts +0 -15
  422. package/src/adapters/reddit/top.yaml +0 -48
  423. package/src/adapters/reddit/trending.test.ts +0 -15
  424. package/src/adapters/reddit/trending.yaml +0 -33
package/README.md CHANGED
@@ -1,334 +1,310 @@
1
- <!-- AGENT: npm install -g @zenalexa/unicli && unicli search "your intent" — 1283 commands across 220 sites. Markdown envelope by default; use -f json for JSON. Self-repairing YAML adapters. Bilingual EN/ZH search. See AGENTS.md for live counts. -->
2
-
3
- <div align="center">
4
-
5
- <picture>
6
- <source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
7
- <source media="(prefers-color-scheme: light)" srcset="assets/logo-light.svg">
8
- <img alt="Uni-CLI" src="assets/logo-light.svg" width="420">
9
- </picture>
10
-
11
- <br><br>
12
-
13
- **CLI is all agents need.**
14
-
15
- The execution layer for agent skills. Deterministic, editable, cross-vendor.
16
-
17
- <br>
18
-
19
- <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square&color=cb3837" alt="npm"></a>
20
- <a href="https://github.com/olo-dot-io/Uni-CLI/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/olo-dot-io/Uni-CLI/ci.yml?style=flat-square&label=CI" alt="CI"></a>
21
- <a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=flat-square" alt="license"></a>
22
- <img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7145<!-- /STATS -->-44cc11?style=flat-square" alt="tests">
23
- <img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=flat-square" alt="agent-reach ally">
24
-
25
- <br><br>
26
-
27
- ```
28
- npm install -g @zenalexa/unicli
29
- ```
30
-
31
- <br>
32
-
33
- <img src="docs/demo/demo.svg" alt="Uni-CLI in 30 seconds" width="720">
34
-
35
- </div>
36
-
37
- ---
1
+ <p align="center">
2
+ <img src="assets/mascot-otter.png" alt="Uni-CLI otter mascot" width="180">
3
+ </p>
38
4
 
39
- ## What
5
+ <h1 align="center">Uni-CLI</h1>
40
6
 
41
- Uni-CLI is a universal interface that compiles agent intent into deterministic CLI programs. One binary reaches <!-- STATS:site_count -->220<!-- /STATS --> sites, 30+ desktop apps, 35 CLI bridges, and the local OS — <!-- STATS:command_count -->1283<!-- /STATS --> commands in total. Every adapter is a 20-line YAML pipeline, so agents can read, edit, and re-run them without a compiler.
7
+ <p align="center">
8
+ <strong>One CLI surface for agents to operate websites, desktop apps, local tools, and other CLIs.</strong>
9
+ </p>
42
10
 
43
- Coverage is cross-cutting: web APIs and browser automation, desktop subprocesses (ffmpeg, Blender, LibreOffice), macOS system calls (screenshot, clipboard, Calendar), macOS AX, and a pluggable CUA contract with mock/provider stubs — all behind the same `unicli <site> <command>` surface. Output is a v2 AgentEnvelope in Markdown by default; use `-f json` for JSON, `-f yaml` for YAML, or legacy `csv` / `compact` when needed. Errors include the adapter path, the failing step, and a suggestion — enough directional feedback for an agent to fix the adapter and retry.
11
+ <p align="center">
12
+ <a href="https://olo-dot-io.github.io/Uni-CLI/">Docs</a>
13
+ ·
14
+ <a href="https://olo-dot-io.github.io/Uni-CLI/reference/sites">Sites catalog</a>
15
+ ·
16
+ <a href="https://olo-dot-io.github.io/Uni-CLI/llms.txt">llms.txt</a>
17
+ </p>
44
18
 
45
- Self-repair is a first-class capability. When a site changes its API, an agent reads the 20-line YAML, edits the selector or endpoint, saves to `~/.unicli/adapters/`, and retries. Fixes survive `npm update`. No human in the loop.
19
+ <p align="center">
20
+ Search by intent, run a real command, get a structured envelope back. If a site changes, the error points to the adapter file and step to repair.
21
+ </p>
46
22
 
47
- ## Why
23
+ <p align="center">
24
+ <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img alt="npm" src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square"></a>
25
+ <a href="./LICENSE"><img alt="license" src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square"></a>
26
+ <img alt="Node 20+" src="https://img.shields.io/badge/node-20%2B-339933?style=flat-square&logo=node.js&logoColor=white">
27
+ <img alt="MCP" src="https://img.shields.io/badge/MCP-2025--11--25-6f42c1?style=flat-square">
28
+ </p>
48
29
 
49
- MCP tool catalogs cost 4–35× more tokens per call than an equivalent CLI invocation, and 55K tokens of cold-start tax before the agent touches a tool (Firecrawl, Scalekit, Apideck benchmarks; see [`docs/BENCHMARK.md`](docs/BENCHMARK.md)). Agents perform better with executable programs than with catalogs of tool descriptions. Retrieval-over-catalog research in 2025–2026 (Semantic Tool Discovery, ITR Dynamic Tool Exposure, JSPLIT) reports 95–99% context reduction when tools are fetched on demand.
30
+ <p align="center">
31
+ <sub><!-- STATS:site_count -->235<!-- /STATS --> sites · <!-- STATS:command_count -->1448<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps · <!-- STATS:test_count -->7394<!-- /STATS --> tests</sub>
32
+ </p>
50
33
 
51
- Uni-CLI is the execution half of that equation. The MCP server exposes 4 meta-tools (~200 tokens cold-start) — `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore` — and the agent pulls the exact tool it needs via BM25 bilingual search over a 50KB index. The CLI itself costs one subprocess per call.
34
+ <p align="center">
35
+ <strong>Web / Social / Knowledge</strong><br>
36
+ <img src="https://img.shields.io/badge/X-000000?style=flat-square&logo=x&logoColor=white" alt="X">
37
+ <img src="https://img.shields.io/badge/Reddit-FF4500?style=flat-square&logo=reddit&logoColor=white" alt="Reddit">
38
+ <img src="https://img.shields.io/badge/Instagram-E4405F?style=flat-square&logo=instagram&logoColor=white" alt="Instagram">
39
+ <img src="https://img.shields.io/badge/TikTok-000000?style=flat-square&logo=tiktok&logoColor=white" alt="TikTok">
40
+ <img src="https://img.shields.io/badge/YouTube-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube">
41
+ <img src="https://img.shields.io/badge/Bilibili-00A1D6?style=flat-square&logo=bilibili&logoColor=white" alt="Bilibili">
42
+ <img src="https://img.shields.io/badge/Zhihu-0084FF?style=flat-square&logo=zhihu&logoColor=white" alt="Zhihu">
43
+ <img src="https://img.shields.io/badge/Weibo-E6162D?style=flat-square&logo=sinaweibo&logoColor=white" alt="Weibo">
44
+ <img src="https://img.shields.io/badge/Xiaohongshu-FF2442?style=flat-square&logoColor=white" alt="Xiaohongshu">
45
+ <img src="https://img.shields.io/badge/Douyin-000000?style=flat-square&logo=tiktok&logoColor=white" alt="Douyin">
46
+ <img src="https://img.shields.io/badge/Hacker%20News-FF6600?style=flat-square&logo=ycombinator&logoColor=white" alt="Hacker News">
47
+ <img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub">
48
+ <img src="https://img.shields.io/badge/Stack%20Overflow-F58025?style=flat-square&logo=stackoverflow&logoColor=white" alt="Stack Overflow">
49
+ <img src="https://img.shields.io/badge/Product%20Hunt-DA552F?style=flat-square&logo=producthunt&logoColor=white" alt="Product Hunt">
50
+ <img src="https://img.shields.io/badge/npm-CB3837?style=flat-square&logo=npm&logoColor=white" alt="npm">
51
+ <img src="https://img.shields.io/badge/PyPI-3775A9?style=flat-square&logo=pypi&logoColor=white" alt="PyPI">
52
+ <img src="https://img.shields.io/badge/Wikipedia-000000?style=flat-square&logo=wikipedia&logoColor=white" alt="Wikipedia">
53
+ <img src="https://img.shields.io/badge/Spotify-1DB954?style=flat-square&logo=spotify&logoColor=white" alt="Spotify">
54
+ <img src="https://img.shields.io/badge/IMDb-F5C518?style=flat-square&logo=imdb&logoColor=black" alt="IMDb">
55
+ <img src="https://img.shields.io/badge/Bloomberg-000000?style=flat-square&logoColor=white" alt="Bloomberg">
56
+ <img src="https://img.shields.io/badge/Reuters-FF8000?style=flat-square&logo=reuters&logoColor=white" alt="Reuters">
57
+ <img src="https://img.shields.io/badge/BBC-B80000?style=flat-square&logo=bbc&logoColor=white" alt="BBC">
58
+ <img src="https://img.shields.io/badge/Binance-F0B90B?style=flat-square&logo=binance&logoColor=black" alt="Binance">
59
+ <img src="https://img.shields.io/badge/Coinbase-0052FF?style=flat-square&logo=coinbase&logoColor=white" alt="Coinbase">
60
+ <img src="https://img.shields.io/badge/Yahoo%20Finance-6001D2?style=flat-square&logo=yahoo&logoColor=white" alt="Yahoo Finance">
61
+ </p>
52
62
 
53
- ## Quick start
63
+ <p align="center">
64
+ <strong>Agent / IDE / Coding Surfaces</strong><br>
65
+ <img src="https://img.shields.io/badge/Claude%20Code-D97757?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code">
66
+ <img src="https://img.shields.io/badge/Codex-111111?style=flat-square&logo=openai&logoColor=white" alt="Codex">
67
+ <img src="https://img.shields.io/badge/OpenCode-101010?style=flat-square&logoColor=white" alt="OpenCode">
68
+ <img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logoColor=white" alt="Cursor">
69
+ <img src="https://img.shields.io/badge/Kiro-FF9900?style=flat-square&logo=amazon&logoColor=black" alt="Kiro">
70
+ <img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=googlegemini&logoColor=white" alt="Gemini">
71
+ <img src="https://img.shields.io/badge/Qwen-1E88E5?style=flat-square&logoColor=white" alt="Qwen">
72
+ <img src="https://img.shields.io/badge/Kimi-6C5CE7?style=flat-square&logoColor=white" alt="Kimi">
73
+ <img src="https://img.shields.io/badge/MiniMax-00A6FB?style=flat-square&logoColor=white" alt="MiniMax">
74
+ <img src="https://img.shields.io/badge/Cline-6E56CF?style=flat-square&logoColor=white" alt="Cline">
75
+ <img src="https://img.shields.io/badge/Roo%20Code-2E7D32?style=flat-square&logoColor=white" alt="Roo Code">
76
+ <img src="https://img.shields.io/badge/Windsurf-00C2FF?style=flat-square&logoColor=white" alt="Windsurf">
77
+ <img src="https://img.shields.io/badge/Aider-6F42C1?style=flat-square&logo=python&logoColor=white" alt="Aider">
78
+ <img src="https://img.shields.io/badge/Goose-111827?style=flat-square&logoColor=white" alt="Goose">
79
+ <img src="https://img.shields.io/badge/OpenHands-FF6B00?style=flat-square&logoColor=white" alt="OpenHands">
80
+ <img src="https://img.shields.io/badge/SWE--agent-0F172A?style=flat-square&logoColor=white" alt="SWE-agent">
81
+ <img src="https://img.shields.io/badge/GitHub%20Copilot-181717?style=flat-square&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
82
+ <img src="https://img.shields.io/badge/AgentAPI-334155?style=flat-square&logoColor=white" alt="AgentAPI">
83
+ <img src="https://img.shields.io/badge/acpx-475569?style=flat-square&logoColor=white" alt="acpx">
84
+ </p>
54
85
 
55
- Five minutes, top-to-bottom:
86
+ <p align="center">
87
+ <strong>Desktop / Media / DevOps / Cloud</strong><br>
88
+ <img src="https://img.shields.io/badge/macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS">
89
+ <img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white" alt="Chrome">
90
+ <img src="https://img.shields.io/badge/Blender-F5792A?style=flat-square&logo=blender&logoColor=white" alt="Blender">
91
+ <img src="https://img.shields.io/badge/FFmpeg-007808?style=flat-square&logo=ffmpeg&logoColor=white" alt="FFmpeg">
92
+ <img src="https://img.shields.io/badge/ImageMagick-0074C1?style=flat-square&logoColor=white" alt="ImageMagick">
93
+ <img src="https://img.shields.io/badge/GIMP-5C5543?style=flat-square&logo=gimp&logoColor=white" alt="GIMP">
94
+ <img src="https://img.shields.io/badge/FreeCAD-729FCF?style=flat-square&logo=freecad&logoColor=white" alt="FreeCAD">
95
+ <img src="https://img.shields.io/badge/Audacity-0000CC?style=flat-square&logo=audacity&logoColor=white" alt="Audacity">
96
+ <img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
97
+ <img src="https://img.shields.io/badge/GitHub%20CLI-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub CLI">
98
+ <img src="https://img.shields.io/badge/jq-C7254E?style=flat-square&logo=json&logoColor=white" alt="jq">
99
+ <img src="https://img.shields.io/badge/yt--dlp-4A5568?style=flat-square&logo=youtube&logoColor=white" alt="yt-dlp">
100
+ <img src="https://img.shields.io/badge/AWS-232F3E?style=flat-square&logo=amazonaws&logoColor=white" alt="AWS">
101
+ <img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=vercel&logoColor=white" alt="Vercel">
102
+ <img src="https://img.shields.io/badge/Supabase-3ECF8E?style=flat-square&logo=supabase&logoColor=black" alt="Supabase">
103
+ <img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" alt="Cloudflare">
104
+ <img src="https://img.shields.io/badge/Stripe-635BFF?style=flat-square&logo=stripe&logoColor=white" alt="Stripe">
105
+ <img src="https://img.shields.io/badge/Firebase-FFCA28?style=flat-square&logo=firebase&logoColor=black" alt="Firebase">
106
+ <img src="https://img.shields.io/badge/Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white" alt="Netlify">
107
+ <img src="https://img.shields.io/badge/Railway-0B0D0E?style=flat-square&logo=railway&logoColor=white" alt="Railway">
108
+ <img src="https://img.shields.io/badge/Azure-0078D4?style=flat-square&logo=microsoftazure&logoColor=white" alt="Azure">
109
+ <img src="https://img.shields.io/badge/Google%20Cloud-4285F4?style=flat-square&logo=googlecloud&logoColor=white" alt="Google Cloud">
110
+ <img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack">
111
+ <img src="https://img.shields.io/badge/Notion-000000?style=flat-square&logo=notion&logoColor=white" alt="Notion">
112
+ <img src="https://img.shields.io/badge/Linear-5E6AD2?style=flat-square&logo=linear&logoColor=white" alt="Linear">
113
+ <img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=figma&logoColor=white" alt="Figma">
114
+ </p>
56
115
 
57
116
  ```bash
58
- # 1. Install
59
117
  npm install -g @zenalexa/unicli
60
-
61
- # 2. Discover
62
- unicli list # all sites + commands
63
- unicli search "推特热门" # → twitter trending (bilingual)
64
-
65
- # 3. Run
66
- unicli reddit hot --limit 3 # zero-config web API
67
- unicli hackernews top -f json | jq '.data[].title' # pipe + transform
68
-
69
- # 4. Wire into an agent
70
- claude mcp add unicli -- npx @zenalexa/unicli mcp serve # Claude Code (MCP stdio)
71
- unicli mcp serve --transport streamable --port 19826 # Any MCP client (HTTP)
72
- unicli acp # avante.nvim / Zed (ACP)
118
+ unicli search "hacker news frontpage"
119
+ unicli hackernews top -f json
73
120
  ```
74
121
 
75
- Full walkthrough with 5 worked examples: [`docs/QUICKSTART.md`](docs/QUICKSTART.md).
122
+ <!-- IF YOU ARE AN AI AGENT: Start here.
123
+ Install: npm install -g @zenalexa/unicli
124
+ Discover: unicli search "your intent"
125
+ Run: unicli <site> <command> [args] [-f json|md|yaml|csv|compact]
126
+ Repair: read the error envelope, edit the adapter_path, run unicli repair <site> <command>
127
+ Prefer native CLI / JSON stream / MCP for agent runtimes. Use ACP as an editor compatibility gateway.
128
+ -->
76
129
 
77
- ## Architecture
130
+ ## What It Does
78
131
 
79
- ```mermaid
80
- graph TB
81
- CMD["unicli &lt;site&gt; &lt;command&gt;"]
132
+ Uni-CLI turns software surfaces into commands that agents can discover, run, and fix.
82
133
 
83
- CMD --> ADAPT["Adapter layer<br/><!-- STATS:adapter_count_yaml -->896<!-- /STATS --> YAML · <!-- STATS:adapter_count_ts -->77<!-- /STATS --> TS · 35 bridges"]
134
+ | Surface | What you get |
135
+ | ------------------ | -------------------------------------------------------------------------------------------------- |
136
+ | Websites and APIs | Declarative adapters for public, cookie, header, and browser-intercept workflows |
137
+ | Browser automation | CDP steps for navigate, click, type, intercept, snapshot, extract, wait, and related browser work |
138
+ | Desktop and macOS | System commands, app adapters, screenshots, clipboard, calendar, brightness, and local tools |
139
+ | External CLIs | 58 registered pass-through bridges with install/status discovery |
140
+ | Agent backends | Route matrix for native CLI, JSON stream, MCP, ACP, HTTP API, OpenAI-compatible, and bridge routes |
141
+ | Output | v2 `AgentEnvelope` in Markdown, JSON, YAML, CSV, or compact format |
142
+ | Repair | Structured errors with `adapter_path`, failing `step`, retryability, suggestions, and alternatives |
84
143
 
85
- ADAPT --> ENGINE["Pipeline engine — <!-- STATS:pipeline_step_count -->59<!-- /STATS -->+ steps<br/>fetch · navigate · exec · extract · each · if · parallel"]
144
+ ## For Agents
86
145
 
87
- ENGINE --> T1["HTTP<br/>(web APIs)"]
88
- ENGINE --> T2["CDP Browser<br/>(raw WebSocket)"]
89
- ENGINE --> T3["Subprocess<br/>(ffmpeg, yt-dlp, gh)"]
90
- ENGINE --> T4["Desktop-AX<br/>(macOS AppleScript)"]
91
- ENGINE --> T5["Desktop-UIA<br/>(Windows declared stub)"]
92
- ENGINE --> T6["Desktop-AT-SPI<br/>(Linux declared stub)"]
93
- ENGINE --> T7["CUA<br/>(contract · mock · provider stubs)"]
146
+ Use search first, then run the smallest matching command.
94
147
 
95
- T1 --> OUT["Formatter<br/>md · json · yaml · csv · compact"]
96
- T2 --> OUT
97
- T3 --> OUT
98
- T4 --> OUT
99
- T5 --> OUT
100
- T6 --> OUT
101
- T7 --> OUT
148
+ ```bash
149
+ unicli search "twitter trending" --limit 5
150
+ unicli twitter search "coding agents" -f json
151
+ unicli repair twitter search
102
152
  ```
103
153
 
104
- Seven TransportAdapters, one adapter layer, one formatter. Adapters are declarative YAML by default (Rice-decidable, no imports) and TypeScript when a site genuinely needs it. The full step reference lives in [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md).
105
-
106
- ## Self-repair
107
-
108
- When a command breaks:
109
-
110
- ```
111
- unicli <site> <cmd> fails
112
- → structured error envelope on stderr
113
- { adapter_path, step, action, suggestion }
114
- → agent opens the ~20-line YAML
115
- → agent edits the selector / URL / auth
116
- → unicli <site> <cmd> works
117
- → fix persists in ~/.unicli/adapters/ (survives npm update)
118
- ```
154
+ Output defaults to structured Markdown for non-TTY and agent-user-agent runs. Force a machine format when you need one:
119
155
 
120
156
  ```bash
121
- unicli repair hackernews top # Diagnose + suggest fix
122
- unicli test hackernews # Validate adapter
123
- unicli repair --loop # Autonomous fix loop
157
+ UNICLI_OUTPUT=json unicli reddit hot --limit 10
158
+ unicli hackernews top --limit 5 -f yaml
124
159
  ```
125
160
 
126
- Exit codes follow `sysexits.h`: `0` ok, `66` empty, `69` unavailable, `75` temporary, `77` auth, `78` config. Agents parse those directly — no regex over human error text.
127
-
128
- ## Feature matrix
161
+ Protocol entry points:
129
162
 
130
- | Capability | What it means |
131
- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
132
- | **CUA contract** | Stable screenshot/action interface with mock backend and explicit provider stubs; not marketed as real computer-use yet |
133
- | **MCP transports** | stdio · Streamable HTTP (spec 2025-11-25) · SSE · OAuth 2.1 PKCE |
134
- | **ACP ready** | `unicli acp` speaks JSON-RPC 2.0 for avante.nvim, Zed, Gemini CLI |
135
- | **Cross-vendor skills** | Skills in `skills/` work in Claude Code, OpenCode, Codex, Cursor, Cline |
136
- | **Self-repair envelope** | Every error ships `adapter_path` + `step` + `suggestion` (Banach-convergent) |
137
- | **Bilingual search** | BM25 + TF-IDF, 50KB index, <10ms queries, 200-entry ZH↔EN alias table |
138
- | **Browser operator** | Extension-backed browser daemon with shared or isolated workspaces, background mode, bind/sessions |
163
+ ```bash
164
+ npx @zenalexa/unicli mcp serve
165
+ npx @zenalexa/unicli mcp serve --transport streamable --port 19826
166
+ unicli acp
167
+ unicli agents recommend codex
168
+ unicli agents matrix
169
+ ```
139
170
 
140
- Detailed benchmarks (p50/p95 token cost per category, vs GitHub MCP cold-start): [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
171
+ ACP is supported for editors and bridge tooling. The primary runtime path stays native CLI, JSON stream, or MCP when those routes are available.
141
172
 
142
- ## Platform coverage
173
+ ## Coverage
143
174
 
144
- <!-- STATS:site_count -->220<!-- /STATS --> sites · <!-- STATS:command_count -->1283<!-- /STATS --> commands the live list is auto-generated in [`AGENTS.md`](AGENTS.md) and split by domain:
175
+ The catalog is intentionally broad, but the important point is not the count. The important point is that every command is discoverable, typed, and repairable.
145
176
 
146
- | Domain | Highlights |
147
- | --------------------- | ----------------------------------------------------------------------- |
148
- | **Social (25)** | twitter, reddit, instagram, tiktok, xiaohongshu, bilibili, zhihu, weibo |
149
- | **Tech (19)** | hackernews, stackoverflow, producthunt, github-trending, npm, pypi |
150
- | **News (11)** | bbc, reuters, bloomberg, nytimes, techcrunch, 36kr |
151
- | **Finance (8)** | xueqiu, yahoo-finance, eastmoney, binance, coinbase |
152
- | **AI / ML (14)** | huggingface, ollama, replicate, perplexity, deepseek, doubao |
153
- | **Desktop (30+)** | blender, ffmpeg, imagemagick, gimp, freecad, musescore, kdenlive |
154
- | **macOS system (58)** | screenshot, clipboard, Calendar, Mail, Reminders, Shortcuts, Safari |
155
- | **CLI bridges (35)** | gh, yt-dlp, jq, aws, vercel, supabase, wrangler, stripe |
177
+ | Area | Examples |
178
+ | ----------------------- | ----------------------------------------------------------------------------------------------------------- |
179
+ | Chinese platforms | xiaohongshu, zhihu, bilibili, douyin, douban, v2ex, jike, linux-do |
180
+ | International platforms | twitter, reddit, instagram, tiktok, discord, slack, hackernews, lesswrong |
181
+ | AI and developer tools | Claude, ChatGPT, Gemini, Codex, Cursor, VS Code, Docker Desktop, Postman |
182
+ | Finance and news | xueqiu, eastmoney, yahoo-finance, bloomberg, reuters, bbc, 36kr |
183
+ | Desktop apps | Blender, FreeCAD, GIMP, Audacity, Figma, Docker, ImageMagick, ffmpeg |
184
+ | Agent CLIs | Claude Code, Codex, OpenCode, Gemini CLI, Qwen Code, Aider, Goose, Cursor Agent, Kiro, OpenHands, SWE-agent |
156
185
 
157
- Run `unicli list` for the live catalog, or `unicli list --category=<domain>` to filter.
186
+ See the live catalog:
158
187
 
159
- ## Agent integration
188
+ ```bash
189
+ unicli list
190
+ unicli list --site macos
191
+ unicli ext list
192
+ unicli ext list --tag agent
193
+ ```
160
194
 
161
- Every major agent platform works out of the box:
195
+ Browse the same generated catalog on the docs site:
196
+ <https://olo-dot-io.github.io/Uni-CLI/reference/sites>
162
197
 
163
- | Platform | One-liner | Notes |
164
- | --------------- | ---------------------------------------------------------- | ----------------------------------------- |
165
- | **Claude Code** | `claude mcp add unicli -- npx @zenalexa/unicli mcp serve` | 4 meta-tools, stdio |
166
- | **Codex CLI** | Add `[mcp_servers.unicli]` to `~/.codex/config.toml` | First-class AGENTS.md citizen |
167
- | **Cursor** | MCP Settings → `unicli` → `npx @zenalexa/unicli mcp serve` | Bilingual search works inside Cursor chat |
168
- | **avante.nvim** | `type = "acp", command = "unicli", args = { "acp" }` | See [`docs/AVANTE.md`](docs/AVANTE.md) |
169
- | **OpenCode** | MCP via `opencode.jsonc` — `command: "unicli mcp serve"` | AGENTS.md auto-loaded |
170
- | **Cline** | Add MCP server in settings — stdio transport | Same 4 meta-tools, 200-token cold start |
198
+ ## Output Contract
171
199
 
172
- Direct shell access (any agent with Bash or exec):
200
+ Every normal command returns a v2 envelope. `mcp serve` and `acp` are protocol servers and keep their raw stdio protocol.
173
201
 
174
- ```bash
175
- unicli twitter search "AI agents"
176
- unicli blender render scene.blend --output /tmp/frame.png
177
- unicli macos screenshot --region 0,0,1920,1080
202
+ ```yaml
203
+ ok: true
204
+ schema_version: "2"
205
+ command: "twitter.search"
206
+ meta:
207
+ duration_ms: 412
208
+ count: 20
209
+ surface: web
210
+ data:
211
+ - { id: "...", text: "...", author: "..." }
212
+ error: null
178
213
  ```
179
214
 
180
- ## Authentication
181
-
182
- Five auth strategies, auto-probed in a cascade (`public → cookie → header`):
215
+ Errors are meant to be acted on:
183
216
 
184
- | Strategy | How |
185
- | ----------- | ------------------------------------------------------ |
186
- | `public` | Direct HTTP, no credentials |
187
- | `cookie` | `~/.unicli/cookies/<site>.json` injected into headers |
188
- | `header` | Cookie + auto-extracted CSRF (ct0, bili_jct, …) |
189
- | `intercept` | Chrome navigates, Uni-CLI captures XHR/fetch responses |
190
- | `ui` | Direct DOM interaction via CDP (click, type, submit) |
191
-
192
- ```bash
193
- unicli auth setup twitter # Print required cookies + target path
194
- unicli auth check twitter # Validate cookie file
195
- unicli auth list # All configured sites
217
+ ```yaml
218
+ ok: false
219
+ schema_version: "2"
220
+ command: "twitter.search"
221
+ meta:
222
+ duration_ms: 91
223
+ data: null
224
+ error:
225
+ code: auth_required
226
+ message: "401 Unauthorized"
227
+ adapter_path: "src/adapters/twitter/search.yaml"
228
+ step: 1
229
+ suggestion: "Run: unicli auth setup twitter"
230
+ retryable: false
231
+ alternatives: ["twitter.timeline", "twitter.profile"]
196
232
  ```
197
233
 
198
- The browser operator has two layers:
234
+ Exit codes: `0` ok, `66` empty, `69` unavailable, `75` temporary failure, `77` auth, `78` config.
199
235
 
200
- - `unicli browser start` manages a local Chrome/CDP launch path for cookie extraction and direct CDP use.
201
- - `unicli browser ...` / `unicli daemon ...` route through the local browser daemon plus Browser Bridge extension, with explicit workspace reuse, `--daemon-port` multi-profile routing, background/focus controls, and live session diagnostics.
236
+ ## Self-Repair
202
237
 
203
- For agent-style interactive browsing, prefer:
238
+ Adapters are small YAML files by default. A failed command gives an agent enough context to patch the broken part without waiting for a package release.
204
239
 
205
- ```bash
206
- unicli browser open https://example.com
207
- unicli browser state
208
- unicli browser find --css "button, a"
209
- unicli browser network --raw
210
- unicli browser extract
240
+ ```text
241
+ 1. Run the command.
242
+ 2. Read the error envelope.
243
+ 3. Open error.adapter_path.
244
+ 4. Patch the failing step.
245
+ 5. Save the override in ~/.unicli/adapters/<site>/<command>.yaml.
246
+ 6. Verify with unicli repair <site> <command>.
211
247
  ```
212
248
 
213
- ## Write an adapter
249
+ Local overrides survive npm updates.
214
250
 
215
- Most adapters are ~20 lines of YAML. No TypeScript, no build step, no imports:
251
+ ## Write An Adapter
216
252
 
217
253
  ```yaml
218
- site: hackernews
219
- name: top
220
- type: web-api
254
+ site: example
255
+ name: search
256
+ description: "Search example.com"
257
+ transport: http
221
258
  strategy: public
259
+ capabilities: [fetch, select, map, limit]
260
+ minimum_capability: http.fetch
261
+ trust: public
262
+ confidentiality: public
263
+ quarantine: false
222
264
  pipeline:
223
265
  - fetch:
224
- url: "https://hacker-news.firebaseio.com/v0/topstories.json"
225
- - limit: { count: "${{ args.limit | default(30) }}" }
226
- - each:
227
- do:
228
- - fetch:
229
- url: "https://hacker-news.firebaseio.com/v0/item/${{ item }}.json"
266
+ url: "https://api.example.com/search?q=${{ args.query }}"
267
+ - select: data.results
230
268
  - map:
231
269
  title: "${{ item.title }}"
232
- score: "${{ item.score }}"
233
270
  url: "${{ item.url }}"
234
- columns: [title, score, url]
235
- ```
236
-
237
- Five adapter types: `web-api`, `desktop`, `browser`, `bridge`, `service`. 29 template filters (`join`, `urlencode`, `truncate`, `slugify`, `default`, `json`, …) run in a sandboxed VM.
238
-
239
- Scaffold, dev, test:
240
-
241
- ```bash
242
- unicli init <site> <command> # Scaffold new adapter
243
- unicli dev <path> # Hot-reload during dev
244
- unicli test <site> # Validate
245
- unicli record <url> # Auto-generate adapter from traffic
246
- ```
247
-
248
- Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md). Migrating from OpenCLI: [`docs/MIGRATING-FROM-OPENCLI.md`](docs/MIGRATING-FROM-OPENCLI.md) and the one-shot `unicli import opencli-yaml`.
249
-
250
- ## Search
251
-
252
- Agents find commands by intent, bilingual:
253
-
254
- ```bash
255
- unicli search "推特热门" # → twitter trending
256
- unicli search "download video" # → bilibili download, yt-dlp download, twitter download
257
- unicli search "股票行情" # → binance ticker, xueqiu quote, barchart quote
258
- unicli search --category finance # browse by category
271
+ - limit: "${{ args.limit }}"
272
+ args:
273
+ - { name: query, type: string, required: true, positional: true }
274
+ - { name: limit, type: int, default: 20 }
275
+ columns: [title, url]
259
276
  ```
260
277
 
261
- BM25 + TF-IDF scoring with a 200-entry ZH↔EN alias table. The index is 50KB, queries complete in under 10ms.
278
+ Docs:
262
279
 
263
- ## Theory + benchmarks
280
+ - [Documentation site](https://olo-dot-io.github.io/Uni-CLI/)
281
+ - [Getting started](docs/guide/getting-started.md)
282
+ - [Integrations](docs/guide/integrations.md)
283
+ - [Adapter format](docs/ADAPTER-FORMAT.md)
284
+ - [Pipeline reference](docs/reference/pipeline.md)
285
+ - [Exit codes](docs/reference/exit-codes.md)
264
286
 
265
- The design rests on five principles, each tied to a citation in [`docs/refs.bib`](docs/refs.bib):
287
+ ## Trust And Limits
266
288
 
267
- 1. **Rice's restriction** every adapter has decidable semantics (YAML pipeline, no Turing-complete logic).
268
- 2. **Lehman's mandate** no adapter is permanent; self-repair is first-class.
269
- 3. **Shannon's compression** CLI invocations are near-optimal compression of the underlying API call.
270
- 4. **Agent tool trilemma (original)** coverage × accuracy × performance, pick two. We choose accuracy × performance.
271
- 5. **Banach convergence** structured errors must provide directional feedback (`adapter_path` + `step` + `suggestion`) so repair iterations converge.
272
-
273
- Full treatment with 42 citations: [`docs/THEORY.md`](docs/THEORY.md). Reproducible benchmarks comparing Uni-CLI to GitHub MCP and Firecrawl MCP: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
289
+ - Auth-required sites use local cookie files under `~/.unicli/cookies/<site>.json`.
290
+ - Browser adapters require a reachable Chrome/CDP session.
291
+ - CUA routes require a configured real backend. Declared-but-unavailable providers fail closed with structured errors.
292
+ - User adapters and repairs live in `~/.unicli/adapters/`; committed adapters remain the package baseline.
293
+ - If a site blocks automation or changes a private API, the correct behavior is a clear failure envelope, not a fabricated success.
274
294
 
275
295
  ## Development
276
296
 
277
297
  ```bash
278
- git clone https://github.com/olo-dot-io/Uni-CLI.git && cd Uni-CLI
279
- npm install
280
- npm run verify # typecheck + lint + test + build + stats check
298
+ pnpm install
299
+ pnpm typecheck
300
+ pnpm lint
301
+ npm run verify
281
302
  ```
282
303
 
283
- | Command | Purpose |
284
- | ---------------------- | --------------------------------------------------------- |
285
- | `npm run dev` | Run from source |
286
- | `npm run build` | Production build |
287
- | `npm run typecheck` | TypeScript strict |
288
- | `npm run lint` | Oxlint |
289
- | `npm run test` | Unit tests (<!-- STATS:test_count -->7145<!-- /STATS -->) |
290
- | `npm run test:adapter` | Validate all adapters |
291
- | `npm run verify` | Full pipeline (7 gates) |
292
-
293
- Eleven production dependencies: `ajv`, `ajv-formats`, `chalk`, `cli-table3`, `commander`, `js-yaml`, `jsonpath-plus`, `turndown`, `undici`, `ws`, `zod`.
294
-
295
- ## Release cadence
296
-
297
- Patches ship every **Friday 09:00 HKT** when substantive commits have landed since the last tag. Quiet weeks are recorded and skipped — silence is success, not failure. Dependabot bumps are grouped into one PR per Monday so they ride along in the Friday cut without flooding the commit log.
298
-
299
- <a href="https://github.com/olo-dot-io/Uni-CLI/commits/main"><img src="https://img.shields.io/github/last-commit/olo-dot-io/Uni-CLI?style=flat-square&label=last-commit" alt="last commit"></a>
300
-
301
- Full policy — manual overrides, cancellation procedure, escalation rules: [`docs/RELEASE-CADENCE.md`](docs/RELEASE-CADENCE.md).
302
-
303
- ## Contributing
304
-
305
- The fastest path to a merged PR: write a 20-line YAML adapter for a site you use every day. Per-domain guides live in [`contributing/`](contributing/):
306
-
307
- | Area | Guide |
308
- | ---------------- | -------------------------------------------------------- |
309
- | New adapter | [`contributing/adapter.md`](contributing/adapter.md) |
310
- | New transport | [`contributing/transport.md`](contributing/transport.md) |
311
- | CUA backend | [`contributing/cua.md`](contributing/cua.md) |
312
- | MCP server | [`contributing/mcp.md`](contributing/mcp.md) |
313
- | ACP integration | [`contributing/acp.md`](contributing/acp.md) |
314
- | Release process | [`contributing/release.md`](contributing/release.md) |
315
- | Schema migration | [`contributing/schema.md`](contributing/schema.md) |
316
-
317
304
  ## License
318
305
 
319
306
  [Apache-2.0](./LICENSE)
320
307
 
321
- Repo: <https://github.com/olo-dot-io/Uni-CLI> · npm: [`@zenalexa/unicli`](https://www.npmjs.com/package/@zenalexa/unicli) · Issues welcome.
322
-
323
- ---
324
-
325
- <p align="center">
326
- <a href="https://github.com/olo-dot-io/Uni-CLI/graphs/contributors">
327
- <img src="https://contrib.rocks/image?repo=olo-dot-io/Uni-CLI" alt="Contributors">
328
- </a>
329
- </p>
330
-
331
308
  <p align="center">
332
- <sub>v0.215.0 — Closed Adapter Loop</sub><br>
333
- <sub><!-- STATS:site_count -->220<!-- /STATS --> sites · <!-- STATS:command_count -->1283<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps · BM25+TF-IDF bilingual search · MCP 2025-11-25 · <!-- STATS:test_count -->7145<!-- /STATS --> tests</sub>
309
+ <sub>0.216.0 — OpenCLI Parity Harness</sub>
334
310
  </p>