@zenalexa/unicli 0.219.0 → 0.220.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/AGENTS.md +9 -9
  2. package/README.md +55 -249
  3. package/README.zh-CN.md +55 -249
  4. package/dist/adapters/1point3acres/forum.d.ts +58 -0
  5. package/dist/adapters/1point3acres/forum.d.ts.map +1 -0
  6. package/dist/adapters/1point3acres/forum.js +708 -0
  7. package/dist/adapters/1point3acres/forum.js.map +1 -0
  8. package/dist/adapters/aibase/news.d.ts +21 -0
  9. package/dist/adapters/aibase/news.d.ts.map +1 -0
  10. package/dist/adapters/aibase/news.js +96 -0
  11. package/dist/adapters/aibase/news.js.map +1 -0
  12. package/dist/adapters/arxiv/papers.d.ts +27 -0
  13. package/dist/adapters/arxiv/papers.d.ts.map +1 -0
  14. package/dist/adapters/arxiv/papers.js +193 -0
  15. package/dist/adapters/arxiv/papers.js.map +1 -0
  16. package/dist/adapters/bbc/topic.d.ts +24 -0
  17. package/dist/adapters/bbc/topic.d.ts.map +1 -0
  18. package/dist/adapters/bbc/topic.js +122 -0
  19. package/dist/adapters/bbc/topic.js.map +1 -0
  20. package/dist/adapters/chatgpt/web.d.ts +24 -0
  21. package/dist/adapters/chatgpt/web.d.ts.map +1 -0
  22. package/dist/adapters/chatgpt/web.js +242 -0
  23. package/dist/adapters/chatgpt/web.js.map +1 -0
  24. package/dist/adapters/claude/web.d.ts +24 -0
  25. package/dist/adapters/claude/web.d.ts.map +1 -0
  26. package/dist/adapters/claude/web.js +575 -0
  27. package/dist/adapters/claude/web.js.map +1 -0
  28. package/dist/adapters/codex/projects.d.ts +27 -0
  29. package/dist/adapters/codex/projects.d.ts.map +1 -0
  30. package/dist/adapters/codex/projects.js +147 -0
  31. package/dist/adapters/codex/projects.js.map +1 -0
  32. package/dist/adapters/coingecko/markets.d.ts +19 -0
  33. package/dist/adapters/coingecko/markets.d.ts.map +1 -0
  34. package/dist/adapters/coingecko/markets.js +474 -0
  35. package/dist/adapters/coingecko/markets.js.map +1 -0
  36. package/dist/adapters/coupang/product.d.ts +27 -0
  37. package/dist/adapters/coupang/product.d.ts.map +1 -0
  38. package/dist/adapters/coupang/product.js +211 -0
  39. package/dist/adapters/coupang/product.js.map +1 -0
  40. package/dist/adapters/crates/registry.d.ts +44 -0
  41. package/dist/adapters/crates/registry.d.ts.map +1 -0
  42. package/dist/adapters/crates/registry.js +186 -0
  43. package/dist/adapters/crates/registry.js.map +1 -0
  44. package/dist/adapters/ctrip/travel.d.ts +83 -0
  45. package/dist/adapters/ctrip/travel.d.ts.map +1 -0
  46. package/dist/adapters/ctrip/travel.js +630 -0
  47. package/dist/adapters/ctrip/travel.js.map +1 -0
  48. package/dist/adapters/dblp/publications.d.ts +41 -0
  49. package/dist/adapters/dblp/publications.d.ts.map +1 -0
  50. package/dist/adapters/dblp/publications.js +409 -0
  51. package/dist/adapters/dblp/publications.js.map +1 -0
  52. package/dist/adapters/deepseek/web.d.ts +1 -1
  53. package/dist/adapters/deepseek/web.d.ts.map +1 -1
  54. package/dist/adapters/deepseek/web.js +66 -1
  55. package/dist/adapters/deepseek/web.js.map +1 -1
  56. package/dist/adapters/defillama/protocols.d.ts +13 -0
  57. package/dist/adapters/defillama/protocols.d.ts.map +1 -0
  58. package/dist/adapters/defillama/protocols.js +218 -0
  59. package/dist/adapters/defillama/protocols.js.map +1 -0
  60. package/dist/adapters/devto/read.d.ts +26 -0
  61. package/dist/adapters/devto/read.d.ts.map +1 -0
  62. package/dist/adapters/devto/read.js +110 -0
  63. package/dist/adapters/devto/read.js.map +1 -0
  64. package/dist/adapters/dianping/shop.d.ts +38 -0
  65. package/dist/adapters/dianping/shop.d.ts.map +1 -0
  66. package/dist/adapters/dianping/shop.js +194 -0
  67. package/dist/adapters/dianping/shop.js.map +1 -0
  68. package/dist/adapters/dockerhub/registry.d.ts +36 -0
  69. package/dist/adapters/dockerhub/registry.d.ts.map +1 -0
  70. package/dist/adapters/dockerhub/registry.js +172 -0
  71. package/dist/adapters/dockerhub/registry.js.map +1 -0
  72. package/dist/adapters/endoflife/product.d.ts +11 -0
  73. package/dist/adapters/endoflife/product.d.ts.map +1 -0
  74. package/dist/adapters/endoflife/product.js +113 -0
  75. package/dist/adapters/endoflife/product.js.map +1 -0
  76. package/dist/adapters/facebook/marketplace-extra.d.ts +9 -0
  77. package/dist/adapters/facebook/marketplace-extra.d.ts.map +1 -0
  78. package/dist/adapters/facebook/marketplace-extra.js +170 -0
  79. package/dist/adapters/facebook/marketplace-extra.js.map +1 -0
  80. package/dist/adapters/flathub/apps.d.ts +17 -0
  81. package/dist/adapters/flathub/apps.d.ts.map +1 -0
  82. package/dist/adapters/flathub/apps.js +220 -0
  83. package/dist/adapters/flathub/apps.js.map +1 -0
  84. package/dist/adapters/goproxy/module.d.ts +24 -0
  85. package/dist/adapters/goproxy/module.d.ts.map +1 -0
  86. package/dist/adapters/goproxy/module.js +221 -0
  87. package/dist/adapters/goproxy/module.js.map +1 -0
  88. package/dist/adapters/grok/web.d.ts +29 -0
  89. package/dist/adapters/grok/web.d.ts.map +1 -0
  90. package/dist/adapters/grok/web.js +553 -0
  91. package/dist/adapters/grok/web.js.map +1 -0
  92. package/dist/adapters/hackernews/read.d.ts +31 -0
  93. package/dist/adapters/hackernews/read.d.ts.map +1 -0
  94. package/dist/adapters/hackernews/read.js +201 -0
  95. package/dist/adapters/hackernews/read.js.map +1 -0
  96. package/dist/adapters/hf/paper.d.ts +22 -0
  97. package/dist/adapters/hf/paper.d.ts.map +1 -0
  98. package/dist/adapters/hf/paper.js +112 -0
  99. package/dist/adapters/hf/paper.js.map +1 -0
  100. package/dist/adapters/homebrew/packages.d.ts +52 -0
  101. package/dist/adapters/homebrew/packages.d.ts.map +1 -0
  102. package/dist/adapters/homebrew/packages.js +240 -0
  103. package/dist/adapters/homebrew/packages.js.map +1 -0
  104. package/dist/adapters/indeed/jobs.d.ts +38 -0
  105. package/dist/adapters/indeed/jobs.d.ts.map +1 -0
  106. package/dist/adapters/indeed/jobs.js +300 -0
  107. package/dist/adapters/indeed/jobs.js.map +1 -0
  108. package/dist/adapters/instagram/collections.d.ts +9 -0
  109. package/dist/adapters/instagram/collections.d.ts.map +1 -0
  110. package/dist/adapters/instagram/collections.js +174 -0
  111. package/dist/adapters/instagram/collections.js.map +1 -0
  112. package/dist/adapters/lichess/players.d.ts +46 -0
  113. package/dist/adapters/lichess/players.d.ts.map +1 -0
  114. package/dist/adapters/lichess/players.js +221 -0
  115. package/dist/adapters/lichess/players.js.map +1 -0
  116. package/dist/adapters/lobsters/read-domain.d.ts +35 -0
  117. package/dist/adapters/lobsters/read-domain.d.ts.map +1 -0
  118. package/dist/adapters/lobsters/read-domain.js +306 -0
  119. package/dist/adapters/lobsters/read-domain.js.map +1 -0
  120. package/dist/adapters/maven/artifact.d.ts +30 -0
  121. package/dist/adapters/maven/artifact.d.ts.map +1 -0
  122. package/dist/adapters/maven/artifact.js +121 -0
  123. package/dist/adapters/maven/artifact.js.map +1 -0
  124. package/dist/adapters/mdn/search.d.ts +11 -0
  125. package/dist/adapters/mdn/search.d.ts.map +1 -0
  126. package/dist/adapters/mdn/search.js +115 -0
  127. package/dist/adapters/mdn/search.js.map +1 -0
  128. package/dist/adapters/medium/tag.d.ts +15 -0
  129. package/dist/adapters/medium/tag.d.ts.map +1 -0
  130. package/dist/adapters/medium/tag.js +148 -0
  131. package/dist/adapters/medium/tag.js.map +1 -0
  132. package/dist/adapters/npm/package.d.ts +32 -0
  133. package/dist/adapters/npm/package.d.ts.map +1 -0
  134. package/dist/adapters/npm/package.js +141 -0
  135. package/dist/adapters/npm/package.js.map +1 -0
  136. package/dist/adapters/nuget/package.d.ts +34 -0
  137. package/dist/adapters/nuget/package.d.ts.map +1 -0
  138. package/dist/adapters/nuget/package.js +135 -0
  139. package/dist/adapters/nuget/package.js.map +1 -0
  140. package/dist/adapters/nvd/cve.d.ts +42 -0
  141. package/dist/adapters/nvd/cve.d.ts.map +1 -0
  142. package/dist/adapters/nvd/cve.js +132 -0
  143. package/dist/adapters/nvd/cve.js.map +1 -0
  144. package/dist/adapters/oeis/sequences.d.ts +14 -0
  145. package/dist/adapters/oeis/sequences.d.ts.map +1 -0
  146. package/dist/adapters/oeis/sequences.js +219 -0
  147. package/dist/adapters/oeis/sequences.js.map +1 -0
  148. package/dist/adapters/openalex/works.d.ts +43 -0
  149. package/dist/adapters/openalex/works.d.ts.map +1 -0
  150. package/dist/adapters/openalex/works.js +267 -0
  151. package/dist/adapters/openalex/works.js.map +1 -0
  152. package/dist/adapters/openfda/records.d.ts +18 -0
  153. package/dist/adapters/openfda/records.d.ts.map +1 -0
  154. package/dist/adapters/openfda/records.js +209 -0
  155. package/dist/adapters/openfda/records.js.map +1 -0
  156. package/dist/adapters/openreview/papers.d.ts +34 -0
  157. package/dist/adapters/openreview/papers.d.ts.map +1 -0
  158. package/dist/adapters/openreview/papers.js +463 -0
  159. package/dist/adapters/openreview/papers.js.map +1 -0
  160. package/dist/adapters/osv/security.d.ts +36 -0
  161. package/dist/adapters/osv/security.d.ts.map +1 -0
  162. package/dist/adapters/osv/security.js +247 -0
  163. package/dist/adapters/osv/security.js.map +1 -0
  164. package/dist/adapters/packagist/package.d.ts +31 -0
  165. package/dist/adapters/packagist/package.d.ts.map +1 -0
  166. package/dist/adapters/packagist/package.js +108 -0
  167. package/dist/adapters/packagist/package.js.map +1 -0
  168. package/dist/adapters/pubmed/articles.d.ts +31 -0
  169. package/dist/adapters/pubmed/articles.d.ts.map +1 -0
  170. package/dist/adapters/pubmed/articles.js +385 -0
  171. package/dist/adapters/pubmed/articles.js.map +1 -0
  172. package/dist/adapters/pypi/package.d.ts +38 -0
  173. package/dist/adapters/pypi/package.d.ts.map +1 -0
  174. package/dist/adapters/pypi/package.js +235 -0
  175. package/dist/adapters/pypi/package.js.map +1 -0
  176. package/dist/adapters/qwen/web.d.ts +26 -0
  177. package/dist/adapters/qwen/web.d.ts.map +1 -0
  178. package/dist/adapters/qwen/web.js +672 -0
  179. package/dist/adapters/qwen/web.js.map +1 -0
  180. package/dist/adapters/reddit/account.d.ts +12 -0
  181. package/dist/adapters/reddit/account.d.ts.map +1 -0
  182. package/dist/adapters/reddit/account.js +409 -0
  183. package/dist/adapters/reddit/account.js.map +1 -0
  184. package/dist/adapters/rednote/web.d.ts +30 -0
  185. package/dist/adapters/rednote/web.d.ts.map +1 -0
  186. package/dist/adapters/rednote/web.js +858 -0
  187. package/dist/adapters/rednote/web.js.map +1 -0
  188. package/dist/adapters/rest-countries/countries.d.ts +14 -0
  189. package/dist/adapters/rest-countries/countries.d.ts.map +1 -0
  190. package/dist/adapters/rest-countries/countries.js +231 -0
  191. package/dist/adapters/rest-countries/countries.js.map +1 -0
  192. package/dist/adapters/reuters/article-detail.d.ts +37 -0
  193. package/dist/adapters/reuters/article-detail.d.ts.map +1 -0
  194. package/dist/adapters/reuters/article-detail.js +139 -0
  195. package/dist/adapters/reuters/article-detail.js.map +1 -0
  196. package/dist/adapters/rfc/rfc.d.ts +11 -0
  197. package/dist/adapters/rfc/rfc.d.ts.map +1 -0
  198. package/dist/adapters/rfc/rfc.js +121 -0
  199. package/dist/adapters/rfc/rfc.js.map +1 -0
  200. package/dist/adapters/rubygems/gem.d.ts +26 -0
  201. package/dist/adapters/rubygems/gem.d.ts.map +1 -0
  202. package/dist/adapters/rubygems/gem.js +96 -0
  203. package/dist/adapters/rubygems/gem.js.map +1 -0
  204. package/dist/adapters/stackoverflow/questions.d.ts +79 -0
  205. package/dist/adapters/stackoverflow/questions.d.ts.map +1 -0
  206. package/dist/adapters/stackoverflow/questions.js +504 -0
  207. package/dist/adapters/stackoverflow/questions.js.map +1 -0
  208. package/dist/adapters/steam/app.d.ts +39 -0
  209. package/dist/adapters/steam/app.d.ts.map +1 -0
  210. package/dist/adapters/steam/app.js +165 -0
  211. package/dist/adapters/steam/app.js.map +1 -0
  212. package/dist/adapters/tiktok/creator-videos.d.ts +52 -0
  213. package/dist/adapters/tiktok/creator-videos.d.ts.map +1 -0
  214. package/dist/adapters/tiktok/creator-videos.js +267 -0
  215. package/dist/adapters/tiktok/creator-videos.js.map +1 -0
  216. package/dist/adapters/tvmaze/shows.d.ts +13 -0
  217. package/dist/adapters/tvmaze/shows.d.ts.map +1 -0
  218. package/dist/adapters/tvmaze/shows.js +240 -0
  219. package/dist/adapters/tvmaze/shows.js.map +1 -0
  220. package/dist/adapters/twitter/bookmark-folders.d.ts +33 -0
  221. package/dist/adapters/twitter/bookmark-folders.d.ts.map +1 -0
  222. package/dist/adapters/twitter/bookmark-folders.js +290 -0
  223. package/dist/adapters/twitter/bookmark-folders.js.map +1 -0
  224. package/dist/adapters/twitter/quote.d.ts +18 -0
  225. package/dist/adapters/twitter/quote.d.ts.map +1 -0
  226. package/dist/adapters/twitter/quote.js +285 -0
  227. package/dist/adapters/twitter/quote.js.map +1 -0
  228. package/dist/adapters/twitter/tweet-actions.d.ts +12 -0
  229. package/dist/adapters/twitter/tweet-actions.d.ts.map +1 -0
  230. package/dist/adapters/twitter/tweet-actions.js +145 -0
  231. package/dist/adapters/twitter/tweet-actions.js.map +1 -0
  232. package/dist/adapters/twitter/tweet-url.d.ts +15 -0
  233. package/dist/adapters/twitter/tweet-url.d.ts.map +1 -0
  234. package/dist/adapters/twitter/tweet-url.js +57 -0
  235. package/dist/adapters/twitter/tweet-url.js.map +1 -0
  236. package/dist/adapters/uisdc/news.d.ts +22 -0
  237. package/dist/adapters/uisdc/news.d.ts.map +1 -0
  238. package/dist/adapters/uisdc/news.js +91 -0
  239. package/dist/adapters/uisdc/news.js.map +1 -0
  240. package/dist/adapters/weibo/favorites-publish.d.ts +28 -0
  241. package/dist/adapters/weibo/favorites-publish.d.ts.map +1 -0
  242. package/dist/adapters/weibo/favorites-publish.js +356 -0
  243. package/dist/adapters/weibo/favorites-publish.js.map +1 -0
  244. package/dist/adapters/wikidata/entities.d.ts +15 -0
  245. package/dist/adapters/wikidata/entities.d.ts.map +1 -0
  246. package/dist/adapters/wikidata/entities.js +219 -0
  247. package/dist/adapters/wikidata/entities.js.map +1 -0
  248. package/dist/adapters/wikipedia/page.d.ts +21 -0
  249. package/dist/adapters/wikipedia/page.d.ts.map +1 -0
  250. package/dist/adapters/wikipedia/page.js +116 -0
  251. package/dist/adapters/wikipedia/page.js.map +1 -0
  252. package/dist/adapters/wttr/weather.d.ts +12 -0
  253. package/dist/adapters/wttr/weather.d.ts.map +1 -0
  254. package/dist/adapters/wttr/weather.js +207 -0
  255. package/dist/adapters/wttr/weather.js.map +1 -0
  256. package/dist/adapters/xianyu/publish.d.ts +31 -0
  257. package/dist/adapters/xianyu/publish.d.ts.map +1 -0
  258. package/dist/adapters/xianyu/publish.js +349 -0
  259. package/dist/adapters/xianyu/publish.js.map +1 -0
  260. package/dist/adapters/xiaohongshu/user-helpers.d.ts +2 -2
  261. package/dist/adapters/xiaohongshu/user-helpers.d.ts.map +1 -1
  262. package/dist/adapters/xiaohongshu/user-helpers.js +5 -4
  263. package/dist/adapters/xiaohongshu/user-helpers.js.map +1 -1
  264. package/dist/adapters/yuanbao/web.d.ts +27 -0
  265. package/dist/adapters/yuanbao/web.d.ts.map +1 -0
  266. package/dist/adapters/yuanbao/web.js +365 -0
  267. package/dist/adapters/yuanbao/web.js.map +1 -0
  268. package/dist/adapters/zhihu/collection.d.ts +33 -0
  269. package/dist/adapters/zhihu/collection.d.ts.map +1 -0
  270. package/dist/adapters/zhihu/collection.js +185 -0
  271. package/dist/adapters/zhihu/collection.js.map +1 -0
  272. package/dist/adapters/zlibrary/web.d.ts +19 -0
  273. package/dist/adapters/zlibrary/web.d.ts.map +1 -0
  274. package/dist/adapters/zlibrary/web.js +153 -0
  275. package/dist/adapters/zlibrary/web.js.map +1 -0
  276. package/dist/browser/daemon-client.js +2 -2
  277. package/dist/browser/daemon-client.js.map +1 -1
  278. package/dist/discovery/macos-dynamic.d.ts.map +1 -1
  279. package/dist/discovery/macos-dynamic.js +17 -3
  280. package/dist/discovery/macos-dynamic.js.map +1 -1
  281. package/dist/manifest-compact.txt +10 -10
  282. package/dist/manifest-search.json +1 -1
  283. package/dist/manifest.json +5130 -112
  284. package/dist/transport/refs.d.ts +5 -3
  285. package/dist/transport/refs.d.ts.map +1 -1
  286. package/dist/transport/refs.js +8 -1
  287. package/dist/transport/refs.js.map +1 -1
  288. package/dist/transport/sidecar-binary.d.ts +7 -0
  289. package/dist/transport/sidecar-binary.d.ts.map +1 -1
  290. package/dist/transport/sidecar-binary.js +28 -8
  291. package/dist/transport/sidecar-binary.js.map +1 -1
  292. package/package.json +4 -3
  293. package/server.json +3 -3
  294. package/skills/unicli/SKILL.md +1 -1
  295. package/skills/unicli-claude-code/SKILL.md +1 -1
  296. package/skills/unicli-hermes/SKILL.md +1 -1
  297. package/src/adapters/1point3acres/forum.test.ts +300 -0
  298. package/src/adapters/1point3acres/forum.ts +852 -0
  299. package/src/adapters/aibase/news.test.ts +42 -0
  300. package/src/adapters/aibase/news.ts +118 -0
  301. package/src/adapters/arxiv/papers.test.ts +59 -0
  302. package/src/adapters/arxiv/papers.ts +226 -0
  303. package/src/adapters/bbc/topic.test.ts +52 -0
  304. package/src/adapters/bbc/topic.ts +149 -0
  305. package/src/adapters/chatgpt/web.test.ts +121 -0
  306. package/src/adapters/chatgpt/web.ts +286 -0
  307. package/src/adapters/claude/web.test.ts +206 -0
  308. package/src/adapters/claude/web.ts +684 -0
  309. package/src/adapters/codex/projects.test.ts +77 -0
  310. package/src/adapters/codex/projects.ts +178 -0
  311. package/src/adapters/coingecko/markets.test.ts +156 -0
  312. package/src/adapters/coingecko/markets.ts +574 -0
  313. package/src/adapters/coupang/product.test.ts +111 -0
  314. package/src/adapters/coupang/product.ts +256 -0
  315. package/src/adapters/crates/registry.test.ts +89 -0
  316. package/src/adapters/crates/registry.ts +247 -0
  317. package/src/adapters/ctrip/travel.test.ts +359 -0
  318. package/src/adapters/ctrip/travel.ts +792 -0
  319. package/src/adapters/dblp/publications.test.ts +123 -0
  320. package/src/adapters/dblp/publications.ts +494 -0
  321. package/src/adapters/deepseek/web.test.ts +69 -0
  322. package/src/adapters/deepseek/web.ts +78 -1
  323. package/src/adapters/defillama/protocols.test.ts +75 -0
  324. package/src/adapters/defillama/protocols.ts +253 -0
  325. package/src/adapters/devto/read.test.ts +49 -0
  326. package/src/adapters/devto/read.ts +145 -0
  327. package/src/adapters/dianping/shop.test.ts +134 -0
  328. package/src/adapters/dianping/shop.ts +261 -0
  329. package/src/adapters/dockerhub/registry.test.ts +97 -0
  330. package/src/adapters/dockerhub/registry.ts +223 -0
  331. package/src/adapters/endoflife/product.test.ts +50 -0
  332. package/src/adapters/endoflife/product.ts +128 -0
  333. package/src/adapters/facebook/marketplace-extra.test.ts +132 -0
  334. package/src/adapters/facebook/marketplace-extra.ts +213 -0
  335. package/src/adapters/flathub/apps.test.ts +85 -0
  336. package/src/adapters/flathub/apps.ts +254 -0
  337. package/src/adapters/goproxy/module.test.ts +72 -0
  338. package/src/adapters/goproxy/module.ts +258 -0
  339. package/src/adapters/grok/web.test.ts +181 -0
  340. package/src/adapters/grok/web.ts +640 -0
  341. package/src/adapters/hackernews/read.test.ts +68 -0
  342. package/src/adapters/hackernews/read.ts +265 -0
  343. package/src/adapters/hf/paper.test.ts +48 -0
  344. package/src/adapters/hf/paper.ts +138 -0
  345. package/src/adapters/homebrew/packages.test.ts +109 -0
  346. package/src/adapters/homebrew/packages.ts +304 -0
  347. package/src/adapters/indeed/jobs.test.ts +230 -0
  348. package/src/adapters/indeed/jobs.ts +375 -0
  349. package/src/adapters/instagram/collections.test.ts +94 -0
  350. package/src/adapters/instagram/collections.ts +206 -0
  351. package/src/adapters/lichess/players.test.ts +99 -0
  352. package/src/adapters/lichess/players.ts +277 -0
  353. package/src/adapters/lobsters/read-domain.test.ts +121 -0
  354. package/src/adapters/lobsters/read-domain.ts +400 -0
  355. package/src/adapters/maven/artifact.test.ts +67 -0
  356. package/src/adapters/maven/artifact.ts +155 -0
  357. package/src/adapters/mdn/search.test.ts +39 -0
  358. package/src/adapters/mdn/search.ts +133 -0
  359. package/src/adapters/medium/tag.test.ts +64 -0
  360. package/src/adapters/medium/tag.ts +164 -0
  361. package/src/adapters/npm/package.test.ts +53 -0
  362. package/src/adapters/npm/package.ts +177 -0
  363. package/src/adapters/nuget/package.test.ts +102 -0
  364. package/src/adapters/nuget/package.ts +193 -0
  365. package/src/adapters/nvd/cve.test.ts +66 -0
  366. package/src/adapters/nvd/cve.ts +182 -0
  367. package/src/adapters/oeis/sequences.test.ts +71 -0
  368. package/src/adapters/oeis/sequences.ts +234 -0
  369. package/src/adapters/openalex/works.test.ts +99 -0
  370. package/src/adapters/openalex/works.ts +319 -0
  371. package/src/adapters/openfda/records.test.ts +90 -0
  372. package/src/adapters/openfda/records.ts +239 -0
  373. package/src/adapters/openreview/papers.test.ts +139 -0
  374. package/src/adapters/openreview/papers.ts +560 -0
  375. package/src/adapters/osv/security.test.ts +91 -0
  376. package/src/adapters/osv/security.ts +298 -0
  377. package/src/adapters/packagist/package.test.ts +62 -0
  378. package/src/adapters/packagist/package.ts +146 -0
  379. package/src/adapters/pubmed/articles.test.ts +96 -0
  380. package/src/adapters/pubmed/articles.ts +497 -0
  381. package/src/adapters/pypi/package.test.ts +131 -0
  382. package/src/adapters/pypi/package.ts +297 -0
  383. package/src/adapters/qwen/web.test.ts +176 -0
  384. package/src/adapters/qwen/web.ts +758 -0
  385. package/src/adapters/reddit/account.test.ts +56 -0
  386. package/src/adapters/reddit/account.ts +493 -0
  387. package/src/adapters/rednote/web.test.ts +354 -0
  388. package/src/adapters/rednote/web.ts +968 -0
  389. package/src/adapters/rest-countries/countries.test.ts +80 -0
  390. package/src/adapters/rest-countries/countries.ts +271 -0
  391. package/src/adapters/reuters/article-detail.test.ts +65 -0
  392. package/src/adapters/reuters/article-detail.ts +186 -0
  393. package/src/adapters/rfc/rfc.test.ts +37 -0
  394. package/src/adapters/rfc/rfc.ts +133 -0
  395. package/src/adapters/rubygems/gem.test.ts +43 -0
  396. package/src/adapters/rubygems/gem.ts +126 -0
  397. package/src/adapters/stackoverflow/questions.test.ts +207 -0
  398. package/src/adapters/stackoverflow/questions.ts +765 -0
  399. package/src/adapters/steam/app.test.ts +68 -0
  400. package/src/adapters/steam/app.ts +218 -0
  401. package/src/adapters/tiktok/creator-videos.test.ts +158 -0
  402. package/src/adapters/tiktok/creator-videos.ts +370 -0
  403. package/src/adapters/tvmaze/shows.test.ts +93 -0
  404. package/src/adapters/tvmaze/shows.ts +271 -0
  405. package/src/adapters/twitter/bookmark-folders.test.ts +164 -0
  406. package/src/adapters/twitter/bookmark-folders.ts +366 -0
  407. package/src/adapters/twitter/quote.test.ts +157 -0
  408. package/src/adapters/twitter/quote.ts +332 -0
  409. package/src/adapters/twitter/tweet-actions.test.ts +51 -0
  410. package/src/adapters/twitter/tweet-actions.ts +187 -0
  411. package/src/adapters/twitter/tweet-url.ts +65 -0
  412. package/src/adapters/uisdc/news.test.ts +46 -0
  413. package/src/adapters/uisdc/news.ts +111 -0
  414. package/src/adapters/weibo/favorites-publish.test.ts +177 -0
  415. package/src/adapters/weibo/favorites-publish.ts +426 -0
  416. package/src/adapters/wikidata/entities.test.ts +103 -0
  417. package/src/adapters/wikidata/entities.ts +253 -0
  418. package/src/adapters/wikipedia/page.test.ts +49 -0
  419. package/src/adapters/wikipedia/page.ts +158 -0
  420. package/src/adapters/wttr/weather.test.ts +99 -0
  421. package/src/adapters/wttr/weather.ts +239 -0
  422. package/src/adapters/xianyu/publish.test.ts +210 -0
  423. package/src/adapters/xianyu/publish.ts +420 -0
  424. package/src/adapters/xiaohongshu/user-helpers.ts +5 -2
  425. package/src/adapters/yuanbao/web.test.ts +144 -0
  426. package/src/adapters/yuanbao/web.ts +435 -0
  427. package/src/adapters/zhihu/collection.test.ts +96 -0
  428. package/src/adapters/zhihu/collection.ts +239 -0
  429. package/src/adapters/zlibrary/web.test.ts +104 -0
  430. package/src/adapters/zlibrary/web.ts +192 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/adapters/dockerhub/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,UAAU,mBAAmB;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAUD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAQA;AAmBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBhC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * @owner src/adapters/dockerhub/registry.ts
