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