@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,203 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+
4
+ import { cli, Strategy } from "../../registry.js";
5
+ import type { IPage } from "../../types.js";
6
+ import {
7
+ boolArg,
8
+ clickFirst,
9
+ intArg,
10
+ js,
11
+ str,
12
+ visibleText,
13
+ } from "../_shared/browser-tools.js";
14
+
15
+ const HOME = "https://chat.deepseek.com";
16
+ const CHAT = `${HOME}/`;
17
+ const INPUT = "textarea, [contenteditable='true'], .chat-input textarea";
18
+ const FILE_INPUT = 'input[type="file"]';
19
+ const MESSAGES =
20
+ "[class*='message'], [data-role='message'], .markdown-body, main article";
21
+ const ATTACH_SELECTORS = [
22
+ 'button[aria-label*="Attach"]',
23
+ 'button[aria-label*="Upload"]',
24
+ 'button[aria-label*="上传"]',
25
+ 'button[aria-label*="附件"]',
26
+ 'label[for*="file"]',
27
+ 'button:has-text("上传")',
28
+ 'button:has-text("附件")',
29
+ 'button:has-text("Attach")',
30
+ ];
31
+
32
+ async function openChat(page: IPage): Promise<void> {
33
+ await page.goto(CHAT, { settleMs: 1800 });
34
+ }
35
+
36
+ async function readConversation(
37
+ page: IPage,
38
+ ): Promise<Record<string, unknown>[]> {
39
+ await openChat(page);
40
+ const items = (await page.evaluate(`(() => {
41
+ const nodes = [...document.querySelectorAll(${js(MESSAGES)})];
42
+ const rows = nodes.map((node, index) => ({
43
+ index: index + 1,
44
+ text: (node.textContent || '').trim(),
45
+ role: /user|human|question/i.test(node.getAttribute('class') || '') ? 'user' : 'assistant'
46
+ })).filter((row) => row.text.length > 0);
47
+ return rows.length ? rows : [{ index: 1, role: 'page', text: (document.body?.innerText || '').trim().slice(0, 4000) }];
48
+ })()`)) as Record<string, unknown>[];
49
+ return items;
50
+ }
51
+
52
+ function resolveUploadFiles(value: unknown): string[] {
53
+ const raw = str(value).trim();
54
+ if (!raw) return [];
55
+ return raw
56
+ .split(",")
57
+ .map((file) => resolve(file.trim()))
58
+ .filter(Boolean)
59
+ .map((file) => {
60
+ if (!existsSync(file))
61
+ throw new Error(`DeepSeek upload file not found: ${file}`);
62
+ return file;
63
+ });
64
+ }
65
+
66
+ async function attachFiles(page: IPage, files: string[]): Promise<void> {
67
+ if (files.length === 0) return;
68
+ await clickFirst(page, ATTACH_SELECTORS);
69
+ await page.setFileInput(FILE_INPUT, files);
70
+ await page.wait(2);
71
+ }
72
+
73
+ cli({
74
+ site: "deepseek",
75
+ name: "ask",
76
+ description: "Send a prompt to DeepSeek web chat and wait for a response",
77
+ domain: "chat.deepseek.com",
78
+ strategy: Strategy.COOKIE,
79
+ browser: true,
80
+ args: [
81
+ { name: "prompt", type: "str", required: true, positional: true },
82
+ { name: "timeout", type: "int", default: 120 },
83
+ { name: "new", type: "bool", default: false },
84
+ { name: "model", type: "str", default: "instant" },
85
+ { name: "think", type: "bool", default: false },
86
+ { name: "search", type: "bool", default: false },
87
+ {
88
+ name: "file",
89
+ type: "str",
90
+ required: false,
91
+ description: "Local file path, or comma-separated paths, to upload first",
92
+ },
93
+ ],
94
+ columns: ["response"],
95
+ func: async (page, kwargs) => {
96
+ const p = page as IPage;
97
+ await openChat(p);
98
+ if (boolArg(kwargs.new)) {
99
+ await clickFirst(p, [
100
+ "a[href='/']",
101
+ "button[aria-label*='New']",
102
+ "button[aria-label*='新']",
103
+ "button:has-text('新对话')",
104
+ ]);
105
+ await p.wait(0.8);
106
+ }
107
+ await attachFiles(p, resolveUploadFiles(kwargs.file));
108
+ await p.click(INPUT);
109
+ await p.insertText(str(kwargs.prompt));
110
+ await p.press("Enter");
111
+ const timeout = intArg(kwargs.timeout, 120, 600);
112
+ let previous = "";
113
+ let stable = 0;
114
+ const deadline = Date.now() + timeout * 1000;
115
+ while (Date.now() < deadline) {
116
+ await p.wait(1);
117
+ const rows = await readConversation(p);
118
+ const text = str(rows.at(-1)?.text);
119
+ if (text && text === previous) stable += 1;
120
+ else stable = 0;
121
+ previous = text;
122
+ if (stable >= 2) return [{ response: text }];
123
+ }
124
+ return [{ response: previous }];
125
+ },
126
+ });
127
+
128
+ cli({
129
+ site: "deepseek",
130
+ name: "new",
131
+ description: "Start a new DeepSeek web conversation",
132
+ domain: "chat.deepseek.com",
133
+ strategy: Strategy.COOKIE,
134
+ browser: true,
135
+ func: async (page) => {
136
+ const p = page as IPage;
137
+ await openChat(p);
138
+ const selector = await clickFirst(p, [
139
+ "a[href='/']",
140
+ "button[aria-label*='New']",
141
+ "button[aria-label*='新']",
142
+ "button:has-text('新对话')",
143
+ ]);
144
+ return [{ ok: selector !== null, selector }];
145
+ },
146
+ });
147
+
148
+ cli({
149
+ site: "deepseek",
150
+ name: "status",
151
+ description: "Check DeepSeek web page availability and login state",
152
+ domain: "chat.deepseek.com",
153
+ strategy: Strategy.COOKIE,
154
+ browser: true,
155
+ columns: ["title", "url", "logged_in"],
156
+ func: async (page) => {
157
+ const p = page as IPage;
158
+ await openChat(p);
159
+ const text = await visibleText(p);
160
+ return [
161
+ {
162
+ title: await p.title(),
163
+ url: await p.url(),
164
+ logged_in: !/登录|sign in|login/i.test(text),
165
+ },
166
+ ];
167
+ },
168
+ });
169
+
170
+ cli({
171
+ site: "deepseek",
172
+ name: "read",
173
+ description: "Read the visible DeepSeek web conversation",
174
+ domain: "chat.deepseek.com",
175
+ strategy: Strategy.COOKIE,
176
+ browser: true,
177
+ columns: ["index", "role", "text"],
178
+ func: async (page) => readConversation(page as IPage),
179
+ });
180
+
181
+ cli({
182
+ site: "deepseek",
183
+ name: "history",
184
+ description: "List DeepSeek conversation history from the sidebar",
185
+ domain: "chat.deepseek.com",
186
+ strategy: Strategy.COOKIE,
187
+ browser: true,
188
+ args: [{ name: "limit", type: "int", default: 20 }],
189
+ columns: ["title", "url"],
190
+ func: async (page, kwargs) => {
191
+ const p = page as IPage;
192
+ await openChat(p);
193
+ const limit = intArg(kwargs.limit, 20, 100);
194
+ const rows = (await p.evaluate(`(() => {
195
+ const links = [...document.querySelectorAll('a[href*="/chat/"], a[href*="conversation"]')];
196
+ return links.map((a) => ({
197
+ title: (a.textContent || '').trim(),
198
+ url: new URL(a.getAttribute('href') || '', location.href).href
199
+ })).filter((row) => row.title);
200
+ })()`)) as Record<string, unknown>[];
201
+ return rows.slice(0, limit);
202
+ },
203
+ });
@@ -0,0 +1,154 @@
1
+ import { cli, Strategy } from "../../registry.js";
2
+ import type { IPage } from "../../types.js";
3
+ import {
4
+ clickFirst,
5
+ intArg,
6
+ js,
7
+ str,
8
+ visibleText,
9
+ } from "../_shared/browser-tools.js";
10
+
11
+ const CHAT = "https://www.doubao.com/chat";
12
+ const INPUT = "textarea, [contenteditable='true'], .chat-input textarea";
13
+ const MESSAGE_SELECTOR =
14
+ "[class*='message'], [data-testid*='message'], [class*='markdown'], main article";
15
+
16
+ async function openDoubao(page: IPage): Promise<void> {
17
+ await page.goto(CHAT, { settleMs: 1800 });
18
+ }
19
+
20
+ async function readMessages(page: IPage): Promise<Record<string, unknown>[]> {
21
+ await openDoubao(page);
22
+ const rows = await page.evaluate(`(() => {
23
+ const nodes = [...document.querySelectorAll(${js(MESSAGE_SELECTOR)})];
24
+ const items = nodes.map((node, index) => ({
25
+ index: index + 1,
26
+ text: (node.textContent || '').trim(),
27
+ role: /user|human|question/i.test(node.getAttribute('class') || '') ? 'user' : 'assistant'
28
+ })).filter((row) => row.text);
29
+ return items.length ? items : [{ index: 1, role: 'page', text: (document.body?.innerText || '').trim().slice(0, 4000) }];
30
+ })()`);
31
+ return Array.isArray(rows) ? (rows as Record<string, unknown>[]) : [];
32
+ }
33
+
34
+ cli({
35
+ site: "doubao",
36
+ name: "send",
37
+ description: "Send text to the current Doubao web chat",
38
+ domain: "www.doubao.com",
39
+ strategy: Strategy.COOKIE,
40
+ browser: true,
41
+ args: [{ name: "text", type: "str", required: true, positional: true }],
42
+ func: async (page, kwargs) => {
43
+ const p = page as IPage;
44
+ await openDoubao(p);
45
+ await p.click(INPUT);
46
+ await p.insertText(str(kwargs.text));
47
+ await p.press("Enter");
48
+ return [{ ok: true }];
49
+ },
50
+ });
51
+
52
+ cli({
53
+ site: "doubao",
54
+ name: "read",
55
+ description: "Read visible Doubao web conversation messages",
56
+ domain: "www.doubao.com",
57
+ strategy: Strategy.COOKIE,
58
+ browser: true,
59
+ columns: ["index", "role", "text"],
60
+ func: async (page) => readMessages(page as IPage),
61
+ });
62
+
63
+ cli({
64
+ site: "doubao",
65
+ name: "history",
66
+ description: "List Doubao web conversation history",
67
+ domain: "www.doubao.com",
68
+ strategy: Strategy.COOKIE,
69
+ browser: true,
70
+ args: [{ name: "limit", type: "int", default: 20 }],
71
+ columns: ["title", "url"],
72
+ func: async (page, kwargs) => {
73
+ const p = page as IPage;
74
+ await openDoubao(p);
75
+ const limit = intArg(kwargs.limit, 20, 100);
76
+ const rows = await p.evaluate(`(() => {
77
+ const links = [...document.querySelectorAll('a[href*="/chat/"], a[href*="conversation"], a[href*="thread"]')];
78
+ return links.map((a) => ({
79
+ title: (a.textContent || '').trim(),
80
+ url: new URL(a.getAttribute('href') || '', location.href).href
81
+ })).filter((row) => row.title);
82
+ })()`);
83
+ return Array.isArray(rows)
84
+ ? (rows as Record<string, unknown>[]).slice(0, limit)
85
+ : [];
86
+ },
87
+ });
88
+
89
+ cli({
90
+ site: "doubao",
91
+ name: "detail",
92
+ description: "Read a Doubao conversation by id or URL",
93
+ domain: "www.doubao.com",
94
+ strategy: Strategy.COOKIE,
95
+ browser: true,
96
+ args: [{ name: "id", type: "str", required: true, positional: true }],
97
+ columns: ["index", "role", "text"],
98
+ func: async (page, kwargs) => {
99
+ const p = page as IPage;
100
+ const id = str(kwargs.id);
101
+ const url = id.startsWith("http")
102
+ ? id
103
+ : `${CHAT}/${encodeURIComponent(id)}`;
104
+ await p.goto(url, { settleMs: 1800 });
105
+ return readMessages(p);
106
+ },
107
+ });
108
+
109
+ cli({
110
+ site: "doubao",
111
+ name: "meeting-summary",
112
+ description: "Extract the visible summary for a Doubao meeting record",
113
+ domain: "www.doubao.com",
114
+ strategy: Strategy.COOKIE,
115
+ browser: true,
116
+ args: [{ name: "id", type: "str", required: true, positional: true }],
117
+ columns: ["id", "summary"],
118
+ func: async (page, kwargs) => {
119
+ const p = page as IPage;
120
+ const id = str(kwargs.id);
121
+ const url = id.startsWith("http")
122
+ ? id
123
+ : `${CHAT}/${encodeURIComponent(id)}`;
124
+ await p.goto(url, { settleMs: 1800 });
125
+ const text = await visibleText(p);
126
+ return [{ id, summary: text.slice(0, 4000) }];
127
+ },
128
+ });
129
+
130
+ cli({
131
+ site: "doubao",
132
+ name: "meeting-transcript",
133
+ description: "Extract visible transcript text for a Doubao meeting record",
134
+ domain: "www.doubao.com",
135
+ strategy: Strategy.COOKIE,
136
+ browser: true,
137
+ args: [{ name: "id", type: "str", required: true, positional: true }],
138
+ columns: ["id", "transcript"],
139
+ func: async (page, kwargs) => {
140
+ const p = page as IPage;
141
+ const id = str(kwargs.id);
142
+ const url = id.startsWith("http")
143
+ ? id
144
+ : `${CHAT}/${encodeURIComponent(id)}`;
145
+ await p.goto(url, { settleMs: 1800 });
146
+ await clickFirst(p, [
147
+ "button[aria-label*='转写']",
148
+ "button[aria-label*='记录']",
149
+ "button[aria-label*='Transcript']",
150
+ ]);
151
+ const text = await visibleText(p);
152
+ return [{ id, transcript: text.slice(0, 8000) }];
153
+ },
154
+ });