publishport-opencli 1.0.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 (1860) hide show
  1. package/LICENSE +214 -0
  2. package/README.md +299 -0
  3. package/README.zh-CN.md +341 -0
  4. package/cli-manifest.json +51513 -0
  5. package/clis/12306/auth.js +25 -0
  6. package/clis/12306/me.js +9 -0
  7. package/clis/12306/orders.js +13 -0
  8. package/clis/12306/passengers.js +14 -0
  9. package/clis/12306/price.js +1 -0
  10. package/clis/12306/stations.js +1 -0
  11. package/clis/12306/train.js +1 -0
  12. package/clis/12306/trains.js +1 -0
  13. package/clis/12306/utils.js +1 -0
  14. package/clis/1688/assets.js +127 -0
  15. package/clis/1688/auth.js +1 -0
  16. package/clis/1688/download.js +1 -0
  17. package/clis/1688/item.js +21 -0
  18. package/clis/1688/search.js +129 -0
  19. package/clis/1688/shared.js +11 -0
  20. package/clis/1688/store.js +26 -0
  21. package/clis/1point3acres/auth.js +18 -0
  22. package/clis/1point3acres/digest.js +1 -0
  23. package/clis/1point3acres/forum.js +1 -0
  24. package/clis/1point3acres/forums.js +1 -0
  25. package/clis/1point3acres/hot.js +1 -0
  26. package/clis/1point3acres/latest.js +1 -0
  27. package/clis/1point3acres/notifications.js +1 -0
  28. package/clis/1point3acres/search.js +1 -0
  29. package/clis/1point3acres/thread.js +2 -0
  30. package/clis/1point3acres/user.js +1 -0
  31. package/clis/1point3acres/utils.js +6 -0
  32. package/clis/36kr/article.js +20 -0
  33. package/clis/36kr/hot.js +16 -0
  34. package/clis/36kr/news.js +1 -0
  35. package/clis/36kr/search.js +36 -0
  36. package/clis/51job/company.js +36 -0
  37. package/clis/51job/detail.js +35 -0
  38. package/clis/51job/hot.js +1 -0
  39. package/clis/51job/search.js +1 -0
  40. package/clis/51job/utils.js +21 -0
  41. package/clis/_atlassian/shared.js +21 -0
  42. package/clis/_shared/article/auth.js +16 -0
  43. package/clis/_shared/article/douban-md2draft.js +4 -0
  44. package/clis/_shared/article/format.js +1 -0
  45. package/clis/_shared/article/images.js +95 -0
  46. package/clis/_shared/article/login.js +1 -0
  47. package/clis/_shared/article/page-runtime.js +745 -0
  48. package/clis/_shared/article/publish.js +34 -0
  49. package/clis/_shared/common.js +1 -0
  50. package/clis/_shared/content-guard.js +1 -0
  51. package/clis/_shared/desktop-commands.js +1 -0
  52. package/clis/_shared/search-adapter.js +1 -0
  53. package/clis/_shared/site-auth.js +1 -0
  54. package/clis/_shared/token-auth.js +2 -0
  55. package/clis/_shared/video-publish.js +62 -0
  56. package/clis/aibase/news.js +31 -0
  57. package/clis/amazon/auth.js +19 -0
  58. package/clis/amazon/bestsellers.js +1 -0
  59. package/clis/amazon/discussion.js +20 -0
  60. package/clis/amazon/movers-shakers.js +1 -0
  61. package/clis/amazon/new-releases.js +1 -0
  62. package/clis/amazon/offer.js +29 -0
  63. package/clis/amazon/product.js +25 -0
  64. package/clis/amazon/rankings.js +68 -0
  65. package/clis/amazon/search.js +16 -0
  66. package/clis/amazon/shared.js +11 -0
  67. package/clis/antigravity/SKILL.md +38 -0
  68. package/clis/antigravity/_actions.js +201 -0
  69. package/clis/antigravity/audit-extras.js +78 -0
  70. package/clis/antigravity/delete.js +1 -0
  71. package/clis/antigravity/dump.js +1 -0
  72. package/clis/antigravity/extract-code.js +18 -0
  73. package/clis/antigravity/history.js +1 -0
  74. package/clis/antigravity/mark-read.js +1 -0
  75. package/clis/antigravity/model.js +90 -0
  76. package/clis/antigravity/new.js +9 -0
  77. package/clis/antigravity/read.js +10 -0
  78. package/clis/antigravity/rename.js +1 -0
  79. package/clis/antigravity/send.js +11 -0
  80. package/clis/antigravity/serve.js +97 -0
  81. package/clis/antigravity/status.js +1 -0
  82. package/clis/antigravity/storage.js +12 -0
  83. package/clis/antigravity/watch.js +6 -0
  84. package/clis/apple-podcasts/episodes.js +1 -0
  85. package/clis/apple-podcasts/search.js +1 -0
  86. package/clis/apple-podcasts/top.js +1 -0
  87. package/clis/apple-podcasts/utils.js +1 -0
  88. package/clis/archive/item.js +1 -0
  89. package/clis/archive/search.js +1 -0
  90. package/clis/archive/snapshots.js +1 -0
  91. package/clis/archive/wayback.js +1 -0
  92. package/clis/arxiv/author.js +1 -0
  93. package/clis/arxiv/paper.js +1 -0
  94. package/clis/arxiv/recent.js +1 -0
  95. package/clis/arxiv/search.js +1 -0
  96. package/clis/arxiv/utils.js +1 -0
  97. package/clis/autohome/__fixtures__/catalog.html +11 -0
  98. package/clis/autohome/__fixtures__/koubei.json +116 -0
  99. package/clis/autohome/brand.js +1 -0
  100. package/clis/autohome/score.js +1 -0
  101. package/clis/autohome/utils.js +1 -0
  102. package/clis/baidu-scholar/search.js +63 -0
  103. package/clis/baijiahao/article.js +1 -0
  104. package/clis/baijiahao/lists.js +1 -0
  105. package/clis/baijiahao/login.js +1 -0
  106. package/clis/baijiahao/publish.js +57 -0
  107. package/clis/baijiahao/stats.js +1 -0
  108. package/clis/baijiahao/whoami.js +1 -0
  109. package/clis/band/auth.js +29 -0
  110. package/clis/band/bands.js +37 -0
  111. package/clis/band/mentions.js +6 -0
  112. package/clis/band/post.js +76 -0
  113. package/clis/band/posts.js +50 -0
  114. package/clis/barchart/flow.js +70 -0
  115. package/clis/barchart/greeks.js +88 -0
  116. package/clis/barchart/options.js +61 -0
  117. package/clis/barchart/quote.js +87 -0
  118. package/clis/bbc/news.js +1 -0
  119. package/clis/bbc/topic.js +1 -0
  120. package/clis/bbc/utils.js +1 -0
  121. package/clis/bilibili/article.js +1 -0
  122. package/clis/bilibili/auth.js +1 -0
  123. package/clis/bilibili/categories.js +1 -0
  124. package/clis/bilibili/coin.js +1 -0
  125. package/clis/bilibili/comment-del.js +1 -0
  126. package/clis/bilibili/comment-like.js +1 -0
  127. package/clis/bilibili/comment.js +1 -0
  128. package/clis/bilibili/comments.js +1 -0
  129. package/clis/bilibili/dm-list.js +1 -0
  130. package/clis/bilibili/dm-read.js +1 -0
  131. package/clis/bilibili/dm-send.js +1 -0
  132. package/clis/bilibili/download.js +7 -0
  133. package/clis/bilibili/drafts.js +1 -0
  134. package/clis/bilibili/dynamic-post.js +24 -0
  135. package/clis/bilibili/dynamic.js +1 -0
  136. package/clis/bilibili/favorite-add.js +1 -0
  137. package/clis/bilibili/favorite.js +1 -0
  138. package/clis/bilibili/feed.js +2 -0
  139. package/clis/bilibili/follow.js +1 -0
  140. package/clis/bilibili/following.js +1 -0
  141. package/clis/bilibili/history.js +1 -0
  142. package/clis/bilibili/hot.js +15 -0
  143. package/clis/bilibili/like.js +1 -0
  144. package/clis/bilibili/me.js +1 -0
  145. package/clis/bilibili/partitions.js +1 -0
  146. package/clis/bilibili/ranking.js +1 -0
  147. package/clis/bilibili/search.js +1 -0
  148. package/clis/bilibili/stats.js +1 -0
  149. package/clis/bilibili/subtitle.js +21 -0
  150. package/clis/bilibili/summary.js +1 -0
  151. package/clis/bilibili/topics.js +1 -0
  152. package/clis/bilibili/unfollow.js +1 -0
  153. package/clis/bilibili/upload.js +1 -0
  154. package/clis/bilibili/user-videos.js +1 -0
  155. package/clis/bilibili/utils.js +50 -0
  156. package/clis/bilibili/video-drafts.js +1 -0
  157. package/clis/bilibili/video.js +1 -0
  158. package/clis/binance/asks.js +1 -0
  159. package/clis/binance/depth.js +1 -0
  160. package/clis/binance/gainers.js +1 -0
  161. package/clis/binance/klines.js +1 -0
  162. package/clis/binance/losers.js +1 -0
  163. package/clis/binance/pairs.js +1 -0
  164. package/clis/binance/price.js +1 -0
  165. package/clis/binance/prices.js +1 -0
  166. package/clis/binance/ticker.js +1 -0
  167. package/clis/binance/top.js +1 -0
  168. package/clis/binance/trades.js +1 -0
  169. package/clis/bloomberg/businessweek.js +12 -0
  170. package/clis/bloomberg/crypto.js +1 -0
  171. package/clis/bloomberg/economics.js +1 -0
  172. package/clis/bloomberg/feeds.js +1 -0
  173. package/clis/bloomberg/green.js +1 -0
  174. package/clis/bloomberg/industries.js +1 -0
  175. package/clis/bloomberg/main.js +1 -0
  176. package/clis/bloomberg/markets.js +1 -0
  177. package/clis/bloomberg/news.js +57 -0
  178. package/clis/bloomberg/opinions.js +1 -0
  179. package/clis/bloomberg/politics.js +1 -0
  180. package/clis/bloomberg/pursuits.js +1 -0
  181. package/clis/bloomberg/tech.js +1 -0
  182. package/clis/bloomberg/utils.js +17 -0
  183. package/clis/bluesky/post.js +1 -0
  184. package/clis/bluesky/shared.js +56 -0
  185. package/clis/bluesky/whoami.js +1 -0
  186. package/clis/booking/search.js +93 -0
  187. package/clis/boss/auth.js +13 -0
  188. package/clis/boss/batchgreet.js +1 -0
  189. package/clis/boss/chatlist.js +1 -0
  190. package/clis/boss/chatmsg.js +1 -0
  191. package/clis/boss/detail.js +1 -0
  192. package/clis/boss/exchange.js +1 -0
  193. package/clis/boss/greet.js +1 -0
  194. package/clis/boss/invite.js +4 -0
  195. package/clis/boss/joblist.js +1 -0
  196. package/clis/boss/mark.js +1 -0
  197. package/clis/boss/recommend.js +1 -0
  198. package/clis/boss/resume.js +90 -0
  199. package/clis/boss/search.js +1 -0
  200. package/clis/boss/send.js +1 -0
  201. package/clis/boss/stats.js +1 -0
  202. package/clis/boss/utils.js +161 -0
  203. package/clis/brave/search.js +23 -0
  204. package/clis/chaoxing/assignments.js +1 -0
  205. package/clis/chaoxing/auth.js +21 -0
  206. package/clis/chaoxing/exams.js +1 -0
  207. package/clis/chaoxing/utils.js +58 -0
  208. package/clis/chatgpt/ask.js +1 -0
  209. package/clis/chatgpt/auth.js +17 -0
  210. package/clis/chatgpt/detail.js +1 -0
  211. package/clis/chatgpt/history.js +1 -0
  212. package/clis/chatgpt/image.js +1 -0
  213. package/clis/chatgpt/model.js +1 -0
  214. package/clis/chatgpt/new.js +1 -0
  215. package/clis/chatgpt/project-file-add.js +1 -0
  216. package/clis/chatgpt/project-list.js +1 -0
  217. package/clis/chatgpt/read.js +1 -0
  218. package/clis/chatgpt/send.js +1 -0
  219. package/clis/chatgpt/status.js +1 -0
  220. package/clis/chatgpt/utils.js +1092 -0
  221. package/clis/chatgpt-app/ask.js +1 -0
  222. package/clis/chatgpt-app/ax.js +512 -0
  223. package/clis/chatgpt-app/model.js +1 -0
  224. package/clis/chatgpt-app/new.js +1 -0
  225. package/clis/chatgpt-app/read.js +1 -0
  226. package/clis/chatgpt-app/send.js +1 -0
  227. package/clis/chatgpt-app/status.js +1 -0
  228. package/clis/chatwise/ask.js +1 -0
  229. package/clis/chatwise/export.js +21 -0
  230. package/clis/chatwise/history.js +26 -0
  231. package/clis/chatwise/model.js +48 -0
  232. package/clis/chatwise/new.js +1 -0
  233. package/clis/chatwise/read.js +25 -0
  234. package/clis/chatwise/screenshot.js +1 -0
  235. package/clis/chatwise/send.js +1 -0
  236. package/clis/chatwise/status.js +1 -0
  237. package/clis/chatwise/utils.js +75 -0
  238. package/clis/chess/analyze.js +1 -0
  239. package/clis/chess/game.js +1 -0
  240. package/clis/chess/games.js +1 -0
  241. package/clis/chess/stats.js +1 -0
  242. package/clis/chess/utils.js +1 -0
  243. package/clis/claude/ask.js +4 -0
  244. package/clis/claude/auth.js +19 -0
  245. package/clis/claude/detail.js +1 -0
  246. package/clis/claude/history.js +1 -0
  247. package/clis/claude/new.js +1 -0
  248. package/clis/claude/read.js +1 -0
  249. package/clis/claude/send.js +1 -0
  250. package/clis/claude/status.js +1 -0
  251. package/clis/claude/utils.js +179 -0
  252. package/clis/cnblogs/article.js +1 -0
  253. package/clis/cnblogs/login.js +1 -0
  254. package/clis/cnblogs/stats.js +37 -0
  255. package/clis/cnblogs/whoami.js +1 -0
  256. package/clis/cnki/search.js +38 -0
  257. package/clis/codex/_actions.js +72 -0
  258. package/clis/codex/archive.js +1 -0
  259. package/clis/codex/ask.js +23 -0
  260. package/clis/codex/dump.js +1 -0
  261. package/clis/codex/export.js +12 -0
  262. package/clis/codex/extract-diff.js +28 -0
  263. package/clis/codex/history.js +1 -0
  264. package/clis/codex/model.js +118 -0
  265. package/clis/codex/new.js +1 -0
  266. package/clis/codex/pin.js +1 -0
  267. package/clis/codex/projects.js +1 -0
  268. package/clis/codex/read.js +16 -0
  269. package/clis/codex/rename.js +34 -0
  270. package/clis/codex/screenshot.js +1 -0
  271. package/clis/codex/send.js +16 -0
  272. package/clis/codex/sidebar.js +1 -0
  273. package/clis/codex/status.js +1 -0
  274. package/clis/coingecko/categories.js +1 -0
  275. package/clis/coingecko/coin.js +1 -0
  276. package/clis/coingecko/derivatives.js +1 -0
  277. package/clis/coingecko/exchanges.js +1 -0
  278. package/clis/coingecko/global.js +1 -0
  279. package/clis/coingecko/top.js +1 -0
  280. package/clis/coingecko/trending.js +1 -0
  281. package/clis/confluence/create.js +1 -0
  282. package/clis/confluence/page.js +1 -0
  283. package/clis/confluence/search.js +1 -0
  284. package/clis/confluence/shared.js +1 -0
  285. package/clis/confluence/update.js +1 -0
  286. package/clis/coupang/add-to-cart.js +86 -0
  287. package/clis/coupang/auth.js +16 -0
  288. package/clis/coupang/product.js +161 -0
  289. package/clis/coupang/search.js +385 -0
  290. package/clis/coupang/utils.js +1 -0
  291. package/clis/crates/crate.js +1 -0
  292. package/clis/crates/search.js +1 -0
  293. package/clis/crates/utils.js +1 -0
  294. package/clis/csdn/article.js +29 -0
  295. package/clis/csdn/columns.js +1 -0
  296. package/clis/csdn/login.js +1 -0
  297. package/clis/csdn/stats.js +71 -0
  298. package/clis/csdn/whoami.js +1 -0
  299. package/clis/cto51/article.js +1 -0
  300. package/clis/cto51/whoami.js +1 -0
  301. package/clis/ctrip/auth.js +1 -0
  302. package/clis/ctrip/flight.js +17 -0
  303. package/clis/ctrip/hotel-search.js +24 -0
  304. package/clis/ctrip/hotel-suggest.js +1 -0
  305. package/clis/ctrip/search.js +1 -0
  306. package/clis/ctrip/utils.js +119 -0
  307. package/clis/cursor/ask.js +22 -0
  308. package/clis/cursor/composer.js +12 -0
  309. package/clis/cursor/dump.js +1 -0
  310. package/clis/cursor/export.js +23 -0
  311. package/clis/cursor/extract-code.js +18 -0
  312. package/clis/cursor/history.js +26 -0
  313. package/clis/cursor/model.js +18 -0
  314. package/clis/cursor/new.js +1 -0
  315. package/clis/cursor/read.js +27 -0
  316. package/clis/cursor/screenshot.js +1 -0
  317. package/clis/cursor/send.js +12 -0
  318. package/clis/cursor/status.js +1 -0
  319. package/clis/dblp/author.js +1 -0
  320. package/clis/dblp/paper.js +1 -0
  321. package/clis/dblp/search.js +1 -0
  322. package/clis/dblp/utils.js +1 -0
  323. package/clis/dblp/venue.js +1 -0
  324. package/clis/deepseek/ask.js +1 -0
  325. package/clis/deepseek/auth.js +22 -0
  326. package/clis/deepseek/detail.js +1 -0
  327. package/clis/deepseek/history.js +1 -0
  328. package/clis/deepseek/new.js +1 -0
  329. package/clis/deepseek/read.js +1 -0
  330. package/clis/deepseek/send.js +50 -0
  331. package/clis/deepseek/status.js +1 -0
  332. package/clis/deepseek/utils.js +202 -0
  333. package/clis/defillama/protocol.js +1 -0
  334. package/clis/defillama/protocols.js +1 -0
  335. package/clis/defillama/utils.js +1 -0
  336. package/clis/devto/auth.js +9 -0
  337. package/clis/devto/latest.js +1 -0
  338. package/clis/devto/publish.js +17 -0
  339. package/clis/devto/read.js +3 -0
  340. package/clis/devto/stats.js +27 -0
  341. package/clis/devto/tag.js +1 -0
  342. package/clis/devto/top.js +1 -0
  343. package/clis/devto/user.js +1 -0
  344. package/clis/dianping/__fixtures__/search.html +168 -0
  345. package/clis/dianping/__fixtures__/shop.html +6 -0
  346. package/clis/dianping/auth.js +10 -0
  347. package/clis/dianping/cityResolver.js +4 -0
  348. package/clis/dianping/search.js +1 -0
  349. package/clis/dianping/shop.js +1 -0
  350. package/clis/dianping/utils.js +1 -0
  351. package/clis/dictionary/examples.js +1 -0
  352. package/clis/dictionary/search.js +1 -0
  353. package/clis/dictionary/synonyms.js +1 -0
  354. package/clis/discord-app/channels.js +1 -0
  355. package/clis/discord-app/delete.js +66 -0
  356. package/clis/discord-app/goto.js +1 -0
  357. package/clis/discord-app/members.js +21 -0
  358. package/clis/discord-app/read.js +1 -0
  359. package/clis/discord-app/search.js +29 -0
  360. package/clis/discord-app/send.js +10 -0
  361. package/clis/discord-app/servers.js +1 -0
  362. package/clis/discord-app/status.js +1 -0
  363. package/clis/discord-app/thread-read.js +1 -0
  364. package/clis/discord-app/threads.js +1 -0
  365. package/clis/discord-app/utils.js +226 -0
  366. package/clis/discord-web/auth.js +10 -0
  367. package/clis/discord-web/send.js +13 -0
  368. package/clis/dockerhub/image.js +1 -0
  369. package/clis/dockerhub/search.js +1 -0
  370. package/clis/dockerhub/utils.js +1 -0
  371. package/clis/dongchedi/__fixtures__/search.json +60 -0
  372. package/clis/dongchedi/__fixtures__/series-detail.json +911 -0
  373. package/clis/dongchedi/__fixtures__/series-score.json +1396 -0
  374. package/clis/dongchedi/koubei.js +1 -0
  375. package/clis/dongchedi/models.js +1 -0
  376. package/clis/dongchedi/score.js +1 -0
  377. package/clis/dongchedi/search.js +1 -0
  378. package/clis/dongchedi/series.js +1 -0
  379. package/clis/dongchedi/specs.js +1 -0
  380. package/clis/dongchedi/utils.js +1 -0
  381. package/clis/douban/article.js +53 -0
  382. package/clis/douban/auth.js +21 -0
  383. package/clis/douban/book-hot.js +1 -0
  384. package/clis/douban/download.js +1 -0
  385. package/clis/douban/marks.js +59 -0
  386. package/clis/douban/movie-hot.js +1 -0
  387. package/clis/douban/photos.js +1 -0
  388. package/clis/douban/reviews.js +53 -0
  389. package/clis/douban/search.js +1 -0
  390. package/clis/douban/subject.js +1 -0
  391. package/clis/douban/top250.js +50 -0
  392. package/clis/douban/utils.js +344 -0
  393. package/clis/doubao/ask.js +1 -0
  394. package/clis/doubao/auth.js +28 -0
  395. package/clis/doubao/detail.js +1 -0
  396. package/clis/doubao/history.js +1 -0
  397. package/clis/doubao/meeting-summary.js +1 -0
  398. package/clis/doubao/meeting-transcript.js +1 -0
  399. package/clis/doubao/new.js +1 -0
  400. package/clis/doubao/read.js +1 -0
  401. package/clis/doubao/send.js +1 -0
  402. package/clis/doubao/status.js +1 -0
  403. package/clis/doubao/utils.js +704 -0
  404. package/clis/doubao-app/ask.js +1 -0
  405. package/clis/doubao-app/dump.js +1 -0
  406. package/clis/doubao-app/new.js +1 -0
  407. package/clis/doubao-app/read.js +1 -0
  408. package/clis/doubao-app/screenshot.js +1 -0
  409. package/clis/doubao-app/send.js +1 -0
  410. package/clis/doubao-app/status.js +1 -0
  411. package/clis/doubao-app/utils.js +64 -0
  412. package/clis/douyin/_shared/browser-fetch.js +28 -0
  413. package/clis/douyin/_shared/creation-id.js +1 -0
  414. package/clis/douyin/_shared/evaluate-result.js +1 -0
  415. package/clis/douyin/_shared/imagex-upload.js +1 -0
  416. package/clis/douyin/_shared/public-api.js +1 -0
  417. package/clis/douyin/_shared/sts2.js +1 -0
  418. package/clis/douyin/_shared/text-extra.js +1 -0
  419. package/clis/douyin/_shared/timing.js +1 -0
  420. package/clis/douyin/_shared/tos-upload.js +5 -0
  421. package/clis/douyin/_shared/transcode.js +1 -0
  422. package/clis/douyin/_shared/types.js +1 -0
  423. package/clis/douyin/_shared/vod-upload.js +5 -0
  424. package/clis/douyin/activities.js +1 -0
  425. package/clis/douyin/auth.js +1 -0
  426. package/clis/douyin/collections.js +1 -0
  427. package/clis/douyin/delete.js +76 -0
  428. package/clis/douyin/draft.js +166 -0
  429. package/clis/douyin/drafts.js +1 -0
  430. package/clis/douyin/hashtag.js +1 -0
  431. package/clis/douyin/location.js +1 -0
  432. package/clis/douyin/profile.js +1 -0
  433. package/clis/douyin/publish-image.js +64 -0
  434. package/clis/douyin/publish.js +14 -0
  435. package/clis/douyin/search.js +51 -0
  436. package/clis/douyin/stats.js +1 -0
  437. package/clis/douyin/update.js +1 -0
  438. package/clis/douyin/user-videos.js +1 -0
  439. package/clis/douyin/videos.js +1 -0
  440. package/clis/duckduckgo/search.js +1 -0
  441. package/clis/duckduckgo/suggest.js +1 -0
  442. package/clis/eastmoney/_secid.js +1 -0
  443. package/clis/eastmoney/announcement.js +1 -0
  444. package/clis/eastmoney/article.js +1 -0
  445. package/clis/eastmoney/convertible.js +1 -0
  446. package/clis/eastmoney/etf.js +1 -0
  447. package/clis/eastmoney/holders.js +1 -0
  448. package/clis/eastmoney/hot-rank.js +30 -0
  449. package/clis/eastmoney/index-board.js +1 -0
  450. package/clis/eastmoney/kline.js +1 -0
  451. package/clis/eastmoney/kuaixun.js +1 -0
  452. package/clis/eastmoney/longhu.js +1 -0
  453. package/clis/eastmoney/money-flow.js +1 -0
  454. package/clis/eastmoney/northbound.js +1 -0
  455. package/clis/eastmoney/quote.js +1 -0
  456. package/clis/eastmoney/rank.js +1 -0
  457. package/clis/eastmoney/sectors.js +1 -0
  458. package/clis/eastmoney/whoami.js +1 -0
  459. package/clis/endoflife/product.js +1 -0
  460. package/clis/endoflife/utils.js +1 -0
  461. package/clis/facebook/__fixtures__/notifications-page.html +13 -0
  462. package/clis/facebook/add-friend.js +24 -0
  463. package/clis/facebook/auth.js +1 -0
  464. package/clis/facebook/comment.js +18 -0
  465. package/clis/facebook/events.js +26 -0
  466. package/clis/facebook/feed.js +209 -0
  467. package/clis/facebook/friends.js +24 -0
  468. package/clis/facebook/groups.js +32 -0
  469. package/clis/facebook/join-group.js +25 -0
  470. package/clis/facebook/like.js +29 -0
  471. package/clis/facebook/marketplace-inbox.js +34 -0
  472. package/clis/facebook/marketplace-listings.js +33 -0
  473. package/clis/facebook/memories.js +21 -0
  474. package/clis/facebook/notifications.js +31 -0
  475. package/clis/facebook/post.js +88 -0
  476. package/clis/facebook/profile.js +18 -0
  477. package/clis/facebook/search.js +22 -0
  478. package/clis/flathub/app.js +1 -0
  479. package/clis/flathub/search.js +1 -0
  480. package/clis/flathub/utils.js +1 -0
  481. package/clis/flomo/auth.js +22 -0
  482. package/clis/flomo/memos.js +13 -0
  483. package/clis/gemini/ask.js +1 -0
  484. package/clis/gemini/auth.js +14 -0
  485. package/clis/gemini/deep-research-result.js +4 -0
  486. package/clis/gemini/deep-research.js +1 -0
  487. package/clis/gemini/detail.js +1 -0
  488. package/clis/gemini/history.js +1 -0
  489. package/clis/gemini/image.js +3 -0
  490. package/clis/gemini/new.js +1 -0
  491. package/clis/gemini/read.js +1 -0
  492. package/clis/gemini/status.js +1 -0
  493. package/clis/gemini/utils.js +1234 -0
  494. package/clis/geogebra/add-circle.js +1 -0
  495. package/clis/geogebra/add-line.js +1 -0
  496. package/clis/geogebra/add-point.js +1 -0
  497. package/clis/geogebra/add-polygon.js +1 -0
  498. package/clis/geogebra/eval.js +1 -0
  499. package/clis/geogebra/hexagon.js +1 -0
  500. package/clis/geogebra/info.js +13 -0
  501. package/clis/geogebra/list.js +1 -0
  502. package/clis/geogebra/triangle.js +1 -0
  503. package/clis/geogebra/utils.js +99 -0
  504. package/clis/ghost/publish.js +1 -0
  505. package/clis/ghost/shared.js +1 -0
  506. package/clis/ghost/whoami.js +1 -0
  507. package/clis/gitee/auth.js +12 -0
  508. package/clis/gitee/index.js +1 -0
  509. package/clis/gitee/search.js +1 -0
  510. package/clis/gitee/trending.js +240 -0
  511. package/clis/gitee/user.js +71 -0
  512. package/clis/github/auth.js +7 -0
  513. package/clis/github-trending/repos.js +1 -0
  514. package/clis/google/news.js +1 -0
  515. package/clis/google/search.js +90 -0
  516. package/clis/google/suggest.js +1 -0
  517. package/clis/google/trends.js +1 -0
  518. package/clis/google/utils.js +1 -0
  519. package/clis/google-scholar/cite.js +20 -0
  520. package/clis/google-scholar/profile.js +36 -0
  521. package/clis/google-scholar/search.js +35 -0
  522. package/clis/goproxy/module.js +1 -0
  523. package/clis/goproxy/utils.js +1 -0
  524. package/clis/goproxy/versions.js +1 -0
  525. package/clis/gov-law/recent.js +1 -0
  526. package/clis/gov-law/search.js +14 -0
  527. package/clis/gov-law/shared.js +29 -0
  528. package/clis/gov-policy/__fixtures__/recent.html +16 -0
  529. package/clis/gov-policy/__fixtures__/search.html +41 -0
  530. package/clis/gov-policy/recent.js +8 -0
  531. package/clis/gov-policy/search.js +8 -0
  532. package/clis/gov-policy/utils.js +1 -0
  533. package/clis/grok/ask.js +1 -0
  534. package/clis/grok/auth.js +17 -0
  535. package/clis/grok/delete.js +1 -0
  536. package/clis/grok/detail.js +1 -0
  537. package/clis/grok/export-all.js +170 -0
  538. package/clis/grok/export-utils.js +1 -0
  539. package/clis/grok/export.js +106 -0
  540. package/clis/grok/history.js +1 -0
  541. package/clis/grok/image.js +119 -0
  542. package/clis/grok/image.test.ts +127 -0
  543. package/clis/grok/new.js +1 -0
  544. package/clis/grok/pin.js +1 -0
  545. package/clis/grok/read.js +1 -0
  546. package/clis/grok/send.js +1 -0
  547. package/clis/grok/status.js +1 -0
  548. package/clis/grok/utils.js +337 -0
  549. package/clis/guazi/__fixtures__/detail.html +7 -0
  550. package/clis/guazi/__fixtures__/list.html +5 -0
  551. package/clis/guazi/browse.js +1 -0
  552. package/clis/guazi/car.js +1 -0
  553. package/clis/guazi/utils.js +1 -0
  554. package/clis/hackernews/ask.js +1 -0
  555. package/clis/hackernews/auth.js +9 -0
  556. package/clis/hackernews/best.js +1 -0
  557. package/clis/hackernews/comment.js +61 -0
  558. package/clis/hackernews/jobs.js +1 -0
  559. package/clis/hackernews/new.js +1 -0
  560. package/clis/hackernews/read.js +11 -0
  561. package/clis/hackernews/search.js +1 -0
  562. package/clis/hackernews/show.js +1 -0
  563. package/clis/hackernews/submit.js +65 -0
  564. package/clis/hackernews/top.js +1 -0
  565. package/clis/hackernews/user.js +1 -0
  566. package/clis/hashnode/auth.js +11 -0
  567. package/clis/hashnode/publish.js +92 -0
  568. package/clis/hf/auth.js +12 -0
  569. package/clis/hf/datasets.js +1 -0
  570. package/clis/hf/models.js +1 -0
  571. package/clis/hf/paper.js +1 -0
  572. package/clis/hf/spaces.js +1 -0
  573. package/clis/hf/top.js +1 -0
  574. package/clis/homebrew/cask.js +1 -0
  575. package/clis/homebrew/formula.js +1 -0
  576. package/clis/homebrew/popular.js +1 -0
  577. package/clis/homebrew/utils.js +1 -0
  578. package/clis/huodongxing/events.js +1 -0
  579. package/clis/hupu/__fixtures__/hot-home.html +64 -0
  580. package/clis/hupu/auth.js +14 -0
  581. package/clis/hupu/detail.js +7 -0
  582. package/clis/hupu/hot.js +14 -0
  583. package/clis/hupu/like.js +1 -0
  584. package/clis/hupu/mentions.js +91 -0
  585. package/clis/hupu/reply.js +1 -0
  586. package/clis/hupu/search.js +1 -0
  587. package/clis/hupu/unlike.js +1 -0
  588. package/clis/hupu/utils.js +243 -0
  589. package/clis/imdb/person.js +140 -0
  590. package/clis/imdb/reviews.js +40 -0
  591. package/clis/imdb/search.js +113 -0
  592. package/clis/imdb/title.js +1 -0
  593. package/clis/imdb/top.js +1 -0
  594. package/clis/imdb/trending.js +1 -0
  595. package/clis/imdb/utils.js +162 -0
  596. package/clis/imooc/article.js +59 -0
  597. package/clis/imooc/login.js +1 -0
  598. package/clis/imooc/whoami.js +1 -0
  599. package/clis/indeed/job.js +20 -0
  600. package/clis/indeed/search.js +37 -0
  601. package/clis/indeed/utils.js +1 -0
  602. package/clis/infoq/article.js +19 -0
  603. package/clis/infoq/login.js +1 -0
  604. package/clis/infoq/whoami.js +1 -0
  605. package/clis/instagram/_shared/private-publish.js +75 -0
  606. package/clis/instagram/_shared/protocol-capture.js +180 -0
  607. package/clis/instagram/_shared/runtime-info.js +33 -0
  608. package/clis/instagram/auth.js +22 -0
  609. package/clis/instagram/collection-create.js +38 -0
  610. package/clis/instagram/collection-delete.js +72 -0
  611. package/clis/instagram/comment.js +26 -0
  612. package/clis/instagram/detail.js +2 -0
  613. package/clis/instagram/download.js +83 -0
  614. package/clis/instagram/explore.js +27 -0
  615. package/clis/instagram/follow.js +24 -0
  616. package/clis/instagram/followers.js +30 -0
  617. package/clis/instagram/following.js +74 -0
  618. package/clis/instagram/like.js +25 -0
  619. package/clis/instagram/note.js +162 -0
  620. package/clis/instagram/post.js +718 -0
  621. package/clis/instagram/profile.js +25 -0
  622. package/clis/instagram/reel.js +452 -0
  623. package/clis/instagram/save.js +25 -0
  624. package/clis/instagram/saved.js +37 -0
  625. package/clis/instagram/search.js +23 -0
  626. package/clis/instagram/story.js +21 -0
  627. package/clis/instagram/unfollow.js +21 -0
  628. package/clis/instagram/unlike.js +25 -0
  629. package/clis/instagram/unsave.js +25 -0
  630. package/clis/instagram/user.js +1 -0
  631. package/clis/jd/add-cart.js +22 -0
  632. package/clis/jd/auth.js +12 -0
  633. package/clis/jd/cart.js +59 -0
  634. package/clis/jd/detail.js +42 -0
  635. package/clis/jd/item.js +98 -0
  636. package/clis/jd/item.test.ts +517 -0
  637. package/clis/jd/reviews.js +31 -0
  638. package/clis/jd/search.js +42 -0
  639. package/clis/jianshu/article.js +1 -0
  640. package/clis/jianshu/login.js +1 -0
  641. package/clis/jianshu/notebooks.js +1 -0
  642. package/clis/jianshu/whoami.js +1 -0
  643. package/clis/jianyu/auth.js +28 -0
  644. package/clis/jianyu/detail.js +1 -0
  645. package/clis/jianyu/search.js +73 -0
  646. package/clis/jianyu/shared/china-bid-search.js +86 -0
  647. package/clis/jianyu/shared/procurement-contract.js +1 -0
  648. package/clis/jianyu/shared/procurement-detail.js +18 -0
  649. package/clis/jike/auth.js +19 -0
  650. package/clis/jike/comment.js +82 -0
  651. package/clis/jike/create.js +83 -0
  652. package/clis/jike/feed.js +32 -0
  653. package/clis/jike/like.js +38 -0
  654. package/clis/jike/notifications.js +115 -0
  655. package/clis/jike/post.js +33 -0
  656. package/clis/jike/repost.js +67 -0
  657. package/clis/jike/search.js +29 -0
  658. package/clis/jike/topic.js +20 -0
  659. package/clis/jike/user.js +19 -0
  660. package/clis/jike/utils.js +15 -0
  661. package/clis/jimeng/auth.js +13 -0
  662. package/clis/jimeng/generate.js +60 -0
  663. package/clis/jimeng/history.js +32 -0
  664. package/clis/jimeng/new.js +26 -0
  665. package/clis/jimeng/workspaces.js +22 -0
  666. package/clis/jira/attachments.js +1 -0
  667. package/clis/jira/comments.js +1 -0
  668. package/clis/jira/issue.js +1 -0
  669. package/clis/jira/links.js +1 -0
  670. package/clis/jira/search.js +1 -0
  671. package/clis/jira/shared.js +1 -0
  672. package/clis/juejin/article.js +5 -0
  673. package/clis/juejin/categories.js +1 -0
  674. package/clis/juejin/hot.js +1 -0
  675. package/clis/juejin/login.js +1 -0
  676. package/clis/juejin/recommend.js +1 -0
  677. package/clis/juejin/stats.js +53 -0
  678. package/clis/juejin/tags.js +1 -0
  679. package/clis/juejin/utils.js +1 -0
  680. package/clis/juejin/whoami.js +1 -0
  681. package/clis/ke/auth.js +14 -0
  682. package/clis/ke/chengjiao.js +45 -0
  683. package/clis/ke/ershoufang.js +50 -0
  684. package/clis/ke/utils.js +21 -0
  685. package/clis/ke/xiaoqu.js +45 -0
  686. package/clis/ke/zufang.js +50 -0
  687. package/clis/kimi/_utils.js +38 -0
  688. package/clis/kimi/audit-extras.js +64 -0
  689. package/clis/kimi/auth.js +17 -0
  690. package/clis/kimi/chat.js +77 -0
  691. package/clis/kimi/storage.js +14 -0
  692. package/clis/kimi/ui.js +89 -0
  693. package/clis/kimi/usage.js +51 -0
  694. package/clis/kuaishou/auth.js +1 -0
  695. package/clis/kuaishou/publish.js +53 -0
  696. package/clis/lesswrong/_helpers.js +9 -0
  697. package/clis/lesswrong/comments.js +9 -0
  698. package/clis/lesswrong/curated.js +5 -0
  699. package/clis/lesswrong/frontpage.js +5 -0
  700. package/clis/lesswrong/new.js +5 -0
  701. package/clis/lesswrong/read.js +5 -0
  702. package/clis/lesswrong/sequences.js +5 -0
  703. package/clis/lesswrong/shortform.js +5 -0
  704. package/clis/lesswrong/tag.js +5 -0
  705. package/clis/lesswrong/tags.js +5 -0
  706. package/clis/lesswrong/top-month.js +5 -0
  707. package/clis/lesswrong/top-week.js +5 -0
  708. package/clis/lesswrong/top-year.js +5 -0
  709. package/clis/lesswrong/top.js +5 -0
  710. package/clis/lesswrong/user-posts.js +5 -0
  711. package/clis/lesswrong/user.js +5 -0
  712. package/clis/lichess/top.js +1 -0
  713. package/clis/lichess/user.js +1 -0
  714. package/clis/lichess/utils.js +1 -0
  715. package/clis/linkedin/auth.js +27 -0
  716. package/clis/linkedin/comment.js +1 -0
  717. package/clis/linkedin/connect.js +244 -0
  718. package/clis/linkedin/create.js +113 -0
  719. package/clis/linkedin/follow.js +1 -0
  720. package/clis/linkedin/inbox.js +1 -0
  721. package/clis/linkedin/job-detail.js +40 -0
  722. package/clis/linkedin/jobs-preferences.js +34 -0
  723. package/clis/linkedin/like.js +1 -0
  724. package/clis/linkedin/notifications.js +1 -0
  725. package/clis/linkedin/people-search.js +1 -0
  726. package/clis/linkedin/post-analytics.js +1 -0
  727. package/clis/linkedin/post-comments.js +1 -0
  728. package/clis/linkedin/post-detail.js +1 -0
  729. package/clis/linkedin/posts-core.js +138 -0
  730. package/clis/linkedin/posts.js +1 -0
  731. package/clis/linkedin/profile-analytics.js +1 -0
  732. package/clis/linkedin/profile-api.js +218 -0
  733. package/clis/linkedin/profile-experience.js +1 -0
  734. package/clis/linkedin/profile-projects.js +1 -0
  735. package/clis/linkedin/profile-read.js +3 -0
  736. package/clis/linkedin/reply.js +1 -0
  737. package/clis/linkedin/repost.js +1 -0
  738. package/clis/linkedin/safe-send.js +155 -0
  739. package/clis/linkedin/salesnav-inbox.js +21 -0
  740. package/clis/linkedin/salesnav-message.js +33 -0
  741. package/clis/linkedin/salesnav-search.js +15 -0
  742. package/clis/linkedin/salesnav-thread.js +1 -0
  743. package/clis/linkedin/search-api.js +42 -0
  744. package/clis/linkedin/search.js +50 -0
  745. package/clis/linkedin/sent-invitations.js +46 -0
  746. package/clis/linkedin/services-read.js +57 -0
  747. package/clis/linkedin/shared.js +10 -0
  748. package/clis/linkedin/social-api.js +260 -0
  749. package/clis/linkedin/thread-snapshot.js +81 -0
  750. package/clis/linkedin/timeline.js +37 -0
  751. package/clis/linkedin-learning/auth.js +27 -0
  752. package/clis/linkedin-learning/course.js +17 -0
  753. package/clis/linkedin-learning/search.js +17 -0
  754. package/clis/linkedin-learning/trending.js +17 -0
  755. package/clis/linux-do/auth.js +20 -0
  756. package/clis/linux-do/categories.js +1 -0
  757. package/clis/linux-do/feed.js +19 -0
  758. package/clis/linux-do/search.js +1 -0
  759. package/clis/linux-do/tags.js +1 -0
  760. package/clis/linux-do/topic-content.js +28 -0
  761. package/clis/linux-do/topic.js +1 -0
  762. package/clis/linux-do/user-posts.js +1 -0
  763. package/clis/linux-do/user-topics.js +1 -0
  764. package/clis/lobsters/active.js +1 -0
  765. package/clis/lobsters/domain.js +1 -0
  766. package/clis/lobsters/hot.js +1 -0
  767. package/clis/lobsters/newest.js +1 -0
  768. package/clis/lobsters/read.js +11 -0
  769. package/clis/lobsters/tag.js +1 -0
  770. package/clis/maimai/auth.js +19 -0
  771. package/clis/maimai/search-talents.js +37 -0
  772. package/clis/manus/_utils.js +28 -0
  773. package/clis/manus/auth.js +20 -0
  774. package/clis/manus/connectors.js +4 -0
  775. package/clis/manus/credits.js +4 -0
  776. package/clis/manus/list.js +7 -0
  777. package/clis/manus/read.js +7 -0
  778. package/clis/manus/skills.js +4 -0
  779. package/clis/manus/status.js +8 -0
  780. package/clis/mastodon/post.js +1 -0
  781. package/clis/mastodon/shared.js +48 -0
  782. package/clis/mastodon/whoami.js +1 -0
  783. package/clis/maven/artifact.js +1 -0
  784. package/clis/maven/search.js +1 -0
  785. package/clis/maven/utils.js +1 -0
  786. package/clis/mdn/search.js +1 -0
  787. package/clis/medium/article.js +12 -0
  788. package/clis/medium/feed.js +1 -0
  789. package/clis/medium/login.js +1 -0
  790. package/clis/medium/search.js +1 -0
  791. package/clis/medium/stats.js +56 -0
  792. package/clis/medium/tag.js +1 -0
  793. package/clis/medium/user.js +1 -0
  794. package/clis/medium/utils.js +62 -0
  795. package/clis/medium/whoami.js +1 -0
  796. package/clis/mubu/doc.js +1 -0
  797. package/clis/mubu/docs.js +1 -0
  798. package/clis/mubu/notes.js +1 -0
  799. package/clis/mubu/recent.js +1 -0
  800. package/clis/mubu/search.js +1 -0
  801. package/clis/mubu/utils.js +31 -0
  802. package/clis/note/auth.js +12 -0
  803. package/clis/note/note-utils.js +2 -0
  804. package/clis/note/publish.js +17 -0
  805. package/clis/notebooklm/add-source.js +46 -0
  806. package/clis/notebooklm/auth.js +21 -0
  807. package/clis/notebooklm/create.js +1 -0
  808. package/clis/notebooklm/current.js +1 -0
  809. package/clis/notebooklm/generate-audio.js +1 -0
  810. package/clis/notebooklm/generate-slides.js +1 -0
  811. package/clis/notebooklm/get.js +1 -0
  812. package/clis/notebooklm/history.js +1 -0
  813. package/clis/notebooklm/list.js +1 -0
  814. package/clis/notebooklm/note-list.js +1 -0
  815. package/clis/notebooklm/notes-get.js +1 -0
  816. package/clis/notebooklm/open.js +1 -0
  817. package/clis/notebooklm/rpc.js +36 -0
  818. package/clis/notebooklm/shared.js +1 -0
  819. package/clis/notebooklm/source-fulltext.js +1 -0
  820. package/clis/notebooklm/source-get.js +1 -0
  821. package/clis/notebooklm/source-guide.js +1 -0
  822. package/clis/notebooklm/source-list.js +1 -0
  823. package/clis/notebooklm/status.js +1 -0
  824. package/clis/notebooklm/summary.js +1 -0
  825. package/clis/notebooklm/utils.js +172 -0
  826. package/clis/notebooklm/write-note.js +1 -0
  827. package/clis/nowcoder/auth.js +24 -0
  828. package/clis/nowcoder/comment.js +1 -0
  829. package/clis/nowcoder/comments.js +1 -0
  830. package/clis/nowcoder/companies.js +1 -0
  831. package/clis/nowcoder/creators.js +1 -0
  832. package/clis/nowcoder/delete.js +1 -0
  833. package/clis/nowcoder/detail.js +46 -0
  834. package/clis/nowcoder/dm-list.js +1 -0
  835. package/clis/nowcoder/dm-read.js +1 -0
  836. package/clis/nowcoder/dm-send.js +1 -0
  837. package/clis/nowcoder/drafts.js +1 -0
  838. package/clis/nowcoder/experience.js +20 -0
  839. package/clis/nowcoder/hot.js +1 -0
  840. package/clis/nowcoder/inbox.js +1 -0
  841. package/clis/nowcoder/jobs.js +1 -0
  842. package/clis/nowcoder/like.js +1 -0
  843. package/clis/nowcoder/my.js +1 -0
  844. package/clis/nowcoder/notifications.js +16 -0
  845. package/clis/nowcoder/papers.js +22 -0
  846. package/clis/nowcoder/post.js +1 -0
  847. package/clis/nowcoder/practice.js +21 -0
  848. package/clis/nowcoder/recommend.js +1 -0
  849. package/clis/nowcoder/referral.js +21 -0
  850. package/clis/nowcoder/salary.js +22 -0
  851. package/clis/nowcoder/search.js +31 -0
  852. package/clis/nowcoder/suggest.js +17 -0
  853. package/clis/nowcoder/topics.js +1 -0
  854. package/clis/nowcoder/trending.js +1 -0
  855. package/clis/nowcoder/utils.js +68 -0
  856. package/clis/npm/downloads.js +1 -0
  857. package/clis/npm/package.js +1 -0
  858. package/clis/npm/search.js +1 -0
  859. package/clis/npm/utils.js +1 -0
  860. package/clis/nuget/package.js +1 -0
  861. package/clis/nuget/search.js +1 -0
  862. package/clis/nuget/utils.js +1 -0
  863. package/clis/nvd/cve.js +1 -0
  864. package/clis/oeis/search.js +1 -0
  865. package/clis/oeis/sequence.js +1 -0
  866. package/clis/oeis/utils.js +1 -0
  867. package/clis/ones/common.js +23 -0
  868. package/clis/ones/enrich-tasks.js +1 -0
  869. package/clis/ones/login.js +2 -0
  870. package/clis/ones/logout.js +1 -0
  871. package/clis/ones/me.js +1 -0
  872. package/clis/ones/my-tasks.js +1 -0
  873. package/clis/ones/resolve-labels.js +1 -0
  874. package/clis/ones/task-helpers.js +1 -0
  875. package/clis/ones/task.js +1 -0
  876. package/clis/ones/tasks.js +1 -0
  877. package/clis/ones/token-info.js +1 -0
  878. package/clis/ones/worklog.js +14 -0
  879. package/clis/openalex/search.js +1 -0
  880. package/clis/openalex/utils.js +1 -0
  881. package/clis/openalex/work.js +1 -0
  882. package/clis/openfda/drug-label.js +1 -0
  883. package/clis/openfda/food-recall.js +1 -0
  884. package/clis/openfda/utils.js +1 -0
  885. package/clis/openreview/author.js +1 -0
  886. package/clis/openreview/paper.js +1 -0
  887. package/clis/openreview/reviews.js +4 -0
  888. package/clis/openreview/search.js +1 -0
  889. package/clis/openreview/utils.js +1 -0
  890. package/clis/openreview/venue.js +1 -0
  891. package/clis/oschina/article.js +1 -0
  892. package/clis/oschina/catalogs.js +1 -0
  893. package/clis/oschina/login.js +1 -0
  894. package/clis/oschina/stats.js +54 -0
  895. package/clis/oschina/whoami.js +1 -0
  896. package/clis/osv/query.js +1 -0
  897. package/clis/osv/utils.js +1 -0
  898. package/clis/osv/vulnerability.js +1 -0
  899. package/clis/packagist/package.js +1 -0
  900. package/clis/packagist/search.js +1 -0
  901. package/clis/packagist/utils.js +1 -0
  902. package/clis/paperreview/feedback.js +1 -0
  903. package/clis/paperreview/review.js +1 -0
  904. package/clis/paperreview/submit.js +1 -0
  905. package/clis/paperreview/utils.js +1 -0
  906. package/clis/pinterest/api.js +1 -0
  907. package/clis/pinterest/auth.js +1 -0
  908. package/clis/pinterest/boards.js +1 -0
  909. package/clis/pinterest/client.js +20 -0
  910. package/clis/pinterest/publish.js +13 -0
  911. package/clis/pixiv/auth.js +17 -0
  912. package/clis/pixiv/detail.js +1 -0
  913. package/clis/pixiv/download.js +1 -0
  914. package/clis/pixiv/illusts.js +1 -0
  915. package/clis/pixiv/ranking.js +26 -0
  916. package/clis/pixiv/search.js +1 -0
  917. package/clis/pixiv/user.js +1 -0
  918. package/clis/pixiv/utils.js +18 -0
  919. package/clis/powerchina/auth.js +17 -0
  920. package/clis/powerchina/search.js +1 -0
  921. package/clis/producthunt/browse.js +54 -0
  922. package/clis/producthunt/hot.js +64 -0
  923. package/clis/producthunt/posts.js +1 -0
  924. package/clis/producthunt/today.js +1 -0
  925. package/clis/producthunt/utils.js +1 -0
  926. package/clis/pubmed/article.js +1 -0
  927. package/clis/pubmed/author.js +1 -0
  928. package/clis/pubmed/citations.js +1 -0
  929. package/clis/pubmed/clinical-trial.js +1 -0
  930. package/clis/pubmed/journal.js +1 -0
  931. package/clis/pubmed/mesh.js +1 -0
  932. package/clis/pubmed/related.js +1 -0
  933. package/clis/pubmed/review.js +1 -0
  934. package/clis/pubmed/search.js +1 -0
  935. package/clis/pubmed/utils.js +1 -0
  936. package/clis/pypi/downloads.js +1 -0
  937. package/clis/pypi/package.js +1 -0
  938. package/clis/pypi/utils.js +1 -0
  939. package/clis/qiita/auth.js +1 -0
  940. package/clis/qiita/gql.js +32 -0
  941. package/clis/qiita/publish.js +7 -0
  942. package/clis/qiita/stats.js +37 -0
  943. package/clis/qoder/_utils.js +113 -0
  944. package/clis/qoder/composer.js +1 -0
  945. package/clis/qoder/history.js +25 -0
  946. package/clis/qoder/quest.js +1 -0
  947. package/clis/qoder/read.js +1 -0
  948. package/clis/qoder/status.js +1 -0
  949. package/clis/qoder/ui.js +59 -0
  950. package/clis/quark/auth.js +16 -0
  951. package/clis/quark/ls.js +1 -0
  952. package/clis/quark/mkdir.js +1 -0
  953. package/clis/quark/mv.js +1 -0
  954. package/clis/quark/rename.js +1 -0
  955. package/clis/quark/rm.js +1 -0
  956. package/clis/quark/save.js +1 -0
  957. package/clis/quark/share-tree.js +1 -0
  958. package/clis/quark/utils.js +13 -0
  959. package/clis/quora/create-answer.js +22 -0
  960. package/clis/quora/create-question.js +24 -0
  961. package/clis/quora/shared.js +43 -0
  962. package/clis/quora/whoami.js +1 -0
  963. package/clis/qwen/ask.js +1 -0
  964. package/clis/qwen/auth.js +17 -0
  965. package/clis/qwen/detail.js +1 -0
  966. package/clis/qwen/history.js +1 -0
  967. package/clis/qwen/image.js +31 -0
  968. package/clis/qwen/new.js +1 -0
  969. package/clis/qwen/read.js +1 -0
  970. package/clis/qwen/send.js +1 -0
  971. package/clis/qwen/status.js +1 -0
  972. package/clis/qwen/utils.js +185 -0
  973. package/clis/reddit/auth.js +17 -0
  974. package/clis/reddit/comment.js +36 -0
  975. package/clis/reddit/frontpage.js +40 -0
  976. package/clis/reddit/home.js +32 -0
  977. package/clis/reddit/hot.js +46 -0
  978. package/clis/reddit/popular.js +46 -0
  979. package/clis/reddit/read.js +398 -0
  980. package/clis/reddit/reply.js +56 -0
  981. package/clis/reddit/save.js +30 -0
  982. package/clis/reddit/saved.js +24 -0
  983. package/clis/reddit/search.js +51 -0
  984. package/clis/reddit/submit.js +42 -0
  985. package/clis/reddit/subreddit-info.js +29 -0
  986. package/clis/reddit/subreddit.js +52 -0
  987. package/clis/reddit/subscribe.js +29 -0
  988. package/clis/reddit/subscribed.js +68 -0
  989. package/clis/reddit/upvote.js +43 -0
  990. package/clis/reddit/upvoted.js +24 -0
  991. package/clis/reddit/user-comments.js +20 -0
  992. package/clis/reddit/user-posts.js +17 -0
  993. package/clis/reddit/user.js +20 -0
  994. package/clis/reddit/whoami.js +19 -0
  995. package/clis/rednote/auth.js +19 -0
  996. package/clis/rednote/comments.js +1 -0
  997. package/clis/rednote/download.js +1 -0
  998. package/clis/rednote/feed.js +1 -0
  999. package/clis/rednote/note.js +1 -0
  1000. package/clis/rednote/notifications.js +67 -0
  1001. package/clis/rednote/search.js +32 -0
  1002. package/clis/rednote/user.js +1 -0
  1003. package/clis/rest-countries/country.js +1 -0
  1004. package/clis/rest-countries/region.js +1 -0
  1005. package/clis/rest-countries/utils.js +1 -0
  1006. package/clis/reuters/article-detail.js +1 -0
  1007. package/clis/reuters/auth.js +39 -0
  1008. package/clis/reuters/search.js +1 -0
  1009. package/clis/reuters/utils.js +50 -0
  1010. package/clis/rfc/rfc.js +1 -0
  1011. package/clis/rfc/utils.js +1 -0
  1012. package/clis/rubygems/gem.js +1 -0
  1013. package/clis/rubygems/search.js +1 -0
  1014. package/clis/rubygems/utils.js +1 -0
  1015. package/clis/segmentfault/_signed-request.js +43 -0
  1016. package/clis/segmentfault/article.js +3 -0
  1017. package/clis/segmentfault/channels.js +1 -0
  1018. package/clis/segmentfault/login.js +1 -0
  1019. package/clis/segmentfault/stats.js +82 -0
  1020. package/clis/segmentfault/tags.js +1 -0
  1021. package/clis/segmentfault/whoami.js +1 -0
  1022. package/clis/semanticscholar/citations.js +1 -0
  1023. package/clis/semanticscholar/paper.js +1 -0
  1024. package/clis/semanticscholar/recommendations.js +1 -0
  1025. package/clis/semanticscholar/search.js +1 -0
  1026. package/clis/semanticscholar/utils.js +1 -0
  1027. package/clis/sinablog/article.js +1 -0
  1028. package/clis/sinablog/hot.js +1 -0
  1029. package/clis/sinablog/search.js +1 -0
  1030. package/clis/sinablog/user.js +1 -0
  1031. package/clis/sinablog/utils.js +153 -0
  1032. package/clis/sinafinance/news.js +1 -0
  1033. package/clis/sinafinance/rolling-news.js +20 -0
  1034. package/clis/sinafinance/stock-rank.js +41 -0
  1035. package/clis/sinafinance/stock.js +1 -0
  1036. package/clis/slock/attachment-download.js +1 -0
  1037. package/clis/slock/attachment-upload.js +34 -0
  1038. package/clis/slock/attachment-url.js +1 -0
  1039. package/clis/slock/auth-verify.js +1 -0
  1040. package/clis/slock/bookmark-add.js +11 -0
  1041. package/clis/slock/bookmark-list.js +10 -0
  1042. package/clis/slock/bookmark-remove.js +7 -0
  1043. package/clis/slock/channel-action.js +1 -0
  1044. package/clis/slock/channel-archive.js +1 -0
  1045. package/clis/slock/channel-create.js +1 -0
  1046. package/clis/slock/channel-files.js +1 -0
  1047. package/clis/slock/channel-info.js +1 -0
  1048. package/clis/slock/channel-join.js +1 -0
  1049. package/clis/slock/channel-leave.js +1 -0
  1050. package/clis/slock/channel-list.js +1 -0
  1051. package/clis/slock/channel-mark.js +1 -0
  1052. package/clis/slock/channel-members.js +1 -0
  1053. package/clis/slock/channel-unarchive.js +1 -0
  1054. package/clis/slock/dm-list.js +1 -0
  1055. package/clis/slock/errors.js +1 -0
  1056. package/clis/slock/in-page.js +113 -0
  1057. package/clis/slock/inbox-done.js +9 -0
  1058. package/clis/slock/inbox-read-all.js +1 -0
  1059. package/clis/slock/inbox.js +1 -0
  1060. package/clis/slock/login.js +1 -0
  1061. package/clis/slock/message-read.js +61 -0
  1062. package/clis/slock/message-search.js +24 -0
  1063. package/clis/slock/message-send.js +55 -0
  1064. package/clis/slock/reaction-add.js +1 -0
  1065. package/clis/slock/reaction-remove.js +1 -0
  1066. package/clis/slock/resolve.js +1 -0
  1067. package/clis/slock/server-list.js +9 -0
  1068. package/clis/slock/server-use.js +18 -0
  1069. package/clis/slock/shared.js +1 -0
  1070. package/clis/slock/task-claim.js +14 -0
  1071. package/clis/slock/task-convert.js +35 -0
  1072. package/clis/slock/task-create.js +24 -0
  1073. package/clis/slock/task-delete.js +9 -0
  1074. package/clis/slock/task-get.js +11 -0
  1075. package/clis/slock/task-list-server.js +12 -0
  1076. package/clis/slock/task-list.js +14 -0
  1077. package/clis/slock/task-status.js +19 -0
  1078. package/clis/slock/task-unclaim.js +13 -0
  1079. package/clis/slock/thread-done.js +1 -0
  1080. package/clis/slock/thread-follow.js +1 -0
  1081. package/clis/slock/thread-list.js +1 -0
  1082. package/clis/slock/thread-state.js +1 -0
  1083. package/clis/slock/thread-undone.js +1 -0
  1084. package/clis/slock/thread-unfollow.js +1 -0
  1085. package/clis/slock/unread-summary.js +18 -0
  1086. package/clis/slock/whoami.js +1 -0
  1087. package/clis/smzdm/search.js +71 -0
  1088. package/clis/sohu/article.js +1 -0
  1089. package/clis/sohu/attributes.js +1 -0
  1090. package/clis/sohu/categories.js +1 -0
  1091. package/clis/sohu/channels.js +1 -0
  1092. package/clis/sohu/columns.js +1 -0
  1093. package/clis/sohu/login.js +1 -0
  1094. package/clis/sohu/mpbp.js +1 -0
  1095. package/clis/sohu/stats.js +95 -0
  1096. package/clis/sohu/topics.js +1 -0
  1097. package/clis/sohu/whoami.js +1 -0
  1098. package/clis/spotify/spotify.js +1 -0
  1099. package/clis/spotify/utils.js +8 -0
  1100. package/clis/stackoverflow/bounties.js +1 -0
  1101. package/clis/stackoverflow/hot.js +1 -0
  1102. package/clis/stackoverflow/read.js +13 -0
  1103. package/clis/stackoverflow/related.js +1 -0
  1104. package/clis/stackoverflow/search.js +1 -0
  1105. package/clis/stackoverflow/tag.js +1 -0
  1106. package/clis/stackoverflow/unanswered.js +1 -0
  1107. package/clis/stackoverflow/user.js +1 -0
  1108. package/clis/stackoverflow/utils.js +1 -0
  1109. package/clis/steam/app.js +1 -0
  1110. package/clis/steam/search.js +1 -0
  1111. package/clis/steam/top-sellers.js +1 -0
  1112. package/clis/steam/utils.js +1 -0
  1113. package/clis/substack/auth.js +11 -0
  1114. package/clis/substack/feed.js +1 -0
  1115. package/clis/substack/post-utils.js +2 -0
  1116. package/clis/substack/publication.js +1 -0
  1117. package/clis/substack/publish.js +10 -0
  1118. package/clis/substack/search.js +1 -0
  1119. package/clis/substack/utils.js +108 -0
  1120. package/clis/suno/auth.js +21 -0
  1121. package/clis/suno/download.js +17 -0
  1122. package/clis/suno/generate.js +4 -0
  1123. package/clis/suno/list.js +14 -0
  1124. package/clis/suno/status.js +1 -0
  1125. package/clis/suno/utils.js +102 -0
  1126. package/clis/taobao/add-cart.js +93 -0
  1127. package/clis/taobao/auth.js +8 -0
  1128. package/clis/taobao/cart.js +68 -0
  1129. package/clis/taobao/detail.js +48 -0
  1130. package/clis/taobao/reviews.js +52 -0
  1131. package/clis/taobao/search.js +64 -0
  1132. package/clis/tdx/hot-rank.js +25 -0
  1133. package/clis/telegram/send.js +18 -0
  1134. package/clis/telegram/shared.js +21 -0
  1135. package/clis/telegram/whoami.js +1 -0
  1136. package/clis/test-utils.js +1 -0
  1137. package/clis/threads/post.js +152 -0
  1138. package/clis/threads/shared.js +27 -0
  1139. package/clis/threads/whoami.js +1 -0
  1140. package/clis/ths/hot-rank.js +27 -0
  1141. package/clis/tieba/hot.js +16 -0
  1142. package/clis/tieba/posts.js +1 -0
  1143. package/clis/tieba/read.js +84 -0
  1144. package/clis/tieba/search.js +54 -0
  1145. package/clis/tieba/utils.js +1 -0
  1146. package/clis/tiktok/auth.js +30 -0
  1147. package/clis/tiktok/comment.js +69 -0
  1148. package/clis/tiktok/creator-videos.js +45 -0
  1149. package/clis/tiktok/explore.js +76 -0
  1150. package/clis/tiktok/follow.js +49 -0
  1151. package/clis/tiktok/following.js +103 -0
  1152. package/clis/tiktok/friends.js +79 -0
  1153. package/clis/tiktok/like.js +19 -0
  1154. package/clis/tiktok/live.js +79 -0
  1155. package/clis/tiktok/notifications.js +77 -0
  1156. package/clis/tiktok/profile.js +26 -0
  1157. package/clis/tiktok/publish.js +82 -0
  1158. package/clis/tiktok/save.js +15 -0
  1159. package/clis/tiktok/search.js +24 -0
  1160. package/clis/tiktok/unfollow.js +59 -0
  1161. package/clis/tiktok/unlike.js +19 -0
  1162. package/clis/tiktok/unsave.js +17 -0
  1163. package/clis/tiktok/user.js +143 -0
  1164. package/clis/tiktok/utils.js +272 -0
  1165. package/clis/toutiao/article.js +1 -0
  1166. package/clis/toutiao/articles.js +6 -0
  1167. package/clis/toutiao/auth.js +50 -0
  1168. package/clis/toutiao/hot.js +1 -0
  1169. package/clis/toutiao/utils.js +2 -0
  1170. package/clis/trae-cn/activity.js +1 -0
  1171. package/clis/trae-cn/approve.js +1 -0
  1172. package/clis/trae-cn/ask.js +1 -0
  1173. package/clis/trae-cn/dump.js +1 -0
  1174. package/clis/trae-cn/export.js +3 -0
  1175. package/clis/trae-cn/model.js +1 -0
  1176. package/clis/trae-cn/new.js +1 -0
  1177. package/clis/trae-cn/read.js +1 -0
  1178. package/clis/trae-cn/screenshot.js +1 -0
  1179. package/clis/trae-cn/select-model.js +1 -0
  1180. package/clis/trae-cn/send.js +1 -0
  1181. package/clis/trae-cn/setup.js +1 -0
  1182. package/clis/trae-cn/status.js +1 -0
  1183. package/clis/trae-cn/targets.js +1 -0
  1184. package/clis/trae-cn/utils.js +456 -0
  1185. package/clis/trae-cn/watch.js +3 -0
  1186. package/clis/trae-solo/_actions.js +41 -0
  1187. package/clis/trae-solo/_fs.js +6 -0
  1188. package/clis/trae-solo/_state.js +2 -0
  1189. package/clis/trae-solo/automation.js +43 -0
  1190. package/clis/trae-solo/history.js +15 -0
  1191. package/clis/trae-solo/mode.js +31 -0
  1192. package/clis/trae-solo/model.js +50 -0
  1193. package/clis/trae-solo/renderer-storage.js +11 -0
  1194. package/clis/trae-solo/settings.js +1 -0
  1195. package/clis/trae-solo/skill-fs.js +1 -0
  1196. package/clis/trae-solo/skill.js +81 -0
  1197. package/clis/trae-solo/state-fs.js +2 -0
  1198. package/clis/trae-solo/status.js +1 -0
  1199. package/clis/trae-solo/task-fs.js +5 -0
  1200. package/clis/trae-solo/user-rules.js +1 -0
  1201. package/clis/trae-solo/workspaces-fs.js +1 -0
  1202. package/clis/tumblr/auth.js +24 -0
  1203. package/clis/tumblr/publish.js +14 -0
  1204. package/clis/tvmaze/search.js +1 -0
  1205. package/clis/tvmaze/show.js +1 -0
  1206. package/clis/tvmaze/utils.js +1 -0
  1207. package/clis/twitter/accept.js +116 -0
  1208. package/clis/twitter/article.js +116 -0
  1209. package/clis/twitter/auth.js +4 -0
  1210. package/clis/twitter/block.js +62 -0
  1211. package/clis/twitter/bookmark-folder.js +4 -0
  1212. package/clis/twitter/bookmark-folders.js +4 -0
  1213. package/clis/twitter/bookmark.js +44 -0
  1214. package/clis/twitter/bookmarks.js +27 -0
  1215. package/clis/twitter/delete.js +36 -0
  1216. package/clis/twitter/device-follow.js +13 -0
  1217. package/clis/twitter/dm-list.js +1 -0
  1218. package/clis/twitter/dm-read.js +1 -0
  1219. package/clis/twitter/dm-send.js +13 -0
  1220. package/clis/twitter/dm-shared.js +6 -0
  1221. package/clis/twitter/download.js +38 -0
  1222. package/clis/twitter/follow-batch.js +43 -0
  1223. package/clis/twitter/follow.js +39 -0
  1224. package/clis/twitter/followers.js +59 -0
  1225. package/clis/twitter/following.js +4 -0
  1226. package/clis/twitter/hide-reply.js +57 -0
  1227. package/clis/twitter/like.js +48 -0
  1228. package/clis/twitter/likes.js +14 -0
  1229. package/clis/twitter/list-add-batch.js +1 -0
  1230. package/clis/twitter/list-add-core.js +35 -0
  1231. package/clis/twitter/list-add.js +1 -0
  1232. package/clis/twitter/list-batch-utils.js +1 -0
  1233. package/clis/twitter/list-create.js +12 -0
  1234. package/clis/twitter/list-delete.js +36 -0
  1235. package/clis/twitter/list-remove-batch.js +1 -0
  1236. package/clis/twitter/list-remove-core.js +127 -0
  1237. package/clis/twitter/list-remove.js +1 -0
  1238. package/clis/twitter/list-tweets.js +27 -0
  1239. package/clis/twitter/lists.js +27 -0
  1240. package/clis/twitter/notifications.js +4 -0
  1241. package/clis/twitter/post.js +158 -0
  1242. package/clis/twitter/profile.js +66 -0
  1243. package/clis/twitter/quote.js +123 -0
  1244. package/clis/twitter/reply-dm.js +112 -0
  1245. package/clis/twitter/reply.js +97 -0
  1246. package/clis/twitter/retweet.js +62 -0
  1247. package/clis/twitter/schedule.js +96 -0
  1248. package/clis/twitter/scheduled-delete.js +60 -0
  1249. package/clis/twitter/scheduled-list.js +15 -0
  1250. package/clis/twitter/scheduled-utils.js +18 -0
  1251. package/clis/twitter/search.js +12 -0
  1252. package/clis/twitter/shared.js +76 -0
  1253. package/clis/twitter/thread.js +4 -0
  1254. package/clis/twitter/timeline.js +4 -0
  1255. package/clis/twitter/trending.js +18 -0
  1256. package/clis/twitter/tweets.js +12 -0
  1257. package/clis/twitter/unblock.js +45 -0
  1258. package/clis/twitter/unbookmark.js +41 -0
  1259. package/clis/twitter/unfollow.js +45 -0
  1260. package/clis/twitter/unlike.js +48 -0
  1261. package/clis/twitter/unretweet.js +62 -0
  1262. package/clis/twitter/utils.js +55 -0
  1263. package/clis/uisdc/news.js +25 -0
  1264. package/clis/uiverse/_shared.js +257 -0
  1265. package/clis/uiverse/code.js +1 -0
  1266. package/clis/uiverse/preview.js +1 -0
  1267. package/clis/upwork/auth.js +19 -0
  1268. package/clis/upwork/detail.js +22 -0
  1269. package/clis/upwork/feed.js +21 -0
  1270. package/clis/upwork/search.js +21 -0
  1271. package/clis/upwork/utils.js +1 -0
  1272. package/clis/v2ex/auth.js +10 -0
  1273. package/clis/v2ex/daily.js +41 -0
  1274. package/clis/v2ex/hot.js +1 -0
  1275. package/clis/v2ex/latest.js +1 -0
  1276. package/clis/v2ex/me.js +58 -0
  1277. package/clis/v2ex/member.js +1 -0
  1278. package/clis/v2ex/node.js +1 -0
  1279. package/clis/v2ex/nodes.js +1 -0
  1280. package/clis/v2ex/notifications.js +40 -0
  1281. package/clis/v2ex/replies.js +1 -0
  1282. package/clis/v2ex/topic.js +1 -0
  1283. package/clis/v2ex/user.js +1 -0
  1284. package/clis/vk/post.js +1 -0
  1285. package/clis/vk/shared.js +8 -0
  1286. package/clis/vk/whoami.js +1 -0
  1287. package/clis/wanfang/search.js +42 -0
  1288. package/clis/web/read.js +260 -0
  1289. package/clis/wechat-channels/auth.js +31 -0
  1290. package/clis/wechat-channels/publish.js +298 -0
  1291. package/clis/weibo/article.js +1 -0
  1292. package/clis/weibo/auth.js +17 -0
  1293. package/clis/weibo/comments.js +28 -0
  1294. package/clis/weibo/delete.js +84 -0
  1295. package/clis/weibo/favorites.js +27 -0
  1296. package/clis/weibo/feed.js +33 -0
  1297. package/clis/weibo/hot.js +17 -0
  1298. package/clis/weibo/me.js +51 -0
  1299. package/clis/weibo/post.js +46 -0
  1300. package/clis/weibo/publish.js +98 -0
  1301. package/clis/weibo/search.js +47 -0
  1302. package/clis/weibo/user-posts.js +92 -0
  1303. package/clis/weibo/user.js +37 -0
  1304. package/clis/weibo/utils.js +16 -0
  1305. package/clis/weixin/article.js +1 -0
  1306. package/clis/weixin/create-draft.js +152 -0
  1307. package/clis/weixin/download.js +100 -0
  1308. package/clis/weixin/drafts.js +27 -0
  1309. package/clis/weixin/login.js +1 -0
  1310. package/clis/weixin/search.js +44 -0
  1311. package/clis/weixin/stats.js +43 -0
  1312. package/clis/weixin/whoami.js +1 -0
  1313. package/clis/weread/ai-outline.js +2 -0
  1314. package/clis/weread/auth.js +24 -0
  1315. package/clis/weread/book-search.js +2 -0
  1316. package/clis/weread/book.js +3 -0
  1317. package/clis/weread/highlights.js +1 -0
  1318. package/clis/weread/notebooks.js +1 -0
  1319. package/clis/weread/notes.js +1 -0
  1320. package/clis/weread/ranking.js +1 -0
  1321. package/clis/weread/search.js +1 -0
  1322. package/clis/weread/shelf.js +1 -0
  1323. package/clis/weread/utils.js +67 -0
  1324. package/clis/weread-official/book.js +1 -0
  1325. package/clis/weread-official/discover.js +1 -0
  1326. package/clis/weread-official/list-apis.js +1 -0
  1327. package/clis/weread-official/notes.js +1 -0
  1328. package/clis/weread-official/readdata.js +1 -0
  1329. package/clis/weread-official/review.js +1 -0
  1330. package/clis/weread-official/search.js +1 -0
  1331. package/clis/weread-official/shelf.js +1 -0
  1332. package/clis/weread-official/utils.js +1 -0
  1333. package/clis/wikidata/entity.js +1 -0
  1334. package/clis/wikidata/search.js +1 -0
  1335. package/clis/wikidata/utils.js +1 -0
  1336. package/clis/wikipedia/page.js +3 -0
  1337. package/clis/wikipedia/random.js +1 -0
  1338. package/clis/wikipedia/search.js +1 -0
  1339. package/clis/wikipedia/summary.js +1 -0
  1340. package/clis/wikipedia/trending.js +1 -0
  1341. package/clis/wikipedia/utils.js +1 -0
  1342. package/clis/wordpress/login.js +1 -0
  1343. package/clis/wordpress/publish.js +1 -0
  1344. package/clis/wordpress/shared.js +54 -0
  1345. package/clis/wordpress/whoami.js +1 -0
  1346. package/clis/woshipm/article.js +1 -0
  1347. package/clis/woshipm/login.js +1 -0
  1348. package/clis/woshipm/stats.js +52 -0
  1349. package/clis/woshipm/whoami.js +1 -0
  1350. package/clis/wttr/current.js +1 -0
  1351. package/clis/wttr/forecast.js +1 -0
  1352. package/clis/wttr/utils.js +1 -0
  1353. package/clis/xianyu/auth.js +11 -0
  1354. package/clis/xianyu/chat.js +1 -0
  1355. package/clis/xianyu/im.js +240 -0
  1356. package/clis/xianyu/inbox.js +1 -0
  1357. package/clis/xianyu/item.js +97 -0
  1358. package/clis/xianyu/messages.js +1 -0
  1359. package/clis/xianyu/publish.js +245 -0
  1360. package/clis/xianyu/reply.js +1 -0
  1361. package/clis/xianyu/search.js +141 -0
  1362. package/clis/xianyu/utils.js +1 -0
  1363. package/clis/xiaoe/auth.js +10 -0
  1364. package/clis/xiaoe/catalog.js +134 -0
  1365. package/clis/xiaoe/content.js +16 -0
  1366. package/clis/xiaoe/courses.js +43 -0
  1367. package/clis/xiaoe/detail.js +19 -0
  1368. package/clis/xiaoe/play-url.js +97 -0
  1369. package/clis/xiaohongshu/ask.js +130 -0
  1370. package/clis/xiaohongshu/auth.js +13 -0
  1371. package/clis/xiaohongshu/collection-helpers.js +64 -0
  1372. package/clis/xiaohongshu/comments.js +89 -0
  1373. package/clis/xiaohongshu/creator-note-detail.js +80 -0
  1374. package/clis/xiaohongshu/creator-notes-summary.js +1 -0
  1375. package/clis/xiaohongshu/creator-notes.js +107 -0
  1376. package/clis/xiaohongshu/creator-profile.js +13 -0
  1377. package/clis/xiaohongshu/creator-stats.js +13 -0
  1378. package/clis/xiaohongshu/delete-note.js +69 -0
  1379. package/clis/xiaohongshu/download.js +200 -0
  1380. package/clis/xiaohongshu/draft-clear.js +44 -0
  1381. package/clis/xiaohongshu/draft-delete.js +37 -0
  1382. package/clis/xiaohongshu/draft-open.js +1 -0
  1383. package/clis/xiaohongshu/draft-utils.js +36 -0
  1384. package/clis/xiaohongshu/drafts.js +1 -0
  1385. package/clis/xiaohongshu/feed.js +38 -0
  1386. package/clis/xiaohongshu/follow.js +75 -0
  1387. package/clis/xiaohongshu/liked.js +1 -0
  1388. package/clis/xiaohongshu/note-helpers.js +1 -0
  1389. package/clis/xiaohongshu/note.js +32 -0
  1390. package/clis/xiaohongshu/notifications.js +1 -0
  1391. package/clis/xiaohongshu/publish-video.js +87 -0
  1392. package/clis/xiaohongshu/publish.js +637 -0
  1393. package/clis/xiaohongshu/saved.js +1 -0
  1394. package/clis/xiaohongshu/search.js +194 -0
  1395. package/clis/xiaohongshu/unfollow.js +98 -0
  1396. package/clis/xiaohongshu/user-helpers.js +1 -0
  1397. package/clis/xiaohongshu/user.js +30 -0
  1398. package/clis/xiaoyuzhou/auth.js +3 -0
  1399. package/clis/xiaoyuzhou/download.js +1 -0
  1400. package/clis/xiaoyuzhou/episode.js +1 -0
  1401. package/clis/xiaoyuzhou/podcast-episodes.js +1 -0
  1402. package/clis/xiaoyuzhou/podcast.js +1 -0
  1403. package/clis/xiaoyuzhou/transcript.js +1 -0
  1404. package/clis/xiaoyuzhou/utils.js +1 -0
  1405. package/clis/xueqiu/article.js +4 -0
  1406. package/clis/xueqiu/auth.js +27 -0
  1407. package/clis/xueqiu/comments.js +38 -0
  1408. package/clis/xueqiu/danjuan-utils.js +84 -0
  1409. package/clis/xueqiu/earnings-date.js +1 -0
  1410. package/clis/xueqiu/events.js +17 -0
  1411. package/clis/xueqiu/feed.js +1 -0
  1412. package/clis/xueqiu/fund-holdings.js +1 -0
  1413. package/clis/xueqiu/fund-snapshot.js +1 -0
  1414. package/clis/xueqiu/groups.js +1 -0
  1415. package/clis/xueqiu/hashtags.js +26 -0
  1416. package/clis/xueqiu/hot-stock.js +1 -0
  1417. package/clis/xueqiu/hot.js +1 -0
  1418. package/clis/xueqiu/kline.js +1 -0
  1419. package/clis/xueqiu/search.js +1 -0
  1420. package/clis/xueqiu/stock.js +1 -0
  1421. package/clis/xueqiu/stocks.js +13 -0
  1422. package/clis/xueqiu/users.js +12 -0
  1423. package/clis/xueqiu/utils.js +9 -0
  1424. package/clis/xueqiu/watchlist.js +1 -0
  1425. package/clis/yahoo/search.js +21 -0
  1426. package/clis/yahoo-finance/quote.js +50 -0
  1427. package/clis/yollomi/background.js +1 -0
  1428. package/clis/yollomi/edit.js +1 -0
  1429. package/clis/yollomi/face-swap.js +1 -0
  1430. package/clis/yollomi/generate.js +1 -0
  1431. package/clis/yollomi/models.js +1 -0
  1432. package/clis/yollomi/object-remover.js +1 -0
  1433. package/clis/yollomi/remove-bg.js +1 -0
  1434. package/clis/yollomi/restore.js +1 -0
  1435. package/clis/yollomi/try-on.js +1 -0
  1436. package/clis/yollomi/upload.js +17 -0
  1437. package/clis/yollomi/upscale.js +1 -0
  1438. package/clis/yollomi/utils.js +16 -0
  1439. package/clis/yollomi/video.js +1 -0
  1440. package/clis/youdao/note.js +113 -0
  1441. package/clis/youtube/auth.js +20 -0
  1442. package/clis/youtube/channel.js +118 -0
  1443. package/clis/youtube/comments.js +64 -0
  1444. package/clis/youtube/feed.js +89 -0
  1445. package/clis/youtube/history.js +87 -0
  1446. package/clis/youtube/like.js +33 -0
  1447. package/clis/youtube/playlist.js +47 -0
  1448. package/clis/youtube/publish.js +56 -0
  1449. package/clis/youtube/search.js +39 -0
  1450. package/clis/youtube/subscribe.js +42 -0
  1451. package/clis/youtube/subscriptions.js +26 -0
  1452. package/clis/youtube/transcript-group.js +2 -0
  1453. package/clis/youtube/transcript.js +417 -0
  1454. package/clis/youtube/unlike.js +33 -0
  1455. package/clis/youtube/unsubscribe.js +42 -0
  1456. package/clis/youtube/utils.js +34 -0
  1457. package/clis/youtube/video.js +96 -0
  1458. package/clis/youtube/watch-later.js +41 -0
  1459. package/clis/yuanbao/ask.js +145 -0
  1460. package/clis/yuanbao/auth.js +23 -0
  1461. package/clis/yuanbao/detail.js +1 -0
  1462. package/clis/yuanbao/history.js +1 -0
  1463. package/clis/yuanbao/new.js +16 -0
  1464. package/clis/yuanbao/read.js +1 -0
  1465. package/clis/yuanbao/send.js +1 -0
  1466. package/clis/yuanbao/shared.js +127 -0
  1467. package/clis/yuanbao/status.js +1 -0
  1468. package/clis/yuque/article.js +1 -0
  1469. package/clis/yuque/whoami.js +1 -0
  1470. package/clis/zhihu/answer-comments.js +11 -0
  1471. package/clis/zhihu/answer-detail.js +11 -0
  1472. package/clis/zhihu/answer.js +15 -0
  1473. package/clis/zhihu/article-transform.js +1 -0
  1474. package/clis/zhihu/article.js +7 -0
  1475. package/clis/zhihu/auth.js +11 -0
  1476. package/clis/zhihu/collection.js +7 -0
  1477. package/clis/zhihu/collections.js +7 -0
  1478. package/clis/zhihu/comment.js +17 -0
  1479. package/clis/zhihu/download.js +39 -0
  1480. package/clis/zhihu/favorite.js +39 -0
  1481. package/clis/zhihu/follow.js +19 -0
  1482. package/clis/zhihu/followers.js +1 -0
  1483. package/clis/zhihu/following.js +1 -0
  1484. package/clis/zhihu/hot.js +21 -0
  1485. package/clis/zhihu/like.js +16 -0
  1486. package/clis/zhihu/paginate.js +11 -0
  1487. package/clis/zhihu/pin.js +24 -0
  1488. package/clis/zhihu/pins.js +1 -0
  1489. package/clis/zhihu/question.js +7 -0
  1490. package/clis/zhihu/recommend.js +7 -0
  1491. package/clis/zhihu/search.js +11 -0
  1492. package/clis/zhihu/stats.js +41 -0
  1493. package/clis/zhihu/target.js +1 -0
  1494. package/clis/zhihu/text.js +6 -0
  1495. package/clis/zhihu/user-answers.js +1 -0
  1496. package/clis/zhihu/user-arg.js +1 -0
  1497. package/clis/zhihu/user-articles.js +1 -0
  1498. package/clis/zhihu/user.js +11 -0
  1499. package/clis/zhihu/write-shared.js +71 -0
  1500. package/clis/zlibrary/info.js +1 -0
  1501. package/clis/zlibrary/search.js +1 -0
  1502. package/clis/zlibrary/utils.js +48 -0
  1503. package/clis/zsxq/auth.js +33 -0
  1504. package/clis/zsxq/dynamics.js +1 -0
  1505. package/clis/zsxq/groups.js +1 -0
  1506. package/clis/zsxq/search.js +1 -0
  1507. package/clis/zsxq/topic.js +1 -0
  1508. package/clis/zsxq/topics.js +1 -0
  1509. package/clis/zsxq/utils.js +72 -0
  1510. package/dist/src/adapter-shadow.d.ts +11 -0
  1511. package/dist/src/adapter-shadow.js +2 -0
  1512. package/dist/src/adapter-shadow.test.d.ts +1 -0
  1513. package/dist/src/adapter-source.d.ts +11 -0
  1514. package/dist/src/adapter-source.js +1 -0
  1515. package/dist/src/adapter-source.test.d.ts +1 -0
  1516. package/dist/src/browser/analyze.d.ts +118 -0
  1517. package/dist/src/browser/analyze.js +1 -0
  1518. package/dist/src/browser/analyze.test.d.ts +1 -0
  1519. package/dist/src/browser/article-extract.d.ts +57 -0
  1520. package/dist/src/browser/article-extract.e2e.test.d.ts +1 -0
  1521. package/dist/src/browser/article-extract.js +2 -0
  1522. package/dist/src/browser/article-extract.test.d.ts +1 -0
  1523. package/dist/src/browser/ax-snapshot.d.ts +37 -0
  1524. package/dist/src/browser/ax-snapshot.js +2 -0
  1525. package/dist/src/browser/ax-snapshot.test.d.ts +1 -0
  1526. package/dist/src/browser/base-page.d.ts +151 -0
  1527. package/dist/src/browser/base-page.js +225 -0
  1528. package/dist/src/browser/base-page.test.d.ts +1 -0
  1529. package/dist/src/browser/bridge-readiness.d.ts +14 -0
  1530. package/dist/src/browser/bridge-readiness.js +1 -0
  1531. package/dist/src/browser/bridge-readiness.test.d.ts +1 -0
  1532. package/dist/src/browser/bridge.d.ts +26 -0
  1533. package/dist/src/browser/bridge.js +1 -0
  1534. package/dist/src/browser/cdp-click-fixture.test.d.ts +1 -0
  1535. package/dist/src/browser/cdp.d.ts +51 -0
  1536. package/dist/src/browser/cdp.js +1 -0
  1537. package/dist/src/browser/cdp.test.d.ts +1 -0
  1538. package/dist/src/browser/compound.d.ts +59 -0
  1539. package/dist/src/browser/compound.js +82 -0
  1540. package/dist/src/browser/compound.test.d.ts +1 -0
  1541. package/dist/src/browser/config.d.ts +2 -0
  1542. package/dist/src/browser/config.js +1 -0
  1543. package/dist/src/browser/daemon-client.d.ts +79 -0
  1544. package/dist/src/browser/daemon-client.js +1 -0
  1545. package/dist/src/browser/daemon-client.test.d.ts +1 -0
  1546. package/dist/src/browser/daemon-lifecycle.d.ts +37 -0
  1547. package/dist/src/browser/daemon-lifecycle.js +12 -0
  1548. package/dist/src/browser/daemon-transport.d.ts +55 -0
  1549. package/dist/src/browser/daemon-transport.js +1 -0
  1550. package/dist/src/browser/daemon-version.d.ts +4 -0
  1551. package/dist/src/browser/daemon-version.js +2 -0
  1552. package/dist/src/browser/dom-helpers.d.ts +41 -0
  1553. package/dist/src/browser/dom-helpers.js +166 -0
  1554. package/dist/src/browser/dom-helpers.test.d.ts +1 -0
  1555. package/dist/src/browser/dom-snapshot.d.ts +93 -0
  1556. package/dist/src/browser/dom-snapshot.js +809 -0
  1557. package/dist/src/browser/dom-snapshot.test.d.ts +11 -0
  1558. package/dist/src/browser/errors.d.ts +38 -0
  1559. package/dist/src/browser/errors.js +5 -0
  1560. package/dist/src/browser/errors.test.d.ts +1 -0
  1561. package/dist/src/browser/extract.d.ts +69 -0
  1562. package/dist/src/browser/extract.js +42 -0
  1563. package/dist/src/browser/extract.test.d.ts +1 -0
  1564. package/dist/src/browser/find.d.ts +84 -0
  1565. package/dist/src/browser/find.js +328 -0
  1566. package/dist/src/browser/find.test.d.ts +1 -0
  1567. package/dist/src/browser/fingerprint.d.ts +44 -0
  1568. package/dist/src/browser/fingerprint.js +82 -0
  1569. package/dist/src/browser/html-tree.d.ts +75 -0
  1570. package/dist/src/browser/html-tree.js +61 -0
  1571. package/dist/src/browser/html-tree.test.d.ts +1 -0
  1572. package/dist/src/browser/index.d.ts +14 -0
  1573. package/dist/src/browser/index.js +1 -0
  1574. package/dist/src/browser/managed-chrome.d.ts +89 -0
  1575. package/dist/src/browser/managed-chrome.js +1 -0
  1576. package/dist/src/browser/network-cache.d.ts +49 -0
  1577. package/dist/src/browser/network-cache.js +1 -0
  1578. package/dist/src/browser/network-cache.test.d.ts +1 -0
  1579. package/dist/src/browser/network-key.d.ts +22 -0
  1580. package/dist/src/browser/network-key.js +1 -0
  1581. package/dist/src/browser/network-key.test.d.ts +1 -0
  1582. package/dist/src/browser/page.d.ts +83 -0
  1583. package/dist/src/browser/page.js +15 -0
  1584. package/dist/src/browser/page.test.d.ts +1 -0
  1585. package/dist/src/browser/profile.d.ts +96 -0
  1586. package/dist/src/browser/profile.js +2 -0
  1587. package/dist/src/browser/proxy-test.d.ts +28 -0
  1588. package/dist/src/browser/proxy-test.js +12 -0
  1589. package/dist/src/browser/shape-filter.d.ts +52 -0
  1590. package/dist/src/browser/shape-filter.js +1 -0
  1591. package/dist/src/browser/shape-filter.test.d.ts +1 -0
  1592. package/dist/src/browser/shape.d.ts +23 -0
  1593. package/dist/src/browser/shape.js +1 -0
  1594. package/dist/src/browser/shape.test.d.ts +1 -0
  1595. package/dist/src/browser/stealth.d.ts +18 -0
  1596. package/dist/src/browser/stealth.js +391 -0
  1597. package/dist/src/browser/stealth.test.d.ts +1 -0
  1598. package/dist/src/browser/tabs.d.ts +13 -0
  1599. package/dist/src/browser/tabs.js +2 -0
  1600. package/dist/src/browser/target-errors.d.ts +39 -0
  1601. package/dist/src/browser/target-errors.js +1 -0
  1602. package/dist/src/browser/target-errors.test.d.ts +1 -0
  1603. package/dist/src/browser/target-resolver.d.ts +158 -0
  1604. package/dist/src/browser/target-resolver.js +423 -0
  1605. package/dist/src/browser/target-resolver.test.d.ts +1 -0
  1606. package/dist/src/browser/trace.d.ts +21 -0
  1607. package/dist/src/browser/trace.js +2 -0
  1608. package/dist/src/browser/utils.d.ts +20 -0
  1609. package/dist/src/browser/utils.js +1 -0
  1610. package/dist/src/browser/utils.test.d.ts +1 -0
  1611. package/dist/src/browser/verify-fixture.d.ts +65 -0
  1612. package/dist/src/browser/verify-fixture.js +2 -0
  1613. package/dist/src/browser/verify-fixture.test.d.ts +1 -0
  1614. package/dist/src/browser/visual-refs.d.ts +11 -0
  1615. package/dist/src/browser/visual-refs.js +94 -0
  1616. package/dist/src/browser-session-lock.d.ts +13 -0
  1617. package/dist/src/browser-session-lock.js +1 -0
  1618. package/dist/src/browser-session-lock.test.d.ts +1 -0
  1619. package/dist/src/browser.test.d.ts +1 -0
  1620. package/dist/src/build-manifest.d.ts +103 -0
  1621. package/dist/src/build-manifest.js +16 -0
  1622. package/dist/src/build-manifest.test.d.ts +1 -0
  1623. package/dist/src/capabilityRouting.d.ts +19 -0
  1624. package/dist/src/capabilityRouting.js +1 -0
  1625. package/dist/src/capabilityRouting.test.d.ts +1 -0
  1626. package/dist/src/cli-argv-preprocess.d.ts +63 -0
  1627. package/dist/src/cli-argv-preprocess.js +1 -0
  1628. package/dist/src/cli-argv-preprocess.test.d.ts +1 -0
  1629. package/dist/src/cli.d.ts +79 -0
  1630. package/dist/src/cli.js +132 -0
  1631. package/dist/src/cli.test.d.ts +1 -0
  1632. package/dist/src/commanderAdapter.d.ts +21 -0
  1633. package/dist/src/commanderAdapter.js +3 -0
  1634. package/dist/src/commanderAdapter.test.d.ts +1 -0
  1635. package/dist/src/commands/auth.d.ts +40 -0
  1636. package/dist/src/commands/auth.js +2 -0
  1637. package/dist/src/commands/auth.test.d.ts +1 -0
  1638. package/dist/src/commands/daemon.d.ts +25 -0
  1639. package/dist/src/commands/daemon.js +1 -0
  1640. package/dist/src/commands/daemon.test.d.ts +1 -0
  1641. package/dist/src/completion-fast.d.ts +22 -0
  1642. package/dist/src/completion-fast.js +1 -0
  1643. package/dist/src/completion-shared.d.ts +13 -0
  1644. package/dist/src/completion-shared.js +30 -0
  1645. package/dist/src/completion.d.ts +21 -0
  1646. package/dist/src/completion.js +1 -0
  1647. package/dist/src/completion.test.d.ts +1 -0
  1648. package/dist/src/constants.d.ts +22 -0
  1649. package/dist/src/constants.js +1 -0
  1650. package/dist/src/convention-audit.d.ts +50 -0
  1651. package/dist/src/convention-audit.js +2 -0
  1652. package/dist/src/convention-audit.test.d.ts +1 -0
  1653. package/dist/src/daemon-utils.d.ts +18 -0
  1654. package/dist/src/daemon-utils.js +1 -0
  1655. package/dist/src/daemon.d.ts +22 -0
  1656. package/dist/src/daemon.js +1 -0
  1657. package/dist/src/daemon.test.d.ts +1 -0
  1658. package/dist/src/discovery.d.ts +43 -0
  1659. package/dist/src/discovery.js +2 -0
  1660. package/dist/src/doctor.d.ts +38 -0
  1661. package/dist/src/doctor.js +13 -0
  1662. package/dist/src/doctor.test.d.ts +1 -0
  1663. package/dist/src/download/article-download.d.ts +72 -0
  1664. package/dist/src/download/article-download.js +21 -0
  1665. package/dist/src/download/article-download.test.d.ts +1 -0
  1666. package/dist/src/download/index.d.ts +71 -0
  1667. package/dist/src/download/index.js +7 -0
  1668. package/dist/src/download/index.test.d.ts +1 -0
  1669. package/dist/src/download/media-download.d.ts +49 -0
  1670. package/dist/src/download/media-download.js +1 -0
  1671. package/dist/src/download/media-download.test.d.ts +1 -0
  1672. package/dist/src/download/progress.d.ts +36 -0
  1673. package/dist/src/download/progress.js +5 -0
  1674. package/dist/src/download/progress.test.d.ts +1 -0
  1675. package/dist/src/electron-apps.d.ts +31 -0
  1676. package/dist/src/electron-apps.js +1 -0
  1677. package/dist/src/electron-apps.test.d.ts +1 -0
  1678. package/dist/src/engine.test.d.ts +1 -0
  1679. package/dist/src/errors.d.ts +117 -0
  1680. package/dist/src/errors.js +2 -0
  1681. package/dist/src/errors.test.d.ts +1 -0
  1682. package/dist/src/execution.d.ts +24 -0
  1683. package/dist/src/execution.js +2 -0
  1684. package/dist/src/execution.test.d.ts +1 -0
  1685. package/dist/src/extension-manifest-regression.test.d.ts +1 -0
  1686. package/dist/src/external-clis.yaml +109 -0
  1687. package/dist/src/external.d.ts +49 -0
  1688. package/dist/src/external.js +1 -0
  1689. package/dist/src/external.test.d.ts +1 -0
  1690. package/dist/src/help.d.ts +88 -0
  1691. package/dist/src/help.js +8 -0
  1692. package/dist/src/help.test.d.ts +1 -0
  1693. package/dist/src/hooks.d.ts +46 -0
  1694. package/dist/src/hooks.js +1 -0
  1695. package/dist/src/hooks.test.d.ts +4 -0
  1696. package/dist/src/interceptor.d.ts +44 -0
  1697. package/dist/src/interceptor.js +123 -0
  1698. package/dist/src/interceptor.test.d.ts +4 -0
  1699. package/dist/src/launcher.d.ts +41 -0
  1700. package/dist/src/launcher.js +7 -0
  1701. package/dist/src/launcher.test.d.ts +1 -0
  1702. package/dist/src/logger.d.ts +26 -0
  1703. package/dist/src/logger.js +9 -0
  1704. package/dist/src/main.d.ts +5 -0
  1705. package/dist/src/main.js +10 -0
  1706. package/dist/src/manifest-types.d.ts +43 -0
  1707. package/dist/src/manifest-types.js +1 -0
  1708. package/dist/src/node-network.d.ts +10 -0
  1709. package/dist/src/node-network.js +1 -0
  1710. package/dist/src/node-network.test.d.ts +1 -0
  1711. package/dist/src/observation/artifact.d.ts +16 -0
  1712. package/dist/src/observation/artifact.js +8 -0
  1713. package/dist/src/observation/artifact.test.d.ts +1 -0
  1714. package/dist/src/observation/events.d.ts +89 -0
  1715. package/dist/src/observation/events.js +1 -0
  1716. package/dist/src/observation/index.d.ts +7 -0
  1717. package/dist/src/observation/index.js +1 -0
  1718. package/dist/src/observation/manager.d.ts +9 -0
  1719. package/dist/src/observation/manager.js +1 -0
  1720. package/dist/src/observation/manager.test.d.ts +1 -0
  1721. package/dist/src/observation/redaction.d.ts +11 -0
  1722. package/dist/src/observation/redaction.js +2 -0
  1723. package/dist/src/observation/redaction.test.d.ts +1 -0
  1724. package/dist/src/observation/retention.d.ts +32 -0
  1725. package/dist/src/observation/retention.js +1 -0
  1726. package/dist/src/observation/retention.test.d.ts +1 -0
  1727. package/dist/src/observation/ring-buffer.d.ts +22 -0
  1728. package/dist/src/observation/ring-buffer.js +1 -0
  1729. package/dist/src/observation/ring-buffer.test.d.ts +1 -0
  1730. package/dist/src/observation/session.d.ts +25 -0
  1731. package/dist/src/observation/session.js +1 -0
  1732. package/dist/src/output.d.ts +14 -0
  1733. package/dist/src/output.js +2 -0
  1734. package/dist/src/output.test.d.ts +1 -0
  1735. package/dist/src/package-exports.test.d.ts +1 -0
  1736. package/dist/src/package-paths.d.ts +8 -0
  1737. package/dist/src/package-paths.js +1 -0
  1738. package/dist/src/pipeline/executor.d.ts +11 -0
  1739. package/dist/src/pipeline/executor.js +1 -0
  1740. package/dist/src/pipeline/executor.test.d.ts +4 -0
  1741. package/dist/src/pipeline/index.d.ts +5 -0
  1742. package/dist/src/pipeline/index.js +1 -0
  1743. package/dist/src/pipeline/registry.d.ts +28 -0
  1744. package/dist/src/pipeline/registry.js +1 -0
  1745. package/dist/src/pipeline/steps/browser.d.ts +13 -0
  1746. package/dist/src/pipeline/steps/browser.js +1 -0
  1747. package/dist/src/pipeline/steps/download.d.ts +18 -0
  1748. package/dist/src/pipeline/steps/download.js +1 -0
  1749. package/dist/src/pipeline/steps/download.test.d.ts +1 -0
  1750. package/dist/src/pipeline/steps/fetch.d.ts +5 -0
  1751. package/dist/src/pipeline/steps/fetch.js +31 -0
  1752. package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
  1753. package/dist/src/pipeline/steps/intercept.d.ts +5 -0
  1754. package/dist/src/pipeline/steps/intercept.js +1 -0
  1755. package/dist/src/pipeline/steps/tap.d.ts +12 -0
  1756. package/dist/src/pipeline/steps/tap.js +53 -0
  1757. package/dist/src/pipeline/steps/transform.d.ts +9 -0
  1758. package/dist/src/pipeline/steps/transform.js +1 -0
  1759. package/dist/src/pipeline/template.d.ts +17 -0
  1760. package/dist/src/pipeline/template.js +1 -0
  1761. package/dist/src/pipeline/template.test.d.ts +4 -0
  1762. package/dist/src/pipeline/transform.test.d.ts +4 -0
  1763. package/dist/src/plugin-manifest.d.ts +70 -0
  1764. package/dist/src/plugin-manifest.js +1 -0
  1765. package/dist/src/plugin-manifest.test.d.ts +4 -0
  1766. package/dist/src/plugin-scaffold.d.ts +28 -0
  1767. package/dist/src/plugin-scaffold.js +75 -0
  1768. package/dist/src/plugin-scaffold.test.d.ts +4 -0
  1769. package/dist/src/plugin.d.ts +145 -0
  1770. package/dist/src/plugin.js +20 -0
  1771. package/dist/src/plugin.test.d.ts +4 -0
  1772. package/dist/src/rate-limit.d.ts +15 -0
  1773. package/dist/src/rate-limit.js +2 -0
  1774. package/dist/src/rate-limit.test.d.ts +1 -0
  1775. package/dist/src/registry-api.d.ts +13 -0
  1776. package/dist/src/registry-api.js +1 -0
  1777. package/dist/src/registry.d.ts +130 -0
  1778. package/dist/src/registry.js +1 -0
  1779. package/dist/src/registry.test.d.ts +4 -0
  1780. package/dist/src/runtime-detect.d.ts +31 -0
  1781. package/dist/src/runtime-detect.js +1 -0
  1782. package/dist/src/runtime-detect.test.d.ts +1 -0
  1783. package/dist/src/runtime.d.ts +57 -0
  1784. package/dist/src/runtime.js +1 -0
  1785. package/dist/src/scripts/framework.d.ts +7 -0
  1786. package/dist/src/scripts/framework.js +1 -0
  1787. package/dist/src/scripts/interact.d.ts +4 -0
  1788. package/dist/src/scripts/interact.js +1 -0
  1789. package/dist/src/scripts/store.d.ts +13 -0
  1790. package/dist/src/scripts/store.js +1 -0
  1791. package/dist/src/serialization.d.ts +42 -0
  1792. package/dist/src/serialization.js +4 -0
  1793. package/dist/src/serialization.test.d.ts +1 -0
  1794. package/dist/src/skills.d.ts +14 -0
  1795. package/dist/src/skills.js +6 -0
  1796. package/dist/src/skills.test.d.ts +1 -0
  1797. package/dist/src/snapshotFormatter.d.ts +11 -0
  1798. package/dist/src/snapshotFormatter.js +3 -0
  1799. package/dist/src/snapshotFormatter.test.d.ts +7 -0
  1800. package/dist/src/tui.d.ts +28 -0
  1801. package/dist/src/tui.js +16 -0
  1802. package/dist/src/tui.test.d.ts +1 -0
  1803. package/dist/src/types.d.ts +236 -0
  1804. package/dist/src/types.js +1 -0
  1805. package/dist/src/utils.d.ts +57 -0
  1806. package/dist/src/utils.js +38 -0
  1807. package/dist/src/utils.test.d.ts +1 -0
  1808. package/dist/src/validate.d.ts +21 -0
  1809. package/dist/src/validate.js +3 -0
  1810. package/dist/src/validate.test.d.ts +9 -0
  1811. package/dist/src/verify.d.ts +27 -0
  1812. package/dist/src/verify.js +2 -0
  1813. package/dist/src/verify.test.d.ts +8 -0
  1814. package/dist/src/version.d.ts +4 -0
  1815. package/dist/src/version.js +1 -0
  1816. package/dist/src/weixin-download.test.d.ts +1 -0
  1817. package/docs/guide/browser-bridge.md +94 -0
  1818. package/docs/guide/electron-app-cli.md +199 -0
  1819. package/docs/guide/exit-codes.md +24 -0
  1820. package/docs/guide/extending-opencli.md +134 -0
  1821. package/docs/guide/getting-started.md +81 -0
  1822. package/docs/guide/installation.md +52 -0
  1823. package/docs/guide/plugins.md +226 -0
  1824. package/docs/guide/remote-orchestration.md +116 -0
  1825. package/docs/guide/troubleshooting.md +69 -0
  1826. package/package.json +116 -0
  1827. package/scripts/check-doc-coverage.sh +81 -0
  1828. package/scripts/check-listing-id-pairing.mjs +193 -0
  1829. package/scripts/check-silent-column-drop.mjs +105 -0
  1830. package/scripts/check-typed-error-lint.mjs +118 -0
  1831. package/scripts/clean-dist.cjs +13 -0
  1832. package/scripts/copy-yaml.cjs +12 -0
  1833. package/scripts/fetch-adapters.js +293 -0
  1834. package/scripts/minify-release.mjs +115 -0
  1835. package/scripts/postinstall.js +174 -0
  1836. package/scripts/silent-column-drop-baseline.json +910 -0
  1837. package/scripts/typed-error-lint-baseline.json +1098 -0
  1838. package/skills/opencli-adapter-author/SKILL.md +256 -0
  1839. package/skills/opencli-adapter-author/references/adapter-template.md +471 -0
  1840. package/skills/opencli-adapter-author/references/api-discovery.md +295 -0
  1841. package/skills/opencli-adapter-author/references/coverage-matrix.md +81 -0
  1842. package/skills/opencli-adapter-author/references/field-conventions.md +172 -0
  1843. package/skills/opencli-adapter-author/references/field-decode-playbook.md +181 -0
  1844. package/skills/opencli-adapter-author/references/jsdom-fixture-pattern.md +196 -0
  1845. package/skills/opencli-adapter-author/references/output-design.md +149 -0
  1846. package/skills/opencli-adapter-author/references/site-memory/bilibili.md +70 -0
  1847. package/skills/opencli-adapter-author/references/site-memory/eastmoney.md +70 -0
  1848. package/skills/opencli-adapter-author/references/site-memory/tonghuashun.md +51 -0
  1849. package/skills/opencli-adapter-author/references/site-memory/xueqiu.md +58 -0
  1850. package/skills/opencli-adapter-author/references/site-memory.md +231 -0
  1851. package/skills/opencli-adapter-author/references/site-recon.md +134 -0
  1852. package/skills/opencli-adapter-author/references/strategy-selection.md +169 -0
  1853. package/skills/opencli-adapter-author/references/success-rate-pitfalls.md +162 -0
  1854. package/skills/opencli-adapter-author/references/typed-errors.md +234 -0
  1855. package/skills/opencli-autofix/SKILL.md +297 -0
  1856. package/skills/opencli-browser/SKILL.md +468 -0
  1857. package/skills/opencli-browser-sitemap/SKILL.md +96 -0
  1858. package/skills/opencli-sitemap-author/SKILL.md +161 -0
  1859. package/skills/opencli-sitemap-author/references/sitemap-schema.md +660 -0
  1860. package/skills/opencli-usage/SKILL.md +168 -0