3
+ * @does Register agent-facing Docker Hub search and image metadata commands.
4
+ * @needs Public Docker Hub API, TypeScript adapter loader, bounded argument parsing.
5
+ * @feeds surface coverage ledger, container registry command surface, agent-readable image rows.
6
+ * @breaks Docker Hub API envelope drift, weak image parsing, or silent empty results hide registry lookup failures.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ const HUB_BASE = "https://hub.docker.com/v2";
10
+ function stringField(value) {
11
+ return typeof value === "string" ? value : "";
12
+ }
13
+ function numberField(value) {
14
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
15
+ }
16
+ export function requireDockerHubString(value, name) {
17
+ const text = String(value ?? "").trim();
18
+ if (!text)
19
+ throw new Error(`${name} is required.`);
20
+ return text;
21
+ }
22
+ export function requireDockerHubLimit(value, fallback) {
23
+ if (value === undefined || value === null || value === "")
24
+ return fallback;
25
+ const n = Number(value);
26
+ if (!Number.isInteger(n) || n < 1 || n > 100) {
27
+ throw new Error(`limit must be an integer in [1, 100]. Got: ${String(value)}`);
28
+ }
29
+ return n;
30
+ }
31
+ export function parseDockerHubImage(value) {
32
+ const raw = requireDockerHubString(value, "image");
33
+ const parts = raw.split("/").filter(Boolean);
34
+ if (parts.length === 1)
35
+ return { owner: "library", name: parts[0] };
36
+ if (parts.length === 2)
37
+ return { owner: parts[0], name: parts[1] };
38
+ throw new Error("image must be a Docker Hub image name like nginx or bitnami/redis.");
39
+ }
40
+ function trimDate(value) {
41
+ const text = stringField(value).trim();
42
+ if (!text)
43
+ return null;
44
+ const noFraction = text.replace(/\.\d+/, "");
45
+ return noFraction.endsWith("Z") ? noFraction : `${noFraction}Z`;
46
+ }
47
+ async function fetchDockerHubJson(url) {
48
+ const response = await fetch(url, {
49
+ headers: { Accept: "application/json" },
50
+ });
51
+ if (!response.ok) {
52
+ throw new Error(`Docker Hub request failed: HTTP ${response.status}`);
53
+ }
54
+ return response.json();
55
+ }
56
+ export function mapDockerHubSearchRows(items, limit) {
57
+ return items.slice(0, limit).map((item, index) => {
58
+ const owner = stringField(item.repo_owner).trim();
59
+ const name = stringField(item.repo_name).trim();
60
+ const official = Boolean(item.is_official);
61
+ const image = owner
62
+ ? `${owner}/${name}`
63
+ : official
64
+ ? `library/${name}`
65
+ : name;
66
+ return {
67
+ rank: index + 1,
68
+ image,
69
+ official,
70
+ stars: numberField(item.star_count),
71
+ pulls: numberField(item.pull_count),
72
+ description: stringField(item.short_description).trim(),
73
+ url: image ? `https://hub.docker.com/r/${image}` : "",
74
+ };
75
+ });
76
+ }
77
+ export function mapDockerHubImageRow(body, fallbackOwner, fallbackName) {
78
+ const namespace = stringField(body.namespace).trim() || fallbackOwner;
79
+ const name = stringField(body.name).trim() || fallbackName;
80
+ if (!name)
81
+ throw new Error("Docker Hub returned no image metadata.");
82
+ const official = namespace === "library" || namespace === "_";
83
+ const image = official ? `library/${name}` : `${namespace}/${name}`;
84
+ return {
85
+ image,
86
+ official,
87
+ stars: numberField(body.star_count),
88
+ pulls: numberField(body.pull_count),
89
+ description: stringField(body.description).trim(),
90
+ lastUpdated: trimDate(body.last_updated),
91
+ lastModified: trimDate(body.last_modified),
92
+ registered: trimDate(body.date_registered),
93
+ status: stringField(body.status_description).trim(),
94
+ url: `https://hub.docker.com/r/${image}`,
95
+ };
96
+ }
97
+ cli({
98
+ site: "dockerhub",
99
+ name: "search",
100
+ description: "Search Docker Hub repositories by keyword",
101
+ domain: "hub.docker.com",
102
+ strategy: Strategy.PUBLIC,
103
+ args: [
104
+ {
105
+ name: "query",
106
+ type: "str",
107
+ required: true,
108
+ positional: true,
109
+ description: "Search keyword",
110
+ },
111
+ {
112
+ name: "limit",
113
+ type: "int",
114
+ default: 25,
115
+ description: "Max repositories",
116
+ },
117
+ ],
118
+ columns: [
119
+ "rank",
120
+ "image",
121
+ "official",
122
+ "stars",
123
+ "pulls",
124
+ "description",
125
+ "url",
126
+ ],
127
+ func: async (_page, kwargs) => {
128
+ const query = requireDockerHubString(kwargs.query, "query");
129
+ const limit = requireDockerHubLimit(kwargs.limit, 25);
130
+ const url = `${HUB_BASE}/search/repositories/?query=${encodeURIComponent(query)}&page_size=${limit}`;
131
+ const body = (await fetchDockerHubJson(url));
132
+ const rows = mapDockerHubSearchRows(Array.isArray(body.results) ? body.results : [], limit);
133
+ if (rows.length === 0) {
134
+ throw new Error(`No Docker Hub repositories matched "${query}".`);
135
+ }
136
+ return rows;
137
+ },
138
+ });
139
+ cli({
140
+ site: "dockerhub",
141
+ name: "image",
142
+ description: "Fetch a Docker Hub repository's public metadata",
143
+ domain: "hub.docker.com",
144
+ strategy: Strategy.PUBLIC,
145
+ args: [
146
+ {
147
+ name: "image",
148
+ type: "str",
149
+ required: true,
150
+ positional: true,
151
+ description: "Image name, e.g. nginx or bitnami/redis",
152
+ },
153
+ ],
154
+ columns: [
155
+ "image",
156
+ "official",
157
+ "stars",
158
+ "pulls",
159
+ "description",
160
+ "lastUpdated",
161
+ "lastModified",
162
+ "registered",
163
+ "status",
164
+ "url",
165
+ ],
166
+ func: async (_page, kwargs) => {
167
+ const { owner, name } = parseDockerHubImage(kwargs.image);
168
+ const body = (await fetchDockerHubJson(`${HUB_BASE}/repositories/${encodeURIComponent(owner)}/${encodeURIComponent(name)}/`));
169
+ return [mapDockerHubImageRow(body, owner, name)];
170
+ },
171
+ });
172
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/dockerhub/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @owner src/adapters/endoflife/product.ts
3
+ * @does Register agent-facing endoflife.date product lifecycle command.
4
+ * @needs endoflife.date public API, product slug validation, date/flag normalization.
5
+ * @feeds surface coverage ledger, product support lifecycle rows, version planning data.
6
+ * @breaks endoflife.date API drift, weak slug validation, or silent empty rows hide lifecycle data failures.
7
+ */
8
+ export declare function requireEndoflifeProduct(value: unknown): string;
9
+ export declare function normalizeEndoflifeDateOrFlag(value: unknown): string | null;
10
+ export declare function mapEndoflifeRows(product: string, cycles: Array<Record<string, unknown>>, today: string): Array<Record<string, unknown>>;
11
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../../src/adapters/endoflife/product.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW9D;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM1E;AAMD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBhC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @owner src/adapters/endoflife/product.ts
3
+ * @does Register agent-facing endoflife.date product lifecycle command.
4
+ * @needs endoflife.date public API, product slug validation, date/flag normalization.
5
+ * @feeds surface coverage ledger, product support lifecycle rows, version planning data.
6
+ * @breaks endoflife.date API drift, weak slug validation, or silent empty rows hide lifecycle data failures.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ const API_BASE = "https://endoflife.date/api";
10
+ const PRODUCT_RE = /^[a-z0-9][a-z0-9._-]{0,79}$/;
11
+ export function requireEndoflifeProduct(value) {
12
+ const product = String(value ?? "")
13
+ .trim()
14
+ .toLowerCase();
15
+ if (!product)
16
+ throw new Error("endoflife product cannot be empty.");
17
+ if (!PRODUCT_RE.test(product)) {
18
+ throw new Error(`endoflife product "${String(value)}" is not a valid slug.`);
19
+ }
20
+ return product;
21
+ }
22
+ export function normalizeEndoflifeDateOrFlag(value) {
23
+ if (value === true)
24
+ return "ongoing";
25
+ if (value === false || value == null)
26
+ return null;
27
+ if (typeof value !== "string")
28
+ return null;
29
+ const text = value.trim();
30
+ return text || null;
31
+ }
32
+ function stringField(value) {
33
+ return typeof value === "string" ? value.trim() : "";
34
+ }
35
+ export function mapEndoflifeRows(product, cycles, today) {
36
+ return cycles.map((cycle) => {
37
+ const eol = normalizeEndoflifeDateOrFlag(cycle.eol);
38
+ const eolStatus = eol === "ongoing"
39
+ ? "ongoing"
40
+ : typeof eol === "string" && eol >= today
41
+ ? "active"
42
+ : typeof eol === "string"
43
+ ? "eol"
44
+ : null;
45
+ return {
46
+ product,
47
+ cycle: stringField(cycle.cycle),
48
+ releaseDate: stringField(cycle.releaseDate),
49
+ latest: stringField(cycle.latest),
50
+ latestReleaseDate: stringField(cycle.latestReleaseDate),
51
+ lts: normalizeEndoflifeDateOrFlag(cycle.lts),
52
+ support: normalizeEndoflifeDateOrFlag(cycle.support),
53
+ eol,
54
+ extendedSupport: normalizeEndoflifeDateOrFlag(cycle.extendedSupport),
55
+ eolStatus,
56
+ url: `https://endoflife.date/${product}`,
57
+ };
58
+ });
59
+ }
60
+ async function fetchJson(url, label) {
61
+ const response = await fetch(url, {
62
+ headers: {
63
+ accept: "application/json",
64
+ "user-agent": "unicli-endoflife (https://github.com/olo-dot-io/Uni-CLI)",
65
+ },
66
+ });
67
+ if (response.status === 404)
68
+ throw new Error(`${label} returned no result.`);
69
+ if (response.status === 429)
70
+ throw new Error(`${label} returned HTTP 429.`);
71
+ if (!response.ok)
72
+ throw new Error(`${label} returned HTTP ${response.status}.`);
73
+ return response.json();
74
+ }
75
+ cli({
76
+ site: "endoflife",
77
+ name: "product",
78
+ description: "Release cycles and support dates for an endoflife.date product",
79
+ domain: "endoflife.date",
80
+ strategy: Strategy.PUBLIC,
81
+ args: [
82
+ {
83
+ name: "product",
84
+ type: "str",
85
+ required: true,
86
+ positional: true,
87
+ description: "endoflife.date product slug",
88
+ },
89
+ ],
90
+ columns: [
91
+ "product",
92
+ "cycle",
93
+ "releaseDate",
94
+ "latest",
95
+ "latestReleaseDate",
96
+ "lts",
97
+ "support",
98
+ "eol",
99
+ "extendedSupport",
100
+ "eolStatus",
101
+ "url",
102
+ ],
103
+ func: async (_page, kwargs) => {
104
+ const product = requireEndoflifeProduct(kwargs.product);
105
+ const body = await fetchJson(`${API_BASE}/${encodeURIComponent(product)}.json`, "endoflife product");
106
+ const rows = mapEndoflifeRows(product, Array.isArray(body) ? body : [], new Date().toISOString().slice(0, 10));
107
+ if (rows.length === 0) {
108
+ throw new Error(`endoflife product returned no cycles for "${product}".`);
109
+ }
110
+ return rows;
111
+ },
112
+ });
113
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../../../src/adapters/endoflife/product.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAC9C,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SAChC,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,MAAsC,EACtC,KAAa;IAEb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,SAAS,GACb,GAAG,KAAK,SAAS;YACf,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,KAAK;gBACvC,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ;oBACvB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,CAAC;QACf,OAAO;YACL,OAAO;YACP,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YAC3C,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACvD,GAAG,EAAE,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5C,OAAO,EAAE,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC;YACpD,GAAG;YACH,eAAe,EAAE,4BAA4B,CAAC,KAAK,CAAC,eAAe,CAAC;YACpE,SAAS;YACT,GAAG,EAAE,0BAA0B,OAAO,EAAE;SACzC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAiB,EAAE,KAAa;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,0DAA0D;SACzE;KACF,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sBAAsB,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,GAAG,CAAC;IACF,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,gEAAgE;IAC7E,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,6BAA6B;SAC3C;KACF;IACD,OAAO,EAAE;QACP,SAAS;QACT,OAAO;QACP,aAAa;QACb,QAAQ;QACR,mBAAmB;QACnB,KAAK;QACL,SAAS;QACT,KAAK;QACL,iBAAiB;QACjB,WAAW;QACX,KAAK;KACN;IACD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,GAAG,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,EACjD,mBAAmB,CACpB,CAAC;QACF,MAAM,IAAI,GAAG,gBAAgB,CAC3B,OAAO,EACP,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAuC,CAAC,CAAC,CAAC,EAAE,EACnE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CACtC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @owner src/adapters/facebook/marketplace-extra.ts
3
+ * @does Register agent-facing Facebook Marketplace seller listings and inbox readers.
4
+ * @needs Logged-in www.facebook.com browser session with Marketplace access.
5
+ * @feeds surface coverage ledger and Marketplace selling/conversation workflows.
6
+ * @breaks Facebook Marketplace DOM text changes, login redirects, or unavailable Marketplace account access.
7
+ */
8
+ export declare function requireFacebookMarketplaceLimit(value: unknown): number;
9
+ //# sourceMappingURL=marketplace-extra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-extra.d.ts","sourceRoot":"","sources":["../../../src/adapters/facebook/marketplace-extra.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAStE"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @owner src/adapters/facebook/marketplace-extra.ts
3
+ * @does Register agent-facing Facebook Marketplace seller listings and inbox readers.
4
+ * @needs Logged-in www.facebook.com browser session with Marketplace access.
5
+ * @feeds surface coverage ledger and Marketplace selling/conversation workflows.
6
+ * @breaks Facebook Marketplace DOM text changes, login redirects, or unavailable Marketplace account access.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ export function requireFacebookMarketplaceLimit(value) {
10
+ const limit = Number(value ?? 20);
11
+ if (!Number.isInteger(limit) || limit <= 0) {
12
+ throw new Error("Facebook Marketplace limit must be a positive integer.");
13
+ }
14
+ if (limit > 100) {
15
+ throw new Error("Facebook Marketplace limit must be <= 100.");
16
+ }
17
+ return limit;
18
+ }
19
+ function requireBrowserPage(page, command) {
20
+ if (!page || typeof page !== "object") {
21
+ throw new Error(`Browser session required for facebook ${command}.`);
22
+ }
23
+ return page;
24
+ }
25
+ function text(value) {
26
+ return value == null ? "" : String(value);
27
+ }
28
+ function readRows(result, command) {
29
+ if (result?.authRequired) {
30
+ throw new Error(`Facebook Marketplace ${command} requires an active signed-in Facebook session.`);
31
+ }
32
+ const rows = Array.isArray(result?.rows) ? result.rows : [];
33
+ if (!rows.length) {
34
+ throw new Error(`No Facebook Marketplace ${command} rows were visible. Check Marketplace access for this account.`);
35
+ }
36
+ return rows;
37
+ }
38
+ function marketplaceListingsScript() {
39
+ return String.raw `(() => {
40
+ const clean = (value) => String(value || '').replace(/\u00a0/g, ' ').replace(/\s+/g, ' ').trim();
41
+ const allText = document.body?.innerText || '';
42
+ if (/log in|sign in/i.test(allText) && !/Marketplace/i.test(allText)) {
43
+ return { authRequired: true, rows: [] };
44
+ }
45
+ const lines = allText.split(/\n+/).map(clean).filter(Boolean);
46
+ const seen = new Set();
47
+ const rows = [];
48
+ for (let index = 1; index < lines.length; index += 1) {
49
+ if (!/^(?:CA\$|\$)\s*\d+/.test(lines[index])) continue;
50
+ const title = lines[index - 1];
51
+ if (!title || /^(Hide|All listings|Needs attention|Marketplace|Selling)$/i.test(title)) continue;
52
+ if (seen.has(title)) continue;
53
+ seen.add(title);
54
+ const windowLines = lines.slice(index, index + 12);
55
+ const status = windowLines.find((line) => /^(Active|Sold|Pending|Draft)$/i.test(line)) || '';
56
+ const listed = windowLines.find((line) => /Listed on\b/i.test(line))?.replace(/^·\s*/, '') || '';
57
+ const clickLine = windowLines.find((line) => /clicks? on listing/i.test(line)) || '';
58
+ const clickMatch = clickLine.match(/([\d,.]+)\s+clicks? on listing/i);
59
+ const actions = windowLines.filter((line) => /^(Mark as sold|Mark as available|Relist this item|Share|Boost listing)$/i.test(line));
60
+ rows.push({
61
+ title,
62
+ price: lines[index],
63
+ status,
64
+ listed,
65
+ clicks: clickMatch ? clickMatch[1] : '',
66
+ actions,
67
+ });
68
+ }
69
+ return { authRequired: false, rows };
70
+ })()`;
71
+ }
72
+ function marketplaceInboxScript() {
73
+ return String.raw `(() => {
74
+ const clean = (value) => String(value || '').replace(/[\u00a0\u202f]/g, ' ').replace(/\s+/g, ' ').trim();
75
+ const timeRe = /^(?:\d{1,2}:\d{2}\s?(?:AM|PM|am|pm|上午|下午)?|Mon|Tue|Wed|Thu|Fri|Sat|Sun|Today|Yesterday|\d+[mhdw]|\d+\s*(?:min|h|d|w))$/;
76
+ const allText = document.body?.innerText || '';
77
+ if (/log in|sign in/i.test(allText) && !/Marketplace/i.test(allText)) {
78
+ return { authRequired: true, rows: [] };
79
+ }
80
+ const lines = allText.split(/\n+/).map(clean).filter(Boolean);
81
+ const rows = [];
82
+ const seen = new Set();
83
+ const skipBuyer = /^(Marketplace|Browse all|Notifications|Inbox|Marketplace access|Buying|Selling|Create new listing|Create multiple listings|Location|Categories|Vehicles|Property Rentals|All|Pending payment|Paid|To be shipped|Shipped|Cash on delivery|Completed|Filter by label)$/i;
84
+ for (let index = 0; index < lines.length - 2; index += 1) {
85
+ const buyer = lines[index];
86
+ const meta = lines[index + 1];
87
+ if (skipBuyer.test(buyer) || !/^·\s+/.test(meta)) continue;
88
+ const listing = meta.replace(/^·\s*/, '');
89
+ if (!listing || /^Within\b/i.test(listing)) continue;
90
+ const snippet = lines[index + 2] || '';
91
+ const time = timeRe.test(lines[index + 3] || '') ? lines[index + 3] : '';
92
+ const key = buyer + '|' + listing;
93
+ if (seen.has(key)) continue;
94
+ seen.add(key);
95
+ const nearby = lines.slice(Math.max(0, index - 2), index + 5).join(' ');
96
+ rows.push({
97
+ buyer,
98
+ listing,
99
+ snippet,
100
+ time,
101
+ unread: /Unread/i.test(nearby),
102
+ });
103
+ }
104
+ return { authRequired: false, rows };
105
+ })()`;
106
+ }
107
+ cli({
108
+ site: "facebook",
109
+ name: "marketplace-listings",
110
+ description: "List your Facebook Marketplace seller listings",
111
+ domain: "www.facebook.com",
112
+ strategy: Strategy.COOKIE,
113
+ browser: true,
114
+ args: [{ name: "limit", type: "int", default: 20 }],
115
+ columns: ["index", "title", "price", "status", "listed", "clicks", "actions"],
116
+ func: async (page, kwargs) => {
117
+ const p = requireBrowserPage(page, "marketplace-listings");
118
+ const limit = requireFacebookMarketplaceLimit(kwargs.limit);
119
+ await p.goto("https://www.facebook.com/marketplace/you/selling/");
120
+ await p.wait(4);
121
+ const result = (await p.evaluate(marketplaceListingsScript()));
122
+ return readRows(result, "seller listings")
123
+ .slice(0, limit)
124
+ .map((item, index) => {
125
+ const row = item;
126
+ return {
127
+ index: index + 1,
128
+ title: text(row.title),
129
+ price: text(row.price),
130
+ status: text(row.status),
131
+ listed: text(row.listed),
132
+ clicks: text(row.clicks),
133
+ actions: Array.isArray(row.actions)
134
+ ? row.actions.map(text).join(", ")
135
+ : text(row.actions),
136
+ };
137
+ });
138
+ },
139
+ });
140
+ cli({
141
+ site: "facebook",
142
+ name: "marketplace-inbox",
143
+ description: "List recent Facebook Marketplace buyer and seller conversations",
144
+ domain: "www.facebook.com",
145
+ strategy: Strategy.COOKIE,
146
+ browser: true,
147
+ args: [{ name: "limit", type: "int", default: 20 }],
148
+ columns: ["index", "buyer", "listing", "snippet", "time", "unread"],
149
+ func: async (page, kwargs) => {
150
+ const p = requireBrowserPage(page, "marketplace-inbox");
151
+ const limit = requireFacebookMarketplaceLimit(kwargs.limit);
152
+ await p.goto("https://www.facebook.com/marketplace/inbox/");
153
+ await p.wait(4);
154
+ const result = (await p.evaluate(marketplaceInboxScript()));
155
+ return readRows(result, "inbox conversations")
156
+ .slice(0, limit)
157
+ .map((item, index) => {
158
+ const row = item;
159
+ return {
160
+ index: index + 1,
161
+ buyer: text(row.buyer),
162
+ listing: text(row.listing),
163
+ snippet: text(row.snippet),
164
+ time: text(row.time),
165
+ unread: Boolean(row.unread),
166
+ };
167
+ });
168
+ },
169
+ });
170
+ //# sourceMappingURL=marketplace-extra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-extra.js","sourceRoot":"","sources":["../../../src/adapters/facebook/marketplace-extra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @owner src/adapters/flathub/apps.ts
3
+ * @does Register agent-facing Flathub app search and detail commands.
4
+ * @needs Flathub public API, AppStream id validation, bounded search limits.
5
+ * @feeds surface coverage ledger, Linux app registry search rows, appstream metadata rows.
6
+ * @breaks Flathub API drift, weak app id validation, or silent empty rows hide app registry data.
7
+ */
8
+ export declare function requireFlathubLimit(value: unknown): number;
9
+ export declare function requireFlathubAppId(value: unknown): string;
10
+ export declare function joinFlathubList(value: unknown, max?: number): string;
11
+ export declare function pickLatestFlathubRelease(value: unknown): {
12
+ date: string | null;
13
+ version: string | null;
14
+ };
15
+ export declare function mapFlathubSearchRows(hits: Array<Record<string, unknown>>, limit: number): Array<Record<string, unknown>>;
16
+ export declare function mapFlathubAppRow(appId: string, body: Record<string, unknown>): Record<string, unknown>;
17
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/adapters/flathub/apps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO1D;AAsBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,MAAM,CAMhE;AASD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG;IACxD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAWA;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACpC,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBhC;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}