@zenalexa/unicli 0.215.1 → 0.216.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 (407) hide show
  1. package/AGENTS.md +15 -15
  2. package/README.md +233 -389
  3. package/README.zh-CN.md +235 -362
  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/browser/adapter-authoring.d.ts.map +1 -1
  193. package/dist/browser/adapter-authoring.js +3 -3
  194. package/dist/browser/adapter-authoring.js.map +1 -1
  195. package/dist/browser/bridge.d.ts.map +1 -1
  196. package/dist/browser/bridge.js +2 -3
  197. package/dist/browser/bridge.js.map +1 -1
  198. package/dist/browser/daemon-client.d.ts.map +1 -1
  199. package/dist/browser/daemon-client.js +17 -5
  200. package/dist/browser/daemon-client.js.map +1 -1
  201. package/dist/browser/network-cache.js +2 -2
  202. package/dist/browser/network-cache.js.map +1 -1
  203. package/dist/browser/site-memory.d.ts.map +1 -1
  204. package/dist/browser/site-memory.js +11 -8
  205. package/dist/browser/site-memory.js.map +1 -1
  206. package/dist/browser/target-errors.d.ts +2 -2
  207. package/dist/browser/target-errors.js +2 -2
  208. package/dist/browser/verify-fixture.d.ts.map +1 -1
  209. package/dist/browser/verify-fixture.js +2 -2
  210. package/dist/browser/verify-fixture.js.map +1 -1
  211. package/dist/cli.d.ts.map +1 -1
  212. package/dist/cli.js +9 -4
  213. package/dist/cli.js.map +1 -1
  214. package/dist/commands/agents.d.ts.map +1 -1
  215. package/dist/commands/agents.js +5 -2
  216. package/dist/commands/agents.js.map +1 -1
  217. package/dist/commands/auth.d.ts.map +1 -1
  218. package/dist/commands/auth.js +8 -2
  219. package/dist/commands/auth.js.map +1 -1
  220. package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
  221. package/dist/commands/browser-operator-runtime.js +2 -2
  222. package/dist/commands/browser-operator-runtime.js.map +1 -1
  223. package/dist/commands/browser-operator.d.ts.map +1 -1
  224. package/dist/commands/browser-operator.js +2 -2
  225. package/dist/commands/browser-operator.js.map +1 -1
  226. package/dist/commands/describe.d.ts +2 -2
  227. package/dist/commands/describe.d.ts.map +1 -1
  228. package/dist/commands/describe.js +14 -3
  229. package/dist/commands/describe.js.map +1 -1
  230. package/dist/commands/dispatch.d.ts.map +1 -1
  231. package/dist/commands/dispatch.js +7 -6
  232. package/dist/commands/dispatch.js.map +1 -1
  233. package/dist/commands/explore.js +2 -2
  234. package/dist/commands/explore.js.map +1 -1
  235. package/dist/commands/generate.js +3 -3
  236. package/dist/commands/generate.js.map +1 -1
  237. package/dist/commands/health.d.ts.map +1 -1
  238. package/dist/commands/health.js +4 -10
  239. package/dist/commands/health.js.map +1 -1
  240. package/dist/commands/migrate.d.ts +9 -9
  241. package/dist/commands/migrate.d.ts.map +1 -1
  242. package/dist/commands/migrate.js +22 -22
  243. package/dist/commands/migrate.js.map +1 -1
  244. package/dist/commands/repair.d.ts.map +1 -1
  245. package/dist/commands/repair.js +9 -4
  246. package/dist/commands/repair.js.map +1 -1
  247. package/dist/commands/search.d.ts +3 -3
  248. package/dist/commands/search.js +4 -4
  249. package/dist/commands/skills.d.ts +3 -0
  250. package/dist/commands/skills.d.ts.map +1 -1
  251. package/dist/commands/skills.js +8 -4
  252. package/dist/commands/skills.js.map +1 -1
  253. package/dist/commands/synthesize.js +2 -2
  254. package/dist/commands/synthesize.js.map +1 -1
  255. package/dist/discovery/aliases.d.ts.map +1 -1
  256. package/dist/discovery/aliases.js +69 -0
  257. package/dist/discovery/aliases.js.map +1 -1
  258. package/dist/discovery/loader.d.ts.map +1 -1
  259. package/dist/discovery/loader.js +130 -0
  260. package/dist/discovery/loader.js.map +1 -1
  261. package/dist/engine/kernel/execute.d.ts.map +1 -1
  262. package/dist/engine/kernel/execute.js +27 -4
  263. package/dist/engine/kernel/execute.js.map +1 -1
  264. package/dist/engine/user-home.d.ts +9 -0
  265. package/dist/engine/user-home.d.ts.map +1 -0
  266. package/dist/engine/user-home.js +12 -0
  267. package/dist/engine/user-home.js.map +1 -0
  268. package/dist/fast-path.d.ts +14 -0
  269. package/dist/fast-path.d.ts.map +1 -0
  270. package/dist/fast-path.js +565 -0
  271. package/dist/fast-path.js.map +1 -0
  272. package/dist/hub/index.d.ts +1 -1
  273. package/dist/hub/index.d.ts.map +1 -1
  274. package/dist/hub/index.js +28 -17
  275. package/dist/hub/index.js.map +1 -1
  276. package/dist/main.js +6 -3
  277. package/dist/main.js.map +1 -1
  278. package/dist/manifest-compact.txt +11 -11
  279. package/dist/manifest-search.json +1 -1
  280. package/dist/manifest.json +27600 -1016
  281. package/dist/mcp/tools.js +1 -1
  282. package/dist/mcp/tools.js.map +1 -1
  283. package/dist/output/error-map.d.ts.map +1 -1
  284. package/dist/output/error-map.js +16 -5
  285. package/dist/output/error-map.js.map +1 -1
  286. package/dist/protocol/acp.js +1 -1
  287. package/dist/protocol/acp.js.map +1 -1
  288. package/dist/registry.d.ts +3 -0
  289. package/dist/registry.d.ts.map +1 -1
  290. package/dist/registry.js +34 -1
  291. package/dist/registry.js.map +1 -1
  292. package/dist/runtime/usage-ledger.d.ts +6 -7
  293. package/dist/runtime/usage-ledger.d.ts.map +1 -1
  294. package/dist/runtime/usage-ledger.js +6 -7
  295. package/dist/runtime/usage-ledger.js.map +1 -1
  296. package/dist/types.d.ts +2 -0
  297. package/dist/types.d.ts.map +1 -1
  298. package/dist/types.js.map +1 -1
  299. package/package.json +12 -6
  300. package/src/adapters/1688/assets.ts +114 -0
  301. package/src/adapters/51job/jobs.ts +327 -0
  302. package/src/adapters/_shared/browser-tools.ts +59 -0
  303. package/src/adapters/antigravity/extra.ts +53 -0
  304. package/src/adapters/baidu-scholar/search.ts +38 -0
  305. package/src/adapters/bilibili/compat.ts +132 -0
  306. package/src/adapters/binance/asks.yaml +41 -0
  307. package/src/adapters/binance/depth.yaml +41 -0
  308. package/src/adapters/binance/gainers.yaml +42 -0
  309. package/src/adapters/binance/hot.yaml +1 -1
  310. package/src/adapters/binance/kline.yaml +1 -1
  311. package/src/adapters/binance/klines.yaml +46 -0
  312. package/src/adapters/binance/losers.yaml +42 -0
  313. package/src/adapters/binance/pairs.yaml +38 -0
  314. package/src/adapters/binance/price.yaml +32 -0
  315. package/src/adapters/binance/prices.yaml +30 -0
  316. package/src/adapters/binance/ticker.yaml +2 -2
  317. package/src/adapters/binance/top.yaml +46 -0
  318. package/src/adapters/binance/trades.yaml +42 -0
  319. package/src/adapters/chatgpt/image.ts +84 -0
  320. package/src/adapters/chatgpt-app/chatgpt-app.ts +11 -0
  321. package/src/adapters/chatwise/extra.ts +36 -0
  322. package/src/adapters/codex/extra.ts +36 -0
  323. package/src/adapters/deepseek/web.ts +203 -0
  324. package/src/adapters/doubao/web.ts +154 -0
  325. package/src/adapters/eastmoney/market-data.ts +829 -0
  326. package/src/adapters/excel/insert-image.yaml +80 -0
  327. package/src/adapters/excel/insert-link.yaml +90 -0
  328. package/src/adapters/excel/list.yaml +63 -0
  329. package/src/adapters/excel/read.yaml +74 -0
  330. package/src/adapters/excel/set-cell.yaml +77 -0
  331. package/src/adapters/excel/set-font.yaml +87 -0
  332. package/src/adapters/excel/status.yaml +29 -0
  333. package/src/adapters/gh/search-repos.yaml +62 -0
  334. package/src/adapters/gitee/user.ts +59 -0
  335. package/src/adapters/google-scholar/cite.ts +95 -0
  336. package/src/adapters/google-scholar/profile.ts +91 -0
  337. package/src/adapters/google-scholar/search.ts +58 -0
  338. package/src/adapters/gov-law/laws.ts +61 -0
  339. package/src/adapters/gov-policy/policy.ts +61 -0
  340. package/src/adapters/imessage/contact.yaml +7 -2
  341. package/src/adapters/imessage/recent.yaml +7 -2
  342. package/src/adapters/imessage/search.yaml +7 -2
  343. package/src/adapters/jd/commerce.ts +142 -0
  344. package/src/adapters/jianyu/detail.ts +28 -0
  345. package/src/adapters/jimeng/workspace.ts +53 -0
  346. package/src/adapters/ke/rent-transaction.ts +70 -0
  347. package/src/adapters/linux-do/search.ts +92 -0
  348. package/src/adapters/linux-do/topic-content.ts +45 -0
  349. package/src/adapters/maimai/talents.ts +65 -0
  350. package/src/adapters/mubu/docs.ts +107 -0
  351. package/src/adapters/nowcoder/nowcoder.ts +570 -0
  352. package/src/adapters/powerchina/search.ts +45 -0
  353. package/src/adapters/powerpoint/add-slide.yaml +93 -0
  354. package/src/adapters/powerpoint/insert-image.yaml +71 -0
  355. package/src/adapters/powerpoint/insert-link.yaml +94 -0
  356. package/src/adapters/powerpoint/list.yaml +58 -0
  357. package/src/adapters/powerpoint/set-font.yaml +101 -0
  358. package/src/adapters/powerpoint/slides.yaml +73 -0
  359. package/src/adapters/powerpoint/status.yaml +29 -0
  360. package/src/adapters/quark/actions.ts +169 -0
  361. package/src/adapters/reddit/browser-utils.ts +93 -0
  362. package/src/adapters/reddit/listings.ts +223 -0
  363. package/src/adapters/reddit/search.ts +74 -0
  364. package/src/adapters/spotify/api.ts +292 -0
  365. package/src/adapters/taobao/commerce.ts +134 -0
  366. package/src/adapters/tdx/hot-rank.ts +35 -0
  367. package/src/adapters/ths/hot-rank.ts +35 -0
  368. package/src/adapters/toutiao/articles.ts +45 -0
  369. package/src/adapters/twitter/lists-extra.ts +139 -0
  370. package/src/adapters/uiverse/components.ts +154 -0
  371. package/src/adapters/vercel/list.yaml +2 -1
  372. package/src/adapters/wanfang/search.ts +38 -0
  373. package/src/adapters/weixin/drafts.ts +74 -0
  374. package/src/adapters/weread/ai-outline.ts +32 -0
  375. package/src/adapters/word/insert-image.yaml +73 -0
  376. package/src/adapters/word/insert-link.yaml +82 -0
  377. package/src/adapters/word/insert-text.yaml +72 -0
  378. package/src/adapters/word/list.yaml +63 -0
  379. package/src/adapters/word/read.yaml +63 -0
  380. package/src/adapters/word/set-font.yaml +97 -0
  381. package/src/adapters/word/status.yaml +29 -0
  382. package/src/adapters/xiaoyuzhou/media.ts +139 -0
  383. package/src/adapters/xueqiu/extra.ts +78 -0
  384. package/src/adapters/youtube/personal.ts +215 -0
  385. package/src/adapters/zhihu/actions.ts +111 -0
  386. package/src/hub/external-clis-harness.yaml +211 -0
  387. package/src/hub/index.ts +29 -25
  388. package/src/adapters/linux-do/search.yaml +0 -44
  389. package/src/adapters/meituan/hot.yaml +0 -34
  390. package/src/adapters/reddit/frontpage.test.ts +0 -15
  391. package/src/adapters/reddit/frontpage.yaml +0 -41
  392. package/src/adapters/reddit/hot.test.ts +0 -15
  393. package/src/adapters/reddit/hot.yaml +0 -41
  394. package/src/adapters/reddit/new.test.ts +0 -15
  395. package/src/adapters/reddit/new.yaml +0 -42
  396. package/src/adapters/reddit/popular.test.ts +0 -15
  397. package/src/adapters/reddit/popular.yaml +0 -41
  398. package/src/adapters/reddit/rising.test.ts +0 -15
  399. package/src/adapters/reddit/rising.yaml +0 -41
  400. package/src/adapters/reddit/search.test.ts +0 -15
  401. package/src/adapters/reddit/search.yaml +0 -52
  402. package/src/adapters/reddit/subreddit.test.ts +0 -15
  403. package/src/adapters/reddit/subreddit.yaml +0 -50
  404. package/src/adapters/reddit/top.test.ts +0 -15
  405. package/src/adapters/reddit/top.yaml +0 -48
  406. package/src/adapters/reddit/trending.test.ts +0 -15
  407. package/src/adapters/reddit/trending.yaml +0 -33
