@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
@@ -0,0 +1,151 @@
1
+ import { cli, Strategy } from "../../registry.js";
2
+ import { clickFirst, intArg, js, str } from "../_shared/browser-tools.js";
3
+ const DRIVE = "https://drive-pc.quark.cn/list#/list/all";
4
+ async function openDrive(page) {
5
+ await page.goto(DRIVE, { settleMs: 1800 });
6
+ }
7
+ async function driveFetch(page, path, body) {
8
+ await openDrive(page);
9
+ const result = await page.evaluate(`(async () => {
10
+ const response = await fetch(${js(path)}, {
11
+ method: 'POST',
12
+ credentials: 'include',
13
+ headers: { 'content-type': 'application/json;charset=utf-8' },
14
+ body: ${js(JSON.stringify(body))}
15
+ });
16
+ let data = null;
17
+ try { data = await response.json(); } catch {}
18
+ return [{
19
+ ok: response.ok,
20
+ status: response.status,
21
+ data,
22
+ message: data?.message || data?.error || ''
23
+ }];
24
+ })()`);
25
+ return Array.isArray(result) ? result : [];
26
+ }
27
+ function fidList(value) {
28
+ return str(value)
29
+ .split(",")
30
+ .map((item) => item.trim())
31
+ .filter(Boolean);
32
+ }
33
+ cli({
34
+ site: "quark",
35
+ name: "mkdir",
36
+ description: "Create a folder in Quark Drive",
37
+ domain: "drive-pc.quark.cn",
38
+ strategy: Strategy.COOKIE,
39
+ browser: true,
40
+ args: [
41
+ { name: "name", type: "str", required: true, positional: true },
42
+ { name: "parent_fid", type: "str", default: "0" },
43
+ ],
44
+ columns: ["ok", "status", "message"],
45
+ func: async (page, kwargs) => driveFetch(page, "/1/clouddrive/file?fr=pc", {
46
+ pdir_fid: str(kwargs.parent_fid, "0"),
47
+ file_name: str(kwargs.name),
48
+ dir_path: "",
49
+ }),
50
+ });
51
+ cli({
52
+ site: "quark",
53
+ name: "rename",
54
+ description: "Rename a Quark Drive file or folder",
55
+ domain: "drive-pc.quark.cn",
56
+ strategy: Strategy.COOKIE,
57
+ browser: true,
58
+ args: [
59
+ { name: "fid", type: "str", required: true, positional: true },
60
+ { name: "name", type: "str", required: true },
61
+ ],
62
+ columns: ["ok", "status", "message"],
63
+ func: async (page, kwargs) => driveFetch(page, "/1/clouddrive/file/rename?fr=pc", {
64
+ fid: str(kwargs.fid),
65
+ file_name: str(kwargs.name),
66
+ }),
67
+ });
68
+ cli({
69
+ site: "quark",
70
+ name: "rm",
71
+ description: "Delete Quark Drive files or folders by fid list",
72
+ domain: "drive-pc.quark.cn",
73
+ strategy: Strategy.COOKIE,
74
+ browser: true,
75
+ args: [{ name: "fids", type: "str", required: true, positional: true }],
76
+ columns: ["ok", "status", "message"],
77
+ func: async (page, kwargs) => driveFetch(page, "/1/clouddrive/file/delete?fr=pc", {
78
+ action_type: 2,
79
+ filelist: fidList(kwargs.fids).map((fid) => ({ fid })),
80
+ }),
81
+ });
82
+ cli({
83
+ site: "quark",
84
+ name: "mv",
85
+ description: "Move Quark Drive files to a target folder fid",
86
+ domain: "drive-pc.quark.cn",
87
+ strategy: Strategy.COOKIE,
88
+ browser: true,
89
+ args: [
90
+ { name: "fids", type: "str", required: true, positional: true },
91
+ { name: "to_fid", type: "str", required: true },
92
+ ],
93
+ columns: ["ok", "status", "message"],
94
+ func: async (page, kwargs) => driveFetch(page, "/1/clouddrive/file/move?fr=pc", {
95
+ to_pdir_fid: str(kwargs.to_fid),
96
+ action_type: 1,
97
+ filelist: fidList(kwargs.fids).map((fid) => ({ fid })),
98
+ }),
99
+ });
100
+ cli({
101
+ site: "quark",
102
+ name: "share-tree",
103
+ description: "Read a Quark share page directory tree",
104
+ domain: "pan.quark.cn",
105
+ strategy: Strategy.COOKIE,
106
+ browser: true,
107
+ args: [
108
+ { name: "url", type: "str", required: true, positional: true },
109
+ { name: "limit", type: "int", default: 100 },
110
+ ],
111
+ columns: ["name", "type", "size"],
112
+ func: async (page, kwargs) => {
113
+ const p = page;
114
+ await p.goto(str(kwargs.url), { settleMs: 2500 });
115
+ const limit = intArg(kwargs.limit, 100, 500);
116
+ const rows = await p.evaluate(`(() => {
117
+ const cards = [...document.querySelectorAll('[class*="file"], [class*="item"], [role="row"]')];
118
+ return cards.map((card) => ({
119
+ name: (card.querySelector('[class*="name"], [title]')?.textContent || card.getAttribute('title') || '').replace(/\\s+/g, ' ').trim(),
120
+ type: /folder|文件夹/.test(card.textContent || '') ? 'folder' : 'file',
121
+ size: (card.querySelector('[class*="size"]')?.textContent || '').trim()
122
+ })).filter((row) => row.name).slice(0, ${js(limit)});
123
+ })()`);
124
+ return Array.isArray(rows) ? rows : [];
125
+ },
126
+ });
127
+ cli({
128
+ site: "quark",
129
+ name: "save",
130
+ description: "Save a Quark share into the active Drive account",
131
+ domain: "pan.quark.cn",
132
+ strategy: Strategy.COOKIE,
133
+ browser: true,
134
+ args: [
135
+ { name: "url", type: "str", required: true, positional: true },
136
+ { name: "to_fid", type: "str", required: false },
137
+ ],
138
+ columns: ["ok", "selector", "url"],
139
+ func: async (page, kwargs) => {
140
+ const p = page;
141
+ await p.goto(str(kwargs.url), { settleMs: 2500 });
142
+ const selector = await clickFirst(p, [
143
+ "button[class*='save']",
144
+ "button[aria-label*='保存']",
145
+ "button[title*='保存']",
146
+ "button",
147
+ ]);
148
+ return [{ ok: selector !== null, selector, url: await p.url() }];
149
+ },
150
+ });
151
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/adapters/quark/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IPage } from "../../types.js";
2
+ export declare function clampLimit(value: unknown, fallback?: number): number;
3
+ export declare function normalizeSubreddit(value: unknown): string;
4
+ export declare function redditJson(page: IPage, path: string, params: Record<string, string | number | boolean | undefined>): Promise<unknown>;
5
+ export declare function redditChildren(data: unknown): Array<Record<string, unknown>>;
6
+ export declare function mapRedditPosts(children: Array<Record<string, unknown>>, limit: number): Array<Record<string, unknown>>;
7
+ //# sourceMappingURL=browser-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-utils.d.ts","sourceRoot":"","sources":["../../../src/adapters/reddit/browser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAS5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAK,GAAG,MAAM,CAShE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGzD;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC5D,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK5E;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgBhC"}
@@ -0,0 +1,68 @@
1
+ export function clampLimit(value, fallback = 20) {
2
+ const n = typeof value === "number"
3
+ ? value
4
+ : typeof value === "string"
5
+ ? Number.parseInt(value, 10)
6
+ : fallback;
7
+ if (!Number.isFinite(n) || n <= 0)
8
+ return fallback;
9
+ return Math.min(Math.trunc(n), 100);
10
+ }
11
+ export function normalizeSubreddit(value) {
12
+ const raw = String(value ?? "").trim();
13
+ return raw.startsWith("r/") ? raw.slice(2) : raw;
14
+ }
15
+ export async function redditJson(page, path, params) {
16
+ await page.goto("https://www.reddit.com", { settleMs: 500 });
17
+ const payload = (await page.evaluate(`(async () => {
18
+ const path = ${JSON.stringify(path)};
19
+ const rawParams = ${JSON.stringify(params)};
20
+ const params = new URLSearchParams();
21
+ for (const [key, value] of Object.entries(rawParams)) {
22
+ if (value === undefined || value === null || value === '') continue;
23
+ params.set(key, String(value));
24
+ }
25
+ if (!params.has('raw_json')) params.set('raw_json', '1');
26
+ const res = await fetch(path + '?' + params.toString(), {
27
+ credentials: 'include',
28
+ headers: { accept: 'application/json' }
29
+ });
30
+ const text = await res.text();
31
+ if (!res.ok) {
32
+ return { ok: false, status: res.status, message: text.slice(0, 240) };
33
+ }
34
+ try {
35
+ return { ok: true, data: JSON.parse(text) };
36
+ } catch (err) {
37
+ return { ok: false, status: 0, message: String(err) };
38
+ }
39
+ })()`));
40
+ if (!payload?.ok) {
41
+ const status = payload?.status ? `HTTP ${payload.status}` : "unknown";
42
+ throw new Error(`Reddit browser JSON failed for ${path}: ${status}. ${payload?.message ?? ""}`);
43
+ }
44
+ return payload.data;
45
+ }
46
+ export function redditChildren(data) {
47
+ const root = data;
48
+ return Array.isArray(root?.data?.children)
49
+ ? root.data.children
50
+ : [];
51
+ }
52
+ export function mapRedditPosts(children, limit) {
53
+ return children.slice(0, limit).map((child, index) => {
54
+ const data = (child.data ?? {});
55
+ const permalink = String(data.permalink ?? "");
56
+ return {
57
+ rank: index + 1,
58
+ title: String(data.title ?? ""),
59
+ subreddit: String(data.subreddit_name_prefixed ?? "") ||
60
+ (data.subreddit ? `r/${String(data.subreddit)}` : ""),
61
+ author: String(data.author ?? ""),
62
+ score: Number(data.score ?? 0),
63
+ comments: Number(data.num_comments ?? 0),
64
+ url: permalink ? `https://www.reddit.com${permalink}` : "",
65
+ };
66
+ });
67
+ }
68
+ //# sourceMappingURL=browser-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-utils.js","sourceRoot":"","sources":["../../../src/adapters/reddit/browser-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=listings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listings.d.ts","sourceRoot":"","sources":["../../../src/adapters/reddit/listings.ts"],"names":[],"mappings":""}
@@ -0,0 +1,193 @@
1
+ import { cli, Strategy } from "../../registry.js";
2
+ import { clampLimit, mapRedditPosts, normalizeSubreddit, redditChildren, redditJson, } from "./browser-utils.js";
3
+ const POST_COLUMNS = [
4
+ "rank",
5
+ "title",
6
+ "subreddit",
7
+ "author",
8
+ "score",
9
+ "comments",
10
+ "url",
11
+ ];
12
+ const LIMIT_ARG = {
13
+ name: "limit",
14
+ type: "int",
15
+ default: 20,
16
+ description: "Number of posts",
17
+ };
18
+ const SUBREDDIT_ARG = {
19
+ name: "subreddit",
20
+ type: "str",
21
+ default: "",
22
+ description: "Subreddit name without r/",
23
+ };
24
+ const TIME_ARG = {
25
+ name: "time",
26
+ type: "str",
27
+ default: "day",
28
+ choices: ["hour", "day", "week", "month", "year", "all"],
29
+ description: "Time window",
30
+ };
31
+ async function postsFromPath(page, path, kwargs, params = {}) {
32
+ const limit = clampLimit(kwargs.limit);
33
+ const data = await redditJson(page, path, { limit, ...params });
34
+ return mapRedditPosts(redditChildren(data), limit);
35
+ }
36
+ cli({
37
+ site: "reddit",
38
+ name: "hot",
39
+ description: "Reddit front page hot posts",
40
+ domain: "www.reddit.com",
41
+ strategy: Strategy.COOKIE,
42
+ browser: true,
43
+ args: [SUBREDDIT_ARG, LIMIT_ARG],
44
+ columns: POST_COLUMNS,
45
+ func: async (page, kwargs) => {
46
+ const subreddit = normalizeSubreddit(kwargs.subreddit);
47
+ const path = subreddit
48
+ ? `/r/${encodeURIComponent(subreddit)}/hot.json`
49
+ : "/r/all/hot.json";
50
+ return postsFromPath(page, path, kwargs);
51
+ },
52
+ });
53
+ cli({
54
+ site: "reddit",
55
+ name: "frontpage",
56
+ description: "Reddit front page / r/all",
57
+ domain: "www.reddit.com",
58
+ strategy: Strategy.COOKIE,
59
+ browser: true,
60
+ args: [LIMIT_ARG],
61
+ columns: POST_COLUMNS,
62
+ func: async (page, kwargs) => postsFromPath(page, "/r/all.json", kwargs),
63
+ });
64
+ cli({
65
+ site: "reddit",
66
+ name: "popular",
67
+ description: "Reddit popular posts (/r/popular)",
68
+ domain: "www.reddit.com",
69
+ strategy: Strategy.COOKIE,
70
+ browser: true,
71
+ args: [LIMIT_ARG],
72
+ columns: POST_COLUMNS,
73
+ func: async (page, kwargs) => postsFromPath(page, "/r/popular.json", kwargs),
74
+ });
75
+ cli({
76
+ site: "reddit",
77
+ name: "new",
78
+ description: "Reddit newest posts",
79
+ domain: "www.reddit.com",
80
+ strategy: Strategy.COOKIE,
81
+ browser: true,
82
+ args: [SUBREDDIT_ARG, LIMIT_ARG],
83
+ columns: POST_COLUMNS,
84
+ func: async (page, kwargs) => {
85
+ const subreddit = normalizeSubreddit(kwargs.subreddit);
86
+ const path = subreddit
87
+ ? `/r/${encodeURIComponent(subreddit)}/new.json`
88
+ : "/new.json";
89
+ return postsFromPath(page, path, kwargs);
90
+ },
91
+ });
92
+ cli({
93
+ site: "reddit",
94
+ name: "top",
95
+ description: "Reddit top posts",
96
+ domain: "www.reddit.com",
97
+ strategy: Strategy.COOKIE,
98
+ browser: true,
99
+ args: [SUBREDDIT_ARG, TIME_ARG, LIMIT_ARG],
100
+ columns: POST_COLUMNS,
101
+ func: async (page, kwargs) => {
102
+ const subreddit = normalizeSubreddit(kwargs.subreddit);
103
+ const path = subreddit
104
+ ? `/r/${encodeURIComponent(subreddit)}/top.json`
105
+ : "/top.json";
106
+ return postsFromPath(page, path, kwargs, {
107
+ t: String(kwargs.time ?? "day"),
108
+ });
109
+ },
110
+ });
111
+ cli({
112
+ site: "reddit",
113
+ name: "rising",
114
+ description: "Reddit rising posts",
115
+ domain: "www.reddit.com",
116
+ strategy: Strategy.COOKIE,
117
+ browser: true,
118
+ args: [SUBREDDIT_ARG, LIMIT_ARG],
119
+ columns: POST_COLUMNS,
120
+ func: async (page, kwargs) => {
121
+ const subreddit = normalizeSubreddit(kwargs.subreddit);
122
+ const path = subreddit
123
+ ? `/r/${encodeURIComponent(subreddit)}/rising.json`
124
+ : "/rising.json";
125
+ return postsFromPath(page, path, kwargs);
126
+ },
127
+ });
128
+ cli({
129
+ site: "reddit",
130
+ name: "subreddit",
131
+ description: "Get posts from a specific subreddit",
132
+ domain: "www.reddit.com",
133
+ strategy: Strategy.COOKIE,
134
+ browser: true,
135
+ args: [
136
+ {
137
+ name: "name",
138
+ type: "str",
139
+ required: true,
140
+ positional: true,
141
+ description: "Subreddit name",
142
+ },
143
+ {
144
+ name: "sort",
145
+ type: "str",
146
+ default: "hot",
147
+ choices: ["hot", "new", "top", "rising"],
148
+ description: "Sort order",
149
+ },
150
+ TIME_ARG,
151
+ LIMIT_ARG,
152
+ ],
153
+ columns: POST_COLUMNS,
154
+ func: async (page, kwargs) => {
155
+ const name = normalizeSubreddit(kwargs.name);
156
+ const sort = String(kwargs.sort ?? "hot");
157
+ const limit = clampLimit(kwargs.limit);
158
+ const data = await redditJson(page, `/r/${encodeURIComponent(name)}/${sort}.json`, {
159
+ limit,
160
+ t: sort === "top" ? String(kwargs.time ?? "day") : undefined,
161
+ });
162
+ return mapRedditPosts(redditChildren(data), limit);
163
+ },
164
+ });
165
+ cli({
166
+ site: "reddit",
167
+ name: "trending",
168
+ description: "Reddit trending subreddits",
169
+ domain: "www.reddit.com",
170
+ strategy: Strategy.COOKIE,
171
+ browser: true,
172
+ args: [LIMIT_ARG],
173
+ columns: ["name", "subscribers", "title", "description", "url"],
174
+ func: async (page, kwargs) => {
175
+ const limit = clampLimit(kwargs.limit, 25);
176
+ const data = await redditJson(page, "/subreddits/popular.json", {
177
+ limit,
178
+ });
179
+ return redditChildren(data)
180
+ .slice(0, limit)
181
+ .map((child) => {
182
+ const item = (child.data ?? {});
183
+ return {
184
+ name: String(item.display_name ?? ""),
185
+ subscribers: Number(item.subscribers ?? 0),
186
+ title: String(item.title ?? ""),
187
+ description: String(item.public_description ?? "").slice(0, 120),
188
+ url: item.url ? `https://www.reddit.com${String(item.url)}` : "",
189
+ };
190
+ });
191
+ },
192
+ });
193
+ //# sourceMappingURL=listings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listings.js","sourceRoot":"","sources":["../../../src/adapters/reddit/listings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/adapters/reddit/search.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import { cli, Strategy } from "../../registry.js";
2
+ import { clampLimit, mapRedditPosts, normalizeSubreddit, redditChildren, redditJson, } from "./browser-utils.js";
3
+ cli({
4
+ site: "reddit",
5
+ name: "search",
6
+ description: "Search Reddit posts",
7
+ domain: "www.reddit.com",
8
+ strategy: Strategy.COOKIE,
9
+ browser: true,
10
+ args: [
11
+ {
12
+ name: "query",
13
+ type: "str",
14
+ required: true,
15
+ positional: true,
16
+ description: "Search query",
17
+ },
18
+ {
19
+ name: "subreddit",
20
+ type: "str",
21
+ default: "",
22
+ description: "Restrict search to a subreddit",
23
+ },
24
+ {
25
+ name: "sort",
26
+ type: "str",
27
+ default: "relevance",
28
+ choices: ["relevance", "hot", "top", "new", "comments"],
29
+ description: "Sort order",
30
+ },
31
+ {
32
+ name: "time",
33
+ type: "str",
34
+ default: "all",
35
+ choices: ["hour", "day", "week", "month", "year", "all"],
36
+ description: "Time window",
37
+ },
38
+ {
39
+ name: "limit",
40
+ type: "int",
41
+ default: 20,
42
+ description: "Number of results",
43
+ },
44
+ ],
45
+ columns: ["title", "subreddit", "author", "score", "comments", "url"],
46
+ func: async (page, kwargs) => {
47
+ const p = page;
48
+ const query = String(kwargs.query ?? "");
49
+ const subreddit = normalizeSubreddit(kwargs.subreddit);
50
+ const sort = String(kwargs.sort ?? "relevance");
51
+ const time = String(kwargs.time ?? "all");
52
+ const limit = clampLimit(kwargs.limit);
53
+ const path = subreddit
54
+ ? `/r/${encodeURIComponent(subreddit)}/search.json`
55
+ : "/search.json";
56
+ const data = await redditJson(p, path, {
57
+ q: query,
58
+ sort,
59
+ t: time,
60
+ limit,
61
+ restrict_sr: subreddit ? "on" : "off",
62
+ });
63
+ return mapRedditPosts(redditChildren(data), limit);
64
+ },
65
+ });
66
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/adapters/reddit/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,GAAG,CAAC;IACF,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,qBAAqB;IAClC,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,cAAc;SAC5B;QACD;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,gCAAgC;SAC9C;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;YACvD,WAAW,EAAE,YAAY;SAC1B;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;YACxD,WAAW,EAAE,aAAa;SAC3B;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,mBAAmB;SACjC;KACF;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;IACrE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAa,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,MAAM,kBAAkB,CAAC,SAAS,CAAC,cAAc;YACnD,CAAC,CAAC,cAAc,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE;YACrC,CAAC,EAAE,KAAK;YACR,IAAI;YACJ,CAAC,EAAE,IAAI;YACP,KAAK;YACL,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SACtC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/adapters/spotify/api.ts"],"names":[],"mappings":""}