@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,165 @@
1
+ /**
2
+ * @owner src/adapters/steam/app.ts
3
+ * @does Register agent-facing Steam app storefront detail command.
4
+ * @needs Steam appdetails API, strict app ids, storefront country code validation.
5
+ * @feeds surface coverage ledger, Steam app detail workflows, storefront metadata readers.
6
+ * @breaks Steam appdetails envelope drift or regional availability changes can hide app metadata.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ const STEAM_STORE = "https://store.steampowered.com";
10
+ const HTML_ENTITIES = {
11
+ "&": "&",
12
+ "&lt;": "<",
13
+ "&gt;": ">",
14
+ "&quot;": '"',
15
+ "&apos;": "'",
16
+ "&#39;": "'",
17
+ "&nbsp;": " ",
18
+ };
19
+ function stringField(value) {
20
+ return value === undefined || value === null ? "" : String(value);
21
+ }
22
+ function numberOrNull(value) {
23
+ if (value === undefined || value === null || value === "")
24
+ return null;
25
+ const n = Number(value);
26
+ return Number.isFinite(n) ? n : null;
27
+ }
28
+ export function decodeSteamHtml(value) {
29
+ return String(value ?? "")
30
+ .replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => {
31
+ const code = Number.parseInt(hex, 16);
32
+ return Number.isFinite(code) ? String.fromCodePoint(code) : "";
33
+ })
34
+ .replace(/&#(\d+);/g, (_, dec) => {
35
+ const code = Number.parseInt(dec, 10);
36
+ return Number.isFinite(code) ? String.fromCodePoint(code) : "";
37
+ })
38
+ .replace(/&(amp|lt|gt|quot|apos|#39|nbsp);/g, (match) => {
39
+ return HTML_ENTITIES[match] ?? match;
40
+ });
41
+ }
42
+ export function requireSteamAppId(value) {
43
+ const id = String(value ?? "").trim();
44
+ if (!/^\d+$/.test(id)) {
45
+ throw new Error("steam app id must be a positive integer.");
46
+ }
47
+ return id;
48
+ }
49
+ export function requireSteamCountryCode(value, fallback = "us") {
50
+ const raw = value === undefined || value === null || value === "" ? fallback : value;
51
+ const code = String(raw).trim().toLowerCase();
52
+ if (!/^[a-z]{2}$/.test(code)) {
53
+ throw new Error("steam currency must be a two-letter storefront country code.");
54
+ }
55
+ return code;
56
+ }
57
+ export function steamPriceCents(value) {
58
+ const cents = numberOrNull(value);
59
+ return cents === null ? null : Number((cents / 100).toFixed(2));
60
+ }
61
+ function joinSteamNames(value) {
62
+ if (!Array.isArray(value))
63
+ return "";
64
+ return value
65
+ .map((entry) => {
66
+ if (typeof entry === "string")
67
+ return entry;
68
+ return stringField(entry.description || entry.name);
69
+ })
70
+ .filter(Boolean)
71
+ .join(", ");
72
+ }
73
+ export function mapSteamAppRow(appId, data) {
74
+ const id = stringField(data.steam_appid || appId);
75
+ const isFree = data.is_free === true;
76
+ return {
77
+ id,
78
+ name: decodeSteamHtml(data.name),
79
+ type: stringField(data.type),
80
+ isFree,
81
+ releaseDate: stringField(data.release_date?.date),
82
+ developers: Array.isArray(data.developers)
83
+ ? data.developers.join(", ")
84
+ : "",
85
+ publishers: Array.isArray(data.publishers)
86
+ ? data.publishers.join(", ")
87
+ : "",
88
+ price: isFree ? 0 : steamPriceCents(data.price_overview?.final),
89
+ currency: stringField(data.price_overview?.currency).toUpperCase(),
90
+ metacritic: numberOrNull(data.metacritic?.score),
91
+ recommendations: numberOrNull(data.recommendations?.total),
92
+ genres: joinSteamNames(data.genres),
93
+ categories: joinSteamNames(data.categories),
94
+ shortDescription: decodeSteamHtml(data.short_description),
95
+ website: stringField(data.website),
96
+ url: `${STEAM_STORE}/app/${id}/`,
97
+ };
98
+ }
99
+ async function fetchSteamApp(appId, countryCode) {
100
+ const url = new URL(`${STEAM_STORE}/api/appdetails`);
101
+ url.searchParams.set("appids", appId);
102
+ url.searchParams.set("l", "en");
103
+ url.searchParams.set("cc", countryCode);
104
+ const response = await fetch(url, {
105
+ headers: {
106
+ Accept: "application/json",
107
+ "User-Agent": "unicli-steam/1.0 (https://github.com/olo-dot-io/Uni-CLI)",
108
+ },
109
+ });
110
+ if (!response.ok)
111
+ throw new Error(`Steam app returned HTTP ${response.status}.`);
112
+ const envelope = (await response.json());
113
+ const wrapper = envelope[appId];
114
+ if (!wrapper || wrapper.success !== true || !wrapper.data) {
115
+ throw new Error(`Steam app id ${appId} returned no data.`);
116
+ }
117
+ return wrapper.data;
118
+ }
119
+ cli({
120
+ site: "steam",
121
+ name: "app",
122
+ description: "Steam storefront detail for a single app id",
123
+ domain: "store.steampowered.com",
124
+ strategy: Strategy.PUBLIC,
125
+ browser: false,
126
+ args: [
127
+ {
128
+ name: "id",
129
+ type: "str",
130
+ required: true,
131
+ positional: true,
132
+ description: "Numeric Steam app id",
133
+ },
134
+ {
135
+ name: "currency",
136
+ type: "str",
137
+ default: "us",
138
+ description: "Storefront country code",
139
+ },
140
+ ],
141
+ columns: [
142
+ "id",
143
+ "name",
144
+ "type",
145
+ "isFree",
146
+ "releaseDate",
147
+ "developers",
148
+ "publishers",
149
+ "price",
150
+ "currency",
151
+ "metacritic",
152
+ "recommendations",
153
+ "genres",
154
+ "categories",
155
+ "shortDescription",
156
+ "website",
157
+ "url",
158
+ ],
159
+ func: async (_page, kwargs) => {
160
+ const id = requireSteamAppId(kwargs.id);
161
+ const countryCode = requireSteamCountryCode(kwargs.currency);
162
+ return [mapSteamAppRow(id, await fetchSteamApp(id, countryCode))];
163
+ },
164
+ });
165
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/adapters/steam/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @owner src/adapters/tiktok/creator-videos.ts
3
+ * @does Register agent-facing TikTok Studio creator video list extraction implemented with site-specific safety checks.
4
+ * @needs Logged-in www.tiktok.com browser session with access to TikTok Studio content management.
5
+ * @feeds surface coverage ledger and creator analytics workflows for TikTok owned videos.
6
+ * @breaks TikTok Studio API schema changes, missing creator permissions, auth redirects, or item_list pagination drift.
7
+ */
8
+ interface TikTokCreatorApiItem {
9
+ item_id?: unknown;
10
+ id?: unknown;
11
+ desc?: unknown;
12
+ title?: unknown;
13
+ post_time?: unknown;
14
+ create_time?: unknown;
15
+ schedule_time?: unknown;
16
+ play_count?: unknown;
17
+ like_count?: unknown;
18
+ comment_count?: unknown;
19
+ favorite_count?: unknown;
20
+ share_count?: unknown;
21
+ author?: {
22
+ unique_id?: unknown;
23
+ uniqueId?: unknown;
24
+ };
25
+ author_unique_id?: unknown;
26
+ authorUniqueId?: unknown;
27
+ user_name?: unknown;
28
+ username?: unknown;
29
+ play_addr?: unknown;
30
+ download_info?: {
31
+ download_urls?: unknown;
32
+ };
33
+ }
34
+ export declare function requireTikTokPositiveInt(value: unknown, label: string, fallback: number, max: number): number;
35
+ export declare function requireTikTokCursor(value: unknown): number;
36
+ export declare function buildTikTokItemListRequest(cursor: number, size: number): {
37
+ cursor: number;
38
+ size: number;
39
+ query: {
40
+ conditions: never[];
41
+ sort_orders: {
42
+ field_name: string;
43
+ order: number;
44
+ }[];
45
+ };
46
+ };
47
+ export declare function buildTikTokItemListScript(body: unknown): string;
48
+ export declare function formatTikTokStudioDate(value: unknown): string;
49
+ export declare function extractTikTokUsername(item: TikTokCreatorApiItem): string;
50
+ export declare function normalizeTikTokCreatorVideoRow(item: TikTokCreatorApiItem): Record<string, unknown> | null;
51
+ export {};
52
+ //# sourceMappingURL=creator-videos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator-videos.d.ts","sourceRoot":"","sources":["../../../src/adapters/tiktok/creator-videos.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7C;AAuBD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,CAWR;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAY1D;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;EAStE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAgD/D;AA8CD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAkBxE;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,oBAAoB,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAqBhC"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * @owner src/adapters/tiktok/creator-videos.ts
3
+ * @does Register agent-facing TikTok Studio creator video list extraction implemented with site-specific safety checks.
4
+ * @needs Logged-in www.tiktok.com browser session with access to TikTok Studio content management.
5
+ * @feeds surface coverage ledger and creator analytics workflows for TikTok owned videos.
6
+ * @breaks TikTok Studio API schema changes, missing creator permissions, auth redirects, or item_list pagination drift.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ import { str } from "../_shared/browser-tools.js";
10
+ const STUDIO_CONTENT_URL = "https://www.tiktok.com/tiktokstudio/content";
11
+ const ITEM_LIST_API_PATH = "/tiktok/creator/manage/item_list/v1/";
12
+ const DEFAULT_LIMIT = 20;
13
+ const MAX_LIMIT = 250;
14
+ const SERVER_PAGE_MAX = 50;
15
+ export function requireTikTokPositiveInt(value, label, fallback, max) {
16
+ const parsed = Number(value ?? fallback);
17
+ if (!Number.isInteger(parsed) || parsed <= 0) {
18
+ throw new Error(`TikTok creator-videos ${label} must be a positive integer.`);
19
+ }
20
+ if (parsed > max) {
21
+ throw new Error(`TikTok creator-videos ${label} must be <= ${max}.`);
22
+ }
23
+ return parsed;
24
+ }
25
+ export function requireTikTokCursor(value) {
26
+ const text = str(value ?? "0").trim();
27
+ if (!/^\d+$/.test(text)) {
28
+ throw new Error("TikTok creator-videos cursor must be a non-negative integer string.");
29
+ }
30
+ const cursor = Number(text);
31
+ if (!Number.isSafeInteger(cursor)) {
32
+ throw new Error("TikTok creator-videos cursor must be a safe integer.");
33
+ }
34
+ return cursor;
35
+ }
36
+ export function buildTikTokItemListRequest(cursor, size) {
37
+ return {
38
+ cursor,
39
+ size,
40
+ query: {
41
+ conditions: [],
42
+ sort_orders: [{ field_name: "create_time", order: 2 }],
43
+ },
44
+ };
45
+ }
46
+ export function buildTikTokItemListScript(body) {
47
+ const request = {
48
+ url: `${ITEM_LIST_API_PATH}?aid=1988`,
49
+ body,
50
+ };
51
+ return `(async () => {
52
+ const request = ${JSON.stringify(request)};
53
+ try {
54
+ const response = await fetch(request.url, {
55
+ method: 'POST',
56
+ credentials: 'include',
57
+ headers: {
58
+ accept: 'application/json',
59
+ 'content-type': 'application/json',
60
+ },
61
+ body: JSON.stringify(request.body),
62
+ });
63
+ const text = await response.text();
64
+ let data = null;
65
+ if (text.trim()) {
66
+ try {
67
+ data = JSON.parse(text);
68
+ } catch (error) {
69
+ return {
70
+ ok: false,
71
+ status: response.status,
72
+ statusText: response.statusText,
73
+ parseError: error instanceof Error ? error.message : String(error),
74
+ text: text.slice(0, 500),
75
+ };
76
+ }
77
+ }
78
+ return {
79
+ ok: response.ok,
80
+ status: response.status,
81
+ statusText: response.statusText,
82
+ data,
83
+ text: text.slice(0, 500),
84
+ };
85
+ } catch (error) {
86
+ return {
87
+ ok: false,
88
+ status: 0,
89
+ statusText: '',
90
+ networkError: error instanceof Error ? error.message : String(error),
91
+ };
92
+ }
93
+ })()`;
94
+ }
95
+ function looksAuthFailure(value) {
96
+ return /\b(auth|login|log in|permission|unauthori[sz]ed|forbidden)\b/i.test(str(value));
97
+ }
98
+ function unwrapPayload(data) {
99
+ if (!data || typeof data !== "object") {
100
+ throw new Error("TikTok Studio item_list returned an empty response.");
101
+ }
102
+ const payload = data;
103
+ return payload.data && typeof payload.data === "object"
104
+ ? payload.data
105
+ : payload;
106
+ }
107
+ function assertApiSuccess(data) {
108
+ const statusCode = data.status_code ?? data.statusCode;
109
+ const statusMessage = str(data.status_msg ?? data.statusMsg).trim();
110
+ if (statusCode !== undefined && Number(statusCode) !== 0) {
111
+ if (looksAuthFailure(statusMessage)) {
112
+ throw new Error(`TikTok Studio item_list requires login or creator permission: ${statusMessage || statusCode}.`);
113
+ }
114
+ throw new Error(`TikTok Studio item_list failed: ${statusMessage || statusCode}.`);
115
+ }
116
+ if (statusMessage && !/^(success|ok)$/i.test(statusMessage)) {
117
+ if (looksAuthFailure(statusMessage)) {
118
+ throw new Error(`TikTok Studio item_list requires login or creator permission: ${statusMessage}.`);
119
+ }
120
+ throw new Error(`TikTok Studio item_list failed: ${statusMessage}.`);
121
+ }
122
+ }
123
+ function normalizeCount(value) {
124
+ const count = Number(value);
125
+ return Number.isFinite(count) ? count : 0;
126
+ }
127
+ export function formatTikTokStudioDate(value) {
128
+ const seconds = Number(value);
129
+ if (!Number.isFinite(seconds) || seconds <= 0)
130
+ return "";
131
+ return new Date(seconds * 1000).toLocaleString("zh-CN", {
132
+ timeZone: "Asia/Shanghai",
133
+ hour12: false,
134
+ });
135
+ }
136
+ export function extractTikTokUsername(item) {
137
+ const direct = item.author?.unique_id ??
138
+ item.author?.uniqueId ??
139
+ item.author_unique_id ??
140
+ item.authorUniqueId ??
141
+ item.user_name ??
142
+ item.username;
143
+ if (direct)
144
+ return str(direct);
145
+ const playAddresses = Array.isArray(item.play_addr) ? item.play_addr : [];
146
+ const downloadUrls = Array.isArray(item.download_info?.download_urls)
147
+ ? item.download_info.download_urls
148
+ : [];
149
+ for (const rawUrl of [...playAddresses, ...downloadUrls]) {
150
+ const match = str(rawUrl).match(/[?&]user_text=([^&]+)/);
151
+ if (match)
152
+ return decodeURIComponent(match[1]);
153
+ }
154
+ return "";
155
+ }
156
+ export function normalizeTikTokCreatorVideoRow(item) {
157
+ const videoId = str(item.item_id ?? item.id).trim();
158
+ if (!videoId)
159
+ return null;
160
+ const username = extractTikTokUsername(item);
161
+ return {
162
+ video_id: videoId,
163
+ title: str(item.desc ?? item.title)
164
+ .replace(/\s+/g, " ")
165
+ .trim(),
166
+ date: formatTikTokStudioDate(item.post_time ?? item.create_time ?? item.schedule_time),
167
+ views: normalizeCount(item.play_count),
168
+ likes: normalizeCount(item.like_count),
169
+ comments: normalizeCount(item.comment_count),
170
+ saves: normalizeCount(item.favorite_count),
171
+ shares: normalizeCount(item.share_count),
172
+ url: username
173
+ ? `https://www.tiktok.com/@${encodeURIComponent(username)}/video/${encodeURIComponent(videoId)}`
174
+ : "",
175
+ };
176
+ }
177
+ async function fetchCreatorVideosPage(page, cursor, size) {
178
+ const result = (await page.evaluate(buildTikTokItemListScript(buildTikTokItemListRequest(cursor, size))));
179
+ if (!result || typeof result !== "object") {
180
+ throw new Error("TikTok Studio item_list returned an unreadable response.");
181
+ }
182
+ if (result.networkError) {
183
+ throw new Error(`TikTok Studio item_list network failure: ${str(result.networkError)}.`);
184
+ }
185
+ if (result.status === 401 || result.status === 403) {
186
+ throw new Error(`TikTok Studio item_list requires login (HTTP ${result.status}).`);
187
+ }
188
+ if (!result.ok) {
189
+ const detail = result.parseError
190
+ ? `invalid JSON (${str(result.parseError)})`
191
+ : `HTTP ${str(result.status || 0)}${result.statusText ? ` ${str(result.statusText)}` : ""}`;
192
+ const preview = str(result.text).slice(0, 160);
193
+ throw new Error(`TikTok Studio item_list failed: ${detail}${preview ? `; response preview: ${preview}` : ""}.`);
194
+ }
195
+ const payload = unwrapPayload(result.data);
196
+ assertApiSuccess(payload);
197
+ return payload;
198
+ }
199
+ async function listCreatorVideos(page, kwargs) {
200
+ const limit = requireTikTokPositiveInt(kwargs.limit, "limit", DEFAULT_LIMIT, MAX_LIMIT);
201
+ let cursor = requireTikTokCursor(kwargs.cursor);
202
+ const rows = [];
203
+ let skippedMissingId = 0;
204
+ const pageSize = Math.min(SERVER_PAGE_MAX, limit);
205
+ const maxPages = Math.ceil(limit / pageSize);
206
+ await page.goto(STUDIO_CONTENT_URL, { waitUntil: "load", settleMs: 6000 });
207
+ for (let pageIndex = 0; pageIndex < maxPages && rows.length < limit; pageIndex += 1) {
208
+ const payload = await fetchCreatorVideosPage(page, cursor, pageSize);
209
+ const items = Array.isArray(payload.item_list) ? payload.item_list : [];
210
+ for (const item of items) {
211
+ const row = normalizeTikTokCreatorVideoRow(item);
212
+ if (!row) {
213
+ skippedMissingId += 1;
214
+ continue;
215
+ }
216
+ rows.push(row);
217
+ if (rows.length >= limit)
218
+ break;
219
+ }
220
+ if (!payload.has_more || items.length === 0)
221
+ break;
222
+ cursor = requireTikTokCursor(payload.cursor);
223
+ await page.wait(0.25);
224
+ }
225
+ if (rows.length === 0 && skippedMissingId > 0) {
226
+ throw new Error("TikTok Studio item_list returned videos without stable video_id.");
227
+ }
228
+ if (rows.length === 0) {
229
+ throw new Error("No TikTok Studio creator videos were returned. Confirm the browser profile is logged in and has published content.");
230
+ }
231
+ return rows.slice(0, limit);
232
+ }
233
+ cli({
234
+ site: "tiktok",
235
+ name: "creator-videos",
236
+ description: "Read TikTok Studio creator content metrics",
237
+ domain: "www.tiktok.com",
238
+ strategy: Strategy.COOKIE,
239
+ browser: true,
240
+ args: [
241
+ {
242
+ name: "limit",
243
+ type: "int",
244
+ default: DEFAULT_LIMIT,
245
+ description: `Number of creator videos to return (max ${MAX_LIMIT})`,
246
+ },
247
+ {
248
+ name: "cursor",
249
+ type: "str",
250
+ default: "0",
251
+ description: "Non-negative TikTok Studio pagination cursor",
252
+ },
253
+ ],
254
+ columns: [
255
+ "video_id",
256
+ "title",
257
+ "date",
258
+ "views",
259
+ "likes",
260
+ "comments",
261
+ "saves",
262
+ "shares",
263
+ "url",
264
+ ],
265
+ func: async (page, kwargs) => listCreatorVideos(page, kwargs),
266
+ });
267
+ //# sourceMappingURL=creator-videos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator-videos.js","sourceRoot":"","sources":["../../../src/adapters/tiktok/creator-videos.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAElD,MAAM,kBAAkB,GAAG,6CAA6C,CAAC;AACzE,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAClE,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,eAAe,GAAG,EAAE,CAAC;AA6C3B,MAAM,UAAU,wBAAwB,CACtC,KAAc,EACd,KAAa,EACb,QAAgB,EAChB,GAAW;IAEX,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,8BAA8B,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,eAAe,GAAG,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,OAAO;QACL,MAAM;QACN,IAAI;QACJ,KAAK,EAAE;YACL,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACvD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,GAAG,kBAAkB,WAAW;QACrC,IAAI;KACL,CAAC;IACF,OAAO;sBACa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCtC,CAAC;AACR,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,+DAA+D,CAAC,IAAI,CACzE,GAAG,CAAC,KAAK,CAAC,CACX,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,IAA+B,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QACrD,CAAC,CAAE,OAAO,CAAC,IAAgC;QAC3C,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA6B;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;IACvD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,iEAAiE,aAAa,IAAI,UAAU,GAAG,CAChG,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mCAAmC,aAAa,IAAI,UAAU,GAAG,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,aAAa,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,iEAAiE,aAAa,GAAG,CAClF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,GAAG,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACzD,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;QACtD,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAA0B;IAC9D,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,EAAE,SAAS;QACtB,IAAI,CAAC,MAAM,EAAE,QAAQ;QACrB,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,QAAQ,CAAC;IAChB,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;QACnE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa;QAClC,CAAC,CAAC,EAAE,CAAC;IACP,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACzD,IAAI,KAAK;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,IAA0B;IAE1B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;aAChC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE;QACT,IAAI,EAAE,sBAAsB,CAC1B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CACzD;QACD,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5C,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;QAC1C,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,GAAG,EAAE,QAAQ;YACX,CAAC,CAAC,2BAA2B,kBAAkB,CAAC,QAAQ,CAAC,UAAU,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAChG,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAW,EACX,MAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CACjC,yBAAyB,CAAC,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACpE,CAA6B,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,gDAAgD,MAAM,CAAC,MAAM,IAAI,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU;YAC9B,CAAC,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;YAC5C,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9F,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAC/F,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAW,EACX,MAA+B;IAE/B,MAAM,KAAK,GAAG,wBAAwB,CACpC,MAAM,CAAC,KAAK,EACZ,OAAO,EACP,aAAa,EACb,SAAS,CACV,CAAC;IACF,IAAI,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAA8B,EAAE,CAAC;IAC3C,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,KACE,IAAI,SAAS,GAAG,CAAC,EACjB,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAC3C,SAAS,IAAI,CAAC,EACd,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,8BAA8B,CAAC,IAA4B,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,gBAAgB,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QAClC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QACnD,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,oHAAoH,CACrH,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,GAAG,CAAC;IACF,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,4CAA4C;IACzD,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,2CAA2C,SAAS,GAAG;SACrE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,8CAA8C;SAC5D;KACF;IACD,OAAO,EAAE;QACP,UAAU;QACV,OAAO;QACP,MAAM;QACN,OAAO;QACP,OAAO;QACP,UAAU;QACV,OAAO;QACP,QAAQ;QACR,KAAK;KACN;IACD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAa,EAAE,MAAM,CAAC;CACvE,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @owner src/adapters/tvmaze/shows.ts
3
+ * @does Register agent-facing TVmaze show search and detail commands.
4
+ * @needs TVmaze public API, bounded search limits, positive show ids.
5
+ * @feeds surface coverage ledger, TV show reference rows, cross-reference ids.
6
+ * @breaks TVmaze API drift, weak id validation, or silent empty rows hide show lookup failures.
7
+ */
8
+ export declare function requireTvmazeLimit(value: unknown): number;
9
+ export declare function requireTvmazeShowId(value: unknown): number;
10
+ export declare function stripTvmazeHtml(value: unknown): string;
11
+ export declare function mapTvmazeSearchRows(entries: Array<Record<string, unknown>>, limit: number): Array<Record<string, unknown>>;
12
+ export declare function mapTvmazeShowRow(show: Record<string, unknown>): Record<string, unknown>;
13
+ //# sourceMappingURL=shows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shows.d.ts","sourceRoot":"","sources":["../../../src/adapters/tvmaze/shows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQzD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM1D;AAqCD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBtD;AAkBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBhC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BzB"}