package/README.zh-CN.md CHANGED
@@ -1,437 +1,310 @@
1
- <!-- AGENT: npm install -g @zenalexa/unicli && unicli search "你的意图" — 220 个站点,1283 条命令,自修复 YAML 适配器,BM25 中英双语搜索,比 MCP 少 95–99% token。默认 Markdown envelope;JSON 用 -f json。实时统计见 AGENTS.md。 -->
2
-
3
- <div align="center">
4
-
5
- <img src="assets/icon.svg" width="180" alt="Uni-CLI">
6
-
7
- # Uni-CLI
8
-
9
- > 一个 CLI,让 Agent 真正会用网站、应用和电脑。
10
-
11
- Uni-CLI 把一句话变成一条能跑的命令。Agent 先搜命令,再执行,拿 Markdown/JSON 结果;网站坏了,还能按错误信息自己修 YAML。
12
-
13
- <br>
14
-
15
- <img src="https://readme-typing-svg.demolab.com?font=JetBrains+Mono&duration=2200&pause=700&color=6A5ACD&center=true&vCenter=true&width=720&lines=Find+the+right+command;Run+real+sites+and+apps;Get+JSON+or+Markdown+back;Fix+adapters+without+waiting" alt="Find the right command. Run real sites and apps. Get JSON or Markdown back. Fix adapters without waiting.">
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=for-the-badge&color=cb3837&label=npm" 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=for-the-badge&label=CI" alt="CI"></a>
21
- <a href="https://github.com/olo-dot-io/Uni-CLI/stargazers"><img src="https://img.shields.io/github/stars/olo-dot-io/Uni-CLI?style=for-the-badge" alt="stars"></a>
22
- <a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=for-the-badge" alt="license"></a>
23
- <img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7160<!-- /STATS -->-44cc11?style=for-the-badge" alt="tests">
24
- <img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=for-the-badge" alt="agent-reach ally">
25
-
26
- <br>
27
-
28
- <img src="https://img.shields.io/badge/<!-- STATS:site_count -->220<!-- /STATS -->_sites-111827?style=for-the-badge" alt="220 sites">
29
- <img src="https://img.shields.io/badge/<!-- STATS:command_count -->1283<!-- /STATS -->_commands-0f766e?style=for-the-badge" alt="1283 commands">
30
- <img src="https://img.shields.io/badge/58_CLI_bridges-7c3aed?style=for-the-badge" alt="58 CLI bridges">
31
- <img src="https://img.shields.io/badge/v2_AgentEnvelope-2563eb?style=for-the-badge" alt="v2 AgentEnvelope">
32
- <img src="https://img.shields.io/badge/self--repairing_YAML-f97316?style=for-the-badge" alt="self-repairing YAML">
33
-
34
- <br>
35
-
36
- [English](README.md)
37
-
38
- <br>
39
-
40
- <pre><code>npm install -g @zenalexa/unicli
41
- unicli search "你的意图"
42
- unicli &lt;站点&gt; &lt;命令&gt; -f json</code></pre>
1
+ <p align="center">
2
+ <img src="assets/mascot-otter.png" alt="Uni-CLI 水獭 mascot" width="180">
3
+ </p>
43
4
 