@@ -0,0 +1,23 @@
1
+ import{cli as O,Strategy as Q}from"@jackwener/opencli/registry";import{ArgumentError as R,selectorError as T}from"@jackwener/opencli/errors";import{conversationSelectionArgs as U,openCodexConversation as V}from"./sidebar.js";export const askCommand=O({site:"codex",name:"ask",access:"write",description:"Send a prompt to the current or selected Codex conversation and wait for the AI response",domain:"localhost",strategy:Q.UI,browser:!0,args:[{name:"text",required:!0,positional:!0,help:"Prompt to send"},{name:"timeout",type:"int",required:!1,help:"Max seconds to wait for response (default: 60)",default:60},...U],columns:["Role","Project","Conversation","Text"],func:async(z,D)=>{const{text:F,timeout:B}=D;if(!Number.isInteger(B)||B<1)throw new R("--timeout must be a positive integer (seconds)");const q=await V(z,D),M=await z.evaluate(`
2
+ (function() {
3
+ const turns = document.querySelectorAll('[data-content-search-turn-key]');
4
+ return turns.length;
5
+ })()
6
+ `);if(!await z.evaluate(`
7
+ (function(text) {
8
+ const editables = Array.from(document.querySelectorAll('[contenteditable="true"]'));
9
+ const composer = editables.length > 0 ? editables[editables.length - 1] : document.querySelector('textarea');
10
+ if (!composer) return false;
11
+ composer.focus();
12
+ document.execCommand('insertText', false, text);
13
+ return true;
14
+ })(${JSON.stringify(F)})
15
+ `))throw T("Codex input element");await z.wait(0.5);await z.pressKey("Enter");const H=3,N=Math.ceil(B/H);let G="";for(let J=0;J<N;J++){await z.wait(H);const K=await z.evaluate(`
16
+ (function(prevLen) {
17
+ const turns = document.querySelectorAll('[data-content-search-turn-key]');
18
+ if (turns.length <= prevLen) return null;
19
+ const lastTurn = turns[turns.length - 1];
20
+ const text = lastTurn.innerText || lastTurn.textContent;
21
+ return text ? text.trim() : null;
22
+ })(${M})
23
+ `);if(K){G=K;break}}if(!G)return[{Role:"User",Project:q?.project||"",Conversation:q?.conversation||"",Text:F},{Role:"System",Project:q?.project||"",Conversation:q?.conversation||"",Text:`No response within ${B}s. The agent may still be working.`}];return[{Role:"User",Project:q?.project||"",Conversation:q?.conversation||"",Text:F},{Role:"Assistant",Project:q?.project||"",Conversation:q?.conversation||"",Text:G}]}});
@@ -0,0 +1 @@
1
+ import{makeDumpCommand as m}from"../_shared/desktop-commands.js";export const dumpCommand=m("codex");
@@ -0,0 +1,12 @@
1
+ import*as o from"node:fs";import{cli as a,Strategy as s}from"@jackwener/opencli/registry";export const exportCommand=a({site:"codex",name:"export",access:"read",description:"Export the current Codex conversation to a Markdown file",domain:"localhost",strategy:s.UI,browser:!0,args:[{name:"output",required:!1,help:"Output file (default: /tmp/codex-export.md)"}],columns:["Status","File","Messages"],func:async(n,r)=>{const t=r.output||"/tmp/codex-export.md",e=await n.evaluate(`
2
+ (function() {
3
+ const turns = document.querySelectorAll('[data-content-search-turn-key]');
4
+ if (turns.length > 0) {
5
+ return Array.from(turns).map((t, i) => '## Turn ' + (i + 1) + '\\n\\n' + (t.innerText || t.textContent).trim()).join('\\n\\n---\\n\\n');
6
+ }
7
+
8
+ const main = document.querySelector('main, [role="main"], [role="log"]');
9
+ if (main) return main.innerText || main.textContent;
10
+ return document.body.innerText;
11
+ })()
12
+ `);o.writeFileSync(t,"# Codex Conversation Export\\n\\n"+e);return[{Status:"Success",File:t,Messages:e.split("## Turn").length-1}]}});
@@ -0,0 +1,28 @@
1
+ import{cli as o,Strategy as r}from"@jackwener/opencli/registry";export const extractDiffCommand=o({site:"codex",name:"extract-diff",access:"read",description:"Extract visual code review diff patches from Codex",domain:"localhost",strategy:r.UI,browser:!0,columns:["File","Diff"],func:async(t)=>{const e=await t.evaluate(`
2
+ (function() {
3
+ const results = [];
4
+ // Assuming diffs are rendered with standard diff classes or monaco difference editors
5
+ const diffBlocks = document.querySelectorAll('.diff-editor, .monaco-diff-editor, [data-testid="diff-view"]');
6
+
7
+ diffBlocks.forEach((block, index) => {
8
+ // Very roughly scrape text representing additions/deletions mapped from the inner wrapper
9
+ results.push({
10
+ File: block.getAttribute('data-filename') || \`DiffBlock_\${index+1}\`,
11
+ Diff: block.innerText || block.textContent
12
+ });
13
+ });
14
+
15
+ // If no structured diffs found, try to find any code blocks labeled as patches
16
+ if (results.length === 0) {
17
+ const codeBlocks = document.querySelectorAll('pre code.language-diff, pre code.language-patch');
18
+ codeBlocks.forEach((code, index) => {
19
+ results.push({
20
+ File: \`Patch_\${index+1}\`,
21
+ Diff: code.innerText || code.textContent
22
+ });
23
+ });
24
+ }
25
+
26
+ return results;
27
+ })()
28
+ `);if(e.length===0)return[{File:"No diffs found",Diff:'Try running opencli codex send "/review" first'}];return e}});
@@ -0,0 +1 @@
1
+ import{cli as s,Strategy as i}from"@jackwener/opencli/registry";import{EmptyResultError as c}from"@jackwener/opencli/errors";import{flattenCodexProjects as a,readCodexProjects as n}from"./sidebar.js";export const historyCommand=s({site:"codex",name:"history",access:"read",description:"List visible Codex conversation threads grouped by project",domain:"localhost",strategy:i.UI,browser:!0,args:[{name:"project",required:!1,help:"Filter by project label or path"},{name:"limit",required:!1,help:"Max conversations per project"}],columns:["Project","Index","Title","Updated","Active"],func:async(r,e)=>{const t=await n(r),o=a(t,e);if(o.length===0)throw new c("codex history",e.project?`No Codex conversations were visible for project "${e.project}".`:"No Codex conversations were visible. Open the Codex sidebar and retry.");return o}});
@@ -0,0 +1,118 @@
1
+ import{cli as J,Strategy as P}from"@jackwener/opencli/registry";import{ArgumentError as V,CommandExecutionError as q,selectorError as A}from"@jackwener/opencli/errors";const I=/5\.\d|[Ee]xtra [Hh]igh|^High$|^Medium$|^Low$|^Auto$|^Fast$|^Speed$|^Pro$|GPT-/,y=I.source;function G(F){if(F&&typeof F==="object"&&"data"in F&&"session"in F)return F.data;return F}function B(F){return String(F??"").toLowerCase().replace(/\bgpt[-\s]*/g,"").replace(/\s+/g," ").trim()}const h=["extra high","medium","high","low","auto","fast","speed","pro"];function f(F){return h.find((H)=>F===H||F.endsWith(` ${H}`))||""}function j(F){return F.match(/(?:^|\s)(\d+(?:\.\d+)?)(?=\s|$)/)?.[1]||""}export function findUniqueModelOption(F,H){const K=B(H);if(!K)throw new V("model name cannot be empty");const Q=F.map((W)=>({label:W,normalized:B(W)})),Y=Q.filter((W)=>W.normalized===K);if(Y.length===1)return Y[0].label;if(Y.length>1)throw new q(`Model name "${H}" is ambiguous.`,`Matches: ${Y.map((W)=>W.label).join(", ")}`);const Z=Q.filter((W)=>W.normalized.includes(K));if(Z.length===1)return Z[0].label;if(Z.length>1)throw new q(`Model name "${H}" is ambiguous.`,`Matches: ${Z.map((W)=>W.label).join(", ")}`);return null}export function modelSelectionVerified(F,H){const K=B(F),Q=B(H);if(!K||!Q)return!1;if(K===Q)return!0;if(h.includes(Q))return f(K)===Q;const Y=j(Q);if(Y)return j(K)===Y;return!1}export const modelCommand=J({site:"codex",name:"model",access:"write",description:"Read, list, or switch the active model / reasoning level in Codex Desktop. The composer toolbar button toggles a menu that mixes model variants (GPT-5.5, Speed) with reasoning levels (Low/Medium/High/Extra High).",domain:"localhost",strategy:P.UI,browser:!0,args:[{name:"name",required:!1,positional:!0,help:"Substring (case-insensitive) of a model / reasoning level to switch to. Omit to read current."},{name:"list",type:"boolean",default:!1,help:"List all menu options (does not switch)"}],columns:["Status","Model"],func:async(F,H)=>{const K=String(H.name||"").trim().toLowerCase(),Q=H.list===!0||H.list==="true",Y=JSON.stringify(y),Z=G(await F.evaluate(`(function() {
2
+ const re = new RegExp(${Y});
3
+ const composers = Array.from(document.querySelectorAll('[contenteditable="true"]')).filter((el) => el.offsetParent);
4
+ const last = composers[composers.length - 1];
5
+ if (!last) return '';
6
+ let root = last;
7
+ for (let i = 0; i < 5; i++) root = root.parentElement || root;
8
+ const btns = Array.from(root.querySelectorAll('button')).filter((b) => b.offsetParent);
9
+ const match = btns.find((b) => re.test((b.textContent || '').trim()));
10
+ return match ? (match.textContent || '').trim() : '';
11
+ })()`));if(!Z)throw A("Codex model button (composer toolbar). Make sure a chat is open.");if(!K&&!Q)return[{Status:"Active",Model:Z}];const W=JSON.stringify(Q?"":K),$=G(await F.evaluate(`(async () => {
12
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
13
+ const re = new RegExp(${Y});
14
+ const composers = Array.from(document.querySelectorAll('[contenteditable="true"]')).filter((el) => el.offsetParent);
15
+ const last = composers[composers.length - 1];
16
+ if (!last) return { ok: false, reason: 'composer not found' };
17
+ let root = last;
18
+ for (let i = 0; i < 5; i++) root = root.parentElement || root;
19
+ const btns = Array.from(root.querySelectorAll('button')).filter((b) => b.offsetParent);
20
+ const trigger = btns.find((b) => re.test((b.textContent || '').trim()));
21
+ if (!trigger) return { ok: false, reason: 'model trigger button not found in composer' };
22
+
23
+ const r = trigger.getBoundingClientRect();
24
+ const init = {
25
+ bubbles: true, cancelable: true, button: 0, buttons: 1,
26
+ clientX: Math.round(r.left + r.width / 2),
27
+ clientY: Math.round(r.top + r.height / 2),
28
+ };
29
+ trigger.dispatchEvent(new PointerEvent('pointerdown', { ...init, pointerType: 'mouse' }));
30
+ trigger.dispatchEvent(new MouseEvent('mousedown', init));
31
+ trigger.dispatchEvent(new PointerEvent('pointerup', { ...init, pointerType: 'mouse' }));
32
+ trigger.dispatchEvent(new MouseEvent('mouseup', init));
33
+ trigger.dispatchEvent(new MouseEvent('click', init));
34
+
35
+ let items = [];
36
+ for (let attempt = 0; attempt < 16; attempt += 1) {
37
+ await wait(80);
38
+ items = Array.from(document.querySelectorAll('[role="menuitem"], [role="option"]'))
39
+ .filter((it) => it instanceof HTMLElement && it.offsetParent);
40
+ if (items.length) break;
41
+ }
42
+ if (!items.length) {
43
+ return { ok: false, reason: 'Model menu did not open after click.' };
44
+ }
45
+
46
+ function leadingText(el) {
47
+ const clone = el.cloneNode(true);
48
+ clone.querySelectorAll('kbd').forEach((k) => k.remove());
49
+ return (clone.textContent || '').trim();
50
+ }
51
+ // Filter unrelated Chat-actions menu items so they don't pollute
52
+ // the model list — Codex sometimes shares the menu root with
53
+ // 'Pin chat / Rename chat / Archive chat / Open side chat / Copy /
54
+ // Fork / Add automation… / Open in new window'.
55
+ const CHAT_ACTION_LABELS = new Set([
56
+ 'Pin chat', 'Unpin chat', 'Rename chat', 'Archive chat',
57
+ 'Open side chat', 'Copy', 'Fork', 'Add automation…', 'Open in new window',
58
+ ]);
59
+ const modelItems = items.filter((it) => {
60
+ const t = leadingText(it).replace(/[⌥⌘⌃⇧⏎].*$/, '').trim();
61
+ return t && !CHAT_ACTION_LABELS.has(t);
62
+ });
63
+
64
+ const labels = modelItems.map(leadingText);
65
+ const target = ${W};
66
+ if (!target) {
67
+ document.body.click();
68
+ return { ok: true, labels };
69
+ }
70
+ const wanted = target.replace(/\\bgpt[-\\s]*/g, '').replace(/\\s+/g, ' ').trim();
71
+ const normalizedLabels = labels.map((l) => l.toLowerCase().replace(/\\bgpt[-\\s]*/g, '').replace(/\\s+/g, ' ').trim());
72
+ let matches = normalizedLabels
73
+ .map((label, index) => ({ label, index }))
74
+ .filter((item) => item.label === wanted);
75
+ if (matches.length === 0) {
76
+ matches = normalizedLabels
77
+ .map((label, index) => ({ label, index }))
78
+ .filter((item) => item.label.includes(wanted));
79
+ }
80
+ if (matches.length === 0) {
81
+ document.body.click();
82
+ return { ok: false, reason: 'No model matched.', detail: 'wanted=' + target + ' available=' + JSON.stringify(labels) };
83
+ }
84
+ if (matches.length > 1) {
85
+ document.body.click();
86
+ return { ok: false, reason: 'Model name is ambiguous.', detail: 'wanted=' + target + ' matches=' + JSON.stringify(matches.map((m) => labels[m.index])) };
87
+ }
88
+ const idx = matches[0].index;
89
+ const chosen = modelItems[idx];
90
+ const chosenLabel = labels[idx];
91
+
92
+ const cr = chosen.getBoundingClientRect();
93
+ const cinit = {
94
+ bubbles: true, cancelable: true, button: 0, buttons: 1,
95
+ clientX: Math.round(cr.left + cr.width / 2),
96
+ clientY: Math.round(cr.top + cr.height / 2),
97
+ };
98
+ Promise.resolve().then(() => {
99
+ try {
100
+ chosen.dispatchEvent(new PointerEvent('pointerdown', { ...cinit, pointerType: 'mouse' }));
101
+ chosen.dispatchEvent(new MouseEvent('mousedown', cinit));
102
+ chosen.dispatchEvent(new PointerEvent('pointerup', { ...cinit, pointerType: 'mouse' }));
103
+ chosen.dispatchEvent(new MouseEvent('mouseup', cinit));
104
+ chosen.dispatchEvent(new MouseEvent('click', cinit));
105
+ } catch {}
106
+ });
107
+ return { ok: true, switched: true, chosen: chosenLabel, labels };
108
+ })()`));if(!$.ok)throw new q($.reason,$.detail||"");if(Q)return $.labels.map((X)=>({Status:X===Z?"Active":"Available",Model:X}));const U=findUniqueModelOption($.labels||[],K);if(!U)throw new q("No model matched.",`wanted=${K} available=${JSON.stringify($.labels||[])}`);if(U!==$.chosen)throw new q("Codex model selection was inconsistent.",`expected=${U} chosen=${$.chosen}`);let D="";for(let X=0;X<20;X+=1){await F.wait(0.25);const L=G(await F.evaluate(`(function() {
109
+ const re = new RegExp(${Y});
110
+ const composers = Array.from(document.querySelectorAll('[contenteditable="true"]')).filter((el) => el.offsetParent);
111
+ const last = composers[composers.length - 1];
112
+ if (!last) return '';
113
+ let root = last;
114
+ for (let i = 0; i < 5; i++) root = root.parentElement || root;
115
+ const btns = Array.from(root.querySelectorAll('button')).filter((b) => b.offsetParent);
116
+ const match = btns.find((b) => re.test((b.textContent || '').trim()));
117
+ return match ? (match.textContent || '').trim() : '';
118
+ })()`));if(modelSelectionVerified(L,U)){D=L;break}}if(!D)throw new q(`Codex model switch to "${U}" was not verified.`,"The model menu click may have failed or the model selector text may have drifted.");return[{Status:"switched",Model:D}]}});
@@ -0,0 +1 @@
1
+ import{makeNewCommand as o}from"../_shared/desktop-commands.js";export const newCommand=o("codex","Codex conversation");
@@ -0,0 +1 @@
1
+ import{cli as G,Strategy as H}from"@jackwener/opencli/registry";import{conversationSelectionArgs as I,setConversationPinned as J}from"./_actions.js";function z(x,B){G({site:"codex",name:x,access:"write",description:`${x==="pin"?"Pin":"Unpin"} the selected Codex conversation via the Chat actions header menu.`,domain:"localhost",strategy:H.UI,browser:!0,args:[...I],columns:["status","thread_id","project","conversation"],func:async(D,F)=>{const q=await J(D,F,B);return[{status:q.status,thread_id:q.selected.threadId,project:q.selected.project,conversation:q.selected.conversation}]}})}z("pin",!0);z("unpin",!1);
@@ -0,0 +1 @@
1
+ import{cli as s,Strategy as c}from"@jackwener/opencli/registry";import{EmptyResultError as a}from"@jackwener/opencli/errors";import{flattenCodexProjects as i,readCodexProjects as n}from"./sidebar.js";export const projectsCommand=s({site:"codex",name:"projects",access:"read",description:"List Codex projects and visible conversations from the sidebar",domain:"localhost",strategy:c.UI,browser:!0,args:[{name:"project",required:!1,help:"Filter by project label or path"},{name:"limit",required:!1,help:"Max conversations per project"}],columns:["Project","Index","Title","Updated","Active"],func:async(r,e)=>{const t=await n(r),o=i(t,e);if(o.length===0)throw new a("codex projects",e.project?`No Codex projects matched "${e.project}".`:"No Codex projects were visible. Open the Codex sidebar and retry.");return o}});
@@ -0,0 +1,16 @@
1
+ import{cli as o,Strategy as a}from"@jackwener/opencli/registry";import{conversationSelectionArgs as s,openCodexConversation as c}from"./sidebar.js";export const readCommand=o({site:"codex",name:"read",access:"read",description:"Read the contents of the current or selected Codex conversation thread",domain:"localhost",strategy:a.UI,browser:!0,args:[...s],columns:["Project","Conversation","Content"],func:async(t,n)=>{const e=await c(t,n),r=await t.evaluate(`
2
+ (function() {
3
+ const turns = Array.from(document.querySelectorAll('[data-content-search-turn-key]'));
4
+ if (turns.length > 0) {
5
+ return turns.map(t => t.innerText || t.textContent).join('\\n\\n---\\n\\n');
6
+ }
7
+
8
+ const threadContainer = document.querySelector('[role="log"], [data-testid="conversation"], .thread-container, .messages-list, main');
9
+
10
+ if (threadContainer) {
11
+ return threadContainer.innerText || threadContainer.textContent;
12
+ }
13
+
14
+ return document.body.innerText;
15
+ })()
16
+ `);return[{Project:e?.project||"",Conversation:e?.conversation||"",Content:r}]}});
@@ -0,0 +1,34 @@
1
+ import{cli as H,Strategy as I}from"@jackwener/opencli/registry";import{ArgumentError as D,CommandExecutionError as J}from"@jackwener/opencli/errors";import{conversationSelectionArgs as K,selectAndClickAction as L,unwrapEvaluateResult as M,waitForConversationPostcondition as N}from"./_actions.js";H({site:"codex",name:"rename",access:"write",description:'Rename the selected Codex conversation. Opens the Chat actions menu → "Rename chat", then types the new title.',domain:"localhost",strategy:I.UI,browser:!0,args:[{name:"title",required:!0,positional:!0,help:"New title (single line, no newlines)"},...K],columns:["status","title","thread_id","project"],func:async(b,z)=>{const j=String(z.title||"").trim();if(!j)throw new D("title cannot be empty");if(j.includes(`
2
+ `))throw new D("title must be a single line");const q=await L(b,z,["Rename chat"]);await b.wait(0.5);const B=M(await b.evaluate(`(async () => {
3
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
4
+ let input = null;
5
+ for (let attempt = 0; attempt < 15; attempt += 1) {
6
+ const candidates = Array.from(document.querySelectorAll('input[type="text"], input:not([type]), [contenteditable="true"]'))
7
+ .filter((el) => el.offsetParent && !el.classList.contains('ProseMirror'));
8
+ if (candidates.length) {
9
+ candidates.sort((a, b) => (a.getBoundingClientRect().left || 9999) - (b.getBoundingClientRect().left || 9999));
10
+ input = candidates[0];
11
+ break;
12
+ }
13
+ await wait(120);
14
+ }
15
+ if (!input) return { ok: false, reason: 'Rename input did not appear after menu click.' };
16
+ input.focus();
17
+ const newTitle = ${JSON.stringify(j)};
18
+ if (input instanceof HTMLInputElement) {
19
+ const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;
20
+ setter.call(input, '');
21
+ input.dispatchEvent(new Event('input', { bubbles: true }));
22
+ setter.call(input, newTitle);
23
+ input.dispatchEvent(new Event('input', { bubbles: true }));
24
+ } else {
25
+ const range = document.createRange();
26
+ range.selectNodeContents(input);
27
+ const sel = window.getSelection();
28
+ sel.removeAllRanges();
29
+ sel.addRange(range);
30
+ document.execCommand('delete');
31
+ document.execCommand('insertText', false, newTitle);
32
+ }
33
+ return { ok: true };
34
+ })()`));if(!B?.ok)throw new J(B?.reason||"Failed to fill rename input.","");await b.pressKey("Enter");await N(b,q.selected,(G)=>(G?.conversation?.title||"").trim()===j,"rename");return[{status:"renamed",title:j,thread_id:q.selected.threadId,project:q.selected.project}]}});
@@ -0,0 +1 @@
1
+ import{makeScreenshotCommand as o}from"../_shared/desktop-commands.js";export const screenshotCommand=o("codex","Codex");
@@ -0,0 +1,16 @@
1
+ import{cli as F,Strategy as G}from"@jackwener/opencli/registry";import{selectorError as H}from"@jackwener/opencli/errors";import{conversationSelectionArgs as J,openCodexConversation as K}from"./sidebar.js";export const sendCommand=F({site:"codex",name:"send",access:"write",description:"Send text/commands to the current or selected Codex AI composer",domain:"localhost",strategy:G.UI,browser:!0,args:[{name:"text",required:!0,positional:!0,help:"Text, command (e.g. /review), or skill (e.g. $imagegen)"},...J],columns:["Status","Project","Conversation","InjectedText"],func:async(q,z)=>{const B=z.text,D=await K(q,z);if(!await q.evaluate(`
2
+ (function(text) {
3
+ let composer = document.querySelector('textarea, [contenteditable="true"]');
4
+
5
+ const editables = Array.from(document.querySelectorAll('[contenteditable="true"]'));
6
+ if (editables.length > 0) {
7
+ composer = editables[editables.length - 1];
8
+ }
9
+
10
+ if (!composer) return false;
11
+
12
+ composer.focus();
13
+ document.execCommand('insertText', false, text);
14
+ return true;
15
+ })(${JSON.stringify(B)})
16
+ `))throw H("Codex Composer input element");await q.wait(0.5);await q.pressKey("Enter");return[{Status:"Success",Project:D?.project||"",Conversation:D?.conversation||"",InjectedText:B}]}});
@@ -0,0 +1 @@
1
+ import{ArgumentError as M,CommandExecutionError as O,EmptyResultError as q}from"@jackwener/opencli/errors";function f(B){return String(B??"").replace(/\s+/g," ").trim()}function A(B){return f(B).toLowerCase()}function z(B,G){if(!G)return!0;const V=A(B.project),Q=A(B.projectPath),W=A(G);if(!W)return!0;return V===W||V.includes(W)||Q===W||Q.endsWith(`/${W}`)}export function hasConversationTarget(B){return!!(B?.project||B?.conversation||B?.index||B?.["thread-id"])}export function parsePositiveIntegerOption(B,G){const V=f(B);if(!/^\d+$/.test(V))throw new M(`${G} must be a positive integer`);const Q=Number.parseInt(V,10);if(!Number.isSafeInteger(Q)||Q<1)throw new M(`${G} must be a positive integer`);return Q}export function parseOptionalPositiveIntegerOption(B,G){if(B==null||f(B)==="")return null;return parsePositiveIntegerOption(B,G)}export function requireNonEmptyOption(B,G){const V=f(B);if(!V)throw new M(`${G} cannot be empty`);return V}export function collectCodexProjectsFromDocument(B=document){const G="[data-app-action-sidebar-project-row]",V="[data-app-action-sidebar-thread-row]";function Q(H){return(H.innerText||H.textContent||"").replace(/\s+/g," ").trim()}function W(H){return/^(?:(?:\d+\s*)?(?:刚刚|秒|分钟|小时|天|周|个月|年|sec|min|hr|hour|day|week|month|year|s|m|h|d|w)|.*\bago)$/i.test(H.trim())}function C(H,K){const $=Array.from(H.querySelectorAll('.tabular-nums, [class*="tabular-nums"], [class*="description"]')).map(Q).filter(Boolean).find(W);if($)return $;const N=Q(H).replace(K,"").trim();return W(N)?N:""}return Array.from(B.querySelectorAll(G)).map((H,K)=>{const _=H.getAttribute("data-app-action-sidebar-project-label")||H.getAttribute("aria-label")||Q(H),$=H.getAttribute("data-app-action-sidebar-project-id")||"",U=H.closest('[role="listitem"][aria-label]')||H.parentElement,J=(U?Array.from(U.querySelectorAll(V)):[]).map((Z,F)=>{const X=Z.getAttribute("data-app-action-sidebar-thread-title")||Q(Z);return{index:F+1,title:X,updated:C(Z,X),active:Z.getAttribute("data-app-action-sidebar-thread-active")==="true",pinned:Z.getAttribute("data-app-action-sidebar-thread-pinned")==="true",threadId:Z.getAttribute("data-app-action-sidebar-thread-id")||"",hostId:Z.getAttribute("data-app-action-sidebar-thread-host-id")||"",kind:Z.getAttribute("data-app-action-sidebar-thread-kind")||""}});return{index:K+1,project:_,projectPath:$,collapsed:H.getAttribute("data-app-action-sidebar-project-collapsed")==="true"||H.getAttribute("aria-expanded")==="false",conversations:J}})}export function selectCodexConversationInDocument(B,G=document){const V="[data-app-action-sidebar-project-row]",Q="[data-app-action-sidebar-thread-row]";function W(D){return String(D??"").replace(/\s+/g," ").trim()}function C(D){return W(D).toLowerCase()}function H(D,Y){const L=C(D),S=C(Y);return!!S&&(L===S||L.includes(S))}function K(D){return D.getAttribute("data-app-action-sidebar-project-label")||D.getAttribute("aria-label")||D.textContent||""}function _(D){return D.getAttribute("data-app-action-sidebar-project-id")||""}function $(D){return D.getAttribute("data-app-action-sidebar-thread-title")||D.textContent||""}function U(D){const Y=D.getBoundingClientRect?.();if(!Y||!Number.isFinite(Y.left)||!Number.isFinite(Y.top))return{};return{x:Y.left+Y.width/2,y:Y.top+Y.height/2}}const N=Array.from(G.querySelectorAll(V));let J=null;if(B.project){J=N.find((D)=>H(K(D),B.project))||N.find((D)=>H(_(D),B.project));if(!J)return{ok:!1,error:`Project not found: ${B.project}`,projects:N.map((D)=>K(D)).filter(Boolean)}}if(J){if(J.getAttribute("data-app-action-sidebar-project-collapsed")==="true"||J.getAttribute("aria-expanded")==="false"){J.scrollIntoView?.({block:"center"});if(!B.preferNativeClick)J.click();return{ok:!0,expanded:!0,selected:!1,project:K(J),projectPath:_(J),...U(J)}}}const Z=J?J.closest('[role="listitem"][aria-label]')||J.parentElement||G:G,F=Array.from(Z.querySelectorAll(Q));if(!F.length)return{ok:!1,error:J?`No visible conversations under project: ${K(J)}`:"No visible Codex conversations found"};let X=null;if(B.threadId)X=F.find((D)=>D.getAttribute("data-app-action-sidebar-thread-id")===B.threadId);if(!X&&B.index!=null){const D=Number(B.index);if(!Number.isInteger(D)||D<1)return{ok:!1,error:`Invalid conversation index: ${B.index}`};X=F[D-1]||null}if(!X&&B.conversation){const D=F.filter((Y)=>C($(Y))===C(B.conversation));X=D[0]||F.find((Y)=>H($(Y),B.conversation))||null;if(D.length>1&&!B.project)return{ok:!1,error:`Multiple conversations matched "${B.conversation}". Pass --project to disambiguate.`}}if(!X)return{ok:!1,error:B.threadId?`Thread not found: ${B.threadId}`:B.conversation?`Conversation not found: ${B.conversation}`:"Pass --conversation, --thread-id, or --index to select a Codex conversation",conversations:F.map((D,Y)=>({index:Y+1,title:$(D)}))};X.scrollIntoView?.({block:"center"});if(!B.preferNativeClick)X.click();return{ok:!0,expanded:!1,selected:!0,project:J?K(J):"",projectPath:J?_(J):"",conversation:$(X),threadId:X.getAttribute("data-app-action-sidebar-thread-id")||"",index:F.indexOf(X)+1,...U(X)}}export function flattenCodexProjects(B,G={}){const V=G.project,Q=parseOptionalPositiveIntegerOption(G.limit,"codex --limit"),W=[];for(const C of B){if(!z(C,V))continue;const H=Q?C.conversations.slice(0,Q):C.conversations;if(H.length===0){W.push({Project:C.project,Index:0,Title:C.collapsed?"(collapsed)":"(no visible conversations)",Updated:"",Active:"",ProjectPath:C.projectPath,ThreadId:""});continue}for(const K of H)W.push({Project:C.project,Index:K.index,Title:K.title,Updated:K.updated,Active:K.active?"yes":"",ProjectPath:C.projectPath,ThreadId:K.threadId})}return W}export async function readCodexProjects(B){const G=await B.evaluate(`(${collectCodexProjectsFromDocument.toString()})()`);if(!Array.isArray(G))throw new O("Codex sidebar project extraction returned an invalid payload");return G}export async function openCodexConversation(B,G){if(!hasConversationTarget(G))return null;const V=parseOptionalPositiveIntegerOption(G.index,"codex conversation --index"),Q=G["thread-id"]?requireNonEmptyOption(G["thread-id"],"codex conversation --thread-id"):"",W={project:G.project||"",conversation:G.conversation||"",index:V==null?"":String(V),threadId:Q,preferNativeClick:typeof B.nativeClick==="function"};let C=await B.evaluate(`(${selectCodexConversationInDocument.toString()})(${JSON.stringify(W)})`);if(C?.expanded){if(typeof B.nativeClick==="function"&&Number.isFinite(C.x)&&Number.isFinite(C.y))await B.nativeClick(C.x,C.y);await B.wait(0.75);C=await B.evaluate(`(${selectCodexConversationInDocument.toString()})(${JSON.stringify(W)})`)}if(!C?.ok||!C?.selected){const H=C?.conversations?` Available: ${C.conversations.map((_)=>`${_.index}. ${_.title}`).join("; ")}`:C?.projects?` Available projects: ${C.projects.join(", ")}`:"",K=`${C?.error||"Could not select Codex conversation"}${H}`;if(C?.error?.startsWith("Invalid conversation index:"))throw new M(K);if(C?.error?.startsWith("Multiple conversations matched"))throw new M(K,"Pass --project or --thread-id to disambiguate the target conversation.");if(C?.error?.startsWith("Project not found:")||C?.error?.startsWith("Conversation not found:")||C?.error?.startsWith("Thread not found:")||C?.error?.startsWith("No visible conversations under project:"))throw new q("codex conversation",K);throw new O(K,"Open the Codex sidebar and verify project/conversation rows are visible.")}if(typeof B.nativeClick==="function"&&Number.isFinite(C.x)&&Number.isFinite(C.y))await B.nativeClick(C.x,C.y);await B.wait(1);return C}export const conversationSelectionArgs=[{name:"project",required:!1,help:"Project label or path to select before running the command"},{name:"conversation",required:!1,help:"Conversation title to select within --project"},{name:"index",required:!1,help:"1-based conversation index within --project"},{name:"thread-id",required:!1,help:"Exact Codex thread id to select"}];
@@ -0,0 +1 @@
1
+ import{makeStatusCommand as o}from"../_shared/desktop-commands.js";export const statusCommand=o("codex","OpenAI Codex App");
@@ -0,0 +1 @@
1
+ import{cli as l,Strategy as p}from"@jackwener/opencli/registry";import{ArgumentError as n,CommandExecutionError as a,EmptyResultError as u}from"@jackwener/opencli/errors";const c=["market_cap_desc","market_cap_asc","name_desc","name_asc","market_cap_change_24h_desc","market_cap_change_24h_asc"];l({site:"coingecko",name:"categories",access:"read",description:"Crypto categories ranked by aggregated market cap",domain:"api.coingecko.com",strategy:p.PUBLIC,browser:!1,args:[{name:"sort",default:"market_cap_desc",help:`Sort order (${c.join(" / ")})`},{name:"limit",type:"int",default:20,help:"Number of categories (1-100; CoinGecko returns ~120 max)"}],columns:["rank","id","name","marketCap","volume24h","marketCapChange24hPct","top3Coins"],func:async(i)=>{const s=String(i.sort??"market_cap_desc").trim().toLowerCase();if(!c.includes(s))throw new n(`coingecko sort "${i.sort}" is not supported`,`Supported sorts: ${c.join(", ")}`);const t=Number(i.limit??20);if(!Number.isInteger(t)||t<=0)throw new n("coingecko limit must be a positive integer");if(t>100)throw new n("coingecko limit must be <= 100");const m=`https://api.coingecko.com/api/v3/coins/categories?order=${encodeURIComponent(s)}`;let r;try{r=await fetch(m,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(e){throw new a(`coingecko categories request failed: ${e?.message??e}`)}if(r.status===429)throw new a("coingecko returned HTTP 429 (rate limited)","Free tier allows ~30 calls/min. Wait and retry.");if(!r.ok)throw new a(`coingecko categories returned HTTP ${r.status}`);let o;try{o=await r.json()}catch(e){throw new a(`coingecko categories returned malformed JSON: ${e?.message??e}`)}if(!Array.isArray(o)||!o.length)throw new u("coingecko categories","CoinGecko returned no category data.");return o.slice(0,t).map((e,g)=>({rank:g+1,id:String(e.id??""),name:String(e.name??""),marketCap:e.market_cap!=null?Number(e.market_cap):null,volume24h:e.volume_24h!=null?Number(e.volume_24h):null,marketCapChange24hPct:e.market_cap_change_24h!=null?Number(e.market_cap_change_24h):null,top3Coins:Array.isArray(e.top_3_coins_id)?e.top_3_coins_id.join(", "):""}))}});
@@ -0,0 +1 @@
1
+ import{cli as y,Strategy as k}from"@jackwener/opencli/registry";import{ArgumentError as u,CommandExecutionError as i,EmptyResultError as w}from"@jackwener/opencli/errors";y({site:"coingecko",name:"coin",access:"read",description:"Fetch a single cryptocurrency's market data by CoinGecko id (e.g. bitcoin, ethereum).",domain:"api.coingecko.com",strategy:k.PUBLIC,browser:!1,args:[{name:"id",positional:!0,required:!0,type:"string",help:"CoinGecko coin id (lowercase, e.g. bitcoin / ethereum / solana)."},{name:"currency",type:"string",default:"usd",help:"Quote currency (usd, cny, eur, jpy, ...)."}],columns:["id","symbol","name","rank","price","marketCap","volume24h","change24hPct","change7dPct","change30dPct","ath","athDate","atl","atlDate","circulatingSupply","totalSupply","maxSupply","genesisDate","homepage"],func:async(l)=>{const s=String(l.id??"").trim().toLowerCase();if(!s)throw new u("coingecko coin id cannot be empty","Example: opencli coingecko coin bitcoin");if(!/^[a-z0-9][a-z0-9-]*$/.test(s))throw new u(`coingecko coin id must look like a CoinGecko slug (got "${l.id}")`);const r=String(l.currency??"usd").trim().toLowerCase();if(!/^[a-z0-9-]{2,20}$/.test(r))throw new u(`coingecko currency must look like a currency slug (got "${l.currency}")`);const c=new URL(`https://api.coingecko.com/api/v3/coins/${s}`);c.searchParams.set("localization","false");c.searchParams.set("tickers","false");c.searchParams.set("market_data","true");c.searchParams.set("community_data","false");c.searchParams.set("developer_data","false");c.searchParams.set("sparkline","false");let o;try{o=await fetch(c,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(t){throw new i(`coingecko coin request failed: ${t?.message||t}`)}if(o.status===404)throw new w("coingecko coin",`coingecko has no coin with id "${s}".`);if(o.status===429)throw new i("coingecko returned HTTP 429 (rate limited)","Free tier allows ~30 calls/min. Wait and retry.");if(!o.ok)throw new i(`coingecko coin failed: HTTP ${o.status}`);let a;try{a=await o.json()}catch(t){throw new i(`coingecko returned malformed JSON: ${t?.message||t}`)}if(a?.error)throw new i(`coingecko returned error: ${a.error}`);const e=a.market_data||{},n=(t,h)=>t&&t[h]!=null?t[h]:null,m=(t)=>t?String(t).slice(0,10):"",p=n(e.current_price,r),g=n(e.market_cap,r),d=n(e.total_volume,r);if(p==null&&g==null&&d==null)throw new i(`coingecko returned no market data for currency "${r}"`,"Use a CoinGecko-supported quote currency such as usd, cny, eur, or jpy.");return[{id:a.id||s,symbol:String(a.symbol||"").toUpperCase(),name:a.name||"",rank:a.market_cap_rank??null,price:p,marketCap:g,volume24h:d,change24hPct:e.price_change_percentage_24h??null,change7dPct:e.price_change_percentage_7d??null,change30dPct:e.price_change_percentage_30d??null,ath:n(e.ath,r),athDate:m(n(e.ath_date,r)),atl:n(e.atl,r),atlDate:m(n(e.atl_date,r)),circulatingSupply:e.circulating_supply??null,totalSupply:e.total_supply??null,maxSupply:e.max_supply??null,genesisDate:a.genesis_date||"",homepage:Array.isArray(a.links?.homepage)?a.links.homepage.find(Boolean)||"":""}]}});
@@ -0,0 +1 @@
1
+ import{cli as u,Strategy as p}from"@jackwener/opencli/registry";import{ArgumentError as c,CommandExecutionError as o,EmptyResultError as l}from"@jackwener/opencli/errors";const g="https://api.coingecko.com/api/v3/derivatives";u({site:"coingecko",name:"derivatives",access:"read",description:"Top crypto derivative (perpetual / futures) markets by 24h volume",domain:"api.coingecko.com",strategy:p.PUBLIC,browser:!1,args:[{name:"limit",type:"int",default:20,help:"Max rows to return (1-500; CoinGecko returns one large page)."},{name:"symbol",type:"string",required:!1,help:'Optional symbol substring filter (e.g. "BTC", "ETHUSDT").'}],columns:["rank","market","symbol","indexId","contractType","price","change24hPct","fundingRate","openInterestUsd","volume24hUsd","expired"],func:async(s)=>{const i=Number(s.limit??20);if(!Number.isInteger(i)||i<=0)throw new c("coingecko derivatives limit must be a positive integer");if(i>500)throw new c("coingecko derivatives limit must be <= 500");const n=s.symbol==null?"":String(s.symbol).trim().toUpperCase();let r;try{r=await fetch(g,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(e){throw new o(`coingecko derivatives request failed: ${e?.message??e}`)}if(r.status===429)throw new o("coingecko derivatives returned HTTP 429 (rate limited)","Free tier allows ~30 calls/min. Wait and retry.");if(!r.ok)throw new o(`coingecko derivatives returned HTTP ${r.status}`);let t;try{t=await r.json()}catch(e){throw new o(`coingecko derivatives returned malformed JSON: ${e?.message??e}`)}if(!Array.isArray(t)||!t.length)throw new l("coingecko derivatives","CoinGecko returned no derivative tickers.");let a=t;if(n){a=t.filter((e)=>String(e.symbol??"").toUpperCase().includes(n)||String(e.index_id??"").toUpperCase().includes(n));if(!a.length)throw new l("coingecko derivatives",`No derivative tickers matched symbol="${n}".`)}return a.slice(0,i).map((e,m)=>({rank:m+1,market:String(e.market??""),symbol:String(e.symbol??""),indexId:String(e.index_id??""),contractType:String(e.contract_type??""),price:e.price!=null?Number(e.price):null,change24hPct:e.price_percentage_change_24h!=null?Number(e.price_percentage_change_24h):null,fundingRate:e.funding_rate!=null?Number(e.funding_rate):null,openInterestUsd:e.open_interest!=null?Number(e.open_interest):null,volume24hUsd:e.volume_24h!=null?Number(e.volume_24h):null,expired:e.expired_at?String(e.expired_at):""}))}});
@@ -0,0 +1 @@
1
+ import{cli as l,Strategy as g}from"@jackwener/opencli/registry";import{ArgumentError as c,CommandExecutionError as o,EmptyResultError as m}from"@jackwener/opencli/errors";l({site:"coingecko",name:"exchanges",access:"read",description:"Top crypto exchanges by 24h BTC trading volume",domain:"api.coingecko.com",strategy:g.PUBLIC,browser:!1,args:[{name:"limit",type:"int",default:20,help:"Number of exchanges (1-250, CoinGecko per_page upper bound)"},{name:"page",type:"int",default:1,help:"Page number (1-based)"}],columns:["rank","id","name","trustScore","volume24hBtc","country","yearEstablished","url"],func:async(s)=>{const r=Number(s.limit??20);if(!Number.isInteger(r)||r<=0)throw new c("coingecko limit must be a positive integer");if(r>250)throw new c("coingecko limit must be <= 250 (per_page upper bound)");const n=Number(s.page??1);if(!Number.isInteger(n)||n<=0)throw new c("coingecko page must be a positive integer");const i=new URL("https://api.coingecko.com/api/v3/exchanges");i.searchParams.set("per_page",String(r));i.searchParams.set("page",String(n));let t;try{t=await fetch(i,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(e){throw new o(`coingecko exchanges request failed: ${e?.message??e}`)}if(t.status===429)throw new o("coingecko returned HTTP 429 (rate limited)","Free tier allows ~30 calls/min. Wait and retry.");if(!t.ok)throw new o(`coingecko exchanges returned HTTP ${t.status}`);let a;try{a=await t.json()}catch(e){throw new o(`coingecko exchanges returned malformed JSON: ${e?.message??e}`)}if(!Array.isArray(a)||!a.length)throw new m("coingecko exchanges","CoinGecko returned no exchange data.");return a.map((e,u)=>({rank:(n-1)*r+u+1,id:String(e.id??""),name:String(e.name??""),trustScore:e.trust_score!=null?Number(e.trust_score):null,volume24hBtc:e.trade_volume_24h_btc!=null?Number(e.trade_volume_24h_btc):null,country:String(e.country??""),yearEstablished:e.year_established!=null?Number(e.year_established):null,url:String(e.url??"")}))}});
@@ -0,0 +1 @@
1
+ import{cli as s,Strategy as m}from"@jackwener/opencli/registry";import{ArgumentError as i,CommandExecutionError as c}from"@jackwener/opencli/errors";s({site:"coingecko",name:"global",access:"read",description:"Aggregate crypto market stats: total market cap, volume, dominance",domain:"api.coingecko.com",strategy:m.PUBLIC,browser:!1,args:[{name:"currency",type:"string",default:"usd",help:"Quote currency for total market cap / volume (usd, cny, eur, jpy, ...)"}],columns:["currency","totalMarketCap","totalVolume24h","marketCapChange24hPct","btcDominancePct","ethDominancePct","activeCryptocurrencies","markets","ongoingIcos","updatedAt"],func:async(l)=>{const t=String(l.currency??"usd").trim().toLowerCase();if(!/^[a-z0-9-]{2,20}$/.test(t))throw new i(`coingecko currency must look like a currency slug (got "${l.currency}")`);let r;try{r=await fetch("https://api.coingecko.com/api/v3/global",{headers:{"User-Agent":"Mozilla/5.0"}})}catch(a){throw new c(`coingecko global request failed: ${a?.message??a}`)}if(r.status===429)throw new c("coingecko returned HTTP 429 (rate limited)","Free tier allows ~30 calls/min. Wait and retry.");if(!r.ok)throw new c(`coingecko global returned HTTP ${r.status}`);let u;try{u=await r.json()}catch(a){throw new c(`coingecko global returned malformed JSON: ${a?.message??a}`)}const e=u?.data;if(!e)throw new c("coingecko global returned no data envelope");const o=e?.total_market_cap?.[t],n=e?.total_volume?.[t];if(o==null&&n==null)throw new i(`coingecko has no market totals for currency "${t}"`,"Use a CoinGecko-supported quote currency such as usd, cny, eur, or jpy.");return[{currency:t.toUpperCase(),totalMarketCap:o!=null?Number(o):null,totalVolume24h:n!=null?Number(n):null,marketCapChange24hPct:e.market_cap_change_percentage_24h_usd!=null?Number(e.market_cap_change_percentage_24h_usd):null,btcDominancePct:e?.market_cap_percentage?.btc!=null?Number(e.market_cap_percentage.btc):null,ethDominancePct:e?.market_cap_percentage?.eth!=null?Number(e.market_cap_percentage.eth):null,activeCryptocurrencies:e.active_cryptocurrencies!=null?Number(e.active_cryptocurrencies):null,markets:e.markets!=null?Number(e.markets):null,ongoingIcos:e.ongoing_icos!=null?Number(e.ongoing_icos):null,updatedAt:e.updated_at?new Date(e.updated_at*1000).toISOString():""}]}});
@@ -0,0 +1 @@
1
+ import{cli as m,Strategy as p}from"@jackwener/opencli/registry";import{ArgumentError as i,CommandExecutionError as a,EmptyResultError as h}from"@jackwener/opencli/errors";m({site:"coingecko",name:"top",access:"read",description:"按市值排序的加密货币行情(默认 USD)",domain:"api.coingecko.com",strategy:p.PUBLIC,browser:!1,args:[{name:"currency",type:"string",default:"usd",help:"计价币种 (usd / cny / eur / jpy ...)"},{name:"limit",type:"int",default:10,help:"返回数量(默认 10,最多 250)"}],columns:["rank","symbol","name","price","change24hPct","marketCap","volume24h","high24h","low24h"],func:async(c)=>{const s=String(c.currency??"usd").toLowerCase(),o=Number(c.limit??10);if(!Number.isInteger(o)||o<=0)throw new i("limit must be a positive integer");if(o>250)throw new i("limit must be <= 250 (CoinGecko per_page upper bound)");const r=new URL("https://api.coingecko.com/api/v3/coins/markets");r.searchParams.set("vs_currency",s);r.searchParams.set("order","market_cap_desc");r.searchParams.set("per_page",String(o));r.searchParams.set("page","1");r.searchParams.set("sparkline","false");let n;try{n=await fetch(r,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(e){throw new a(`coingecko top request failed: ${e?.message||e}`)}if(!n.ok)throw new a(`coingecko top failed: HTTP ${n.status}`);let t;try{t=await n.json()}catch(e){throw new a(`coingecko returned malformed JSON: ${e?.message||e}`)}if(t?.error)throw new a(`coingecko returned error: ${t.error}`);if(!Array.isArray(t))throw new a("coingecko returned an unexpected response");if(t.length===0)throw new h("coingecko top","coingecko returned no market data");return t.map((e)=>({rank:e.market_cap_rank,symbol:String(e.symbol??"").toUpperCase(),name:e.name,price:e.current_price,change24hPct:e.price_change_percentage_24h,marketCap:e.market_cap,volume24h:e.total_volume,high24h:e.high_24h,low24h:e.low_24h}))}});
@@ -0,0 +1 @@
1
+ import{cli as s,Strategy as m}from"@jackwener/opencli/registry";import{CommandExecutionError as t,EmptyResultError as g}from"@jackwener/opencli/errors";s({site:"coingecko",name:"trending",access:"read",description:"Top trending cryptocurrencies on CoinGecko in the last 24h (search-volume based).",domain:"api.coingecko.com",strategy:m.PUBLIC,browser:!1,args:[],columns:["rank","id","symbol","name","marketCapRank","priceBtc","thumb"],func:async()=>{const c="https://api.coingecko.com/api/v3/search/trending";let n;try{n=await fetch(c,{headers:{"User-Agent":"Mozilla/5.0"}})}catch(r){throw new t(`coingecko trending request failed: ${r?.message||r}`)}if(n.status===429)throw new t("coingecko returned HTTP 429 (rate limited)","Wait and retry.");if(!n.ok)throw new t(`coingecko trending failed: HTTP ${n.status}`);let o;try{o=await n.json()}catch(r){throw new t(`coingecko returned malformed JSON: ${r?.message||r}`)}const i=Array.isArray(o?.coins)?o.coins:[];if(i.length===0)throw new g("coingecko trending","coingecko returned no trending coins.");return i.map((r,a)=>{const e=r?.item||{};return{rank:a+1,id:e.id||"",symbol:String(e.symbol||"").toUpperCase(),name:e.name||"",marketCapRank:e.market_cap_rank??null,priceBtc:e.price_btc??null,thumb:e.thumb||e.small||e.large||""}})}});
@@ -0,0 +1 @@
1
+ import{cli as l,Strategy as s}from"@jackwener/opencli/registry";import{requireExecute as p,requirePayloadObject as u,requireString as n}from"../_atlassian/shared.js";import{confluenceConfig as d,createPagePayload as m,normalizeConfluencePage as f,readPageBodyFile as g}from"./shared.js";import{atlassianRequest as y}from"../_atlassian/shared.js";l({site:"confluence",name:"create",access:"write",description:"Create a Confluence page from Markdown or storage XHTML",domain:"atlassian.net",strategy:s.PUBLIC,browser:!1,args:[{name:"space",type:"string",required:!0,help:"Cloud space id, or Data Center space key"},{name:"title",type:"string",required:!0,help:"Page title"},{name:"file",type:"string",required:!0,help:"Markdown file path"},{name:"parent",type:"string",help:"Optional parent page id"},{name:"representation",type:"string",default:"markdown",choices:["markdown","storage"],help:"Input file format"},{name:"execute",type:"boolean",help:"Actually create the remote page"}],columns:["status","id","title","spaceId","spaceKey","version","url"],func:async(e)=>{p(e,"confluence create");n(e.space,"Confluence space");n(e.title,"Confluence page title");const r=await g(e),t=d(),o=m(t,e,r),c=t.deployment==="cloud"?"/api/v2/pages":"/rest/api/content",i=u(await y(t,c,{method:"POST",body:o,label:"confluence create"}),"confluence create"),a=f(i,t);return[{...a,pageStatus:a.status,status:"created"}]}});
@@ -0,0 +1 @@
1
+ import{cli as o,Strategy as r}from"@jackwener/opencli/registry";import{requireString as t}from"../_atlassian/shared.js";import{confluenceConfig as s,getPage as c,normalizeConfluencePage as d}from"./shared.js";o({site:"confluence",name:"page",access:"read",description:"Confluence page by id with storage and Markdown body",domain:"atlassian.net",strategy:r.PUBLIC,browser:!1,args:[{name:"id",positional:!0,required:!0,help:"Confluence page id"}],columns:["id","title","status","spaceId","spaceKey","version","url"],func:async(n)=>{const e=s(),a=t(n.id,"Confluence page id"),i=await c(e,a);return[d(i,e)]}});
@@ -0,0 +1 @@
1
+ import{cli as K,Strategy as M}from"@jackwener/opencli/registry";import{atlassianRequest as O,parseLimit as P,queryString as Q,requireNonEmptyRows as T,requireString as V}from"../_atlassian/shared.js";import{confluenceConfig as W,confluenceResults as X,normalizeSearchResult as Y,withSpaceCql as Z}from"./shared.js";K({site:"confluence",name:"search",access:"read",description:"Search Confluence content with CQL",domain:"atlassian.net",strategy:M.PUBLIC,browser:!1,args:[{name:"cql",positional:!0,required:!0,help:'CQL query, e.g. "type = page and title ~ \\"RCA\\""'},{name:"space",type:"string",help:"Limit search to a Confluence space key"},{name:"limit",type:"int",default:20,help:"Max results to return (1-100)"}],columns:["id","title","type","spaceKey","status","lastModified","url"],func:async(x)=>{const A=W(),B=Z(V(x.cql,"CQL"),x.space),F=P(x.limit,20,100,"confluence limit"),G=`/rest/api/search${Q({cql:B,limit:F})}`,H=await O(A,G,{label:"confluence search"}),I=X(H,"confluence search");return T(I.map((J)=>Y(J,A)),"confluence search",`No Confluence content matched "${B}".`)}});
@@ -0,0 +1 @@
1
+ import{atlassianRequest as d,getConfluenceConfig as m,htmlToMarkdown as f,markdownToConfluenceStorage as b,queryString as g,requirePayloadArray as v,requirePayloadObject as a,requirePayloadString as u,readUtf8File as S,requireString as p}from"../_atlassian/shared.js";import{CommandExecutionError as w}from"@jackwener/opencli/errors";export function confluenceConfig(){return m()}function y(n,t){if(!t)return"";if(/^https?:\/\//i.test(t))return t;return`${n.baseUrl}${t.startsWith("/")?t:`/${t}`}`}function x(n){return n?.body?.storage?.value??n?.body?.view?.value??""}export function normalizeConfluencePage(n,t){const e=a(n,"confluence page"),o=u(e.id,"page id","confluence page"),r=u(e.title,"title","confluence page"),s=x(e),i=e.version?.number!=null?Number(e.version.number):void 0,c=e._links&&typeof e._links==="object"&&!Array.isArray(e._links)?e._links:{},l=c.webui??c.tinyui??"";return{id:o,title:r,status:String(e.status??""),spaceId:e.spaceId!=null?String(e.spaceId):void 0,spaceKey:e.space?.key?String(e.space.key):void 0,parentId:e.parentId!=null?String(e.parentId):void 0,version:i,createdAt:e.createdAt?String(e.createdAt):void 0,updatedAt:e.version?.createdAt??e.version?.when??void 0,url:y(t,l),body:{storage:s,markdown:f(s)}}}export async function getPage(n,t){if(n.deployment==="cloud"){const o=await d(n,`/api/v2/pages/${encodeURIComponent(t)}${g({"body-format":"storage"})}`,{label:`confluence page ${t}`});return a(o,`confluence page ${t}`)}const e=await d(n,`/rest/api/content/${encodeURIComponent(t)}${g({expand:"body.storage,version,space,ancestors"})}`,{label:`confluence page ${t}`});return a(e,`confluence page ${t}`)}export async function readPageBodyFile(n){const t=await S(n.file);if(n.representation==="storage")return t;return b(t)}export function createPagePayload(n,t,e){const o=p(t.title,"Confluence page title"),r=p(t.space,"Confluence space");if(n.deployment==="cloud")return{spaceId:r,status:"current",title:o,...t.parent?{parentId:String(t.parent)}:{},body:{representation:"storage",value:e}};return{type:"page",status:"current",title:o,space:{key:r},...t.parent?{ancestors:[{id:String(t.parent)}]}:{},body:{storage:{representation:"storage",value:e}}}}export function updatePagePayload(n,t,e,o){const r=a(t,"confluence current page"),s=u(r.id,"page id","confluence current page"),i=e.title?p(e.title,"Confluence page title"):u(r.title,"title","confluence current page"),c=Number(r.version?.number);if(!Number.isSafeInteger(c)||c<1)throw new w("confluence update could not determine the current page version.");const l=c+1;if(n.deployment==="cloud")return{id:s,status:"current",title:i,body:{representation:"storage",value:o},version:{number:l,...e["version-message"]?{message:String(e["version-message"])}:{}}};return{id:s,type:"page",status:"current",title:i,body:{storage:{representation:"storage",value:o}},version:{number:l,...e["version-message"]?{message:String(e["version-message"])}:{}}}}export function normalizeSearchResult(n,t){const e=a(n,"confluence search result"),o=e.content??e,r=a(o,"confluence search result content"),s=u(r.id,"content id","confluence search result"),i=u(e.title??r.title,"title","confluence search result"),c=e.space??r.space??{};return{id:s,title:i,type:String(r.type??e.entityType??""),spaceKey:String(c?.key??""),status:String(r.status??""),lastModified:String(e.lastModified??r.version?.when??r.version?.createdAt??""),url:y(t,e.url??r._links?.webui??""),excerpt:e.excerpt?f(e.excerpt):""}}export function confluenceResults(n,t){const e=a(n,t);return v(e.results,t)}export function withSpaceCql(n,t){const e=String(n??"").trim(),o=String(t??"").trim();if(!o)return e;const r=o.replace(/"/g,"\\\"");if(!e)return`space = "${r}"`;return`space = "${r}" and (${e})`}export const __test__={createPagePayload,getPage,normalizeConfluencePage,normalizeSearchResult,readPageBodyFile,updatePagePayload,withSpaceCql};
@@ -0,0 +1 @@
1
+ import{cli as c,Strategy as p}from"@jackwener/opencli/registry";import{atlassianRequest as u,requireExecute as d,requirePayloadObject as m,requireString as f}from"../_atlassian/shared.js";import{confluenceConfig as g,getPage as y,normalizeConfluencePage as h,readPageBodyFile as w,updatePagePayload as C}from"./shared.js";c({site:"confluence",name:"update",access:"write",description:"Update a Confluence page body from Markdown or storage XHTML",domain:"atlassian.net",strategy:p.PUBLIC,browser:!1,args:[{name:"id",positional:!0,required:!0,help:"Confluence page id"},{name:"file",type:"string",required:!0,help:"Markdown file path"},{name:"title",type:"string",help:"Optional replacement title; defaults to current title"},{name:"version-message",type:"string",help:"Confluence version message"},{name:"representation",type:"string",default:"markdown",choices:["markdown","storage"],help:"Input file format"},{name:"execute",type:"boolean",help:"Actually update the remote page"}],columns:["status","id","title","spaceId","spaceKey","version","url"],func:async(a)=>{d(a,"confluence update");const e=g(),t=f(a.id,"Confluence page id"),o=await y(e,t),r=await w(a),i=C(e,o,a,r),s=e.deployment==="cloud"?`/api/v2/pages/${encodeURIComponent(t)}`:`/rest/api/content/${encodeURIComponent(t)}`,l=m(await u(e,s,{method:"PUT",body:i,label:`confluence update ${t}`}),`confluence update ${t}`),n=h(l,e);return[{...n,pageStatus:n.status,status:"updated"}]}});
@@ -0,0 +1,86 @@
1
+ import{ArgumentError as m,AuthRequiredError as p,CommandExecutionError as r}from"@jackwener/opencli/errors";import{cli as f,Strategy as g}from"@jackwener/opencli/registry";import{canonicalizeProductUrl as i,normalizeProductId as C,requireProductIdArg as l}from"./utils.js";function h(e){return JSON.stringify(e)}function b(e){return`
2
+ (async () => {
3
+ const expectedProductId = ${h(e)};
4
+ const text = document.body.innerText || '';
5
+ const loginHints = {
6
+ hasLoginLink: Boolean(document.querySelector('a[href*="login"], a[title*="로그인"]')),
7
+ hasMyCoupang: /마이쿠팡/.test(text),
8
+ };
9
+
10
+ const pathMatch = location.pathname.match(/\\/vp\\/products\\/(\\d+)/);
11
+ const currentProductId = pathMatch?.[1] || '';
12
+ if (expectedProductId && currentProductId && expectedProductId !== currentProductId) {
13
+ return { ok: false, reason: 'PRODUCT_MISMATCH', currentProductId, loginHints };
14
+ }
15
+
16
+ const optionSelectors = [
17
+ 'select',
18
+ '[role="listbox"]',
19
+ '.prod-option, .product-option, .option-select, .option-dropdown',
20
+ ];
21
+ const hasRequiredOption = optionSelectors.some((selector) => {
22
+ try {
23
+ const nodes = Array.from(document.querySelectorAll(selector));
24
+ return nodes.some((node) => {
25
+ const label = (node.textContent || '') + ' ' + (node.getAttribute?.('aria-label') || '');
26
+ return /옵션|색상|사이즈|용량|선택/i.test(label);
27
+ });
28
+ } catch {
29
+ return false;
30
+ }
31
+ });
32
+ if (hasRequiredOption) {
33
+ return { ok: false, reason: 'OPTION_REQUIRED', currentProductId, loginHints };
34
+ }
35
+
36
+ const clickCandidate = (elements) => {
37
+ for (const element of elements) {
38
+ if (!(element instanceof HTMLElement)) continue;
39
+ const label = ((element.innerText || '') + ' ' + (element.getAttribute('aria-label') || '')).trim();
40
+ if (/장바구니|카트|cart/i.test(label) && !/sold out|품절/i.test(label)) {
41
+ element.click();
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ };
47
+
48
+ const beforeCount = (() => {
49
+ const node = document.querySelector('[class*="cart"] .count, #headerCartCount, .cart-count');
50
+ const text = node?.textContent || '';
51
+ const num = Number(text.replace(/[^\\d]/g, ''));
52
+ return Number.isFinite(num) ? num : null;
53
+ })();
54
+
55
+ const buttons = Array.from(document.querySelectorAll('button, a[role="button"], input[type="button"]'));
56
+ const clicked = clickCandidate(buttons);
57
+ if (!clicked) {
58
+ return { ok: false, reason: 'ADD_TO_CART_BUTTON_NOT_FOUND', currentProductId, loginHints };
59
+ }
60
+
61
+ await new Promise((resolve) => setTimeout(resolve, 2500));
62
+
63
+ const afterText = document.body.innerText || '';
64
+ const successMessage = /장바구니에 담|장바구니 담기 완료|added to cart/i.test(afterText);
65
+ const afterCount = (() => {
66
+ const node = document.querySelector('[class*="cart"] .count, #headerCartCount, .cart-count');
67
+ const text = node?.textContent || '';
68
+ const num = Number(text.replace(/[^\\d]/g, ''));
69
+ return Number.isFinite(num) ? num : null;
70
+ })();
71
+ const countIncreased =
72
+ beforeCount != null &&
73
+ afterCount != null &&
74
+ afterCount >= beforeCount &&
75
+ (afterCount > beforeCount || beforeCount === 0);
76
+
77
+ return {
78
+ ok: successMessage || countIncreased,
79
+ reason: successMessage || countIncreased ? 'SUCCESS' : 'UNKNOWN',
80
+ currentProductId,
81
+ beforeCount,
82
+ afterCount,
83
+ loginHints,
84
+ };
85
+ })()
86
+ `}f({site:"coupang",name:"add-to-cart",access:"write",description:"Add a Coupang product to cart using logged-in browser session",domain:"www.coupang.com",strategy:g.COOKIE,browser:!0,args:[{name:"product-id",positional:!0,required:!1,help:"Coupang product ID"},{name:"url",required:!1,help:"Canonical product URL"}],columns:["ok","product_id","url","message"],func:async(e,c)=>{const u=c["product-id"];if(!u&&!c.url)throw new m("Either --product-id or --url is required");const o=u?l(u,"product-id"):l(c.url,"--url"),s=i(c.url,o)||i("",o);await e.goto(s).catch((t)=>{throw new r(`coupang add-to-cart navigation failed: ${t?.message||t}`)});const n=await e.evaluate(b(o)).catch((t)=>{throw new r(`coupang add-to-cart evaluation failed: ${t?.message||t}`)}),d=n?.loginHints??{};if(d.hasLoginLink&&!d.hasMyCoupang)throw new p("coupang.com","Please log into Coupang in Chrome and retry.");const a=C(n?.currentProductId||o);if(n?.reason==="PRODUCT_MISMATCH"){const t=a?`got ${a}`:"no product id observed";throw new r(`Product mismatch: expected ${o}, ${t}`)}if(n?.reason==="OPTION_REQUIRED")throw new r("This product requires option selection and is not supported in v1.");if(n?.reason==="ADD_TO_CART_BUTTON_NOT_FOUND")throw new r("Could not find an add-to-cart button on the product page.");if(!n?.ok)throw new r("Failed to confirm add-to-cart success.");return[{ok:!0,product_id:a||o,url:s,message:"Added to cart"}]}});
@@ -0,0 +1,16 @@
1
+ import{AuthRequiredError as e,CommandExecutionError as r}from"@jackwener/opencli/errors";import{registerSiteAuthCommands as m}from"../_shared/site-auth.js";async function i(n){return(await n.getCookies({url:"https://www.coupang.com"})).some((t)=>/^(AID|MEMBER_ID|LMSESSIONID)$/.test(t.name)&&t.value)}async function a(n){if(!await i(n))throw new e("coupang.com","Coupang session cookies (AID/MEMBER_ID/LMSESSIONID) missing");await n.goto("https://www.coupang.com/np/mypage");await n.wait(3);const o=await n.evaluate(`
2
+ (() => {
3
+ if (/login\\.coupang\\.com\\/login/.test(location.href)) {
4
+ return { kind: 'auth', detail: 'Coupang mypage redirected to login — anonymous' };
5
+ }
6
+ if (/Access Denied/i.test(document.title)) {
7
+ return { kind: 'auth', detail: 'Coupang Access Denied — anti-bot or non-KR IP' };
8
+ }
9
+ const el = document.querySelector('.my-nickname, .member-name, .mp-user-info-name, [class*=memberName]');
10
+ const name = (el?.textContent || '').trim();
11
+ if (!name) {
12
+ return { kind: 'auth', detail: 'Coupang mypage 200 but no member-name surface' };
13
+ }
14
+ return { ok: true, name };
15
+ })()
16
+ `);if(o?.kind==="auth")throw new e("coupang.com",o.detail);if(!o?.ok)throw new r(`Unexpected Coupang probe: ${JSON.stringify(o)}`);return{name:o.name}}m({site:"coupang",domain:"coupang.com",loginUrl:"https://login.coupang.com/login/login.pang",columns:["name"],verify:a,poll:async(n)=>{if(!await i(n))throw new e("coupang.com","Waiting for Coupang session cookies");return a(n)}});