@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,80 @@
1
+ site: excel
2
+ name: insert-image
3
+ description: Set a local image as the active Microsoft Excel worksheet background
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ path:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Local image path to embed
15
+ cell:
16
+ type: str
17
+ required: false
18
+ default: A1
19
+ description: Reference cell reported as the requested anchor
20
+
21
+ pipeline:
22
+ - exec:
23
+ command: osascript
24
+ args:
25
+ - "-e"
26
+ - |
27
+ on replace_text(theText, searchString, replacementString)
28
+ set AppleScript's text item delimiters to searchString
29
+ set parts to text items of (theText as text)
30
+ set AppleScript's text item delimiters to replacementString
31
+ set outText to parts as text
32
+ set AppleScript's text item delimiters to ""
33
+ return outText
34
+ end replace_text
35
+
36
+ on json_string(valueText)
37
+ set s to valueText as text
38
+ set s to my replace_text(s, "\\", "\\\\")
39
+ set s to my replace_text(s, "\"", "\\\"")
40
+ set s to my replace_text(s, return, "\\n")
41
+ set s to my replace_text(s, linefeed, "\\n")
42
+ set s to my replace_text(s, tab, "\\t")
43
+ return "\"" & s & "\""
44
+ end json_string
45
+
46
+ set imagePath to system attribute "UNICLI_IMAGE_PATH"
47
+ set cellRef to system attribute "UNICLI_CELL"
48
+ if cellRef is "" then set cellRef to "A1"
49
+
50
+ try
51
+ do shell script "test -f " & quoted form of imagePath
52
+ with timeout of 10 seconds
53
+ tell application "Microsoft Excel"
54
+ activate
55
+ if (count workbooks) is 0 then make new workbook
56
+ set wb to active workbook
57
+ set sh to active sheet
58
+ set background picture sh picture file name imagePath
59
+ set workbookName to name of wb as text
60
+ set sheetName to name of sh as text
61
+ end tell
62
+ end timeout
63
+ return "[{\"app\":\"Microsoft Excel\",\"workbook\":" & my json_string(workbookName) & ",\"sheet\":" & my json_string(sheetName) & ",\"cell\":" & my json_string(cellRef) & ",\"path\":" & my json_string(imagePath) & ",\"embedded\":true,\"placement\":\"sheet_background\"}]"
64
+ on error errMsg number errNum
65
+ return "[{\"ok\":false,\"code\":\"office_automation_unavailable\",\"message\":" & my json_string(errMsg) & ",\"number\":" & errNum & "}]"
66
+ end try
67
+ env:
68
+ UNICLI_IMAGE_PATH: "${{ args.path }}"
69
+ UNICLI_CELL: "${{ args.cell }}"
70
+ parse: json
71
+ timeout: 15000
72
+
73
+ columns: [app, workbook, sheet, cell, path, embedded, placement]
74
+
75
+ capabilities: ["subprocess.exec"]
76
+ minimum_capability: subprocess.exec
77
+ trust: user
78
+ confidentiality: private
79
+ quarantine: false
80
+ schema_version: v2
@@ -0,0 +1,90 @@
1
+ site: excel
2
+ name: insert-link
3
+ description: Insert a native HYPERLINK formula into an Excel cell
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ url:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Link URL or file URL
15
+ text:
16
+ type: str
17
+ required: false
18
+ default: ""
19
+ description: Display text; defaults to the URL
20
+ cell:
21
+ type: str
22
+ required: false
23
+ default: A1
24
+ description: Cell address on the active sheet
25
+
26
+ pipeline:
27
+ - exec:
28
+ command: osascript
29
+ args:
30
+ - "-e"
31
+ - |
32
+ on replace_text(theText, searchString, replacementString)
33
+ set AppleScript's text item delimiters to searchString
34
+ set parts to text items of (theText as text)
35
+ set AppleScript's text item delimiters to replacementString
36
+ set outText to parts as text
37
+ set AppleScript's text item delimiters to ""
38
+ return outText
39
+ end replace_text
40
+
41
+ on json_string(valueText)
42
+ set s to valueText as text
43
+ set s to my replace_text(s, "\\", "\\\\")
44
+ set s to my replace_text(s, "\"", "\\\"")
45
+ set s to my replace_text(s, return, "\\n")
46
+ set s to my replace_text(s, linefeed, "\\n")
47
+ set s to my replace_text(s, tab, "\\t")
48
+ return "\"" & s & "\""
49
+ end json_string
50
+
51
+ on excel_string(valueText)
52
+ return my replace_text(valueText as text, "\"", "\"\"")
53
+ end excel_string
54
+
55
+ set linkUrl to system attribute "UNICLI_URL"
56
+ set linkText to system attribute "UNICLI_TEXT"
57
+ if linkText is "" then set linkText to linkUrl
58
+ set cellRef to system attribute "UNICLI_CELL"
59
+ if cellRef is "" then set cellRef to "A1"
60
+
61
+ try
62
+ with timeout of 10 seconds
63
+ tell application "Microsoft Excel"
64
+ activate
65
+ if (count workbooks) is 0 then make new workbook
66
+ set wb to active workbook
67
+ set sh to active sheet
68
+ set targetRange to range cellRef of sh
69
+ set formula of targetRange to "=HYPERLINK(\"" & my excel_string(linkUrl) & "\",\"" & my excel_string(linkText) & "\")"
70
+ return "[{\"workbook\":" & my json_string(name of wb as text) & ",\"sheet\":" & my json_string(name of sh as text) & ",\"cell\":" & my json_string(cellRef) & ",\"url\":" & my json_string(linkUrl) & ",\"text\":" & my json_string(linkText) & "}]"
71
+ end tell
72
+ end timeout
73
+ on error errMsg number errNum
74
+ return "[{\"ok\":false,\"code\":\"office_automation_unavailable\",\"message\":" & my json_string(errMsg) & ",\"number\":" & errNum & "}]"
75
+ end try
76
+ env:
77
+ UNICLI_URL: "${{ args.url }}"
78
+ UNICLI_TEXT: "${{ args.text }}"
79
+ UNICLI_CELL: "${{ args.cell }}"
80
+ parse: json
81
+ timeout: 15000
82
+
83
+ columns: [workbook, sheet, cell, url, text]
84
+
85
+ capabilities: ["subprocess.exec"]
86
+ minimum_capability: subprocess.exec
87
+ trust: user
88
+ confidentiality: private
89
+ quarantine: false
90
+ schema_version: v2
@@ -0,0 +1,63 @@
1
+ site: excel
2
+ name: list
3
+ description: List open Microsoft Excel workbooks
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ pipeline:
10
+ - exec:
11
+ command: osascript
12
+ args:
13
+ - "-e"
14
+ - |
15
+ on replace_text(theText, searchString, replacementString)
16
+ set AppleScript's text item delimiters to searchString
17
+ set parts to text items of (theText as text)
18
+ set AppleScript's text item delimiters to replacementString
19
+ set outText to parts as text
20
+ set AppleScript's text item delimiters to ""
21
+ return outText
22
+ end replace_text
23
+
24
+ on json_string(valueText)
25
+ set s to valueText as text
26
+ set s to my replace_text(s, "\\", "\\\\")
27
+ set s to my replace_text(s, "\"", "\\\"")
28
+ set s to my replace_text(s, return, "\\n")
29
+ set s to my replace_text(s, linefeed, "\\n")
30
+ set s to my replace_text(s, tab, "\\t")
31
+ return "\"" & s & "\""
32
+ end json_string
33
+
34
+ on json_bool(valueBool)
35
+ if valueBool then return "true"
36
+ return "false"
37
+ end json_bool
38
+
39
+ if not application "Microsoft Excel" is running then return "[]"
40
+
41
+ tell application "System Events"
42
+ tell process "Microsoft Excel"
43
+ set windowCount to count windows
44
+ set outText to "["
45
+ repeat with i from 1 to windowCount
46
+ set wbName to name of window i as text
47
+ if i > 1 then set outText to outText & ","
48
+ set outText to outText & "{\"index\":" & i & ",\"name\":" & my json_string(wbName) & ",\"path\":\"\",\"saved\":" & my json_bool(false) & ",\"source\":\"window\"}"
49
+ end repeat
50
+ end tell
51
+ return outText & "]"
52
+ end tell
53
+ parse: json
54
+ timeout: 30000
55
+
56
+ columns: [index, name, path, saved, source]
57
+
58
+ capabilities: ["subprocess.exec"]
59
+ minimum_capability: subprocess.exec
60
+ trust: user
61
+ confidentiality: private
62
+ quarantine: false
63
+ schema_version: v2
@@ -0,0 +1,74 @@
1
+ site: excel
2
+ name: read
3
+ description: Read a cell from the active Microsoft Excel workbook
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ cell:
11
+ type: str
12
+ required: false
13
+ default: A1
14
+ description: Cell address on the active sheet
15
+
16
+ pipeline:
17
+ - exec:
18
+ command: osascript
19
+ args:
20
+ - "-e"
21
+ - |
22
+ on replace_text(theText, searchString, replacementString)
23
+ set AppleScript's text item delimiters to searchString
24
+ set parts to text items of (theText as text)
25
+ set AppleScript's text item delimiters to replacementString
26
+ set outText to parts as text
27
+ set AppleScript's text item delimiters to ""
28
+ return outText
29
+ end replace_text
30
+
31
+ on json_string(valueText)
32
+ set s to valueText as text
33
+ set s to my replace_text(s, "\\", "\\\\")
34
+ set s to my replace_text(s, "\"", "\\\"")
35
+ set s to my replace_text(s, return, "\\n")
36
+ set s to my replace_text(s, linefeed, "\\n")
37
+ set s to my replace_text(s, tab, "\\t")
38
+ return "\"" & s & "\""
39
+ end json_string
40
+
41
+ set cellRef to system attribute "UNICLI_CELL"
42
+ if cellRef is "" then set cellRef to "A1"
43
+ if not application "Microsoft Excel" is running then return "[]"
44
+
45
+ try
46
+ with timeout of 10 seconds
47
+ tell application "Microsoft Excel"
48
+ if (count workbooks) is 0 then return "[]"
49
+ set wb to active workbook
50
+ set sh to active sheet
51
+ set cellValue to ""
52
+ try
53
+ set rawValue to value of range cellRef of sh
54
+ if rawValue is not missing value then set cellValue to rawValue as text
55
+ end try
56
+ return "[{\"workbook\":" & my json_string(name of wb as text) & ",\"sheet\":" & my json_string(name of sh as text) & ",\"cell\":" & my json_string(cellRef) & ",\"value\":" & my json_string(cellValue) & "}]"
57
+ end tell
58
+ end timeout
59
+ on error errMsg number errNum
60
+ return "[{\"ok\":false,\"code\":\"office_automation_unavailable\",\"message\":" & my json_string(errMsg) & ",\"number\":" & errNum & "}]"
61
+ end try
62
+ env:
63
+ UNICLI_CELL: "${{ args.cell }}"
64
+ parse: json
65
+ timeout: 30000
66
+
67
+ columns: [workbook, sheet, cell, value]
68
+
69
+ capabilities: ["subprocess.exec"]
70
+ minimum_capability: subprocess.exec
71
+ trust: user
72
+ confidentiality: private
73
+ quarantine: false
74
+ schema_version: v2
@@ -0,0 +1,77 @@
1
+ site: excel
2
+ name: set-cell
3
+ description: Set a cell value in the active Microsoft Excel workbook
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ value:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Value to write
15
+ cell:
16
+ type: str
17
+ required: false
18
+ default: A1
19
+ description: Cell address on the active sheet
20
+
21
+ pipeline:
22
+ - exec:
23
+ command: osascript
24
+ args:
25
+ - "-e"
26
+ - |
27
+ on replace_text(theText, searchString, replacementString)
28
+ set AppleScript's text item delimiters to searchString
29
+ set parts to text items of (theText as text)
30
+ set AppleScript's text item delimiters to replacementString
31
+ set outText to parts as text
32
+ set AppleScript's text item delimiters to ""
33
+ return outText
34
+ end replace_text
35
+
36
+ on json_string(valueText)
37
+ set s to valueText as text
38
+ set s to my replace_text(s, "\\", "\\\\")
39
+ set s to my replace_text(s, "\"", "\\\"")
40
+ set s to my replace_text(s, return, "\\n")
41
+ set s to my replace_text(s, linefeed, "\\n")
42
+ set s to my replace_text(s, tab, "\\t")
43
+ return "\"" & s & "\""
44
+ end json_string
45
+
46
+ set cellRef to system attribute "UNICLI_CELL"
47
+ if cellRef is "" then set cellRef to "A1"
48
+ set cellValue to system attribute "UNICLI_VALUE"
49
+
50
+ try
51
+ with timeout of 20 seconds
52
+ tell application "Microsoft Excel"
53
+ activate
54
+ if (count workbooks) is 0 then make new workbook
55
+ set wb to active workbook
56
+ set sh to active sheet
57
+ set value of range cellRef of sh to cellValue
58
+ return "[{\"workbook\":" & my json_string(name of wb as text) & ",\"sheet\":" & my json_string(name of sh as text) & ",\"cell\":" & my json_string(cellRef) & ",\"value\":" & my json_string(cellValue) & "}]"
59
+ end tell
60
+ end timeout
61
+ on error errMsg number errNum
62
+ return "[{\"ok\":false,\"code\":\"office_automation_unavailable\",\"message\":" & my json_string(errMsg) & ",\"number\":" & errNum & "}]"
63
+ end try
64
+ env:
65
+ UNICLI_CELL: "${{ args.cell }}"
66
+ UNICLI_VALUE: "${{ args.value }}"
67
+ parse: json
68
+ timeout: 30000
69
+
70
+ columns: [workbook, sheet, cell, value]
71
+
72
+ capabilities: ["subprocess.exec"]
73
+ minimum_capability: subprocess.exec
74
+ trust: user
75
+ confidentiality: private
76
+ quarantine: false
77
+ schema_version: v2
@@ -0,0 +1,87 @@
1
+ site: excel
2
+ name: set-font
3
+ description: Apply a font to a cell in the active Microsoft Excel workbook
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ args:
10
+ font:
11
+ type: str
12
+ required: true
13
+ positional: true
14
+ description: Font family to apply
15
+ size:
16
+ type: str
17
+ required: false
18
+ default: ""
19
+ description: Optional font size in points
20
+ cell:
21
+ type: str
22
+ required: false
23
+ default: A1
24
+ description: Cell address on the active sheet
25
+
26
+ pipeline:
27
+ - exec:
28
+ command: osascript
29
+ args:
30
+ - "-e"
31
+ - |
32
+ on replace_text(theText, searchString, replacementString)
33
+ set AppleScript's text item delimiters to searchString
34
+ set parts to text items of (theText as text)
35
+ set AppleScript's text item delimiters to replacementString
36
+ set outText to parts as text
37
+ set AppleScript's text item delimiters to ""
38
+ return outText
39
+ end replace_text
40
+
41
+ on json_string(valueText)
42
+ set s to valueText as text
43
+ set s to my replace_text(s, "\\", "\\\\")
44
+ set s to my replace_text(s, "\"", "\\\"")
45
+ set s to my replace_text(s, return, "\\n")
46
+ set s to my replace_text(s, linefeed, "\\n")
47
+ set s to my replace_text(s, tab, "\\t")
48
+ return "\"" & s & "\""
49
+ end json_string
50
+
51
+ set fontName to system attribute "UNICLI_FONT"
52
+ set sizeText to system attribute "UNICLI_SIZE"
53
+ set cellRef to system attribute "UNICLI_CELL"
54
+ if cellRef is "" then set cellRef to "A1"
55
+
56
+ try
57
+ with timeout of 10 seconds
58
+ tell application "Microsoft Excel"
59
+ activate
60
+ if (count workbooks) is 0 then make new workbook
61
+ set wb to active workbook
62
+ set sh to active sheet
63
+ set targetRange to range cellRef of sh
64
+ set f to font object of targetRange
65
+ set name of f to fontName
66
+ if sizeText is not "" then set font size of f to (sizeText as real)
67
+ return "[{\"workbook\":" & my json_string(name of wb as text) & ",\"sheet\":" & my json_string(name of sh as text) & ",\"cell\":" & my json_string(cellRef) & ",\"font\":" & my json_string(fontName) & ",\"size\":" & my json_string(sizeText) & "}]"
68
+ end tell
69
+ end timeout
70
+ on error errMsg number errNum
71
+ return "[{\"ok\":false,\"code\":\"office_automation_unavailable\",\"message\":" & my json_string(errMsg) & ",\"number\":" & errNum & "}]"
72
+ end try
73
+ env:
74
+ UNICLI_FONT: "${{ args.font }}"
75
+ UNICLI_SIZE: "${{ args.size }}"
76
+ UNICLI_CELL: "${{ args.cell }}"
77
+ parse: json
78
+ timeout: 15000
79
+
80
+ columns: [workbook, sheet, cell, font, size]
81
+
82
+ capabilities: ["subprocess.exec"]
83
+ minimum_capability: subprocess.exec
84
+ trust: user
85
+ confidentiality: private
86
+ quarantine: false
87
+ schema_version: v2
@@ -0,0 +1,29 @@
1
+ site: excel
2
+ name: status
3
+ description: Check Microsoft Excel running state without enumerating workbooks
4
+ type: desktop
5
+ strategy: public
6
+ binary: osascript
7
+ detect: "test $(uname) = Darwin"
8
+
9
+ pipeline:
10
+ - exec:
11
+ command: osascript
12
+ args:
13
+ - "-l"
14
+ - "JavaScript"
15
+ - "-e"
16
+ - |
17
+ var app = Application('Microsoft Excel');
18
+ JSON.stringify([{ app: 'Microsoft Excel', bundle_id: app.id(), running: app.running() }]);
19
+ parse: json
20
+ timeout: 10000
21
+
22
+ columns: [app, bundle_id, running]
23
+
24
+ capabilities: ["subprocess.exec"]
25
+ minimum_capability: subprocess.exec
26
+ trust: user
27
+ confidentiality: private
28
+ quarantine: false
29
+ schema_version: v2
@@ -0,0 +1,62 @@
1
+ site: gh
2
+ name: search-repos
3
+ description: Search GitHub repositories
4
+ type: bridge
5
+ strategy: public
6
+ binary: gh
7
+ detect: which gh
8
+
9
+ pipeline:
10
+ - exec:
11
+ command: gh
12
+ args:
13
+ - search
14
+ - repos
15
+ - ${{ args.query }}
16
+ - --limit
17
+ - ${{ args.limit }}
18
+ - --json
19
+ - fullName,description,stargazersCount,forksCount,language,url,updatedAt
20
+ - --sort
21
+ - ${{ args.sort }}
22
+ - --order
23
+ - ${{ args.order }}
24
+ - --language
25
+ - ${{ args.language }}
26
+ parse: json
27
+ timeout: 30000
28
+
29
+ args:
30
+ query:
31
+ type: str
32
+ required: true
33
+ positional: true
34
+ description: GitHub repository search query
35
+ limit:
36
+ type: int
37
+ default: 20
38
+ description: Maximum number of repositories to return
39
+ sort:
40
+ type: str
41
+ default: stars
42
+ choices: [stars, forks, updated, help-wanted-issues]
43
+ description: Sort returned repositories
44
+ order:
45
+ type: str
46
+ default: desc
47
+ choices: [asc, desc]
48
+ description: Sort direction
49
+ language:
50
+ type: str
51
+ default: ""
52
+ description: Optional language filter
53
+
54
+ columns:
55
+ [fullName, description, stargazersCount, forksCount, language, url, updatedAt]
56
+
57
+ capabilities: ["subprocess.exec"]
58
+ minimum_capability: subprocess.exec
59
+ trust: user
60
+ confidentiality: public
61
+ quarantine: false
62
+ schema_version: v2
@@ -0,0 +1,59 @@
1
+ import { cli, Strategy } from "../../registry.js";
2
+ import { str } from "../_shared/browser-tools.js";
3
+
4
+ function textBetween(html: string, pattern: RegExp): string {
5
+ return (pattern.exec(html)?.[1] ?? "")
6
+ .replace(/<[^>]+>/g, "")
7
+ .replace(/\s+/g, " ")
8
+ .trim();
9
+ }
10
+
11
+ cli({
12
+ site: "gitee",
13
+ name: "user",
14
+ description: "Show public Gitee user profile information",
15
+ domain: "gitee.com",
16
+ strategy: Strategy.PUBLIC,
17
+ args: [{ name: "username", type: "str", required: true, positional: true }],
18
+ columns: ["username", "name", "followers", "public_repos", "url"],
19
+ func: async (_page, kwargs) => {
20
+ const username = str(kwargs.username);
21
+ const response = await fetch(
22
+ `https://gitee.com/api/v5/users/${encodeURIComponent(username)}`,
23
+ );
24
+ if (response.ok) {
25
+ const data = (await response.json()) as Record<string, unknown>;
26
+ return [
27
+ {
28
+ username: data.login ?? username,
29
+ name: data.name ?? "",
30
+ followers: data.followers ?? 0,
31
+ public_repos: data.public_repos ?? 0,
32
+ url: data.html_url ?? `https://gitee.com/${username}`,
33
+ },
34
+ ];
35
+ }
36
+
37
+ const url = `https://gitee.com/${encodeURIComponent(username)}`;
38
+ const htmlResponse = await fetch(url, {
39
+ headers: { "user-agent": "Mozilla/5.0 (compatible; Uni-CLI)" },
40
+ });
41
+ if (!htmlResponse.ok) {
42
+ throw new Error(`Gitee user request failed: HTTP ${htmlResponse.status}`);
43
+ }
44
+ const html = await htmlResponse.text();
45
+ const name =
46
+ textBetween(html, /<title>(.*?)<\/title>/is).split(" - ")[0] || username;
47
+ const followers = textBetween(html, /关注者[^0-9]*(\d+)/i);
48
+ const repos = textBetween(html, /仓库[^0-9]*(\d+)/i);
49
+ return [
50
+ {
51
+ username,
52
+ name,
53
+ followers,
54
+ public_repos: repos,
55
+ url,
56
+ },
57
+ ];
58
+ },
59
+ });