44
- <br>
5
+ <h1 align="center">Uni-CLI</h1>
45
6
 
46
7
  <p align="center">
47
- <strong>Web / 社交 / 知识</strong><br>
48
- <img src="https://img.shields.io/badge/微博-E6162D?style=flat-square&logo=sinaweibo&logoColor=white" alt="微博">
49
- <img src="https://img.shields.io/badge/知乎-0084FF?style=flat-square&logo=zhihu&logoColor=white" alt="知乎">
50
- <img src="https://img.shields.io/badge/Bilibili-00A1D6?style=flat-square&logo=bilibili&logoColor=white" alt="哔哩哔哩">
51
- <img src="https://img.shields.io/badge/小红书-FF2442?style=flat-square&logoColor=white" alt="小红书">
52
- <img src="https://img.shields.io/badge/抖音-000000?style=flat-square&logo=tiktok&logoColor=white" alt="抖音">
53
- <img src="https://img.shields.io/badge/Twitter%2FX-000000?style=flat-square&logo=x&logoColor=white" alt="Twitter/X">
54
- <img src="https://img.shields.io/badge/Reddit-FF4500?style=flat-square&logo=reddit&logoColor=white" alt="Reddit">
55
- <img src="https://img.shields.io/badge/Instagram-E4405F?style=flat-square&logo=instagram&logoColor=white" alt="Instagram">
56
- <img src="https://img.shields.io/badge/TikTok-000000?style=flat-square&logo=tiktok&logoColor=white" alt="TikTok">
57
- <img src="https://img.shields.io/badge/YouTube-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube">
58
- <img src="https://img.shields.io/badge/HackerNews-FF6600?style=flat-square&logo=ycombinator&logoColor=white" alt="HackerNews">
59
- <img src="https://img.shields.io/badge/StackOverflow-F58025?style=flat-square&logo=stackoverflow&logoColor=white" alt="StackOverflow">
60
- <img src="https://img.shields.io/badge/ProductHunt-DA552F?style=flat-square&logo=producthunt&logoColor=white" alt="ProductHunt">
61
- <img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub">
62
- <img src="https://img.shields.io/badge/npm-CB3837?style=flat-square&logo=npm&logoColor=white" alt="npm">
63
- <img src="https://img.shields.io/badge/PyPI-3775A9?style=flat-square&logo=pypi&logoColor=white" alt="PyPI">
64
- <img src="https://img.shields.io/badge/Wikipedia-000000?style=flat-square&logo=wikipedia&logoColor=white" alt="Wikipedia">
65
- <img src="https://img.shields.io/badge/Spotify-1DB954?style=flat-square&logo=spotify&logoColor=white" alt="Spotify">
66
- <img src="https://img.shields.io/badge/IMDb-F5C518?style=flat-square&logo=imdb&logoColor=black" alt="IMDb">
67
- <img src="https://img.shields.io/badge/Bloomberg-000000?style=flat-square&logoColor=white" alt="Bloomberg">
68
- <img src="https://img.shields.io/badge/Reuters-FF8000?style=flat-square&logo=reuters&logoColor=white" alt="Reuters">
69
- <img src="https://img.shields.io/badge/BBC-B80000?style=flat-square&logo=bbc&logoColor=white" alt="BBC">
70
- <img src="https://img.shields.io/badge/Binance-F0B90B?style=flat-square&logo=binance&logoColor=black" alt="Binance">
71
- <img src="https://img.shields.io/badge/Coinbase-0052FF?style=flat-square&logo=coinbase&logoColor=white" alt="Coinbase">
72
- <img src="https://img.shields.io/badge/Yahoo%20Finance-6001D2?style=flat-square&logo=yahoo&logoColor=white" alt="Yahoo Finance">
73
- <img src="https://img.shields.io/badge/HuggingFace-FFD21F?style=flat-square&logo=huggingface&logoColor=black" alt="HuggingFace">
8
+ <strong>给 Agent 用的一层统一 CLI:网站、桌面 App、本地工具、外部 CLI,都变成可搜索、可执行、可修复的命令。</strong>
74
9
  </p>
75
10
 
76
11
  <p align="center">
77
- <strong>Agent / IDE / Coding Surfaces</strong><br>
78
- <img src="https://img.shields.io/badge/Claude%20Code-D97757?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code">
79
- <img src="https://img.shields.io/badge/Codex-111111?style=flat-square&logo=openai&logoColor=white" alt="Codex">
80
- <img src="https://img.shields.io/badge/OpenCode-101010?style=flat-square&logoColor=white" alt="OpenCode">
81
- <img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logoColor=white" alt="Cursor">
82
- <img src="https://img.shields.io/badge/Kiro-FF9900?style=flat-square&logo=amazon&logoColor=black" alt="Kiro">
83
- <img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=googlegemini&logoColor=white" alt="Gemini">
84
- <img src="https://img.shields.io/badge/Qwen-1E88E5?style=flat-square&logoColor=white" alt="Qwen">
85
- <img src="https://img.shields.io/badge/Kimi-6C5CE7?style=flat-square&logoColor=white" alt="Kimi">
86
- <img src="https://img.shields.io/badge/MiniMax-00A6FB?style=flat-square&logoColor=white" alt="MiniMax">
87
- <img src="https://img.shields.io/badge/Cline-6E56CF?style=flat-square&logoColor=white" alt="Cline">
88
- <img src="https://img.shields.io/badge/Roo%20Code-2E7D32?style=flat-square&logoColor=white" alt="Roo Code">
89
- <img src="https://img.shields.io/badge/Windsurf-00C2FF?style=flat-square&logoColor=white" alt="Windsurf">
90
- <img src="https://img.shields.io/badge/Continue-000000?style=flat-square&logoColor=white" alt="Continue">
91
- <img src="https://img.shields.io/badge/Aider-6F42C1?style=flat-square&logo=python&logoColor=white" alt="Aider">
92
- <img src="https://img.shields.io/badge/Goose-111827?style=flat-square&logoColor=white" alt="Goose">
93
- <img src="https://img.shields.io/badge/OpenHands-FF6B00?style=flat-square&logoColor=white" alt="OpenHands">
94
- <img src="https://img.shields.io/badge/SWE--agent-0F172A?style=flat-square&logoColor=white" alt="SWE-agent">
95
- <img src="https://img.shields.io/badge/GitHub%20Copilot-181717?style=flat-square&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
96
- <img src="https://img.shields.io/badge/Amp-5B5BD6?style=flat-square&logoColor=white" alt="Amp">
97
- <img src="https://img.shields.io/badge/Auggie-0EA5E9?style=flat-square&logoColor=white" alt="Auggie">
98
- <img src="https://img.shields.io/badge/Crush-E11D48?style=flat-square&logoColor=white" alt="Crush">
99
- <img src="https://img.shields.io/badge/AgentAPI-334155?style=flat-square&logoColor=white" alt="AgentAPI">
100
- <img src="https://img.shields.io/badge/acpx-475569?style=flat-square&logoColor=white" alt="acpx">
12
+ <a href="https://olo-dot-io.github.io/Uni-CLI/">文档站</a>
13
+ ·
14
+ <a href="https://olo-dot-io.github.io/Uni-CLI/reference/sites">站点目录</a>
15
+ ·
16
+ <a href="https://olo-dot-io.github.io/Uni-CLI/llms.txt">llms.txt</a>
101
17
  </p>
102
18
 
103
19
  <p align="center">
104
- <strong>Desktop / Media / DevOps / Cloud</strong><br>
105
- <img src="https://img.shields.io/badge/macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS">
106
- <img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white" alt="Chrome">
107
- <img src="https://img.shields.io/badge/Blender-F5792A?style=flat-square&logo=blender&logoColor=white" alt="Blender">
108
- <img src="https://img.shields.io/badge/ffmpeg-007808?style=flat-square&logo=ffmpeg&logoColor=white" alt="ffmpeg">
109
- <img src="https://img.shields.io/badge/ImageMagick-0074C1?style=flat-square&logoColor=white" alt="ImageMagick">
110
- <img src="https://img.shields.io/badge/GIMP-5C5543?style=flat-square&logo=gimp&logoColor=white" alt="GIMP">
111
- <img src="https://img.shields.io/badge/FreeCAD-729FCF?style=flat-square&logo=freecad&logoColor=white" alt="FreeCAD">
112
- <img src="https://img.shields.io/badge/Audacity-0000CC?style=flat-square&logo=audacity&logoColor=white" alt="Audacity">
113
- <img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
114
- <img src="https://img.shields.io/badge/GitHub%20CLI-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub CLI">
115
- <img src="https://img.shields.io/badge/jq-C7254E?style=flat-square&logo=json&logoColor=white" alt="jq">
116
- <img src="https://img.shields.io/badge/yt--dlp-4A5568?style=flat-square&logo=youtube&logoColor=white" alt="yt-dlp">
117
- <img src="https://img.shields.io/badge/AWS-232F3E?style=flat-square&logo=amazonaws&logoColor=white" alt="AWS">
118
- <img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=vercel&logoColor=white" alt="Vercel">
119
- <img src="https://img.shields.io/badge/Supabase-3ECF8E?style=flat-square&logo=supabase&logoColor=black" alt="Supabase">
120
- <img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" alt="Cloudflare">
121
- <img src="https://img.shields.io/badge/Stripe-635BFF?style=flat-square&logo=stripe&logoColor=white" alt="Stripe">
122
- <img src="https://img.shields.io/badge/Firebase-FFCA28?style=flat-square&logo=firebase&logoColor=black" alt="Firebase">
123
- <img src="https://img.shields.io/badge/Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white" alt="Netlify">
124
- <img src="https://img.shields.io/badge/Railway-0B0D0E?style=flat-square&logo=railway&logoColor=white" alt="Railway">
125
- <img src="https://img.shields.io/badge/Azure-0078D4?style=flat-square&logo=microsoftazure&logoColor=white" alt="Azure">
126
- <img src="https://img.shields.io/badge/Google%20Cloud-4285F4?style=flat-square&logo=googlecloud&logoColor=white" alt="Google Cloud">
127
- <img src="https://img.shields.io/badge/Twilio-F22F46?style=flat-square&logo=twilio&logoColor=white" alt="Twilio">
128
- <img src="https://img.shields.io/badge/Resend-000000?style=flat-square&logo=resend&logoColor=white" alt="Resend">
129
- <img src="https://img.shields.io/badge/Algolia-003DFF?style=flat-square&logo=algolia&logoColor=white" alt="Algolia">
130
- <img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack">
131
- <img src="https://img.shields.io/badge/Notion-000000?style=flat-square&logo=notion&logoColor=white" alt="Notion">
132
- <img src="https://img.shields.io/badge/Linear-5E6AD2?style=flat-square&logo=linear&logoColor=white" alt="Linear">
133
- <img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=figma&logoColor=white" alt="Figma">
20
+ 先按意图搜索,再执行真实命令,最后拿结构化结果。网站变了也不会假装成功,错误会告诉你哪个 adapter、哪一步、怎么修。
134
21
  </p>
135
22
 
136
- <table>
137
- <tr>
138
- <td><strong>给人用</strong><br>装一个二进制,就能从终端调用网站、桌面应用、外部 CLI 和系统动作。</td>
139
- <td><strong>给 Agent 用</strong><br>先搜任务,再跑一条命令,解析一个 envelope;网站变了就按错误信息修 YAML。</td>
140
- <td><strong>给维护者用</strong><br>适配器保持小、可读、可测试,用户修复落在 <code>~/.unicli/adapters/</code>。</td>
141
- </tr>
142
- </table>
143
-
144
- <br>
145
-
146
- <img src="docs/demo/demo.svg" alt="Uni-CLI 30 秒演示" width="720">
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>
147
29
 
148
- </div>
30
+ <p align="center">
31
+ <sub><!-- STATS:site_count -->235<!-- /STATS --> 个站点 · <!-- STATS:command_count -->1448<!-- /STATS --> 条命令 · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> 个 pipeline step · <!-- STATS:test_count -->7391<!-- /STATS --> 个测试</sub>
32
+ </p>
149
33
 
150
- ---
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>
151
62
 
152
- ## 🤖 让 Agent 帮你配置
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>
153
85
 
154
- 把下面这段扔给你的 agent,然后去倒杯水:
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>
155
115
 
116
+ ```bash
117
+ npm install -g @zenalexa/unicli
118
+ unicli search "微博热搜"
119
+ unicli hackernews top -f json
156
120
  ```
157
- 帮我配置 unicli——它能给 AI Agent 提供 220 个站点的 CLI 访问权限,支持自修复适配器:
158
- 1. npm install -g @zenalexa/unicli
159
- 2. 添加 MCP:claude mcp add unicli -- npx @zenalexa/unicli mcp serve
160
- 3. 验证:unicli hackernews top -f json
161
- ```
162
-
163
- Agent 自己会搞定。回来的时候,220 个站点都在 CLI 里等着你了。
164
-
165
- **各平台一行配置:**
166
-
167
- | 平台 | 配置方式 |
168
- | ---------------------------- | ---------------------------------------------------------------------------------------------------- |
169
- | **Claude Code** | `claude mcp add unicli -- npx @zenalexa/unicli mcp serve` |
170
- | **Codex CLI** | 在 `~/.codex/config.toml` 添加 `[mcp_servers.unicli]` · `command = "npx @zenalexa/unicli mcp serve"` |
171
- | **Cursor / Windsurf** | MCP 设置 → 添加服务器 → `npx @zenalexa/unicli mcp serve` |
172
- | **avante.nvim / Zed** | `unicli acp` — ACP 兼容入口;核心执行优先走 CLI/JSON/MCP |
173
- | **OpenCode** | 在 `opencode.jsonc` 中添加 `"command": "unicli mcp serve"` |
174
- | **Kiro / Cline / Roo** | 作为 MCP server 接入 Uni-CLI;编辑器继续拥有 session |
175
- | **任何有 Bash 权限的 Agent** | 直接运行 `unicli <站点> <命令>` — 零配置 |
176
-
177
- ---
178
121
 
179
- ## 是什么
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
+ -->
180
129
 
181
- Uni-CLI 是专为 AI Agent 设计的通用命令行界面——单个二进制文件,将 Agent 意图编译为可确定性执行的程序,覆盖 <!-- STATS:site_count -->220<!-- /STATS --> 个站点、30+ 桌面应用、58 个 CLI 桥接和本地操作系统(共 <!-- STATS:command_count -->1283<!-- /STATS --> 条命令)。每个适配器约 20 行 YAML:Agent 可读、可编辑、零构建步骤。站点修改 API 时,Agent 编辑 YAML,保存到 `~/.unicli/adapters/`,重试即可。修复永久生效,`npm update` 也不会覆盖。全程无需人工介入。
130
+ ## 它解决什么
182
131
 
183
- 覆盖范围贯穿各个层面:HTTP Web API、CDP 浏览器自动化、桌面子进程(ffmpeg、Blender、LibreOffice)、macOS 系统调用(截屏、日历、剪贴板)、macOS AX,以及可插拔 CUA 合同。Windows UIA、Linux AT-SPI 和第三方 CUA provider 当前是显式声明的能力边界/接口桩,不按已完成实执行能力宣传;全部通过统一的 `unicli <站点> <命令>` 接口访问。
132
+ Uni-CLI 把软件表面封装成 Agent 能发现、能执行、能修的命令。
184
133
 
185
- ## 为什么 CLI 比 MCP 强
134
+ | 表面 | 能力 |
135
+ | ------------ | ------------------------------------------------------------------------------- |
136
+ | 网站和 API | public、cookie、header、browser-intercept 等 adapter |
137
+ | 浏览器自动化 | CDP 的 navigate、click、type、intercept、snapshot、extract、wait 等步骤 |
138
+ | 桌面和 macOS | 系统命令、App adapter、截图、剪贴板、日历、亮度、本地工具 |
139
+ | 外部 CLI | 58 个已登记的 passthrough bridge,支持安装和状态发现 |
140
+ | Agent 后端 | native CLI、JSON stream、MCP、ACP、HTTP API、OpenAI-compatible、bridge 路由矩阵 |
141
+ | 输出 | v2 `AgentEnvelope`,支持 Markdown、JSON、YAML、CSV、compact |
142
+ | 修复 | 错误里带 `adapter_path`、失败 `step`、是否可重试、修复建议和替代命令 |
186
143
 
187
- 大型工具目录会让 Agent 在行动之前先付上下文成本:描述、schema、示例、认证说明和边界条件都会挤占任务上下文。Uni-CLI 默认不把完整目录塞进上下文;Agent 先按意图搜索,拿到一条可执行命令,再收到一个足够小、足够结构化、可重试也可修复的 v2 envelope。
144
+ ## Agent 的入口
188
145
 
189
- 当前 Agent 栈没有收敛到单一 runtime。真实可复用的形态是 native CLI、JSON stream、MCP 工具总线、编辑器持有 session、桥接控制面和 watchlist runtime 混合存在。Uni-CLI 不硬编码赢家,而是把它们都当作路由:优先 CLI/JSON/MCP,编辑器 gateway 只放在真正需要兼容的边界。
190
-
191
- | 接口 | 冷启动开销 | 单次命令成本 | 自修复 |
192
- | ----------------------------- | -------------- | ------------------------------------------- | ------ |
193
- | 典型 MCP 服务器(93 工具) | ~55,000 token | ~500–2,000 token | 否 |
194
- | **Uni-CLI MCP**(4 个元工具) | **~200 token** | 见 [`docs/BENCHMARK.md`](docs/BENCHMARK.md) | **是** |
195
- | **Uni-CLI via Bash** | **0 token** | 见 [`docs/BENCHMARK.md`](docs/BENCHMARK.md) | **是** |
196
-
197
- Uni-CLI 的 MCP 服务器只暴露四个元工具(`unicli_run`、`unicli_list`、`unicli_search`、`unicli_explore`),Agent 通过 BM25 中英双语搜索在 50KB 索引中按需拉取精确命令。直接 Bash 调用没有工具目录 token,只是一次确定性的子进程执行。可复现的本地数据(p50/p95,token + latency):[`docs/BENCHMARK.md`](docs/BENCHMARK.md)。
198
-
199
- ## 快速开始
146
+ 先搜索,再执行最小可用命令。
200
147
 
201
148
  ```bash
202
- # 安装
203
- npm install -g @zenalexa/unicli
204
-
205
- # 发现命令(中英双语)
206
- unicli list # 所有站点 + 命令
207
- unicli search "微博热搜" # → weibo trending
208
- unicli search "B站热门" # → bilibili popular
209
- unicli search "download video" # → bilibili download, yt-dlp
210
-
211
- # 运行
212
- unicli weibo trending --limit 10 # 微博热搜,零配置
213
- unicli zhihu hot -f json # 知乎热榜,JSON envelope
214
- unicli bilibili popular --limit 5 # B 站热门视频
215
- unicli hackernews top -f json | jq '.data[].title' # 管道 + 变换
216
-
217
- # 接入 Agent
218
- claude mcp add unicli -- npx @zenalexa/unicli mcp serve # Claude Code
219
- unicli mcp serve --transport streamable --port 19826 # 任意 MCP 客户端
220
- unicli acp # avante.nvim / Zed
149
+ unicli search "推特热门" --limit 5
150
+ unicli twitter search "coding agents" -f json
151
+ unicli repair twitter search
221
152
  ```
222
153
 
223
- 完整指南(含 5 个实例):[`docs/QUICKSTART.md`](docs/QUICKSTART.md)。
154
+ TTY 和 Agent 环境默认输出结构化 Markdown。需要机器格式时显式指定:
224
155
 
225
- ## 自修复
226
-
227
- 自修复是 Uni-CLI 作为基础设施而非普通工具的核心能力。当站点修改 API:
228
-
229
- ```
230
- unicli <站点> <命令> 失败
231
- → stderr: { "adapter_path": "~/.unicli/adapters/weibo/trending.yaml",
232
- "step": "fetch", "action": "GET /api/v4/search/top",
233
- "suggestion": "endpoint 可能已版本化为 /api/v4/search/trending" }
234
- → Agent 打开 adapter_path 处的 ~20 行 YAML
235
- → Agent 修改选择器 / 端点 / 认证头
236
- → unicli <站点> <命令> 成功
237
- → 修复保存到 ~/.unicli/adapters/ — 永久生效,npm update 不覆盖
156
+ ```bash
157
+ UNICLI_OUTPUT=json unicli reddit hot --limit 10
158
+ unicli hackernews top --limit 5 -f yaml
238
159
  ```
239
160
 
240
- 这是 Banach 收敛设计:每条错误消息都提供方向性反馈(`adapter_path` + `step` + `suggestion`),使连续修复迭代收敛到可用状态。Agent 积累的修复不会被重置。
161
+ 协议入口:
241
162
 
242
163
  ```bash
243
- unicli repair weibo trending # 诊断 + 建议修复方案
244
- unicli test weibo # 验证站点所有适配器
245
- unicli repair --loop # 自主修复循环(Agent 驱动)
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
246
169
  ```
247
170
 
248
- 退出码遵循 `sysexits.h`:`0` 成功 · `66` 空结果 · `69` 不可用 · `75` 临时错误 · `77` 认证 · `78` 配置。
171
+ ACP 作为编辑器和桥接兼容层保留。真正跑任务时,优先 native CLI、JSON stream MCP。
249
172
 
250
- ## 架构
173
+ ## 覆盖范围
251
174
 
252
- 七个传输层,一个适配器接口,一个输出格式化器。
175
+ 数量不是重点,重点是每条命令都能搜索、可声明、可验证、可修。
253
176
 
254
- | 传输层 | 覆盖范围 |
255
- | ------------------ | ----------------------------------------------------------------- |
256
- | **HTTP** | Web API — RESTRSSJSONGraphQL |
257
- | **CDP 浏览器** | 通过真实 Chrome 会话访问任意站点(13 层反检测隐身,复用登录状态) |
258
- | **子进程** | ffmpegyt-dlpghawsdockerstripe 30+ 工具 |
259
- | **Desktop-AX** | macOS — AppleScriptAccessibility API、快捷指令、日历、邮件 |
260
- | **Desktop-UIA** | Windows — 声明式接口桩,尚不按实执行能力宣传 |
261
- | **Desktop-AT-SPI** | Linux 声明式接口桩,尚不按实执行能力宣传 |
262
- | **CUA** | screenshot/action 合同、mock 后端、provider 接口桩 |
177
+ | 领域 | 例子 |
178
+ | ------------- | ----------------------------------------------------------------------------------------------------------- |
179
+ | 中文平台 | xiaohongshuzhihubilibilidouyin、douban、v2ex、jike、linux-do |
180
+ | 国际平台 | twitter、reddit、instagram、tiktok、discord、slack、hackernews、lesswrong |
181
+ | AI 和开发工具 | ClaudeChatGPTGeminiCodexCursorVS Code、Docker Desktop、Postman |
182
+ | 财经和新闻 | xueqiueastmoney、yahoo-finance、bloomberg、reuters、bbc、36kr |
183
+ | 桌面 App | Blender、FreeCAD、GIMP、Audacity、Figma、Docker、ImageMagick、ffmpeg |
184
+ | Agent CLI | Claude Code、Codex、OpenCode、Gemini CLI、Qwen Code、Aider、Goose、Cursor Agent、Kiro、OpenHands、SWE-agent |
263
185
 
264
- 适配器默认使用声明式 YAML(Rice 可判定性——无图灵完备逻辑,可证明终止)。流水线有 <!-- STATS:pipeline_step_count -->59<!-- /STATS -->+ 个步骤:`fetch`、`navigate`、`exec`、`extract`、`each`、`if`、`parallel`、`rate_limit`、`retry` 等。完整文档:[`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md)。
186
+ 看实时目录:
265
187
 
266
- ## 功能矩阵
188
+ ```bash
189
+ unicli list
190
+ unicli list --site macos
191
+ unicli ext list
192
+ unicli ext list --tag agent
193
+ ```
194
+
195
+ 同一份生成目录也发布在文档站:
196
+ <https://olo-dot-io.github.io/Uni-CLI/reference/sites>
267
197
 
268
- | 能力 | 详情 |
269
- | ------------------ | --------------------------------------------------------------------------------------------- |
270
- | **CUA 合同** | 稳定 screenshot/action 接口、mock 后端和显式 provider 桩;尚不按真实 computer-use 宣传 |
271
- | **MCP 传输** | stdio · Streamable HTTP(规范 2025-11-25)· SSE · OAuth 2.1 PKCE |
272
- | **Agent 后端矩阵** | `unicli agents matrix/recommend`:覆盖 native CLI、JSON stream、MCP、桥接、编辑器和 watchlist |
273
- | **ACP Gateway** | `unicli acp` — 保留 avante.nvim/Zed 兼容入口,不作为核心 runtime |
274
- | **跨厂商 Skills** | Claude Code · OpenCode · Codex CLI · Cursor · Windsurf · Cline |
275
- | **自修复** | 每条 stderr 错误携带 `adapter_path` + `step` + `suggestion`(Banach 收敛) |
276
- | **中英双语搜索** | BM25 + TF-IDF · 50KB 索引 · <10ms · 200 条 ZH↔EN 别名表 |
277
- | **浏览器守护进程** | 持久化 Chrome(CDP)· 复用登录状态 · 13 层反检测隐身 |
278
- | **输出格式** | 终端表格 · JSON(管道自动切换)· YAML · CSV · Markdown |
279
- | **认证策略** | public · cookie · CSRF header · browser intercept · UI 自动化 — 自动级联探测 |
198
+ ## 输出契约
280
199
 
281
- ## 平台覆盖
200
+ 普通命令都返回 v2 envelope。`mcp serve` 和 `acp` 是协议服务器,保留各自原始 stdio 协议。
282
201
 
283
- <!-- STATS:site_count -->220<!-- /STATS --> 个站点 · <!-- STATS:command_count -->1283<!-- /STATS --> 条命令 — 完整实时列表见 [`AGENTS.md`](AGENTS.md):
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
213
+ ```
284
214
 
285
- | 领域 | 代表站点 |
286
- | ------------------- | -------------------------------------------------------------------- |
287
- | **社交媒体 (25)** | 微博 · 知乎 · 哔哩哔哩 · 小红书 · 推特 · Reddit · Instagram · TikTok |
288
- | **科技社区 (19)** | Hacker News · Stack Overflow · GitHub Trending · npm · PyPI |
289
- | **资讯新闻 (11)** | BBC · Reuters · Bloomberg · 36kr · 纽约时报 · TechCrunch |
290
- | **金融财经 (8)** | 雪球 · 东方财富 · Yahoo Finance · 币安 · Coinbase |
291
- | **AI / ML (14)** | HuggingFace · 魔搭 · Ollama · Replicate · DeepSeek · 豆包 |
292
- | **桌面软件 (30+)** | Blender · ffmpeg · ImageMagick · GIMP · FreeCAD · LibreOffice |
293
- | **macOS 系统 (58)** | 截屏 · 剪贴板 · 日历 · 邮件 · 提醒事项 · 快捷指令 · Safari |
294
- | **CLI 桥接 (58)** | claude · codex · gemini · qwen · kiro · opencode · aider · goose |
215
+ 错误也要可执行:
295
216
 
296
- `unicli list` 查看完整列表 · `unicli list --category=<领域>` 按类别筛选。
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"]
232
+ ```
297
233
 
298
- ## 认证
234
+ 退出码:`0` 成功,`66` 空结果,`69` 服务不可用,`75` 临时失败,`77` 需要认证,`78` 配置错误。
299
235
 
300
- 五种策略,自动级联探测(`public → cookie → header → intercept → ui`):
236
+ ## 自修复
301
237
 
302
- | 策略 | 方式 |
303
- | ----------- | ------------------------------------------ |
304
- | `public` | 直接 HTTP,无需凭证 |
305
- | `cookie` | `~/.unicli/cookies/<站点>.json` 注入请求头 |
306
- | `header` | Cookie + 自动提取 CSRF(ct0、bili_jct 等) |
307
- | `intercept` | Chrome 导航,Uni-CLI 捕获 XHR/fetch 响应 |
308
- | `ui` | 通过 CDP 直接操作 DOM(点击、输入、提交) |
238
+ adapter 默认是很小的 YAML。命令失败时,Agent 不需要猜,可以直接按错误定位到文件和步骤。
309
239
 
310
- ```bash
311
- unicli auth setup weibo # 打印所需 cookie 和保存路径
312
- unicli auth check weibo # 验证 cookie 文件
313
- unicli auth list # 所有已配置站点
240
+ ```text
241
+ 1. 执行命令。
242
+ 2. 读取错误 envelope。
243
+ 3. 打开 error.adapter_path。
244
+ 4. 修改失败 step。
245
+ 5. 保存到 ~/.unicli/adapters/<site>/<command>.yaml。
246
+ 6. 用 unicli repair <site> <command> 验证。
314
247
  ```
315
248
 
316
- 浏览器守护进程(`unicli browser start`)通过 CDP 复用已登录的 Chrome 会话——无需导出 cookie,无需安装扩展。4 小时无操作后自动退出。
317
-
318
- ## 写一个适配器
249
+ 本地修复会在 npm 更新后继续保留。
319
250
 
320
- 20 行 YAML,零 TypeScript,零构建步骤,Agent 可直接读写:
251
+ ## 写一个 adapter
321
252
 
322
253
  ```yaml
323
- site: hackernews
324
- name: top
325
- type: web-api
254
+ site: example
255
+ name: search
256
+ description: "Search example.com"
257
+ transport: http
326
258
  strategy: public
259
+ capabilities: [fetch, select, map, limit]
260
+ minimum_capability: http.fetch
261
+ trust: public
262
+ confidentiality: public
263
+ quarantine: false
327
264
  pipeline:
328
265
  - fetch:
329
- url: "https://hacker-news.firebaseio.com/v0/topstories.json"
330
- - limit: { count: "${{ args.limit | default(30) }}" }
331
- - each:
332
- do:
333
- - fetch:
334
- url: "https://hacker-news.firebaseio.com/v0/item/${{ item }}.json"
266
+ url: "https://api.example.com/search?q=${{ args.query }}"
267
+ - select: data.results
335
268
  - map:
336
269
  title: "${{ item.title }}"
337
- score: "${{ item.score }}"
338
270
  url: "${{ item.url }}"
339
- columns: [title, score, url]
340
- ```
341
-
342
- 五种适配器类型:`web-api` · `desktop` · `browser` · `bridge` · `service`。29 个模板过滤器在沙箱 VM 中运行。
343
-
344
- ```bash
345
- unicli init <站点> <命令> # 生成脚手架
346
- unicli dev <路径> # 热重载开发
347
- unicli test <站点> # 验证适配器
348
- unicli record <URL> # 从网络流量自动生成适配器
349
- ```
350
-
351
- 完整文档:[`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md)。
352
-
353
- ## 搜索
354
-
355
- 按意图发现命令,中英双语:
356
-
357
- ```bash
358
- unicli search "微博热搜" # → weibo trending
359
- unicli search "B站热门" # → bilibili popular
360
- unicli search "推特热门" # → twitter trending
361
- unicli search "股票行情" # → binance ticker, xueqiu quote
362
- unicli search "download video" # 英文查询 → 多平台下载命令
363
- unicli search --category finance # 按类别浏览
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]
364
276
  ```
365
277
 
366
- BM25 + TF-IDF · 200 条 ZH↔EN 别名表 · 50KB 索引 · <10ms 查询。
278
+ 文档入口:
367
279
 
368
- ## 理论基础
280
+ - [独立文档站](https://olo-dot-io.github.io/Uni-CLI/)
281
+ - [快速开始](docs/guide/getting-started.md)
282
+ - [Agent 集成](docs/guide/integrations.md)
283
+ - [Adapter 格式](docs/ADAPTER-FORMAT.md)
284
+ - [Pipeline 参考](docs/reference/pipeline.md)
285
+ - [Exit codes](docs/reference/exit-codes.md)
369
286
 
370
- 五条可执行的设计原则:
287
+ ## 边界和诚实说明
371
288
 
372
- 1. **Rice 限制** — 可判定的适配器语义(YAML 流水线,无图灵完备逻辑,可证明终止)
373
- 2. **Lehman 命令** 自修复是一等公民;没有永久有效的适配器;每个站点终将改变
374
- 3. **Shannon 压缩** `unicli` 调用是底层 API 调用的近最优压缩(约 80 token)
375
- 4. **Agent 工具三难困境**(原创贡献)— 覆盖率 × 准确率 × 性能,三选二。我们优化准确率 × 性能
376
- 5. **Banach 收敛** — 结构化错误消息(`adapter_path` + `step` + `suggestion`)保证修复迭代收敛
377
-
378
- 完整论述:[`docs/THEORY.md`](docs/THEORY.md)。可复现的本地基准测试:[`docs/BENCHMARK.md`](docs/BENCHMARK.md)。
289
+ - 需要登录的网站使用本地 cookie 文件:`~/.unicli/cookies/<site>.json`。
290
+ - Browser adapter 需要可连接的 Chrome/CDP。
291
+ - CUA 路由必须配置真实 backend。声明了但不可用的 provider 会失败关闭,并返回结构化错误。
292
+ - 用户 adapter 和修复放在 `~/.unicli/adapters/`;包内 adapter 是基线。
293
+ - 如果网站阻止自动化或私有 API 变了,正确行为是清楚失败,不是伪装成功。
379
294
 
380
295
  ## 开发
381
296
 
382
297
  ```bash
383
- git clone https://github.com/olo-dot-io/Uni-CLI.git && cd Uni-CLI
384
- npm install
385
- npm run verify # 类型检查 + lint + 测试 + 构建(7 个关卡,发布前必须全通过)
298
+ pnpm install
299
+ pnpm typecheck
300
+ pnpm lint
301
+ npm run verify
386
302
  ```
387
303
 
388
- | 命令 | 用途 |
389
- | ---------------------- | ----------------------------------------------------------- |
390
- | `npm run dev` | 从源码运行(tsx) |
391
- | `npm run build` | 生产构建 |
392
- | `npm run typecheck` | TypeScript 严格模式 |
393
- | `npm run lint` | Oxlint |
394
- | `npm run test` | 单元测试(<!-- STATS:test_count -->7160<!-- /STATS --> 个) |
395
- | `npm run test:adapter` | 验证所有适配器 |
396
- | `npm run verify` | 完整流水线 — 发布前必须通过 |
397
-
398
- 十一个生产依赖:`ajv` · `ajv-formats` · `chalk` · `cli-table3` · `commander` · `js-yaml` · `jsonpath-plus` · `turndown` · `undici` · `ws` · `zod`。
399
-
400
- ## 发布节奏
401
-
402
- 补丁版本每周 **周五 09:00 HKT** 发布——前提是自上次打 tag 以来有实质性提交。平静的一周会被记录并跳过——沉默不是失败,而是成功。Dependabot 升级每周一合成一个 PR,在周五的版本里搭车一起上,避免污染提交历史。
403
-
404
- <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="最近提交"></a>
405
-
406
- 完整策略——手动覆写、取消流程、升级规则:[`docs/RELEASE-CADENCE.md`](docs/RELEASE-CADENCE.md)。
407
-
408
- ## 贡献
409
-
410
- 最快合并的方式:为你每天使用的站点写一个 20 行 YAML 适配器。评审门槛很低——只要能跑、符合 schema,就能合并。
411
-
412
- | 领域 | 指南 |
413
- | ---------- | -------------------------------------------------------- |
414
- | 新适配器 | [`contributing/adapter.md`](contributing/adapter.md) |
415
- | 新传输层 | [`contributing/transport.md`](contributing/transport.md) |
416
- | CUA 后端 | [`contributing/cua.md`](contributing/cua.md) |
417
- | MCP 服务器 | [`contributing/mcp.md`](contributing/mcp.md) |
418
- | ACP 集成 | [`contributing/acp.md`](contributing/acp.md) |
419
- | 发布流程 | [`contributing/release.md`](contributing/release.md) |
420
-
421
- ## 许可证
304
+ ## License
422
305
 
423
306
  [Apache-2.0](./LICENSE)
424
307
 
425
- 仓库:<https://github.com/olo-dot-io/Uni-CLI> · npm:[`@zenalexa/unicli`](https://www.npmjs.com/package/@zenalexa/unicli) · 欢迎提 Issue。
426
-
427
- ---
428
-
429
- <p align="center">
430
- <a href="https://github.com/olo-dot-io/Uni-CLI/graphs/contributors">
431
- <img src="https://contrib.rocks/image?repo=olo-dot-io/Uni-CLI" alt="贡献者">
432
- </a>
433
- </p>
434
-
435
308
  <p align="center">
436
- <sub>v0.215.1</sub>
309
+ <sub>v0.216.2 — Apollo · Aldrin</sub>
437
310
  </p>