@jackwener/opencli 1.6.2 → 1.6.4

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 (1894) hide show
  1. package/README.md +7 -7
  2. package/README.zh-CN.md +9 -9
  3. package/dist/browser/cdp.d.ts +1 -40
  4. package/dist/browser/cdp.js +2 -310
  5. package/dist/browser/page.d.ts +1 -62
  6. package/dist/browser/page.js +2 -304
  7. package/dist/browser/utils.d.ts +1 -10
  8. package/dist/browser/utils.js +2 -27
  9. package/dist/cli-manifest.json +546 -2
  10. package/dist/clis/1688/item.js +3 -3
  11. package/dist/clis/1688/search.js +2 -2
  12. package/dist/clis/1688/shared.d.ts +1 -1
  13. package/dist/clis/1688/shared.js +1 -1
  14. package/dist/clis/1688/store.js +2 -2
  15. package/dist/clis/36kr/article.js +2 -2
  16. package/dist/clis/36kr/hot.js +12 -6
  17. package/dist/clis/36kr/news.js +1 -1
  18. package/dist/clis/36kr/search.js +12 -6
  19. package/dist/clis/_shared/desktop-commands.d.ts +5 -5
  20. package/dist/clis/_shared/desktop-commands.js +1 -1
  21. package/dist/clis/amazon/bestsellers.js +1 -1
  22. package/dist/clis/amazon/discussion.js +2 -2
  23. package/dist/clis/amazon/movers-shakers.js +1 -1
  24. package/dist/clis/amazon/new-releases.js +1 -1
  25. package/dist/clis/amazon/offer.js +2 -2
  26. package/dist/clis/amazon/product.js +2 -2
  27. package/dist/clis/amazon/rankings.d.ts +1 -1
  28. package/dist/clis/amazon/rankings.js +2 -2
  29. package/dist/clis/amazon/search.js +2 -2
  30. package/dist/clis/amazon/shared.d.ts +1 -1
  31. package/dist/clis/amazon/shared.js +1 -1
  32. package/dist/clis/antigravity/dump.d.ts +1 -1
  33. package/dist/clis/antigravity/dump.js +1 -1
  34. package/dist/clis/antigravity/extract-code.d.ts +1 -1
  35. package/dist/clis/antigravity/extract-code.js +1 -1
  36. package/dist/clis/antigravity/model.d.ts +1 -1
  37. package/dist/clis/antigravity/model.js +1 -1
  38. package/dist/clis/antigravity/new.d.ts +1 -1
  39. package/dist/clis/antigravity/new.js +1 -1
  40. package/dist/clis/antigravity/read.d.ts +1 -1
  41. package/dist/clis/antigravity/read.js +1 -1
  42. package/dist/clis/antigravity/send.d.ts +1 -1
  43. package/dist/clis/antigravity/send.js +1 -1
  44. package/dist/clis/antigravity/serve.js +2 -2
  45. package/dist/clis/antigravity/status.d.ts +1 -1
  46. package/dist/clis/antigravity/status.js +1 -1
  47. package/dist/clis/antigravity/watch.d.ts +1 -1
  48. package/dist/clis/antigravity/watch.js +1 -1
  49. package/dist/clis/apple-podcasts/commands.test.js +1 -1
  50. package/dist/clis/apple-podcasts/episodes.js +2 -2
  51. package/dist/clis/apple-podcasts/search.js +2 -2
  52. package/dist/clis/apple-podcasts/top.js +2 -2
  53. package/dist/clis/apple-podcasts/utils.js +1 -1
  54. package/dist/clis/arxiv/paper.js +2 -2
  55. package/dist/clis/arxiv/search.js +2 -2
  56. package/dist/clis/arxiv/utils.js +1 -1
  57. package/dist/clis/band/bands.js +2 -2
  58. package/dist/clis/band/mentions.js +2 -2
  59. package/dist/clis/band/post.js +2 -2
  60. package/dist/clis/band/posts.js +2 -2
  61. package/dist/clis/barchart/flow.js +1 -1
  62. package/dist/clis/barchart/greeks.js +1 -1
  63. package/dist/clis/barchart/options.js +1 -1
  64. package/dist/clis/barchart/quote.js +1 -1
  65. package/dist/clis/bbc/news.js +1 -1
  66. package/dist/clis/bilibili/comments.js +1 -1
  67. package/dist/clis/bilibili/comments.test.js +1 -1
  68. package/dist/clis/bilibili/download.js +1 -1
  69. package/dist/clis/bilibili/dynamic.js +1 -1
  70. package/dist/clis/bilibili/dynamic.test.js +1 -1
  71. package/dist/clis/bilibili/favorite.js +1 -1
  72. package/dist/clis/bilibili/feed.js +1 -1
  73. package/dist/clis/bilibili/following.js +2 -2
  74. package/dist/clis/bilibili/history.js +1 -1
  75. package/dist/clis/bilibili/me.js +1 -1
  76. package/dist/clis/bilibili/ranking.js +1 -1
  77. package/dist/clis/bilibili/search.js +1 -1
  78. package/dist/clis/bilibili/subtitle.js +2 -2
  79. package/dist/clis/bilibili/subtitle.test.js +2 -2
  80. package/dist/clis/bilibili/user-videos.js +1 -1
  81. package/dist/clis/bilibili/utils.d.ts +1 -1
  82. package/dist/clis/bilibili/utils.js +1 -1
  83. package/dist/clis/bloomberg/businessweek.js +1 -1
  84. package/dist/clis/bloomberg/economics.js +1 -1
  85. package/dist/clis/bloomberg/feeds.js +1 -1
  86. package/dist/clis/bloomberg/industries.js +1 -1
  87. package/dist/clis/bloomberg/main.js +1 -1
  88. package/dist/clis/bloomberg/markets.js +1 -1
  89. package/dist/clis/bloomberg/news.js +2 -2
  90. package/dist/clis/bloomberg/opinions.js +1 -1
  91. package/dist/clis/bloomberg/politics.js +1 -1
  92. package/dist/clis/bloomberg/tech.js +1 -1
  93. package/dist/clis/bloomberg/utils.js +1 -1
  94. package/dist/clis/boss/batchgreet.js +1 -1
  95. package/dist/clis/boss/chatlist.js +1 -1
  96. package/dist/clis/boss/chatmsg.js +1 -1
  97. package/dist/clis/boss/detail.js +1 -1
  98. package/dist/clis/boss/exchange.js +1 -1
  99. package/dist/clis/boss/greet.js +1 -1
  100. package/dist/clis/boss/invite.js +1 -1
  101. package/dist/clis/boss/joblist.js +1 -1
  102. package/dist/clis/boss/mark.js +2 -2
  103. package/dist/clis/boss/recommend.js +1 -1
  104. package/dist/clis/boss/resume.js +1 -1
  105. package/dist/clis/boss/search.js +1 -1
  106. package/dist/clis/boss/send.js +2 -2
  107. package/dist/clis/boss/stats.js +1 -1
  108. package/dist/clis/boss/utils.d.ts +1 -1
  109. package/dist/clis/chaoxing/assignments.js +2 -2
  110. package/dist/clis/chaoxing/exams.js +1 -1
  111. package/dist/clis/chaoxing/utils.d.ts +1 -1
  112. package/dist/clis/chatgpt/ask.d.ts +1 -1
  113. package/dist/clis/chatgpt/ask.js +2 -2
  114. package/dist/clis/chatgpt/model.d.ts +1 -1
  115. package/dist/clis/chatgpt/model.js +2 -2
  116. package/dist/clis/chatgpt/new.d.ts +1 -1
  117. package/dist/clis/chatgpt/new.js +2 -2
  118. package/dist/clis/chatgpt/read.d.ts +1 -1
  119. package/dist/clis/chatgpt/read.js +2 -2
  120. package/dist/clis/chatgpt/send.d.ts +1 -1
  121. package/dist/clis/chatgpt/send.js +2 -2
  122. package/dist/clis/chatgpt/status.d.ts +1 -1
  123. package/dist/clis/chatgpt/status.js +2 -2
  124. package/dist/clis/chatwise/ask.d.ts +1 -1
  125. package/dist/clis/chatwise/ask.js +2 -2
  126. package/dist/clis/chatwise/export.d.ts +1 -1
  127. package/dist/clis/chatwise/export.js +1 -1
  128. package/dist/clis/chatwise/history.d.ts +1 -1
  129. package/dist/clis/chatwise/history.js +1 -1
  130. package/dist/clis/chatwise/model.d.ts +1 -1
  131. package/dist/clis/chatwise/model.js +2 -2
  132. package/dist/clis/chatwise/new.d.ts +1 -1
  133. package/dist/clis/chatwise/read.d.ts +1 -1
  134. package/dist/clis/chatwise/read.js +1 -1
  135. package/dist/clis/chatwise/screenshot.d.ts +1 -1
  136. package/dist/clis/chatwise/send.d.ts +1 -1
  137. package/dist/clis/chatwise/send.js +2 -2
  138. package/dist/clis/chatwise/status.d.ts +1 -1
  139. package/dist/clis/codex/ask.d.ts +1 -1
  140. package/dist/clis/codex/ask.js +2 -2
  141. package/dist/clis/codex/dump.d.ts +1 -1
  142. package/dist/clis/codex/export.d.ts +1 -1
  143. package/dist/clis/codex/export.js +1 -1
  144. package/dist/clis/codex/extract-diff.d.ts +1 -1
  145. package/dist/clis/codex/extract-diff.js +1 -1
  146. package/dist/clis/codex/history.d.ts +1 -1
  147. package/dist/clis/codex/history.js +1 -1
  148. package/dist/clis/codex/model.d.ts +1 -1
  149. package/dist/clis/codex/model.js +1 -1
  150. package/dist/clis/codex/new.d.ts +1 -1
  151. package/dist/clis/codex/read.d.ts +1 -1
  152. package/dist/clis/codex/read.js +1 -1
  153. package/dist/clis/codex/screenshot.d.ts +1 -1
  154. package/dist/clis/codex/send.d.ts +1 -1
  155. package/dist/clis/codex/send.js +2 -2
  156. package/dist/clis/codex/status.d.ts +1 -1
  157. package/dist/clis/coupang/add-to-cart.js +1 -1
  158. package/dist/clis/coupang/search.js +1 -1
  159. package/dist/clis/ctrip/search.js +2 -2
  160. package/dist/clis/ctrip/search.test.js +1 -1
  161. package/dist/clis/cursor/ask.d.ts +1 -1
  162. package/dist/clis/cursor/ask.js +2 -2
  163. package/dist/clis/cursor/composer.d.ts +1 -1
  164. package/dist/clis/cursor/composer.js +2 -2
  165. package/dist/clis/cursor/dump.d.ts +1 -1
  166. package/dist/clis/cursor/export.d.ts +1 -1
  167. package/dist/clis/cursor/export.js +1 -1
  168. package/dist/clis/cursor/extract-code.d.ts +1 -1
  169. package/dist/clis/cursor/extract-code.js +1 -1
  170. package/dist/clis/cursor/history.d.ts +1 -1
  171. package/dist/clis/cursor/history.js +1 -1
  172. package/dist/clis/cursor/model.d.ts +1 -1
  173. package/dist/clis/cursor/model.js +1 -1
  174. package/dist/clis/cursor/new.d.ts +1 -1
  175. package/dist/clis/cursor/read.d.ts +1 -1
  176. package/dist/clis/cursor/read.js +2 -2
  177. package/dist/clis/cursor/screenshot.d.ts +1 -1
  178. package/dist/clis/cursor/send.d.ts +1 -1
  179. package/dist/clis/cursor/send.js +2 -2
  180. package/dist/clis/cursor/status.d.ts +1 -1
  181. package/dist/clis/discord-app/channels.d.ts +1 -1
  182. package/dist/clis/discord-app/channels.js +1 -1
  183. package/dist/clis/discord-app/members.d.ts +1 -1
  184. package/dist/clis/discord-app/members.js +1 -1
  185. package/dist/clis/discord-app/read.d.ts +1 -1
  186. package/dist/clis/discord-app/read.js +1 -1
  187. package/dist/clis/discord-app/search.d.ts +1 -1
  188. package/dist/clis/discord-app/search.js +1 -1
  189. package/dist/clis/discord-app/send.d.ts +1 -1
  190. package/dist/clis/discord-app/send.js +1 -1
  191. package/dist/clis/discord-app/servers.d.ts +1 -1
  192. package/dist/clis/discord-app/servers.js +1 -1
  193. package/dist/clis/discord-app/status.d.ts +1 -1
  194. package/dist/clis/discord-app/status.js +1 -1
  195. package/dist/clis/douban/book-hot.js +1 -1
  196. package/dist/clis/douban/download.js +2 -2
  197. package/dist/clis/douban/download.test.js +1 -1
  198. package/dist/clis/douban/marks.js +1 -1
  199. package/dist/clis/douban/movie-hot.js +1 -1
  200. package/dist/clis/douban/photos.js +1 -1
  201. package/dist/clis/douban/reviews.js +1 -1
  202. package/dist/clis/douban/search.js +1 -1
  203. package/dist/clis/douban/utils.d.ts +1 -1
  204. package/dist/clis/douban/utils.js +1 -1
  205. package/dist/clis/doubao/ask.d.ts +1 -1
  206. package/dist/clis/doubao/ask.js +1 -1
  207. package/dist/clis/doubao/detail.d.ts +1 -1
  208. package/dist/clis/doubao/detail.js +1 -1
  209. package/dist/clis/doubao/detail.test.js +1 -1
  210. package/dist/clis/doubao/history.d.ts +1 -1
  211. package/dist/clis/doubao/history.js +1 -1
  212. package/dist/clis/doubao/history.test.js +1 -1
  213. package/dist/clis/doubao/meeting-summary.d.ts +1 -1
  214. package/dist/clis/doubao/meeting-summary.js +1 -1
  215. package/dist/clis/doubao/meeting-transcript.d.ts +1 -1
  216. package/dist/clis/doubao/meeting-transcript.js +1 -1
  217. package/dist/clis/doubao/new.d.ts +1 -1
  218. package/dist/clis/doubao/new.js +1 -1
  219. package/dist/clis/doubao/read.d.ts +1 -1
  220. package/dist/clis/doubao/read.js +1 -1
  221. package/dist/clis/doubao/send.d.ts +1 -1
  222. package/dist/clis/doubao/send.js +1 -1
  223. package/dist/clis/doubao/status.d.ts +1 -1
  224. package/dist/clis/doubao/status.js +1 -1
  225. package/dist/clis/doubao/utils.d.ts +1 -1
  226. package/dist/clis/doubao-app/ask.d.ts +1 -1
  227. package/dist/clis/doubao-app/ask.js +1 -1
  228. package/dist/clis/doubao-app/dump.d.ts +1 -1
  229. package/dist/clis/doubao-app/dump.js +1 -1
  230. package/dist/clis/doubao-app/new.d.ts +1 -1
  231. package/dist/clis/doubao-app/new.js +1 -1
  232. package/dist/clis/doubao-app/read.d.ts +1 -1
  233. package/dist/clis/doubao-app/read.js +1 -1
  234. package/dist/clis/doubao-app/screenshot.d.ts +1 -1
  235. package/dist/clis/doubao-app/screenshot.js +1 -1
  236. package/dist/clis/doubao-app/send.d.ts +1 -1
  237. package/dist/clis/doubao-app/send.js +1 -1
  238. package/dist/clis/doubao-app/status.d.ts +1 -1
  239. package/dist/clis/doubao-app/status.js +1 -1
  240. package/dist/clis/douyin/_shared/browser-fetch.d.ts +1 -1
  241. package/dist/clis/douyin/_shared/browser-fetch.js +1 -1
  242. package/dist/clis/douyin/_shared/imagex-upload.js +1 -1
  243. package/dist/clis/douyin/_shared/imagex-upload.test.js +1 -1
  244. package/dist/clis/douyin/_shared/public-api.d.ts +1 -1
  245. package/dist/clis/douyin/_shared/sts2.d.ts +1 -1
  246. package/dist/clis/douyin/_shared/sts2.js +1 -1
  247. package/dist/clis/douyin/_shared/sts2.test.js +1 -1
  248. package/dist/clis/douyin/_shared/tos-upload-short-read.test.js +1 -1
  249. package/dist/clis/douyin/_shared/tos-upload.js +1 -1
  250. package/dist/clis/douyin/_shared/transcode.d.ts +1 -1
  251. package/dist/clis/douyin/_shared/transcode.js +1 -1
  252. package/dist/clis/douyin/_shared/transcode.test.js +1 -1
  253. package/dist/clis/douyin/activities.js +1 -1
  254. package/dist/clis/douyin/activities.test.js +1 -1
  255. package/dist/clis/douyin/collections.js +1 -1
  256. package/dist/clis/douyin/collections.test.js +1 -1
  257. package/dist/clis/douyin/delete.js +1 -1
  258. package/dist/clis/douyin/delete.test.js +1 -1
  259. package/dist/clis/douyin/draft.js +2 -2
  260. package/dist/clis/douyin/draft.test.js +1 -1
  261. package/dist/clis/douyin/drafts.js +1 -1
  262. package/dist/clis/douyin/drafts.test.js +1 -1
  263. package/dist/clis/douyin/hashtag.js +2 -2
  264. package/dist/clis/douyin/hashtag.test.js +1 -1
  265. package/dist/clis/douyin/location.js +1 -1
  266. package/dist/clis/douyin/location.test.js +1 -1
  267. package/dist/clis/douyin/profile.js +2 -2
  268. package/dist/clis/douyin/profile.test.js +1 -1
  269. package/dist/clis/douyin/publish.js +2 -2
  270. package/dist/clis/douyin/publish.test.js +1 -1
  271. package/dist/clis/douyin/stats.js +1 -1
  272. package/dist/clis/douyin/stats.test.js +1 -1
  273. package/dist/clis/douyin/update.js +2 -2
  274. package/dist/clis/douyin/update.test.js +1 -1
  275. package/dist/clis/douyin/user-videos.js +1 -1
  276. package/dist/clis/douyin/user-videos.test.js +1 -1
  277. package/dist/clis/douyin/videos.js +1 -1
  278. package/dist/clis/douyin/videos.test.js +1 -1
  279. package/dist/clis/gemini/ask.d.ts +1 -1
  280. package/dist/clis/gemini/ask.js +1 -1
  281. package/dist/clis/gemini/deep-research-result.d.ts +1 -0
  282. package/dist/clis/gemini/deep-research-result.js +91 -0
  283. package/dist/clis/gemini/deep-research-result.test.js +154 -0
  284. package/dist/clis/gemini/deep-research.d.ts +1 -0
  285. package/dist/clis/gemini/deep-research.js +98 -0
  286. package/dist/clis/gemini/deep-research.test.js +184 -0
  287. package/dist/clis/gemini/image.d.ts +1 -1
  288. package/dist/clis/gemini/image.js +2 -2
  289. package/dist/clis/gemini/new.d.ts +1 -1
  290. package/dist/clis/gemini/new.js +1 -1
  291. package/dist/clis/gemini/reply-state.test.js +30 -0
  292. package/dist/clis/gemini/utils.d.ts +30 -1
  293. package/dist/clis/gemini/utils.js +1014 -2
  294. package/dist/clis/gemini/utils.test.js +21 -1
  295. package/dist/clis/google/news.js +2 -2
  296. package/dist/clis/google/search.js +2 -2
  297. package/dist/clis/google/suggest.js +2 -2
  298. package/dist/clis/google/trends.js +2 -2
  299. package/dist/clis/grok/ask.d.ts +2 -2
  300. package/dist/clis/grok/ask.js +1 -1
  301. package/dist/clis/hf/top.js +2 -2
  302. package/dist/clis/hupu/detail.js +1 -1
  303. package/dist/clis/hupu/like.js +2 -2
  304. package/dist/clis/hupu/mentions.js +159 -0
  305. package/dist/clis/hupu/reply.js +2 -2
  306. package/dist/clis/hupu/search.js +1 -1
  307. package/dist/clis/hupu/unlike.js +2 -2
  308. package/dist/clis/hupu/utils.d.ts +1 -1
  309. package/dist/clis/hupu/utils.js +1 -1
  310. package/dist/clis/imdb/person.js +2 -2
  311. package/dist/clis/imdb/reviews.js +2 -2
  312. package/dist/clis/imdb/search.js +2 -2
  313. package/dist/clis/imdb/title.js +2 -2
  314. package/dist/clis/imdb/top.js +2 -2
  315. package/dist/clis/imdb/trending.js +2 -2
  316. package/dist/clis/imdb/utils.d.ts +1 -1
  317. package/dist/clis/imdb/utils.js +1 -1
  318. package/dist/clis/instagram/_shared/private-publish.d.ts +1 -1
  319. package/dist/clis/instagram/_shared/private-publish.js +1 -1
  320. package/dist/clis/instagram/_shared/protocol-capture.d.ts +1 -1
  321. package/dist/clis/instagram/_shared/runtime-info.d.ts +1 -1
  322. package/dist/clis/instagram/download.js +2 -2
  323. package/dist/clis/instagram/download.test.js +2 -2
  324. package/dist/clis/instagram/note.js +2 -2
  325. package/dist/clis/instagram/note.test.js +2 -2
  326. package/dist/clis/instagram/post.js +2 -2
  327. package/dist/clis/instagram/post.test.js +2 -2
  328. package/dist/clis/instagram/reel.js +2 -2
  329. package/dist/clis/instagram/reel.test.js +2 -2
  330. package/dist/clis/instagram/story.js +2 -2
  331. package/dist/clis/instagram/story.test.js +2 -2
  332. package/dist/clis/jd/item.js +1 -1
  333. package/dist/clis/jd/item.test.js +1 -1
  334. package/dist/clis/jike/comment.js +1 -1
  335. package/dist/clis/jike/create.js +1 -1
  336. package/dist/clis/jike/feed.js +1 -1
  337. package/dist/clis/jike/like.js +1 -1
  338. package/dist/clis/jike/notifications.js +1 -1
  339. package/dist/clis/jike/repost.js +1 -1
  340. package/dist/clis/jike/search.js +1 -1
  341. package/dist/clis/lesswrong/_helpers.d.ts +15 -0
  342. package/dist/clis/lesswrong/_helpers.js +75 -0
  343. package/dist/clis/lesswrong/comments.js +64 -0
  344. package/dist/clis/lesswrong/curated.js +30 -0
  345. package/dist/clis/lesswrong/frontpage.js +30 -0
  346. package/dist/clis/lesswrong/new.js +30 -0
  347. package/dist/clis/lesswrong/read.js +45 -0
  348. package/dist/clis/lesswrong/sequences.js +27 -0
  349. package/dist/clis/lesswrong/shortform.js +30 -0
  350. package/dist/clis/lesswrong/tag.js +45 -0
  351. package/dist/clis/lesswrong/tags.js +27 -0
  352. package/dist/clis/lesswrong/top-month.js +30 -0
  353. package/dist/clis/lesswrong/top-week.js +30 -0
  354. package/dist/clis/lesswrong/top-year.js +30 -0
  355. package/dist/clis/lesswrong/top.js +30 -0
  356. package/dist/clis/lesswrong/user-posts.js +41 -0
  357. package/dist/clis/lesswrong/user.js +44 -0
  358. package/dist/clis/linkedin/search.js +2 -2
  359. package/dist/clis/linkedin/timeline.js +2 -2
  360. package/dist/clis/linkedin/timeline.test.js +1 -1
  361. package/dist/clis/linux-do/category.js +1 -1
  362. package/dist/clis/linux-do/feed.d.ts +2 -2
  363. package/dist/clis/linux-do/feed.js +2 -2
  364. package/dist/clis/linux-do/hot.js +1 -1
  365. package/dist/clis/linux-do/latest.js +1 -1
  366. package/dist/clis/medium/feed.js +1 -1
  367. package/dist/clis/medium/search.js +1 -1
  368. package/dist/clis/medium/user.js +1 -1
  369. package/dist/clis/medium/utils.d.ts +1 -1
  370. package/dist/clis/medium/utils.js +1 -1
  371. package/dist/clis/notebooklm/compat.test.js +1 -1
  372. package/dist/clis/notebooklm/current.js +2 -2
  373. package/dist/clis/notebooklm/get.js +2 -2
  374. package/dist/clis/notebooklm/history.js +2 -2
  375. package/dist/clis/notebooklm/history.test.js +1 -1
  376. package/dist/clis/notebooklm/list.js +2 -2
  377. package/dist/clis/notebooklm/note-list.js +2 -2
  378. package/dist/clis/notebooklm/note-list.test.js +1 -1
  379. package/dist/clis/notebooklm/notes-get.js +2 -2
  380. package/dist/clis/notebooklm/notes-get.test.js +1 -1
  381. package/dist/clis/notebooklm/open.js +2 -2
  382. package/dist/clis/notebooklm/open.test.js +1 -1
  383. package/dist/clis/notebooklm/rpc.d.ts +1 -1
  384. package/dist/clis/notebooklm/rpc.js +1 -1
  385. package/dist/clis/notebooklm/rpc.test.js +1 -1
  386. package/dist/clis/notebooklm/source-fulltext.js +2 -2
  387. package/dist/clis/notebooklm/source-fulltext.test.js +1 -1
  388. package/dist/clis/notebooklm/source-get.js +2 -2
  389. package/dist/clis/notebooklm/source-get.test.js +1 -1
  390. package/dist/clis/notebooklm/source-guide.js +2 -2
  391. package/dist/clis/notebooklm/source-guide.test.js +1 -1
  392. package/dist/clis/notebooklm/source-list.js +2 -2
  393. package/dist/clis/notebooklm/status.js +1 -1
  394. package/dist/clis/notebooklm/summary.js +2 -2
  395. package/dist/clis/notebooklm/summary.test.js +1 -1
  396. package/dist/clis/notebooklm/utils.d.ts +1 -1
  397. package/dist/clis/notebooklm/utils.js +1 -1
  398. package/dist/clis/notion/export.d.ts +1 -1
  399. package/dist/clis/notion/export.js +1 -1
  400. package/dist/clis/notion/favorites.d.ts +1 -1
  401. package/dist/clis/notion/favorites.js +1 -1
  402. package/dist/clis/notion/new.d.ts +1 -1
  403. package/dist/clis/notion/new.js +1 -1
  404. package/dist/clis/notion/read.d.ts +1 -1
  405. package/dist/clis/notion/read.js +1 -1
  406. package/dist/clis/notion/search.d.ts +1 -1
  407. package/dist/clis/notion/search.js +1 -1
  408. package/dist/clis/notion/sidebar.d.ts +1 -1
  409. package/dist/clis/notion/sidebar.js +1 -1
  410. package/dist/clis/notion/status.d.ts +1 -1
  411. package/dist/clis/notion/status.js +1 -1
  412. package/dist/clis/notion/write.d.ts +1 -1
  413. package/dist/clis/notion/write.js +1 -1
  414. package/dist/clis/ones/common.d.ts +1 -1
  415. package/dist/clis/ones/common.js +1 -1
  416. package/dist/clis/ones/enrich-tasks.d.ts +1 -1
  417. package/dist/clis/ones/login.js +2 -2
  418. package/dist/clis/ones/logout.js +1 -1
  419. package/dist/clis/ones/me.js +2 -2
  420. package/dist/clis/ones/my-tasks.js +2 -2
  421. package/dist/clis/ones/resolve-labels.d.ts +1 -1
  422. package/dist/clis/ones/task-helpers.js +1 -1
  423. package/dist/clis/ones/task.js +2 -2
  424. package/dist/clis/ones/tasks.js +2 -2
  425. package/dist/clis/ones/token-info.js +2 -2
  426. package/dist/clis/ones/worklog.js +2 -2
  427. package/dist/clis/paperreview/commands.test.js +1 -1
  428. package/dist/clis/paperreview/feedback.js +2 -2
  429. package/dist/clis/paperreview/review.js +2 -2
  430. package/dist/clis/paperreview/submit.js +2 -2
  431. package/dist/clis/paperreview/utils.js +1 -1
  432. package/dist/clis/paperreview/utils.test.js +1 -1
  433. package/dist/clis/pixiv/download.js +2 -2
  434. package/dist/clis/pixiv/download.test.js +2 -2
  435. package/dist/clis/pixiv/illusts.js +2 -2
  436. package/dist/clis/pixiv/illusts.test.js +2 -2
  437. package/dist/clis/pixiv/search.js +1 -1
  438. package/dist/clis/pixiv/search.test.js +2 -2
  439. package/dist/clis/pixiv/test-utils.d.ts +1 -1
  440. package/dist/clis/pixiv/utils.d.ts +1 -1
  441. package/dist/clis/pixiv/utils.js +1 -1
  442. package/dist/clis/producthunt/browse.js +2 -2
  443. package/dist/clis/producthunt/hot.js +2 -2
  444. package/dist/clis/producthunt/posts.js +1 -1
  445. package/dist/clis/producthunt/today.js +1 -1
  446. package/dist/clis/reddit/comment.js +2 -2
  447. package/dist/clis/reddit/read.js +2 -2
  448. package/dist/clis/reddit/read.test.js +1 -1
  449. package/dist/clis/reddit/save.js +2 -2
  450. package/dist/clis/reddit/saved.js +2 -2
  451. package/dist/clis/reddit/subscribe.js +2 -2
  452. package/dist/clis/reddit/upvote.js +2 -2
  453. package/dist/clis/reddit/upvoted.js +2 -2
  454. package/dist/clis/reuters/search.js +1 -1
  455. package/dist/clis/sinablog/article.js +1 -1
  456. package/dist/clis/sinablog/hot.js +1 -1
  457. package/dist/clis/sinablog/search.js +1 -1
  458. package/dist/clis/sinablog/user.js +1 -1
  459. package/dist/clis/sinablog/utils.d.ts +1 -1
  460. package/dist/clis/sinafinance/news.js +2 -2
  461. package/dist/clis/sinafinance/rolling-news.js +1 -1
  462. package/dist/clis/sinafinance/stock-rank.js +1 -1
  463. package/dist/clis/sinafinance/stock.js +2 -2
  464. package/dist/clis/smzdm/search.js +1 -1
  465. package/dist/clis/spotify/spotify.js +2 -2
  466. package/dist/clis/spotify/utils.js +1 -1
  467. package/dist/clis/substack/feed.js +1 -1
  468. package/dist/clis/substack/publication.js +1 -1
  469. package/dist/clis/substack/search.js +2 -2
  470. package/dist/clis/substack/utils.d.ts +1 -1
  471. package/dist/clis/substack/utils.js +1 -1
  472. package/dist/clis/tieba/commands.test.js +1 -1
  473. package/dist/clis/tieba/hot.js +2 -2
  474. package/dist/clis/tieba/posts.js +2 -2
  475. package/dist/clis/tieba/read.js +2 -2
  476. package/dist/clis/tieba/search.js +2 -2
  477. package/dist/clis/twitter/accept.js +2 -2
  478. package/dist/clis/twitter/article.js +2 -2
  479. package/dist/clis/twitter/block.js +2 -2
  480. package/dist/clis/twitter/bookmark.js +2 -2
  481. package/dist/clis/twitter/bookmarks.js +2 -2
  482. package/dist/clis/twitter/delete.d.ts +6 -0
  483. package/dist/clis/twitter/delete.js +82 -47
  484. package/dist/clis/twitter/delete.test.d.ts +1 -0
  485. package/dist/clis/twitter/delete.test.js +73 -0
  486. package/dist/clis/twitter/download.js +1 -1
  487. package/dist/clis/twitter/follow.js +2 -2
  488. package/dist/clis/twitter/followers.js +2 -2
  489. package/dist/clis/twitter/following.js +2 -2
  490. package/dist/clis/twitter/hide-reply.js +2 -2
  491. package/dist/clis/twitter/like.js +2 -2
  492. package/dist/clis/twitter/likes.js +2 -2
  493. package/dist/clis/twitter/notifications.js +2 -2
  494. package/dist/clis/twitter/post.js +2 -2
  495. package/dist/clis/twitter/post.test.js +1 -1
  496. package/dist/clis/twitter/profile.js +2 -2
  497. package/dist/clis/twitter/reply-dm.js +2 -2
  498. package/dist/clis/twitter/reply.js +2 -2
  499. package/dist/clis/twitter/reply.test.js +1 -1
  500. package/dist/clis/twitter/search.js +2 -2
  501. package/dist/clis/twitter/search.test.js +1 -1
  502. package/dist/clis/twitter/shared.d.ts +1 -1
  503. package/dist/clis/twitter/thread.js +2 -2
  504. package/dist/clis/twitter/timeline.js +2 -2
  505. package/dist/clis/twitter/trending.js +2 -2
  506. package/dist/clis/twitter/unblock.js +2 -2
  507. package/dist/clis/twitter/unbookmark.js +2 -2
  508. package/dist/clis/twitter/unfollow.js +2 -2
  509. package/dist/clis/v2ex/daily.js +2 -2
  510. package/dist/clis/v2ex/me.js +2 -2
  511. package/dist/clis/v2ex/notifications.js +2 -2
  512. package/dist/clis/web/read.js +1 -1
  513. package/dist/clis/weibo/comments.js +1 -1
  514. package/dist/clis/weibo/feed.js +1 -1
  515. package/dist/clis/weibo/hot.js +1 -1
  516. package/dist/clis/weibo/me.js +2 -2
  517. package/dist/clis/weibo/post.js +2 -2
  518. package/dist/clis/weibo/search.js +2 -2
  519. package/dist/clis/weibo/user.js +2 -2
  520. package/dist/clis/weibo/utils.d.ts +1 -1
  521. package/dist/clis/weibo/utils.js +1 -1
  522. package/dist/clis/weixin/download.js +1 -1
  523. package/dist/clis/weread/book.js +2 -2
  524. package/dist/clis/weread/commands.test.js +2 -2
  525. package/dist/clis/weread/highlights.js +1 -1
  526. package/dist/clis/weread/notebooks.js +1 -1
  527. package/dist/clis/weread/notes.js +1 -1
  528. package/dist/clis/weread/private-api-regression.test.js +2 -2
  529. package/dist/clis/weread/ranking.js +1 -1
  530. package/dist/clis/weread/search-regression.test.js +1 -1
  531. package/dist/clis/weread/search.js +1 -1
  532. package/dist/clis/weread/shelf.js +3 -3
  533. package/dist/clis/weread/utils.d.ts +1 -1
  534. package/dist/clis/weread/utils.js +1 -1
  535. package/dist/clis/wikipedia/random.js +2 -2
  536. package/dist/clis/wikipedia/search.js +2 -2
  537. package/dist/clis/wikipedia/summary.js +2 -2
  538. package/dist/clis/wikipedia/trending.js +2 -2
  539. package/dist/clis/wikipedia/utils.js +1 -1
  540. package/dist/clis/xianyu/chat.js +2 -2
  541. package/dist/clis/xianyu/item.js +2 -2
  542. package/dist/clis/xianyu/item.test.js +2 -2
  543. package/dist/clis/xianyu/search.js +2 -2
  544. package/dist/clis/xianyu/utils.js +1 -1
  545. package/dist/clis/xiaohongshu/comments.js +2 -2
  546. package/dist/clis/xiaohongshu/comments.test.js +3 -3
  547. package/dist/clis/xiaohongshu/creator-note-detail.d.ts +1 -1
  548. package/dist/clis/xiaohongshu/creator-note-detail.js +1 -1
  549. package/dist/clis/xiaohongshu/creator-note-detail.test.js +1 -1
  550. package/dist/clis/xiaohongshu/creator-notes-summary.js +1 -1
  551. package/dist/clis/xiaohongshu/creator-notes.d.ts +1 -1
  552. package/dist/clis/xiaohongshu/creator-notes.js +1 -1
  553. package/dist/clis/xiaohongshu/creator-notes.test.js +1 -1
  554. package/dist/clis/xiaohongshu/creator-profile.js +1 -1
  555. package/dist/clis/xiaohongshu/creator-stats.js +1 -1
  556. package/dist/clis/xiaohongshu/download.js +1 -1
  557. package/dist/clis/xiaohongshu/download.test.js +1 -1
  558. package/dist/clis/xiaohongshu/note-helpers.d.ts +2 -2
  559. package/dist/clis/xiaohongshu/note-helpers.js +5 -3
  560. package/dist/clis/xiaohongshu/note.d.ts +4 -0
  561. package/dist/clis/xiaohongshu/note.js +10 -12
  562. package/dist/clis/xiaohongshu/note.test.js +6 -6
  563. package/dist/clis/xiaohongshu/publish.js +1 -1
  564. package/dist/clis/xiaohongshu/publish.test.js +1 -1
  565. package/dist/clis/xiaohongshu/search.js +2 -2
  566. package/dist/clis/xiaohongshu/search.test.js +1 -1
  567. package/dist/clis/xiaohongshu/user.js +1 -1
  568. package/dist/clis/xiaoyuzhou/episode.js +2 -2
  569. package/dist/clis/xiaoyuzhou/podcast-episodes.js +2 -2
  570. package/dist/clis/xiaoyuzhou/podcast.js +2 -2
  571. package/dist/clis/xiaoyuzhou/utils.js +1 -1
  572. package/dist/clis/xueqiu/comments.d.ts +1 -1
  573. package/dist/clis/xueqiu/comments.js +4 -4
  574. package/dist/clis/xueqiu/comments.test.js +3 -3
  575. package/dist/clis/xueqiu/danjuan-utils.d.ts +1 -1
  576. package/dist/clis/xueqiu/fund-holdings.js +1 -1
  577. package/dist/clis/xueqiu/fund-snapshot.js +1 -1
  578. package/dist/clis/yahoo-finance/quote.js +1 -1
  579. package/dist/clis/yollomi/background.js +2 -2
  580. package/dist/clis/yollomi/edit.js +2 -2
  581. package/dist/clis/yollomi/face-swap.js +2 -2
  582. package/dist/clis/yollomi/generate.js +2 -2
  583. package/dist/clis/yollomi/models.js +1 -1
  584. package/dist/clis/yollomi/object-remover.js +2 -2
  585. package/dist/clis/yollomi/remove-bg.js +2 -2
  586. package/dist/clis/yollomi/restore.js +2 -2
  587. package/dist/clis/yollomi/try-on.js +2 -2
  588. package/dist/clis/yollomi/upload.js +2 -2
  589. package/dist/clis/yollomi/upscale.js +2 -2
  590. package/dist/clis/yollomi/utils.d.ts +1 -1
  591. package/dist/clis/yollomi/utils.js +1 -1
  592. package/dist/clis/yollomi/video.js +2 -2
  593. package/dist/clis/youtube/channel.js +2 -2
  594. package/dist/clis/youtube/comments.js +2 -2
  595. package/dist/clis/youtube/search.js +1 -1
  596. package/dist/clis/youtube/transcript.js +2 -2
  597. package/dist/clis/youtube/utils.d.ts +1 -1
  598. package/dist/clis/youtube/video.js +2 -2
  599. package/dist/clis/yuanbao/ask.d.ts +1 -1
  600. package/dist/clis/yuanbao/ask.js +2 -2
  601. package/dist/clis/yuanbao/ask.test.js +1 -1
  602. package/dist/clis/yuanbao/new.d.ts +1 -1
  603. package/dist/clis/yuanbao/new.js +1 -1
  604. package/dist/clis/yuanbao/new.test.js +1 -1
  605. package/dist/clis/yuanbao/shared.d.ts +2 -2
  606. package/dist/clis/yuanbao/shared.js +1 -1
  607. package/dist/clis/zhihu/download.js +1 -1
  608. package/dist/clis/zhihu/question.js +2 -2
  609. package/dist/clis/zhihu/question.test.js +2 -2
  610. package/dist/clis/zsxq/dynamics.js +1 -1
  611. package/dist/clis/zsxq/groups.js +1 -1
  612. package/dist/clis/zsxq/search.js +1 -1
  613. package/dist/clis/zsxq/search.test.js +1 -1
  614. package/dist/clis/zsxq/topic.js +2 -2
  615. package/dist/clis/zsxq/topic.test.js +1 -1
  616. package/dist/clis/zsxq/topics.js +1 -1
  617. package/dist/clis/zsxq/topics.test.js +1 -1
  618. package/dist/clis/zsxq/utils.d.ts +1 -1
  619. package/dist/clis/zsxq/utils.js +1 -1
  620. package/dist/download/article-download.d.ts +1 -59
  621. package/dist/download/article-download.js +2 -178
  622. package/dist/download/index.d.ts +1 -71
  623. package/dist/download/index.js +2 -345
  624. package/dist/download/media-download.d.ts +1 -49
  625. package/dist/download/media-download.js +2 -114
  626. package/dist/download/progress.d.ts +1 -36
  627. package/dist/download/progress.js +2 -111
  628. package/dist/pipeline/index.d.ts +1 -5
  629. package/dist/pipeline/index.js +2 -5
  630. package/dist/src/browser/cdp.d.ts +40 -0
  631. package/dist/src/browser/cdp.js +310 -0
  632. package/dist/src/browser/page.d.ts +62 -0
  633. package/dist/src/browser/page.js +304 -0
  634. package/dist/src/browser/utils.d.ts +10 -0
  635. package/dist/src/browser/utils.js +27 -0
  636. package/dist/{build-manifest.js → src/build-manifest.js} +5 -4
  637. package/dist/{cascade.js → src/cascade.js} +16 -31
  638. package/dist/src/cli.d.ts +22 -0
  639. package/dist/{cli.js → src/cli.js} +78 -8
  640. package/dist/{cli.test.js → src/cli.test.js} +84 -1
  641. package/dist/{commanderAdapter.d.ts → src/commanderAdapter.d.ts} +1 -0
  642. package/dist/{commanderAdapter.js → src/commanderAdapter.js} +26 -46
  643. package/dist/{discovery.d.ts → src/discovery.d.ts} +11 -2
  644. package/dist/{discovery.js → src/discovery.js} +101 -12
  645. package/dist/src/doctor.test.d.ts +1 -0
  646. package/dist/src/download/article-download.d.ts +59 -0
  647. package/dist/src/download/article-download.js +178 -0
  648. package/dist/src/download/index.d.ts +71 -0
  649. package/dist/src/download/index.js +345 -0
  650. package/dist/src/download/index.test.d.ts +1 -0
  651. package/dist/src/download/media-download.d.ts +49 -0
  652. package/dist/src/download/media-download.js +114 -0
  653. package/dist/src/download/progress.d.ts +36 -0
  654. package/dist/src/download/progress.js +111 -0
  655. package/dist/src/electron-apps.test.d.ts +1 -0
  656. package/dist/src/engine.test.d.ts +1 -0
  657. package/dist/src/errors.test.d.ts +1 -0
  658. package/dist/src/execution.test.d.ts +1 -0
  659. package/dist/src/extension-manifest-regression.test.d.ts +1 -0
  660. package/dist/src/external.test.d.ts +1 -0
  661. package/dist/{interceptor.d.ts → src/interceptor.d.ts} +2 -0
  662. package/dist/{interceptor.js → src/interceptor.js} +3 -6
  663. package/dist/src/launcher.test.d.ts +1 -0
  664. package/dist/{main.js → src/main.js} +3 -2
  665. package/dist/src/node-network.test.d.ts +1 -0
  666. package/dist/src/output.test.d.ts +1 -0
  667. package/{src/pipeline/index.ts → dist/src/pipeline/index.d.ts} +0 -1
  668. package/dist/src/pipeline/index.js +5 -0
  669. package/dist/src/pipeline/steps/download.test.d.ts +1 -0
  670. package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
  671. package/dist/{record.js → src/record.js} +1 -1
  672. package/dist/src/record.test.d.ts +1 -0
  673. package/dist/src/runtime-detect.test.d.ts +1 -0
  674. package/dist/src/serialization.test.d.ts +1 -0
  675. package/dist/{synthesize.d.ts → src/synthesize.d.ts} +0 -4
  676. package/dist/{synthesize.js → src/synthesize.js} +4 -15
  677. package/dist/src/tui.test.d.ts +1 -0
  678. package/dist/{version.js → src/version.js} +7 -1
  679. package/dist/src/weixin-download.test.d.ts +1 -0
  680. package/dist/{weixin-download.test.js → src/weixin-download.test.js} +1 -1
  681. package/package.json +26 -9
  682. package/scripts/check-doc-coverage.sh +2 -2
  683. package/scripts/copy-yaml.cjs +4 -4
  684. package/scripts/fetch-adapters.js +157 -0
  685. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -83
  686. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  687. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -42
  688. package/.github/ISSUE_TEMPLATE/new_site_adapter.yml +0 -57
  689. package/.github/actions/setup-chrome/action.yml +0 -27
  690. package/.github/dependabot.yml +0 -27
  691. package/.github/pull_request_template.md +0 -33
  692. package/.github/workflows/build-extension.yml +0 -67
  693. package/.github/workflows/ci.yml +0 -147
  694. package/.github/workflows/doc-check.yml +0 -36
  695. package/.github/workflows/docs.yml +0 -17
  696. package/.github/workflows/e2e-headed.yml +0 -74
  697. package/.github/workflows/release.yml +0 -44
  698. package/.github/workflows/security.yml +0 -33
  699. package/CHANGELOG.md +0 -321
  700. package/CONTRIBUTING.md +0 -208
  701. package/PRIVACY.md +0 -57
  702. package/TESTING.md +0 -252
  703. package/autoresearch/baseline-browse.txt +0 -1
  704. package/autoresearch/baseline-skill.txt +0 -1
  705. package/autoresearch/browse-tasks.json +0 -686
  706. package/autoresearch/commands/debug.ts +0 -163
  707. package/autoresearch/commands/fix.ts +0 -145
  708. package/autoresearch/commands/plan.ts +0 -88
  709. package/autoresearch/commands/run.ts +0 -138
  710. package/autoresearch/config.ts +0 -82
  711. package/autoresearch/engine.ts +0 -359
  712. package/autoresearch/eval-all.ts +0 -127
  713. package/autoresearch/eval-browse.ts +0 -185
  714. package/autoresearch/eval-publish.ts +0 -238
  715. package/autoresearch/eval-save.ts +0 -249
  716. package/autoresearch/eval-skill.ts +0 -254
  717. package/autoresearch/eval-v2ex.ts +0 -220
  718. package/autoresearch/eval-zhihu.ts +0 -230
  719. package/autoresearch/logger.ts +0 -69
  720. package/autoresearch/presets/combined-reliability.ts +0 -27
  721. package/autoresearch/presets/index.ts +0 -23
  722. package/autoresearch/presets/operate-reliability.ts +0 -24
  723. package/autoresearch/presets/save-reliability.ts +0 -26
  724. package/autoresearch/presets/skill-quality.ts +0 -20
  725. package/autoresearch/presets/v2ex-reliability.ts +0 -24
  726. package/autoresearch/presets/zhihu-reliability.ts +0 -25
  727. package/autoresearch/publish-tasks.json +0 -345
  728. package/autoresearch/run-browse.sh +0 -9
  729. package/autoresearch/run-save.sh +0 -11
  730. package/autoresearch/run-skill.sh +0 -9
  731. package/autoresearch/save-adapters/xhs-explore-deep.ts +0 -64
  732. package/autoresearch/save-adapters/xhs-note-comments.ts +0 -61
  733. package/autoresearch/save-adapters/xhs-search-full.ts +0 -62
  734. package/autoresearch/save-adapters/zhihu-hot-detail.ts +0 -52
  735. package/autoresearch/save-adapters/zhihu-question-full.ts +0 -57
  736. package/autoresearch/save-adapters/zhihu-search-detail.ts +0 -53
  737. package/autoresearch/save-tasks.json +0 -281
  738. package/autoresearch/v2ex-tasks.json +0 -899
  739. package/autoresearch/zhihu-tasks.json +0 -848
  740. package/bun.lock +0 -615
  741. package/dist/cli.d.ts +0 -9
  742. package/docs/.vitepress/config.mts +0 -238
  743. package/docs/adapters/browser/1688.md +0 -52
  744. package/docs/adapters/browser/36kr.md +0 -48
  745. package/docs/adapters/browser/amazon.md +0 -53
  746. package/docs/adapters/browser/apple-podcasts.md +0 -28
  747. package/docs/adapters/browser/arxiv.md +0 -27
  748. package/docs/adapters/browser/band.md +0 -63
  749. package/docs/adapters/browser/barchart.md +0 -33
  750. package/docs/adapters/browser/bbc.md +0 -26
  751. package/docs/adapters/browser/bilibili.md +0 -47
  752. package/docs/adapters/browser/bloomberg.md +0 -70
  753. package/docs/adapters/browser/bluesky.md +0 -53
  754. package/docs/adapters/browser/boss.md +0 -28
  755. package/docs/adapters/browser/chaoxing.md +0 -39
  756. package/docs/adapters/browser/coupang.md +0 -28
  757. package/docs/adapters/browser/ctrip.md +0 -27
  758. package/docs/adapters/browser/devto.md +0 -35
  759. package/docs/adapters/browser/dictionary.md +0 -27
  760. package/docs/adapters/browser/douban.md +0 -62
  761. package/docs/adapters/browser/doubao.md +0 -39
  762. package/docs/adapters/browser/douyin.md +0 -75
  763. package/docs/adapters/browser/facebook.md +0 -36
  764. package/docs/adapters/browser/gemini.md +0 -72
  765. package/docs/adapters/browser/google.md +0 -62
  766. package/docs/adapters/browser/grok.md +0 -53
  767. package/docs/adapters/browser/hackernews.md +0 -42
  768. package/docs/adapters/browser/hf.md +0 -42
  769. package/docs/adapters/browser/hupu.md +0 -53
  770. package/docs/adapters/browser/imdb.md +0 -47
  771. package/docs/adapters/browser/instagram.md +0 -46
  772. package/docs/adapters/browser/jd.md +0 -27
  773. package/docs/adapters/browser/jike.md +0 -45
  774. package/docs/adapters/browser/jimeng.md +0 -39
  775. package/docs/adapters/browser/linkedin.md +0 -33
  776. package/docs/adapters/browser/linux-do.md +0 -206
  777. package/docs/adapters/browser/lobsters.md +0 -32
  778. package/docs/adapters/browser/medium.md +0 -32
  779. package/docs/adapters/browser/notebooklm.md +0 -69
  780. package/docs/adapters/browser/ones.md +0 -59
  781. package/docs/adapters/browser/paperreview.md +0 -43
  782. package/docs/adapters/browser/pixiv.md +0 -92
  783. package/docs/adapters/browser/producthunt.md +0 -49
  784. package/docs/adapters/browser/reddit.md +0 -50
  785. package/docs/adapters/browser/reuters.md +0 -27
  786. package/docs/adapters/browser/sinablog.md +0 -36
  787. package/docs/adapters/browser/sinafinance.md +0 -115
  788. package/docs/adapters/browser/smzdm.md +0 -27
  789. package/docs/adapters/browser/spotify.md +0 -62
  790. package/docs/adapters/browser/stackoverflow.md +0 -35
  791. package/docs/adapters/browser/steam.md +0 -26
  792. package/docs/adapters/browser/substack.md +0 -38
  793. package/docs/adapters/browser/tieba.md +0 -45
  794. package/docs/adapters/browser/tiktok.md +0 -68
  795. package/docs/adapters/browser/twitter.md +0 -56
  796. package/docs/adapters/browser/v2ex.md +0 -53
  797. package/docs/adapters/browser/web.md +0 -30
  798. package/docs/adapters/browser/weibo.md +0 -36
  799. package/docs/adapters/browser/weixin.md +0 -33
  800. package/docs/adapters/browser/weread.md +0 -48
  801. package/docs/adapters/browser/wikipedia.md +0 -32
  802. package/docs/adapters/browser/xianyu.md +0 -42
  803. package/docs/adapters/browser/xiaoe.md +0 -44
  804. package/docs/adapters/browser/xiaohongshu.md +0 -47
  805. package/docs/adapters/browser/xiaoyuzhou.md +0 -28
  806. package/docs/adapters/browser/xueqiu.md +0 -65
  807. package/docs/adapters/browser/yahoo-finance.md +0 -27
  808. package/docs/adapters/browser/yollomi.md +0 -69
  809. package/docs/adapters/browser/youtube.md +0 -29
  810. package/docs/adapters/browser/yuanbao.md +0 -64
  811. package/docs/adapters/browser/zhihu.md +0 -30
  812. package/docs/adapters/browser/zsxq.md +0 -49
  813. package/docs/adapters/desktop/antigravity.md +0 -49
  814. package/docs/adapters/desktop/chatgpt.md +0 -49
  815. package/docs/adapters/desktop/chatwise.md +0 -38
  816. package/docs/adapters/desktop/codex.md +0 -36
  817. package/docs/adapters/desktop/cursor.md +0 -37
  818. package/docs/adapters/desktop/discord.md +0 -28
  819. package/docs/adapters/desktop/doubao-app.md +0 -35
  820. package/docs/adapters/desktop/notion.md +0 -29
  821. package/docs/adapters/index.md +0 -96
  822. package/docs/adapters-doc/ones.md +0 -32
  823. package/docs/advanced/cdp.md +0 -103
  824. package/docs/advanced/download.md +0 -71
  825. package/docs/advanced/electron.md +0 -125
  826. package/docs/advanced/rate-limiter-plugin.md +0 -99
  827. package/docs/advanced/remote-chrome.md +0 -72
  828. package/docs/comparison.md +0 -125
  829. package/docs/developer/ai-workflow.md +0 -66
  830. package/docs/developer/architecture.md +0 -103
  831. package/docs/developer/contributing.md +0 -155
  832. package/docs/developer/testing.md +0 -263
  833. package/docs/developer/ts-adapter.md +0 -105
  834. package/docs/developer/yaml-adapter.md +0 -124
  835. package/docs/guide/browser-bridge.md +0 -49
  836. package/docs/guide/electron-app-cli.md +0 -200
  837. package/docs/guide/getting-started.md +0 -79
  838. package/docs/guide/installation.md +0 -37
  839. package/docs/guide/plugins.md +0 -261
  840. package/docs/guide/troubleshooting.md +0 -72
  841. package/docs/index.md +0 -35
  842. package/docs/superpowers/plans/2026-03-28-perf-smart-wait.md +0 -1143
  843. package/docs/superpowers/plans/2026-03-31-daemon-lifecycle-redesign.md +0 -857
  844. package/docs/superpowers/specs/2026-03-28-perf-smart-wait-design.md +0 -170
  845. package/docs/superpowers/specs/2026-03-31-daemon-lifecycle-redesign.md +0 -208
  846. package/docs/superpowers/specs/2026-04-02-browse-skill-testing-design.md +0 -144
  847. package/docs/superpowers/specs/2026-04-03-v2ex-autoresearch-design.md +0 -41
  848. package/docs/zh/adapters/index.md +0 -5
  849. package/docs/zh/advanced/cdp.md +0 -3
  850. package/docs/zh/developer/contributing.md +0 -24
  851. package/docs/zh/guide/browser-bridge.md +0 -36
  852. package/docs/zh/guide/electron-app-cli.md +0 -188
  853. package/docs/zh/guide/getting-started.md +0 -62
  854. package/docs/zh/guide/installation.md +0 -37
  855. package/docs/zh/guide/plugins.md +0 -183
  856. package/docs/zh/index.md +0 -29
  857. package/extension/dist/background.js +0 -1127
  858. package/extension/icons/icon-128.png +0 -0
  859. package/extension/icons/icon-16.png +0 -0
  860. package/extension/icons/icon-32.png +0 -0
  861. package/extension/icons/icon-48.png +0 -0
  862. package/extension/manifest.json +0 -39
  863. package/extension/package-lock.json +0 -1156
  864. package/extension/package.json +0 -17
  865. package/extension/popup.html +0 -84
  866. package/extension/popup.js +0 -25
  867. package/extension/scripts/package-release.mjs +0 -179
  868. package/extension/src/background.test.ts +0 -279
  869. package/extension/src/background.ts +0 -878
  870. package/extension/src/cdp.test.ts +0 -75
  871. package/extension/src/cdp.ts +0 -440
  872. package/extension/src/protocol.ts +0 -87
  873. package/extension/store-assets/screenshot-1280x800.png +0 -0
  874. package/extension/tsconfig.json +0 -15
  875. package/extension/vite.config.ts +0 -18
  876. package/skills/opencli-explorer/SKILL.md +0 -853
  877. package/skills/opencli-oneshot/SKILL.md +0 -222
  878. package/skills/opencli-operate/SKILL.md +0 -306
  879. package/skills/opencli-usage/SKILL.md +0 -163
  880. package/skills/opencli-usage/browser.md +0 -527
  881. package/skills/opencli-usage/desktop.md +0 -118
  882. package/skills/opencli-usage/plugins.md +0 -82
  883. package/skills/opencli-usage/public-api.md +0 -178
  884. package/skills/smart-search/SKILL.md +0 -156
  885. package/skills/smart-search/references/sources-ai.md +0 -74
  886. package/skills/smart-search/references/sources-info.md +0 -43
  887. package/skills/smart-search/references/sources-media.md +0 -50
  888. package/skills/smart-search/references/sources-other.md +0 -42
  889. package/skills/smart-search/references/sources-shopping.md +0 -31
  890. package/skills/smart-search/references/sources-social.md +0 -51
  891. package/skills/smart-search/references/sources-tech.md +0 -42
  892. package/skills/smart-search/references/sources-travel.md +0 -20
  893. package/src/analysis.ts +0 -170
  894. package/src/browser/base-page.ts +0 -232
  895. package/src/browser/bridge.ts +0 -129
  896. package/src/browser/cdp.test.ts +0 -66
  897. package/src/browser/cdp.ts +0 -341
  898. package/src/browser/daemon-client.test.ts +0 -103
  899. package/src/browser/daemon-client.ts +0 -175
  900. package/src/browser/discover.ts +0 -26
  901. package/src/browser/dom-helpers.test.ts +0 -114
  902. package/src/browser/dom-helpers.ts +0 -238
  903. package/src/browser/dom-snapshot.test.ts +0 -291
  904. package/src/browser/dom-snapshot.ts +0 -845
  905. package/src/browser/errors.ts +0 -63
  906. package/src/browser/index.ts +0 -14
  907. package/src/browser/page.test.ts +0 -58
  908. package/src/browser/page.ts +0 -315
  909. package/src/browser/stealth.test.ts +0 -153
  910. package/src/browser/stealth.ts +0 -354
  911. package/src/browser/tabs.ts +0 -76
  912. package/src/browser/utils.ts +0 -27
  913. package/src/browser.test.ts +0 -195
  914. package/src/build-manifest.test.ts +0 -200
  915. package/src/build-manifest.ts +0 -279
  916. package/src/capabilityRouting.test.ts +0 -47
  917. package/src/capabilityRouting.ts +0 -29
  918. package/src/cascade.ts +0 -192
  919. package/src/cli.test.ts +0 -133
  920. package/src/cli.ts +0 -1012
  921. package/src/clis/1688/item.test.ts +0 -69
  922. package/src/clis/1688/item.ts +0 -282
  923. package/src/clis/1688/search.test.ts +0 -81
  924. package/src/clis/1688/search.ts +0 -402
  925. package/src/clis/1688/shared.test.ts +0 -75
  926. package/src/clis/1688/shared.ts +0 -623
  927. package/src/clis/1688/store.test.ts +0 -69
  928. package/src/clis/1688/store.ts +0 -300
  929. package/src/clis/36kr/article.ts +0 -69
  930. package/src/clis/36kr/hot.test.ts +0 -19
  931. package/src/clis/36kr/hot.ts +0 -100
  932. package/src/clis/36kr/news.test.ts +0 -90
  933. package/src/clis/36kr/news.ts +0 -54
  934. package/src/clis/36kr/search.ts +0 -78
  935. package/src/clis/_shared/common.ts +0 -11
  936. package/src/clis/_shared/desktop-commands.ts +0 -121
  937. package/src/clis/amazon/bestsellers.test.ts +0 -31
  938. package/src/clis/amazon/bestsellers.ts +0 -8
  939. package/src/clis/amazon/discussion.test.ts +0 -38
  940. package/src/clis/amazon/discussion.ts +0 -131
  941. package/src/clis/amazon/movers-shakers.ts +0 -8
  942. package/src/clis/amazon/new-releases.ts +0 -8
  943. package/src/clis/amazon/offer.test.ts +0 -35
  944. package/src/clis/amazon/offer.ts +0 -185
  945. package/src/clis/amazon/product.test.ts +0 -26
  946. package/src/clis/amazon/product.ts +0 -131
  947. package/src/clis/amazon/rankings.test.ts +0 -47
  948. package/src/clis/amazon/rankings.ts +0 -312
  949. package/src/clis/amazon/search.test.ts +0 -24
  950. package/src/clis/amazon/search.ts +0 -128
  951. package/src/clis/amazon/shared.test.ts +0 -53
  952. package/src/clis/amazon/shared.ts +0 -438
  953. package/src/clis/antigravity/SKILL.md +0 -38
  954. package/src/clis/antigravity/dump.ts +0 -30
  955. package/src/clis/antigravity/extract-code.ts +0 -34
  956. package/src/clis/antigravity/model.ts +0 -47
  957. package/src/clis/antigravity/new.ts +0 -28
  958. package/src/clis/antigravity/read.ts +0 -36
  959. package/src/clis/antigravity/send.ts +0 -40
  960. package/src/clis/antigravity/serve.ts +0 -600
  961. package/src/clis/antigravity/status.ts +0 -19
  962. package/src/clis/antigravity/watch.ts +0 -45
  963. package/src/clis/apple-podcasts/commands.test.ts +0 -123
  964. package/src/clis/apple-podcasts/episodes.ts +0 -28
  965. package/src/clis/apple-podcasts/search.ts +0 -30
  966. package/src/clis/apple-podcasts/top.ts +0 -47
  967. package/src/clis/apple-podcasts/utils.test.ts +0 -72
  968. package/src/clis/apple-podcasts/utils.ts +0 -37
  969. package/src/clis/arxiv/paper.ts +0 -21
  970. package/src/clis/arxiv/search.ts +0 -24
  971. package/src/clis/arxiv/utils.ts +0 -63
  972. package/src/clis/band/bands.ts +0 -76
  973. package/src/clis/band/mentions.ts +0 -134
  974. package/src/clis/band/post.ts +0 -187
  975. package/src/clis/band/posts.ts +0 -106
  976. package/src/clis/barchart/flow.ts +0 -120
  977. package/src/clis/barchart/greeks.ts +0 -123
  978. package/src/clis/barchart/options.ts +0 -110
  979. package/src/clis/barchart/quote.ts +0 -137
  980. package/src/clis/bbc/news.ts +0 -41
  981. package/src/clis/bilibili/comments.test.ts +0 -103
  982. package/src/clis/bilibili/comments.ts +0 -44
  983. package/src/clis/bilibili/download.ts +0 -93
  984. package/src/clis/bilibili/dynamic.test.ts +0 -79
  985. package/src/clis/bilibili/dynamic.ts +0 -34
  986. package/src/clis/bilibili/favorite.ts +0 -45
  987. package/src/clis/bilibili/feed.ts +0 -71
  988. package/src/clis/bilibili/following.ts +0 -51
  989. package/src/clis/bilibili/history.ts +0 -48
  990. package/src/clis/bilibili/hot.yaml +0 -38
  991. package/src/clis/bilibili/me.ts +0 -14
  992. package/src/clis/bilibili/ranking.ts +0 -25
  993. package/src/clis/bilibili/search.ts +0 -25
  994. package/src/clis/bilibili/subtitle.test.ts +0 -61
  995. package/src/clis/bilibili/subtitle.ts +0 -106
  996. package/src/clis/bilibili/user-videos.ts +0 -42
  997. package/src/clis/bilibili/utils.test.ts +0 -21
  998. package/src/clis/bilibili/utils.ts +0 -143
  999. package/src/clis/bloomberg/businessweek.ts +0 -18
  1000. package/src/clis/bloomberg/economics.ts +0 -18
  1001. package/src/clis/bloomberg/feeds.ts +0 -16
  1002. package/src/clis/bloomberg/industries.ts +0 -18
  1003. package/src/clis/bloomberg/main.ts +0 -18
  1004. package/src/clis/bloomberg/markets.ts +0 -18
  1005. package/src/clis/bloomberg/news.ts +0 -136
  1006. package/src/clis/bloomberg/opinions.ts +0 -18
  1007. package/src/clis/bloomberg/politics.ts +0 -18
  1008. package/src/clis/bloomberg/tech.ts +0 -18
  1009. package/src/clis/bloomberg/utils.test.ts +0 -135
  1010. package/src/clis/bloomberg/utils.ts +0 -429
  1011. package/src/clis/bluesky/feeds.yaml +0 -29
  1012. package/src/clis/bluesky/followers.yaml +0 -33
  1013. package/src/clis/bluesky/following.yaml +0 -33
  1014. package/src/clis/bluesky/profile.yaml +0 -27
  1015. package/src/clis/bluesky/search.yaml +0 -34
  1016. package/src/clis/bluesky/starter-packs.yaml +0 -34
  1017. package/src/clis/bluesky/thread.yaml +0 -32
  1018. package/src/clis/bluesky/trending.yaml +0 -27
  1019. package/src/clis/bluesky/user.yaml +0 -34
  1020. package/src/clis/boss/batchgreet.ts +0 -75
  1021. package/src/clis/boss/chatlist.ts +0 -36
  1022. package/src/clis/boss/chatmsg.ts +0 -46
  1023. package/src/clis/boss/detail.ts +0 -69
  1024. package/src/clis/boss/exchange.ts +0 -52
  1025. package/src/clis/boss/greet.ts +0 -61
  1026. package/src/clis/boss/invite.ts +0 -80
  1027. package/src/clis/boss/joblist.ts +0 -34
  1028. package/src/clis/boss/mark.ts +0 -75
  1029. package/src/clis/boss/recommend.ts +0 -49
  1030. package/src/clis/boss/resume.ts +0 -157
  1031. package/src/clis/boss/search.ts +0 -162
  1032. package/src/clis/boss/send.ts +0 -54
  1033. package/src/clis/boss/stats.ts +0 -75
  1034. package/src/clis/boss/utils.ts +0 -287
  1035. package/src/clis/chaoxing/assignments.ts +0 -89
  1036. package/src/clis/chaoxing/exams.ts +0 -88
  1037. package/src/clis/chaoxing/utils.test.ts +0 -53
  1038. package/src/clis/chaoxing/utils.ts +0 -266
  1039. package/src/clis/chatgpt/ask.ts +0 -95
  1040. package/src/clis/chatgpt/ax.ts +0 -260
  1041. package/src/clis/chatgpt/model.ts +0 -27
  1042. package/src/clis/chatgpt/new.ts +0 -29
  1043. package/src/clis/chatgpt/read.ts +0 -35
  1044. package/src/clis/chatgpt/send.ts +0 -59
  1045. package/src/clis/chatgpt/status.ts +0 -27
  1046. package/src/clis/chatwise/ask.ts +0 -90
  1047. package/src/clis/chatwise/export.ts +0 -51
  1048. package/src/clis/chatwise/history.ts +0 -61
  1049. package/src/clis/chatwise/model.ts +0 -89
  1050. package/src/clis/chatwise/new.ts +0 -3
  1051. package/src/clis/chatwise/read.ts +0 -42
  1052. package/src/clis/chatwise/screenshot.ts +0 -3
  1053. package/src/clis/chatwise/send.ts +0 -53
  1054. package/src/clis/chatwise/status.ts +0 -3
  1055. package/src/clis/codex/ask.ts +0 -80
  1056. package/src/clis/codex/dump.ts +0 -3
  1057. package/src/clis/codex/export.ts +0 -42
  1058. package/src/clis/codex/extract-diff.ts +0 -48
  1059. package/src/clis/codex/history.ts +0 -47
  1060. package/src/clis/codex/model.ts +0 -59
  1061. package/src/clis/codex/new.ts +0 -3
  1062. package/src/clis/codex/read.ts +0 -37
  1063. package/src/clis/codex/screenshot.ts +0 -3
  1064. package/src/clis/codex/send.ts +0 -48
  1065. package/src/clis/codex/status.ts +0 -3
  1066. package/src/clis/coupang/add-to-cart.ts +0 -148
  1067. package/src/clis/coupang/search.ts +0 -464
  1068. package/src/clis/coupang/utils.test.ts +0 -78
  1069. package/src/clis/coupang/utils.ts +0 -302
  1070. package/src/clis/ctrip/search.test.ts +0 -73
  1071. package/src/clis/ctrip/search.ts +0 -111
  1072. package/src/clis/cursor/ask.ts +0 -82
  1073. package/src/clis/cursor/composer.ts +0 -51
  1074. package/src/clis/cursor/dump.ts +0 -3
  1075. package/src/clis/cursor/export.ts +0 -57
  1076. package/src/clis/cursor/extract-code.ts +0 -39
  1077. package/src/clis/cursor/history.ts +0 -47
  1078. package/src/clis/cursor/model.ts +0 -57
  1079. package/src/clis/cursor/new.ts +0 -3
  1080. package/src/clis/cursor/read.ts +0 -48
  1081. package/src/clis/cursor/screenshot.ts +0 -3
  1082. package/src/clis/cursor/send.ts +0 -48
  1083. package/src/clis/cursor/status.ts +0 -3
  1084. package/src/clis/devto/tag.yaml +0 -34
  1085. package/src/clis/devto/top.yaml +0 -29
  1086. package/src/clis/devto/user.yaml +0 -33
  1087. package/src/clis/dictionary/examples.yaml +0 -25
  1088. package/src/clis/dictionary/search.yaml +0 -27
  1089. package/src/clis/dictionary/synonyms.yaml +0 -25
  1090. package/src/clis/discord-app/channels.ts +0 -60
  1091. package/src/clis/discord-app/members.ts +0 -41
  1092. package/src/clis/discord-app/read.ts +0 -49
  1093. package/src/clis/discord-app/search.ts +0 -64
  1094. package/src/clis/discord-app/send.ts +0 -32
  1095. package/src/clis/discord-app/servers.ts +0 -39
  1096. package/src/clis/discord-app/status.ts +0 -18
  1097. package/src/clis/douban/book-hot.ts +0 -15
  1098. package/src/clis/douban/download.test.ts +0 -196
  1099. package/src/clis/douban/download.ts +0 -78
  1100. package/src/clis/douban/marks.ts +0 -135
  1101. package/src/clis/douban/movie-hot.ts +0 -15
  1102. package/src/clis/douban/photos.ts +0 -36
  1103. package/src/clis/douban/reviews.ts +0 -127
  1104. package/src/clis/douban/search.ts +0 -17
  1105. package/src/clis/douban/subject.yaml +0 -107
  1106. package/src/clis/douban/top250.yaml +0 -70
  1107. package/src/clis/douban/utils.test.ts +0 -97
  1108. package/src/clis/douban/utils.ts +0 -472
  1109. package/src/clis/doubao/ask.ts +0 -40
  1110. package/src/clis/doubao/detail.test.ts +0 -53
  1111. package/src/clis/doubao/detail.ts +0 -41
  1112. package/src/clis/doubao/history.test.ts +0 -45
  1113. package/src/clis/doubao/history.ts +0 -32
  1114. package/src/clis/doubao/meeting-summary.ts +0 -53
  1115. package/src/clis/doubao/meeting-transcript.ts +0 -48
  1116. package/src/clis/doubao/new.ts +0 -22
  1117. package/src/clis/doubao/read.ts +0 -20
  1118. package/src/clis/doubao/send.ts +0 -25
  1119. package/src/clis/doubao/status.ts +0 -27
  1120. package/src/clis/doubao/utils.test.ts +0 -45
  1121. package/src/clis/doubao/utils.ts +0 -1010
  1122. package/src/clis/doubao-app/ask.ts +0 -60
  1123. package/src/clis/doubao-app/dump.ts +0 -28
  1124. package/src/clis/doubao-app/new.ts +0 -21
  1125. package/src/clis/doubao-app/read.ts +0 -21
  1126. package/src/clis/doubao-app/screenshot.ts +0 -19
  1127. package/src/clis/doubao-app/send.ts +0 -30
  1128. package/src/clis/doubao-app/status.ts +0 -17
  1129. package/src/clis/doubao-app/utils.ts +0 -116
  1130. package/src/clis/douyin/_shared/browser-fetch.test.ts +0 -37
  1131. package/src/clis/douyin/_shared/browser-fetch.ts +0 -45
  1132. package/src/clis/douyin/_shared/creation-id.test.ts +0 -26
  1133. package/src/clis/douyin/_shared/creation-id.ts +0 -8
  1134. package/src/clis/douyin/_shared/imagex-upload.test.ts +0 -113
  1135. package/src/clis/douyin/_shared/imagex-upload.ts +0 -76
  1136. package/src/clis/douyin/_shared/public-api.ts +0 -84
  1137. package/src/clis/douyin/_shared/sts2.test.ts +0 -31
  1138. package/src/clis/douyin/_shared/sts2.ts +0 -28
  1139. package/src/clis/douyin/_shared/text-extra.test.ts +0 -42
  1140. package/src/clis/douyin/_shared/text-extra.ts +0 -33
  1141. package/src/clis/douyin/_shared/timing.test.ts +0 -38
  1142. package/src/clis/douyin/_shared/timing.ts +0 -22
  1143. package/src/clis/douyin/_shared/tos-upload-short-read.test.ts +0 -102
  1144. package/src/clis/douyin/_shared/tos-upload.test.ts +0 -281
  1145. package/src/clis/douyin/_shared/tos-upload.ts +0 -444
  1146. package/src/clis/douyin/_shared/transcode.test.ts +0 -115
  1147. package/src/clis/douyin/_shared/transcode.ts +0 -78
  1148. package/src/clis/douyin/_shared/types.ts +0 -29
  1149. package/src/clis/douyin/activities.test.ts +0 -65
  1150. package/src/clis/douyin/activities.ts +0 -32
  1151. package/src/clis/douyin/collections.test.ts +0 -59
  1152. package/src/clis/douyin/collections.ts +0 -25
  1153. package/src/clis/douyin/delete.test.ts +0 -12
  1154. package/src/clis/douyin/delete.ts +0 -20
  1155. package/src/clis/douyin/draft.test.ts +0 -452
  1156. package/src/clis/douyin/draft.ts +0 -446
  1157. package/src/clis/douyin/drafts.test.ts +0 -12
  1158. package/src/clis/douyin/drafts.ts +0 -27
  1159. package/src/clis/douyin/hashtag.test.ts +0 -68
  1160. package/src/clis/douyin/hashtag.ts +0 -64
  1161. package/src/clis/douyin/location.test.ts +0 -26
  1162. package/src/clis/douyin/location.ts +0 -27
  1163. package/src/clis/douyin/profile.test.ts +0 -54
  1164. package/src/clis/douyin/profile.ts +0 -44
  1165. package/src/clis/douyin/publish.test.ts +0 -45
  1166. package/src/clis/douyin/publish.ts +0 -340
  1167. package/src/clis/douyin/stats.test.ts +0 -25
  1168. package/src/clis/douyin/stats.ts +0 -30
  1169. package/src/clis/douyin/update.test.ts +0 -12
  1170. package/src/clis/douyin/update.ts +0 -43
  1171. package/src/clis/douyin/user-videos.test.ts +0 -122
  1172. package/src/clis/douyin/user-videos.ts +0 -101
  1173. package/src/clis/douyin/videos.test.ts +0 -62
  1174. package/src/clis/douyin/videos.ts +0 -83
  1175. package/src/clis/facebook/add-friend.yaml +0 -43
  1176. package/src/clis/facebook/events.yaml +0 -44
  1177. package/src/clis/facebook/feed.yaml +0 -63
  1178. package/src/clis/facebook/friends.yaml +0 -42
  1179. package/src/clis/facebook/groups.yaml +0 -50
  1180. package/src/clis/facebook/join-group.yaml +0 -44
  1181. package/src/clis/facebook/memories.yaml +0 -39
  1182. package/src/clis/facebook/notifications.yaml +0 -40
  1183. package/src/clis/facebook/profile.yaml +0 -37
  1184. package/src/clis/facebook/search.test.ts +0 -68
  1185. package/src/clis/facebook/search.yaml +0 -47
  1186. package/src/clis/gemini/ask.test.ts +0 -116
  1187. package/src/clis/gemini/ask.ts +0 -53
  1188. package/src/clis/gemini/image.ts +0 -115
  1189. package/src/clis/gemini/new.ts +0 -22
  1190. package/src/clis/gemini/reply-state.test.ts +0 -708
  1191. package/src/clis/gemini/utils.test.ts +0 -218
  1192. package/src/clis/gemini/utils.ts +0 -1051
  1193. package/src/clis/google/news.ts +0 -66
  1194. package/src/clis/google/search.ts +0 -133
  1195. package/src/clis/google/suggest.ts +0 -40
  1196. package/src/clis/google/trends.ts +0 -44
  1197. package/src/clis/google/utils.test.ts +0 -82
  1198. package/src/clis/google/utils.ts +0 -24
  1199. package/src/clis/grok/ask.test.ts +0 -78
  1200. package/src/clis/grok/ask.ts +0 -334
  1201. package/src/clis/hackernews/ask.yaml +0 -38
  1202. package/src/clis/hackernews/best.yaml +0 -38
  1203. package/src/clis/hackernews/jobs.yaml +0 -36
  1204. package/src/clis/hackernews/new.yaml +0 -38
  1205. package/src/clis/hackernews/search.yaml +0 -44
  1206. package/src/clis/hackernews/show.yaml +0 -38
  1207. package/src/clis/hackernews/top.yaml +0 -38
  1208. package/src/clis/hackernews/user.yaml +0 -25
  1209. package/src/clis/hf/top.ts +0 -141
  1210. package/src/clis/hupu/detail.ts +0 -126
  1211. package/src/clis/hupu/hot.yaml +0 -43
  1212. package/src/clis/hupu/like.ts +0 -76
  1213. package/src/clis/hupu/reply.ts +0 -76
  1214. package/src/clis/hupu/search.ts +0 -95
  1215. package/src/clis/hupu/unlike.ts +0 -76
  1216. package/src/clis/hupu/utils.ts +0 -381
  1217. package/src/clis/imdb/person.ts +0 -232
  1218. package/src/clis/imdb/reviews.ts +0 -111
  1219. package/src/clis/imdb/search.ts +0 -179
  1220. package/src/clis/imdb/title.ts +0 -121
  1221. package/src/clis/imdb/top.ts +0 -67
  1222. package/src/clis/imdb/trending.ts +0 -66
  1223. package/src/clis/imdb/utils.test.ts +0 -117
  1224. package/src/clis/imdb/utils.ts +0 -305
  1225. package/src/clis/instagram/_shared/private-publish.test.ts +0 -827
  1226. package/src/clis/instagram/_shared/private-publish.ts +0 -1303
  1227. package/src/clis/instagram/_shared/protocol-capture.test.ts +0 -148
  1228. package/src/clis/instagram/_shared/protocol-capture.ts +0 -321
  1229. package/src/clis/instagram/_shared/runtime-info.ts +0 -91
  1230. package/src/clis/instagram/comment.yaml +0 -52
  1231. package/src/clis/instagram/download.test.ts +0 -159
  1232. package/src/clis/instagram/download.ts +0 -286
  1233. package/src/clis/instagram/explore.yaml +0 -43
  1234. package/src/clis/instagram/follow.yaml +0 -41
  1235. package/src/clis/instagram/followers.yaml +0 -51
  1236. package/src/clis/instagram/following.yaml +0 -51
  1237. package/src/clis/instagram/like.yaml +0 -46
  1238. package/src/clis/instagram/note.test.ts +0 -96
  1239. package/src/clis/instagram/note.ts +0 -254
  1240. package/src/clis/instagram/post.test.ts +0 -1716
  1241. package/src/clis/instagram/post.ts +0 -1620
  1242. package/src/clis/instagram/profile.yaml +0 -42
  1243. package/src/clis/instagram/reel.test.ts +0 -191
  1244. package/src/clis/instagram/reel.ts +0 -886
  1245. package/src/clis/instagram/save.yaml +0 -46
  1246. package/src/clis/instagram/saved.yaml +0 -40
  1247. package/src/clis/instagram/search.yaml +0 -44
  1248. package/src/clis/instagram/story.test.ts +0 -191
  1249. package/src/clis/instagram/story.ts +0 -151
  1250. package/src/clis/instagram/unfollow.yaml +0 -38
  1251. package/src/clis/instagram/unlike.yaml +0 -46
  1252. package/src/clis/instagram/unsave.yaml +0 -46
  1253. package/src/clis/instagram/user.yaml +0 -54
  1254. package/src/clis/jd/item.test.ts +0 -52
  1255. package/src/clis/jd/item.ts +0 -104
  1256. package/src/clis/jike/comment.ts +0 -112
  1257. package/src/clis/jike/create.ts +0 -112
  1258. package/src/clis/jike/feed.ts +0 -73
  1259. package/src/clis/jike/like.ts +0 -64
  1260. package/src/clis/jike/notifications.ts +0 -184
  1261. package/src/clis/jike/post.yaml +0 -59
  1262. package/src/clis/jike/repost.ts +0 -113
  1263. package/src/clis/jike/search.ts +0 -73
  1264. package/src/clis/jike/topic.yaml +0 -53
  1265. package/src/clis/jike/user.yaml +0 -52
  1266. package/src/clis/jike/utils.ts +0 -36
  1267. package/src/clis/jimeng/generate.yaml +0 -85
  1268. package/src/clis/jimeng/history.yaml +0 -46
  1269. package/src/clis/linkedin/search.ts +0 -417
  1270. package/src/clis/linkedin/timeline.test.ts +0 -99
  1271. package/src/clis/linkedin/timeline.ts +0 -532
  1272. package/src/clis/linux-do/categories.yaml +0 -70
  1273. package/src/clis/linux-do/category.ts +0 -37
  1274. package/src/clis/linux-do/feed.test.ts +0 -132
  1275. package/src/clis/linux-do/feed.ts +0 -501
  1276. package/src/clis/linux-do/hot.ts +0 -26
  1277. package/src/clis/linux-do/latest.ts +0 -19
  1278. package/src/clis/linux-do/search.yaml +0 -48
  1279. package/src/clis/linux-do/tags.yaml +0 -41
  1280. package/src/clis/linux-do/topic.yaml +0 -77
  1281. package/src/clis/linux-do/user-posts.yaml +0 -67
  1282. package/src/clis/linux-do/user-topics.yaml +0 -54
  1283. package/src/clis/lobsters/active.yaml +0 -29
  1284. package/src/clis/lobsters/hot.yaml +0 -29
  1285. package/src/clis/lobsters/newest.yaml +0 -29
  1286. package/src/clis/lobsters/tag.yaml +0 -34
  1287. package/src/clis/medium/feed.ts +0 -16
  1288. package/src/clis/medium/search.ts +0 -16
  1289. package/src/clis/medium/user.ts +0 -16
  1290. package/src/clis/medium/utils.ts +0 -84
  1291. package/src/clis/notebooklm/compat.test.ts +0 -19
  1292. package/src/clis/notebooklm/current.ts +0 -37
  1293. package/src/clis/notebooklm/get.ts +0 -51
  1294. package/src/clis/notebooklm/history.test.ts +0 -70
  1295. package/src/clis/notebooklm/history.ts +0 -34
  1296. package/src/clis/notebooklm/list.ts +0 -40
  1297. package/src/clis/notebooklm/note-list.test.ts +0 -64
  1298. package/src/clis/notebooklm/note-list.ts +0 -40
  1299. package/src/clis/notebooklm/notes-get.test.ts +0 -88
  1300. package/src/clis/notebooklm/notes-get.ts +0 -65
  1301. package/src/clis/notebooklm/open.test.ts +0 -78
  1302. package/src/clis/notebooklm/open.ts +0 -61
  1303. package/src/clis/notebooklm/rpc.test.ts +0 -126
  1304. package/src/clis/notebooklm/rpc.ts +0 -286
  1305. package/src/clis/notebooklm/shared.ts +0 -98
  1306. package/src/clis/notebooklm/source-fulltext.test.ts +0 -123
  1307. package/src/clis/notebooklm/source-fulltext.ts +0 -67
  1308. package/src/clis/notebooklm/source-get.test.ts +0 -100
  1309. package/src/clis/notebooklm/source-get.ts +0 -58
  1310. package/src/clis/notebooklm/source-guide.test.ts +0 -121
  1311. package/src/clis/notebooklm/source-guide.ts +0 -67
  1312. package/src/clis/notebooklm/source-list.ts +0 -43
  1313. package/src/clis/notebooklm/status.ts +0 -33
  1314. package/src/clis/notebooklm/summary.test.ts +0 -94
  1315. package/src/clis/notebooklm/summary.ts +0 -43
  1316. package/src/clis/notebooklm/utils.test.ts +0 -446
  1317. package/src/clis/notebooklm/utils.ts +0 -902
  1318. package/src/clis/notion/export.ts +0 -36
  1319. package/src/clis/notion/favorites.ts +0 -87
  1320. package/src/clis/notion/new.ts +0 -39
  1321. package/src/clis/notion/read.ts +0 -33
  1322. package/src/clis/notion/search.ts +0 -54
  1323. package/src/clis/notion/sidebar.ts +0 -44
  1324. package/src/clis/notion/status.ts +0 -18
  1325. package/src/clis/notion/write.ts +0 -45
  1326. package/src/clis/ones/common.ts +0 -187
  1327. package/src/clis/ones/enrich-tasks.ts +0 -47
  1328. package/src/clis/ones/login.ts +0 -103
  1329. package/src/clis/ones/logout.ts +0 -19
  1330. package/src/clis/ones/me.ts +0 -34
  1331. package/src/clis/ones/my-tasks.ts +0 -148
  1332. package/src/clis/ones/resolve-labels.ts +0 -80
  1333. package/src/clis/ones/task-helpers.test.ts +0 -14
  1334. package/src/clis/ones/task-helpers.ts +0 -214
  1335. package/src/clis/ones/task.ts +0 -79
  1336. package/src/clis/ones/tasks.ts +0 -92
  1337. package/src/clis/ones/token-info.ts +0 -46
  1338. package/src/clis/ones/worklog.test.ts +0 -24
  1339. package/src/clis/ones/worklog.ts +0 -306
  1340. package/src/clis/paperreview/commands.test.ts +0 -283
  1341. package/src/clis/paperreview/feedback.ts +0 -64
  1342. package/src/clis/paperreview/review.ts +0 -47
  1343. package/src/clis/paperreview/submit.ts +0 -119
  1344. package/src/clis/paperreview/utils.test.ts +0 -68
  1345. package/src/clis/paperreview/utils.ts +0 -276
  1346. package/src/clis/pixiv/detail.yaml +0 -49
  1347. package/src/clis/pixiv/download.test.ts +0 -114
  1348. package/src/clis/pixiv/download.ts +0 -91
  1349. package/src/clis/pixiv/illusts.test.ts +0 -115
  1350. package/src/clis/pixiv/illusts.ts +0 -78
  1351. package/src/clis/pixiv/ranking.yaml +0 -53
  1352. package/src/clis/pixiv/search.test.ts +0 -97
  1353. package/src/clis/pixiv/search.ts +0 -53
  1354. package/src/clis/pixiv/test-utils.ts +0 -29
  1355. package/src/clis/pixiv/user.yaml +0 -46
  1356. package/src/clis/pixiv/utils.ts +0 -62
  1357. package/src/clis/producthunt/browse.ts +0 -109
  1358. package/src/clis/producthunt/hot.ts +0 -127
  1359. package/src/clis/producthunt/posts.ts +0 -29
  1360. package/src/clis/producthunt/today.ts +0 -37
  1361. package/src/clis/producthunt/utils.test.ts +0 -72
  1362. package/src/clis/producthunt/utils.ts +0 -122
  1363. package/src/clis/reddit/comment.ts +0 -60
  1364. package/src/clis/reddit/frontpage.yaml +0 -30
  1365. package/src/clis/reddit/hot.yaml +0 -47
  1366. package/src/clis/reddit/popular.yaml +0 -40
  1367. package/src/clis/reddit/read.test.ts +0 -34
  1368. package/src/clis/reddit/read.ts +0 -186
  1369. package/src/clis/reddit/save.ts +0 -54
  1370. package/src/clis/reddit/saved.ts +0 -51
  1371. package/src/clis/reddit/search.yaml +0 -61
  1372. package/src/clis/reddit/subreddit.yaml +0 -50
  1373. package/src/clis/reddit/subscribe.ts +0 -53
  1374. package/src/clis/reddit/upvote.ts +0 -67
  1375. package/src/clis/reddit/upvoted.ts +0 -51
  1376. package/src/clis/reddit/user-comments.yaml +0 -46
  1377. package/src/clis/reddit/user-posts.yaml +0 -44
  1378. package/src/clis/reddit/user.yaml +0 -40
  1379. package/src/clis/reuters/search.ts +0 -51
  1380. package/src/clis/sinablog/article.ts +0 -15
  1381. package/src/clis/sinablog/hot.ts +0 -15
  1382. package/src/clis/sinablog/search.ts +0 -56
  1383. package/src/clis/sinablog/user.ts +0 -16
  1384. package/src/clis/sinablog/utils.ts +0 -197
  1385. package/src/clis/sinafinance/news.ts +0 -76
  1386. package/src/clis/sinafinance/rolling-news.ts +0 -42
  1387. package/src/clis/sinafinance/stock-rank.ts +0 -68
  1388. package/src/clis/sinafinance/stock.ts +0 -127
  1389. package/src/clis/smzdm/search.ts +0 -56
  1390. package/src/clis/spotify/spotify.ts +0 -328
  1391. package/src/clis/spotify/utils.test.ts +0 -87
  1392. package/src/clis/spotify/utils.ts +0 -92
  1393. package/src/clis/stackoverflow/bounties.yaml +0 -29
  1394. package/src/clis/stackoverflow/hot.yaml +0 -28
  1395. package/src/clis/stackoverflow/search.yaml +0 -33
  1396. package/src/clis/stackoverflow/unanswered.yaml +0 -28
  1397. package/src/clis/steam/top-sellers.yaml +0 -29
  1398. package/src/clis/substack/feed.ts +0 -16
  1399. package/src/clis/substack/publication.ts +0 -16
  1400. package/src/clis/substack/search.ts +0 -92
  1401. package/src/clis/substack/utils.test.ts +0 -52
  1402. package/src/clis/substack/utils.ts +0 -141
  1403. package/src/clis/tieba/commands.test.ts +0 -86
  1404. package/src/clis/tieba/hot.ts +0 -52
  1405. package/src/clis/tieba/posts.ts +0 -108
  1406. package/src/clis/tieba/read.ts +0 -158
  1407. package/src/clis/tieba/search.ts +0 -119
  1408. package/src/clis/tieba/utils.test.ts +0 -322
  1409. package/src/clis/tieba/utils.ts +0 -348
  1410. package/src/clis/tiktok/comment.yaml +0 -66
  1411. package/src/clis/tiktok/explore.yaml +0 -39
  1412. package/src/clis/tiktok/follow.yaml +0 -39
  1413. package/src/clis/tiktok/following.yaml +0 -46
  1414. package/src/clis/tiktok/friends.yaml +0 -47
  1415. package/src/clis/tiktok/like.yaml +0 -38
  1416. package/src/clis/tiktok/live.yaml +0 -51
  1417. package/src/clis/tiktok/notifications.yaml +0 -52
  1418. package/src/clis/tiktok/profile.yaml +0 -45
  1419. package/src/clis/tiktok/save.yaml +0 -34
  1420. package/src/clis/tiktok/search.yaml +0 -47
  1421. package/src/clis/tiktok/unfollow.yaml +0 -44
  1422. package/src/clis/tiktok/unlike.yaml +0 -38
  1423. package/src/clis/tiktok/unsave.yaml +0 -36
  1424. package/src/clis/tiktok/user.yaml +0 -44
  1425. package/src/clis/twitter/accept.ts +0 -214
  1426. package/src/clis/twitter/article.ts +0 -170
  1427. package/src/clis/twitter/block.ts +0 -93
  1428. package/src/clis/twitter/bookmark.ts +0 -68
  1429. package/src/clis/twitter/bookmarks.ts +0 -202
  1430. package/src/clis/twitter/delete.ts +0 -78
  1431. package/src/clis/twitter/download.ts +0 -118
  1432. package/src/clis/twitter/follow.ts +0 -70
  1433. package/src/clis/twitter/followers.ts +0 -116
  1434. package/src/clis/twitter/following.ts +0 -109
  1435. package/src/clis/twitter/hide-reply.ts +0 -71
  1436. package/src/clis/twitter/like.ts +0 -74
  1437. package/src/clis/twitter/likes.test.ts +0 -91
  1438. package/src/clis/twitter/likes.ts +0 -256
  1439. package/src/clis/twitter/notifications.ts +0 -136
  1440. package/src/clis/twitter/post.test.ts +0 -157
  1441. package/src/clis/twitter/post.ts +0 -110
  1442. package/src/clis/twitter/profile.ts +0 -108
  1443. package/src/clis/twitter/reply-dm.ts +0 -194
  1444. package/src/clis/twitter/reply.test.ts +0 -177
  1445. package/src/clis/twitter/reply.ts +0 -309
  1446. package/src/clis/twitter/search.test.ts +0 -265
  1447. package/src/clis/twitter/search.ts +0 -185
  1448. package/src/clis/twitter/shared.ts +0 -45
  1449. package/src/clis/twitter/thread.ts +0 -182
  1450. package/src/clis/twitter/timeline.test.ts +0 -109
  1451. package/src/clis/twitter/timeline.ts +0 -248
  1452. package/src/clis/twitter/trending.ts +0 -66
  1453. package/src/clis/twitter/unblock.ts +0 -76
  1454. package/src/clis/twitter/unbookmark.ts +0 -67
  1455. package/src/clis/twitter/unfollow.ts +0 -76
  1456. package/src/clis/v2ex/daily.ts +0 -106
  1457. package/src/clis/v2ex/hot.yaml +0 -28
  1458. package/src/clis/v2ex/latest.yaml +0 -28
  1459. package/src/clis/v2ex/me.ts +0 -104
  1460. package/src/clis/v2ex/member.yaml +0 -29
  1461. package/src/clis/v2ex/node.yaml +0 -34
  1462. package/src/clis/v2ex/nodes.yaml +0 -31
  1463. package/src/clis/v2ex/notifications.ts +0 -76
  1464. package/src/clis/v2ex/replies.yaml +0 -32
  1465. package/src/clis/v2ex/topic.yaml +0 -33
  1466. package/src/clis/v2ex/user.yaml +0 -34
  1467. package/src/clis/web/read.ts +0 -210
  1468. package/src/clis/weibo/comments.ts +0 -54
  1469. package/src/clis/weibo/feed.ts +0 -57
  1470. package/src/clis/weibo/hot.ts +0 -39
  1471. package/src/clis/weibo/me.ts +0 -77
  1472. package/src/clis/weibo/post.ts +0 -77
  1473. package/src/clis/weibo/search.ts +0 -78
  1474. package/src/clis/weibo/user.ts +0 -64
  1475. package/src/clis/weibo/utils.ts +0 -32
  1476. package/src/clis/weixin/download.ts +0 -382
  1477. package/src/clis/weread/book.ts +0 -271
  1478. package/src/clis/weread/commands.test.ts +0 -466
  1479. package/src/clis/weread/highlights.ts +0 -25
  1480. package/src/clis/weread/notebooks.ts +0 -23
  1481. package/src/clis/weread/notes.ts +0 -31
  1482. package/src/clis/weread/private-api-regression.test.ts +0 -435
  1483. package/src/clis/weread/ranking.ts +0 -29
  1484. package/src/clis/weread/search-regression.test.ts +0 -440
  1485. package/src/clis/weread/search.ts +0 -207
  1486. package/src/clis/weread/shelf.ts +0 -84
  1487. package/src/clis/weread/utils.test.ts +0 -153
  1488. package/src/clis/weread/utils.ts +0 -390
  1489. package/src/clis/wikipedia/random.ts +0 -19
  1490. package/src/clis/wikipedia/search.ts +0 -38
  1491. package/src/clis/wikipedia/summary.ts +0 -23
  1492. package/src/clis/wikipedia/trending.ts +0 -41
  1493. package/src/clis/wikipedia/utils.ts +0 -51
  1494. package/src/clis/xianyu/chat.test.ts +0 -20
  1495. package/src/clis/xianyu/chat.ts +0 -175
  1496. package/src/clis/xianyu/item.test.ts +0 -67
  1497. package/src/clis/xianyu/item.ts +0 -172
  1498. package/src/clis/xianyu/search.test.ts +0 -22
  1499. package/src/clis/xianyu/search.ts +0 -151
  1500. package/src/clis/xianyu/utils.ts +0 -9
  1501. package/src/clis/xiaoe/catalog.yaml +0 -129
  1502. package/src/clis/xiaoe/content.yaml +0 -43
  1503. package/src/clis/xiaoe/courses.yaml +0 -73
  1504. package/src/clis/xiaoe/detail.yaml +0 -39
  1505. package/src/clis/xiaoe/play-url.yaml +0 -124
  1506. package/src/clis/xiaohongshu/comments.test.ts +0 -171
  1507. package/src/clis/xiaohongshu/comments.ts +0 -140
  1508. package/src/clis/xiaohongshu/creator-note-detail.test.ts +0 -273
  1509. package/src/clis/xiaohongshu/creator-note-detail.ts +0 -447
  1510. package/src/clis/xiaohongshu/creator-notes-summary.test.ts +0 -54
  1511. package/src/clis/xiaohongshu/creator-notes-summary.ts +0 -120
  1512. package/src/clis/xiaohongshu/creator-notes.test.ts +0 -212
  1513. package/src/clis/xiaohongshu/creator-notes.ts +0 -295
  1514. package/src/clis/xiaohongshu/creator-profile.ts +0 -59
  1515. package/src/clis/xiaohongshu/creator-stats.ts +0 -80
  1516. package/src/clis/xiaohongshu/download.test.ts +0 -94
  1517. package/src/clis/xiaohongshu/download.ts +0 -174
  1518. package/src/clis/xiaohongshu/feed.yaml +0 -31
  1519. package/src/clis/xiaohongshu/note-helpers.ts +0 -25
  1520. package/src/clis/xiaohongshu/note.test.ts +0 -213
  1521. package/src/clis/xiaohongshu/note.ts +0 -104
  1522. package/src/clis/xiaohongshu/notifications.yaml +0 -37
  1523. package/src/clis/xiaohongshu/publish.test.ts +0 -228
  1524. package/src/clis/xiaohongshu/publish.ts +0 -598
  1525. package/src/clis/xiaohongshu/search.test.ts +0 -191
  1526. package/src/clis/xiaohongshu/search.ts +0 -143
  1527. package/src/clis/xiaohongshu/user-helpers.test.ts +0 -129
  1528. package/src/clis/xiaohongshu/user-helpers.ts +0 -89
  1529. package/src/clis/xiaohongshu/user.ts +0 -64
  1530. package/src/clis/xiaoyuzhou/episode.ts +0 -28
  1531. package/src/clis/xiaoyuzhou/podcast-episodes.ts +0 -36
  1532. package/src/clis/xiaoyuzhou/podcast.ts +0 -27
  1533. package/src/clis/xiaoyuzhou/utils.test.ts +0 -122
  1534. package/src/clis/xiaoyuzhou/utils.ts +0 -65
  1535. package/src/clis/xueqiu/comments.test.ts +0 -823
  1536. package/src/clis/xueqiu/comments.ts +0 -461
  1537. package/src/clis/xueqiu/danjuan-utils.test.ts +0 -49
  1538. package/src/clis/xueqiu/danjuan-utils.ts +0 -176
  1539. package/src/clis/xueqiu/earnings-date.yaml +0 -69
  1540. package/src/clis/xueqiu/feed.yaml +0 -53
  1541. package/src/clis/xueqiu/fund-holdings.ts +0 -32
  1542. package/src/clis/xueqiu/fund-snapshot.ts +0 -27
  1543. package/src/clis/xueqiu/hot-stock.yaml +0 -49
  1544. package/src/clis/xueqiu/hot.yaml +0 -46
  1545. package/src/clis/xueqiu/search.yaml +0 -55
  1546. package/src/clis/xueqiu/stock.yaml +0 -69
  1547. package/src/clis/xueqiu/watchlist.yaml +0 -46
  1548. package/src/clis/yahoo-finance/quote.ts +0 -72
  1549. package/src/clis/yollomi/background.ts +0 -48
  1550. package/src/clis/yollomi/edit.ts +0 -58
  1551. package/src/clis/yollomi/face-swap.ts +0 -45
  1552. package/src/clis/yollomi/generate.ts +0 -95
  1553. package/src/clis/yollomi/models.ts +0 -38
  1554. package/src/clis/yollomi/object-remover.ts +0 -44
  1555. package/src/clis/yollomi/remove-bg.ts +0 -40
  1556. package/src/clis/yollomi/restore.ts +0 -40
  1557. package/src/clis/yollomi/try-on.ts +0 -48
  1558. package/src/clis/yollomi/upload.ts +0 -78
  1559. package/src/clis/yollomi/upscale.ts +0 -49
  1560. package/src/clis/yollomi/utils.ts +0 -202
  1561. package/src/clis/yollomi/video.ts +0 -61
  1562. package/src/clis/youtube/channel.ts +0 -155
  1563. package/src/clis/youtube/comments.ts +0 -97
  1564. package/src/clis/youtube/search.ts +0 -99
  1565. package/src/clis/youtube/transcript-group.test.ts +0 -108
  1566. package/src/clis/youtube/transcript-group.ts +0 -287
  1567. package/src/clis/youtube/transcript.ts +0 -279
  1568. package/src/clis/youtube/utils.test.ts +0 -43
  1569. package/src/clis/youtube/utils.ts +0 -97
  1570. package/src/clis/youtube/video.ts +0 -118
  1571. package/src/clis/yuanbao/ask.test.ts +0 -156
  1572. package/src/clis/yuanbao/ask.ts +0 -522
  1573. package/src/clis/yuanbao/new.test.ts +0 -36
  1574. package/src/clis/yuanbao/new.ts +0 -81
  1575. package/src/clis/yuanbao/shared.ts +0 -57
  1576. package/src/clis/zhihu/download.test.ts +0 -14
  1577. package/src/clis/zhihu/download.ts +0 -87
  1578. package/src/clis/zhihu/hot.yaml +0 -46
  1579. package/src/clis/zhihu/question.test.ts +0 -96
  1580. package/src/clis/zhihu/question.ts +0 -63
  1581. package/src/clis/zhihu/search.yaml +0 -59
  1582. package/src/clis/zsxq/dynamics.ts +0 -60
  1583. package/src/clis/zsxq/groups.ts +0 -41
  1584. package/src/clis/zsxq/search.test.ts +0 -29
  1585. package/src/clis/zsxq/search.ts +0 -54
  1586. package/src/clis/zsxq/topic.test.ts +0 -34
  1587. package/src/clis/zsxq/topic.ts +0 -68
  1588. package/src/clis/zsxq/topics.test.ts +0 -29
  1589. package/src/clis/zsxq/topics.ts +0 -36
  1590. package/src/clis/zsxq/utils.ts +0 -351
  1591. package/src/commanderAdapter.test.ts +0 -315
  1592. package/src/commanderAdapter.ts +0 -319
  1593. package/src/commands/daemon.test.ts +0 -204
  1594. package/src/commands/daemon.ts +0 -87
  1595. package/src/completion.test.ts +0 -30
  1596. package/src/completion.ts +0 -132
  1597. package/src/constants.ts +0 -41
  1598. package/src/daemon.test.ts +0 -88
  1599. package/src/daemon.ts +0 -339
  1600. package/src/discovery.ts +0 -328
  1601. package/src/doctor.test.ts +0 -111
  1602. package/src/doctor.ts +0 -163
  1603. package/src/download/article-download.ts +0 -272
  1604. package/src/download/index.test.ts +0 -135
  1605. package/src/download/index.ts +0 -422
  1606. package/src/download/media-download.ts +0 -180
  1607. package/src/download/progress.ts +0 -125
  1608. package/src/electron-apps.test.ts +0 -50
  1609. package/src/electron-apps.ts +0 -97
  1610. package/src/engine.test.ts +0 -323
  1611. package/src/errors.test.ts +0 -79
  1612. package/src/errors.ts +0 -162
  1613. package/src/execution.test.ts +0 -47
  1614. package/src/execution.ts +0 -235
  1615. package/src/explore.ts +0 -502
  1616. package/src/extension-manifest-regression.test.ts +0 -18
  1617. package/src/external-clis.yaml +0 -56
  1618. package/src/external.test.ts +0 -97
  1619. package/src/external.ts +0 -246
  1620. package/src/generate.ts +0 -161
  1621. package/src/hooks.test.ts +0 -126
  1622. package/src/hooks.ts +0 -91
  1623. package/src/idle-manager.ts +0 -60
  1624. package/src/interceptor.test.ts +0 -94
  1625. package/src/interceptor.ts +0 -204
  1626. package/src/launcher.test.ts +0 -181
  1627. package/src/launcher.ts +0 -263
  1628. package/src/logger.ts +0 -57
  1629. package/src/main.ts +0 -66
  1630. package/src/node-network.test.ts +0 -93
  1631. package/src/node-network.ts +0 -213
  1632. package/src/output.test.ts +0 -69
  1633. package/src/output.ts +0 -145
  1634. package/src/pipeline/executor.test.ts +0 -191
  1635. package/src/pipeline/executor.ts +0 -110
  1636. package/src/pipeline/registry.ts +0 -62
  1637. package/src/pipeline/steps/browser.ts +0 -76
  1638. package/src/pipeline/steps/download.test.ts +0 -135
  1639. package/src/pipeline/steps/download.ts +0 -320
  1640. package/src/pipeline/steps/fetch.test.ts +0 -179
  1641. package/src/pipeline/steps/fetch.ts +0 -160
  1642. package/src/pipeline/steps/intercept.ts +0 -55
  1643. package/src/pipeline/steps/tap.ts +0 -100
  1644. package/src/pipeline/steps/transform.ts +0 -71
  1645. package/src/pipeline/template.test.ts +0 -177
  1646. package/src/pipeline/template.ts +0 -269
  1647. package/src/pipeline/transform.test.ts +0 -140
  1648. package/src/plugin-manifest.test.ts +0 -223
  1649. package/src/plugin-manifest.ts +0 -206
  1650. package/src/plugin-scaffold.test.ts +0 -98
  1651. package/src/plugin-scaffold.ts +0 -170
  1652. package/src/plugin.test.ts +0 -1427
  1653. package/src/plugin.ts +0 -1537
  1654. package/src/record.test.ts +0 -362
  1655. package/src/record.ts +0 -824
  1656. package/src/registry-api.ts +0 -14
  1657. package/src/registry.test.ts +0 -133
  1658. package/src/registry.ts +0 -160
  1659. package/src/runtime-detect.test.ts +0 -30
  1660. package/src/runtime-detect.ts +0 -36
  1661. package/src/runtime.ts +0 -86
  1662. package/src/scripts/framework.ts +0 -20
  1663. package/src/scripts/interact.ts +0 -22
  1664. package/src/scripts/store.ts +0 -40
  1665. package/src/serialization.test.ts +0 -44
  1666. package/src/serialization.ts +0 -92
  1667. package/src/snapshotFormatter.test.ts +0 -579
  1668. package/src/snapshotFormatter.ts +0 -359
  1669. package/src/synthesize.ts +0 -296
  1670. package/src/tui.test.ts +0 -23
  1671. package/src/tui.ts +0 -237
  1672. package/src/types.ts +0 -95
  1673. package/src/update-check.ts +0 -114
  1674. package/src/utils.ts +0 -44
  1675. package/src/validate.ts +0 -103
  1676. package/src/verify.ts +0 -93
  1677. package/src/version.ts +0 -18
  1678. package/src/weixin-download.test.ts +0 -91
  1679. package/src/yaml-schema.ts +0 -48
  1680. package/tests/e2e/band-auth.test.ts +0 -20
  1681. package/tests/e2e/browser-auth-helpers.ts +0 -18
  1682. package/tests/e2e/browser-auth.test.ts +0 -150
  1683. package/tests/e2e/browser-public-extended.test.ts +0 -166
  1684. package/tests/e2e/browser-public.test.ts +0 -417
  1685. package/tests/e2e/helpers.ts +0 -64
  1686. package/tests/e2e/management.test.ts +0 -106
  1687. package/tests/e2e/output-formats.test.ts +0 -44
  1688. package/tests/e2e/plugin-management.test.ts +0 -140
  1689. package/tests/e2e/public-commands.test.ts +0 -569
  1690. package/tests/smoke/api-health.test.ts +0 -131
  1691. package/tsconfig.json +0 -17
  1692. package/vitest.config.ts +0 -50
  1693. /package/dist/{browser.test.d.ts → clis/gemini/deep-research-result.test.d.ts} +0 -0
  1694. /package/dist/{browser/cdp.test.d.ts → clis/gemini/deep-research.test.d.ts} +0 -0
  1695. /package/dist/{browser/daemon-client.test.d.ts → clis/hupu/mentions.d.ts} +0 -0
  1696. /package/dist/{browser/dom-helpers.test.d.ts → clis/lesswrong/comments.d.ts} +0 -0
  1697. /package/dist/{browser/page.test.d.ts → clis/lesswrong/curated.d.ts} +0 -0
  1698. /package/dist/{browser/stealth.test.d.ts → clis/lesswrong/frontpage.d.ts} +0 -0
  1699. /package/dist/{build-manifest.test.d.ts → clis/lesswrong/new.d.ts} +0 -0
  1700. /package/dist/{capabilityRouting.test.d.ts → clis/lesswrong/read.d.ts} +0 -0
  1701. /package/dist/{cli.test.d.ts → clis/lesswrong/sequences.d.ts} +0 -0
  1702. /package/dist/{commanderAdapter.test.d.ts → clis/lesswrong/shortform.d.ts} +0 -0
  1703. /package/dist/{commands/daemon.test.d.ts → clis/lesswrong/tag.d.ts} +0 -0
  1704. /package/dist/{completion.test.d.ts → clis/lesswrong/tags.d.ts} +0 -0
  1705. /package/dist/{daemon.test.d.ts → clis/lesswrong/top-month.d.ts} +0 -0
  1706. /package/dist/{doctor.test.d.ts → clis/lesswrong/top-week.d.ts} +0 -0
  1707. /package/dist/{download/index.test.d.ts → clis/lesswrong/top-year.d.ts} +0 -0
  1708. /package/dist/{electron-apps.test.d.ts → clis/lesswrong/top.d.ts} +0 -0
  1709. /package/dist/{engine.test.d.ts → clis/lesswrong/user-posts.d.ts} +0 -0
  1710. /package/dist/{errors.test.d.ts → clis/lesswrong/user.d.ts} +0 -0
  1711. /package/dist/{analysis.d.ts → src/analysis.d.ts} +0 -0
  1712. /package/dist/{analysis.js → src/analysis.js} +0 -0
  1713. /package/dist/{browser → src/browser}/base-page.d.ts +0 -0
  1714. /package/dist/{browser → src/browser}/base-page.js +0 -0
  1715. /package/dist/{browser → src/browser}/bridge.d.ts +0 -0
  1716. /package/dist/{browser → src/browser}/bridge.js +0 -0
  1717. /package/dist/{extension-manifest-regression.test.d.ts → src/browser/cdp.test.d.ts} +0 -0
  1718. /package/dist/{browser → src/browser}/cdp.test.js +0 -0
  1719. /package/dist/{browser → src/browser}/daemon-client.d.ts +0 -0
  1720. /package/dist/{browser → src/browser}/daemon-client.js +0 -0
  1721. /package/dist/{external.test.d.ts → src/browser/daemon-client.test.d.ts} +0 -0
  1722. /package/dist/{browser → src/browser}/daemon-client.test.js +0 -0
  1723. /package/dist/{browser → src/browser}/discover.d.ts +0 -0
  1724. /package/dist/{browser → src/browser}/discover.js +0 -0
  1725. /package/dist/{browser → src/browser}/dom-helpers.d.ts +0 -0
  1726. /package/dist/{browser → src/browser}/dom-helpers.js +0 -0
  1727. /package/dist/{launcher.test.d.ts → src/browser/dom-helpers.test.d.ts} +0 -0
  1728. /package/dist/{browser → src/browser}/dom-helpers.test.js +0 -0
  1729. /package/dist/{browser → src/browser}/dom-snapshot.d.ts +0 -0
  1730. /package/dist/{browser → src/browser}/dom-snapshot.js +0 -0
  1731. /package/dist/{browser → src/browser}/dom-snapshot.test.d.ts +0 -0
  1732. /package/dist/{browser → src/browser}/dom-snapshot.test.js +0 -0
  1733. /package/dist/{browser → src/browser}/errors.d.ts +0 -0
  1734. /package/dist/{browser → src/browser}/errors.js +0 -0
  1735. /package/dist/{browser → src/browser}/index.d.ts +0 -0
  1736. /package/dist/{browser → src/browser}/index.js +0 -0
  1737. /package/dist/{node-network.test.d.ts → src/browser/page.test.d.ts} +0 -0
  1738. /package/dist/{browser → src/browser}/page.test.js +0 -0
  1739. /package/dist/{browser → src/browser}/stealth.d.ts +0 -0
  1740. /package/dist/{browser → src/browser}/stealth.js +0 -0
  1741. /package/dist/{output.test.d.ts → src/browser/stealth.test.d.ts} +0 -0
  1742. /package/dist/{browser → src/browser}/stealth.test.js +0 -0
  1743. /package/dist/{browser → src/browser}/tabs.d.ts +0 -0
  1744. /package/dist/{browser → src/browser}/tabs.js +0 -0
  1745. /package/dist/{execution.test.d.ts → src/browser.test.d.ts} +0 -0
  1746. /package/dist/{browser.test.js → src/browser.test.js} +0 -0
  1747. /package/dist/{build-manifest.d.ts → src/build-manifest.d.ts} +0 -0
  1748. /package/dist/{pipeline/steps/download.test.d.ts → src/build-manifest.test.d.ts} +0 -0
  1749. /package/dist/{build-manifest.test.js → src/build-manifest.test.js} +0 -0
  1750. /package/dist/{capabilityRouting.d.ts → src/capabilityRouting.d.ts} +0 -0
  1751. /package/dist/{capabilityRouting.js → src/capabilityRouting.js} +0 -0
  1752. /package/dist/{pipeline/steps/fetch.test.d.ts → src/capabilityRouting.test.d.ts} +0 -0
  1753. /package/dist/{capabilityRouting.test.js → src/capabilityRouting.test.js} +0 -0
  1754. /package/dist/{cascade.d.ts → src/cascade.d.ts} +0 -0
  1755. /package/dist/{record.test.d.ts → src/cli.test.d.ts} +0 -0
  1756. /package/dist/{runtime-detect.test.d.ts → src/commanderAdapter.test.d.ts} +0 -0
  1757. /package/dist/{commanderAdapter.test.js → src/commanderAdapter.test.js} +0 -0
  1758. /package/dist/{commands → src/commands}/daemon.d.ts +0 -0
  1759. /package/dist/{commands → src/commands}/daemon.js +0 -0
  1760. /package/dist/{serialization.test.d.ts → src/commands/daemon.test.d.ts} +0 -0
  1761. /package/dist/{commands → src/commands}/daemon.test.js +0 -0
  1762. /package/dist/{completion.d.ts → src/completion.d.ts} +0 -0
  1763. /package/dist/{completion.js → src/completion.js} +0 -0
  1764. /package/dist/{tui.test.d.ts → src/completion.test.d.ts} +0 -0
  1765. /package/dist/{completion.test.js → src/completion.test.js} +0 -0
  1766. /package/dist/{constants.d.ts → src/constants.d.ts} +0 -0
  1767. /package/dist/{constants.js → src/constants.js} +0 -0
  1768. /package/dist/{daemon.d.ts → src/daemon.d.ts} +0 -0
  1769. /package/dist/{daemon.js → src/daemon.js} +0 -0
  1770. /package/dist/{weixin-download.test.d.ts → src/daemon.test.d.ts} +0 -0
  1771. /package/dist/{daemon.test.js → src/daemon.test.js} +0 -0
  1772. /package/dist/{doctor.d.ts → src/doctor.d.ts} +0 -0
  1773. /package/dist/{doctor.js → src/doctor.js} +0 -0
  1774. /package/dist/{doctor.test.js → src/doctor.test.js} +0 -0
  1775. /package/dist/{download → src/download}/index.test.js +0 -0
  1776. /package/dist/{electron-apps.d.ts → src/electron-apps.d.ts} +0 -0
  1777. /package/dist/{electron-apps.js → src/electron-apps.js} +0 -0
  1778. /package/dist/{electron-apps.test.js → src/electron-apps.test.js} +0 -0
  1779. /package/dist/{engine.test.js → src/engine.test.js} +0 -0
  1780. /package/dist/{errors.d.ts → src/errors.d.ts} +0 -0
  1781. /package/dist/{errors.js → src/errors.js} +0 -0
  1782. /package/dist/{errors.test.js → src/errors.test.js} +0 -0
  1783. /package/dist/{execution.d.ts → src/execution.d.ts} +0 -0
  1784. /package/dist/{execution.js → src/execution.js} +0 -0
  1785. /package/dist/{execution.test.js → src/execution.test.js} +0 -0
  1786. /package/dist/{explore.d.ts → src/explore.d.ts} +0 -0
  1787. /package/dist/{explore.js → src/explore.js} +0 -0
  1788. /package/dist/{extension-manifest-regression.test.js → src/extension-manifest-regression.test.js} +0 -0
  1789. /package/dist/{external-clis.yaml → src/external-clis.yaml} +0 -0
  1790. /package/dist/{external.d.ts → src/external.d.ts} +0 -0
  1791. /package/dist/{external.js → src/external.js} +0 -0
  1792. /package/dist/{external.test.js → src/external.test.js} +0 -0
  1793. /package/dist/{generate.d.ts → src/generate.d.ts} +0 -0
  1794. /package/dist/{generate.js → src/generate.js} +0 -0
  1795. /package/dist/{hooks.d.ts → src/hooks.d.ts} +0 -0
  1796. /package/dist/{hooks.js → src/hooks.js} +0 -0
  1797. /package/dist/{hooks.test.d.ts → src/hooks.test.d.ts} +0 -0
  1798. /package/dist/{hooks.test.js → src/hooks.test.js} +0 -0
  1799. /package/dist/{idle-manager.d.ts → src/idle-manager.d.ts} +0 -0
  1800. /package/dist/{idle-manager.js → src/idle-manager.js} +0 -0
  1801. /package/dist/{interceptor.test.d.ts → src/interceptor.test.d.ts} +0 -0
  1802. /package/dist/{interceptor.test.js → src/interceptor.test.js} +0 -0
  1803. /package/dist/{launcher.d.ts → src/launcher.d.ts} +0 -0
  1804. /package/dist/{launcher.js → src/launcher.js} +0 -0
  1805. /package/dist/{launcher.test.js → src/launcher.test.js} +0 -0
  1806. /package/dist/{logger.d.ts → src/logger.d.ts} +0 -0
  1807. /package/dist/{logger.js → src/logger.js} +0 -0
  1808. /package/dist/{main.d.ts → src/main.d.ts} +0 -0
  1809. /package/dist/{node-network.d.ts → src/node-network.d.ts} +0 -0
  1810. /package/dist/{node-network.js → src/node-network.js} +0 -0
  1811. /package/dist/{node-network.test.js → src/node-network.test.js} +0 -0
  1812. /package/dist/{output.d.ts → src/output.d.ts} +0 -0
  1813. /package/dist/{output.js → src/output.js} +0 -0
  1814. /package/dist/{output.test.js → src/output.test.js} +0 -0
  1815. /package/dist/{pipeline → src/pipeline}/executor.d.ts +0 -0
  1816. /package/dist/{pipeline → src/pipeline}/executor.js +0 -0
  1817. /package/dist/{pipeline → src/pipeline}/executor.test.d.ts +0 -0
  1818. /package/dist/{pipeline → src/pipeline}/executor.test.js +0 -0
  1819. /package/dist/{pipeline → src/pipeline}/registry.d.ts +0 -0
  1820. /package/dist/{pipeline → src/pipeline}/registry.js +0 -0
  1821. /package/dist/{pipeline → src/pipeline}/steps/browser.d.ts +0 -0
  1822. /package/dist/{pipeline → src/pipeline}/steps/browser.js +0 -0
  1823. /package/dist/{pipeline → src/pipeline}/steps/download.d.ts +0 -0
  1824. /package/dist/{pipeline → src/pipeline}/steps/download.js +0 -0
  1825. /package/dist/{pipeline → src/pipeline}/steps/download.test.js +0 -0
  1826. /package/dist/{pipeline → src/pipeline}/steps/fetch.d.ts +0 -0
  1827. /package/dist/{pipeline → src/pipeline}/steps/fetch.js +0 -0
  1828. /package/dist/{pipeline → src/pipeline}/steps/fetch.test.js +0 -0
  1829. /package/dist/{pipeline → src/pipeline}/steps/intercept.d.ts +0 -0
  1830. /package/dist/{pipeline → src/pipeline}/steps/intercept.js +0 -0
  1831. /package/dist/{pipeline → src/pipeline}/steps/tap.d.ts +0 -0
  1832. /package/dist/{pipeline → src/pipeline}/steps/tap.js +0 -0
  1833. /package/dist/{pipeline → src/pipeline}/steps/transform.d.ts +0 -0
  1834. /package/dist/{pipeline → src/pipeline}/steps/transform.js +0 -0
  1835. /package/dist/{pipeline → src/pipeline}/template.d.ts +0 -0
  1836. /package/dist/{pipeline → src/pipeline}/template.js +0 -0
  1837. /package/dist/{pipeline → src/pipeline}/template.test.d.ts +0 -0
  1838. /package/dist/{pipeline → src/pipeline}/template.test.js +0 -0
  1839. /package/dist/{pipeline → src/pipeline}/transform.test.d.ts +0 -0
  1840. /package/dist/{pipeline → src/pipeline}/transform.test.js +0 -0
  1841. /package/dist/{plugin-manifest.d.ts → src/plugin-manifest.d.ts} +0 -0
  1842. /package/dist/{plugin-manifest.js → src/plugin-manifest.js} +0 -0
  1843. /package/dist/{plugin-manifest.test.d.ts → src/plugin-manifest.test.d.ts} +0 -0
  1844. /package/dist/{plugin-manifest.test.js → src/plugin-manifest.test.js} +0 -0
  1845. /package/dist/{plugin-scaffold.d.ts → src/plugin-scaffold.d.ts} +0 -0
  1846. /package/dist/{plugin-scaffold.js → src/plugin-scaffold.js} +0 -0
  1847. /package/dist/{plugin-scaffold.test.d.ts → src/plugin-scaffold.test.d.ts} +0 -0
  1848. /package/dist/{plugin-scaffold.test.js → src/plugin-scaffold.test.js} +0 -0
  1849. /package/dist/{plugin.d.ts → src/plugin.d.ts} +0 -0
  1850. /package/dist/{plugin.js → src/plugin.js} +0 -0
  1851. /package/dist/{plugin.test.d.ts → src/plugin.test.d.ts} +0 -0
  1852. /package/dist/{plugin.test.js → src/plugin.test.js} +0 -0
  1853. /package/dist/{record.d.ts → src/record.d.ts} +0 -0
  1854. /package/dist/{record.test.js → src/record.test.js} +0 -0
  1855. /package/dist/{registry-api.d.ts → src/registry-api.d.ts} +0 -0
  1856. /package/dist/{registry-api.js → src/registry-api.js} +0 -0
  1857. /package/dist/{registry.d.ts → src/registry.d.ts} +0 -0
  1858. /package/dist/{registry.js → src/registry.js} +0 -0
  1859. /package/dist/{registry.test.d.ts → src/registry.test.d.ts} +0 -0
  1860. /package/dist/{registry.test.js → src/registry.test.js} +0 -0
  1861. /package/dist/{runtime-detect.d.ts → src/runtime-detect.d.ts} +0 -0
  1862. /package/dist/{runtime-detect.js → src/runtime-detect.js} +0 -0
  1863. /package/dist/{runtime-detect.test.js → src/runtime-detect.test.js} +0 -0
  1864. /package/dist/{runtime.d.ts → src/runtime.d.ts} +0 -0
  1865. /package/dist/{runtime.js → src/runtime.js} +0 -0
  1866. /package/dist/{scripts → src/scripts}/framework.d.ts +0 -0
  1867. /package/dist/{scripts → src/scripts}/framework.js +0 -0
  1868. /package/dist/{scripts → src/scripts}/interact.d.ts +0 -0
  1869. /package/dist/{scripts → src/scripts}/interact.js +0 -0
  1870. /package/dist/{scripts → src/scripts}/store.d.ts +0 -0
  1871. /package/dist/{scripts → src/scripts}/store.js +0 -0
  1872. /package/dist/{serialization.d.ts → src/serialization.d.ts} +0 -0
  1873. /package/dist/{serialization.js → src/serialization.js} +0 -0
  1874. /package/dist/{serialization.test.js → src/serialization.test.js} +0 -0
  1875. /package/dist/{snapshotFormatter.d.ts → src/snapshotFormatter.d.ts} +0 -0
  1876. /package/dist/{snapshotFormatter.js → src/snapshotFormatter.js} +0 -0
  1877. /package/dist/{snapshotFormatter.test.d.ts → src/snapshotFormatter.test.d.ts} +0 -0
  1878. /package/dist/{snapshotFormatter.test.js → src/snapshotFormatter.test.js} +0 -0
  1879. /package/dist/{tui.d.ts → src/tui.d.ts} +0 -0
  1880. /package/dist/{tui.js → src/tui.js} +0 -0
  1881. /package/dist/{tui.test.js → src/tui.test.js} +0 -0
  1882. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
  1883. /package/dist/{types.js → src/types.js} +0 -0
  1884. /package/dist/{update-check.d.ts → src/update-check.d.ts} +0 -0
  1885. /package/dist/{update-check.js → src/update-check.js} +0 -0
  1886. /package/dist/{utils.d.ts → src/utils.d.ts} +0 -0
  1887. /package/dist/{utils.js → src/utils.js} +0 -0
  1888. /package/dist/{validate.d.ts → src/validate.d.ts} +0 -0
  1889. /package/dist/{validate.js → src/validate.js} +0 -0
  1890. /package/dist/{verify.d.ts → src/verify.d.ts} +0 -0
  1891. /package/dist/{verify.js → src/verify.js} +0 -0
  1892. /package/dist/{version.d.ts → src/version.d.ts} +0 -0
  1893. /package/dist/{yaml-schema.d.ts → src/yaml-schema.d.ts} +0 -0
  1894. /package/dist/{yaml-schema.js → src/yaml-schema.js} +0 -0
@@ -1,1303 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import * as fs from 'node:fs';
3
- import * as os from 'node:os';
4
- import * as path from 'node:path';
5
- import { spawnSync } from 'node:child_process';
6
-
7
- import { CommandExecutionError } from '../../../errors.js';
8
- import type { BrowserCookie, IPage } from '../../../types.js';
9
- import type { InstagramProtocolCaptureEntry } from './protocol-capture.js';
10
- import { instagramPrivateApiFetch } from './protocol-capture.js';
11
- import {
12
- buildReadInstagramRuntimeInfoJs,
13
- extractInstagramRuntimeInfo,
14
- type InstagramRuntimeInfo,
15
- } from './runtime-info.js';
16
- export {
17
- buildReadInstagramRuntimeInfoJs,
18
- extractInstagramRuntimeInfo,
19
- type InstagramRuntimeInfo,
20
- resolveInstagramRuntimeInfo,
21
- } from './runtime-info.js';
22
-
23
- export interface InstagramPrivateApiContext {
24
- asbdId: string;
25
- csrfToken: string;
26
- igAppId: string;
27
- igWwwClaim: string;
28
- instagramAjax: string;
29
- webSessionId: string;
30
- }
31
-
32
- export interface InstagramImageAsset {
33
- filePath: string;
34
- fileName: string;
35
- mimeType: string;
36
- width: number;
37
- height: number;
38
- byteLength: number;
39
- bytes: Buffer;
40
- }
41
-
42
- export interface PreparedInstagramImageAsset extends InstagramImageAsset {
43
- cleanupPath?: string;
44
- }
45
-
46
- export type InstagramMediaKind = 'image' | 'video';
47
-
48
- export interface InstagramMediaItem {
49
- type: InstagramMediaKind;
50
- filePath: string;
51
- }
52
-
53
- export interface InstagramVideoAsset {
54
- filePath: string;
55
- fileName: string;
56
- mimeType: string;
57
- width: number;
58
- height: number;
59
- durationMs: number;
60
- byteLength: number;
61
- bytes: Buffer;
62
- coverImage: PreparedInstagramImageAsset;
63
- cleanupPaths?: string[];
64
- }
65
-
66
- export type PreparedInstagramMediaAsset =
67
- | { type: 'image'; asset: PreparedInstagramImageAsset }
68
- | { type: 'video'; asset: InstagramVideoAsset };
69
-
70
- type StoryPayloadInput = {
71
- uploadId: string;
72
- width: number;
73
- height: number;
74
- now?: () => number;
75
- jazoest: string;
76
- };
77
-
78
- type StoryVideoPayloadInput = StoryPayloadInput & {
79
- durationMs: number;
80
- };
81
-
82
- type PrivateApiFetchInit = {
83
- method?: string;
84
- headers?: Record<string, string>;
85
- body?: unknown;
86
- };
87
-
88
- type PrivateApiFetchLike = (url: string | URL, init?: PrivateApiFetchInit) => Promise<Response>;
89
-
90
- const INSTAGRAM_MIN_FEED_ASPECT_RATIO = 4 / 5;
91
- const INSTAGRAM_MAX_FEED_ASPECT_RATIO = 1.91;
92
- const INSTAGRAM_MIN_STORY_ASPECT_RATIO = 9 / 16;
93
- const INSTAGRAM_MAX_STORY_ASPECT_RATIO = 3 / 4;
94
- const INSTAGRAM_PRIVATE_PAD_COLOR = 'FFFFFF';
95
- const INSTAGRAM_HOME_URL = 'https://www.instagram.com/';
96
- const INSTAGRAM_PRIVATE_CAPTURE_PATTERN = '/api/v1/|/graphql/';
97
- const INSTAGRAM_PRIVATE_CONFIG_RETRY_BUDGET = 2;
98
- const INSTAGRAM_PRIVATE_UPLOAD_RETRY_BUDGET = 2;
99
- const INSTAGRAM_PRIVATE_SIDECAR_TRANSCODE_ATTEMPTS = 20;
100
- const INSTAGRAM_PRIVATE_SIDECAR_TRANSCODE_WAIT_MS = 2000;
101
- const INSTAGRAM_MAX_STORY_VIDEO_DURATION_MS = 15_000;
102
- const INSTAGRAM_STORY_SIG_KEY = '19ce5f445dbfd9d29c59dc2a78c616a7fc090a8e018b9267bc4240a30244c53b';
103
- const INSTAGRAM_STORY_SIG_KEY_VERSION = '4';
104
- const INSTAGRAM_STORY_DEVICE = {
105
- manufacturer: 'samsung',
106
- model: 'SM-G930F',
107
- android_version: 24,
108
- android_release: '7.0',
109
- } as const;
110
-
111
- export function derivePrivateApiContextFromCapture(
112
- entries: InstagramProtocolCaptureEntry[],
113
- ): InstagramPrivateApiContext | null {
114
- for (let index = entries.length - 1; index >= 0; index -= 1) {
115
- const headers = entries[index]?.requestHeaders ?? {};
116
- const context = {
117
- asbdId: String(headers['X-ASBD-ID'] || ''),
118
- csrfToken: String(headers['X-CSRFToken'] || ''),
119
- igAppId: String(headers['X-IG-App-ID'] || ''),
120
- igWwwClaim: String(headers['X-IG-WWW-Claim'] || ''),
121
- instagramAjax: String(headers['X-Instagram-AJAX'] || ''),
122
- webSessionId: String(headers['X-Web-Session-ID'] || ''),
123
- };
124
- if (
125
- context.asbdId
126
- && context.csrfToken
127
- && context.igAppId
128
- && context.igWwwClaim
129
- && context.instagramAjax
130
- && context.webSessionId
131
- ) {
132
- return context;
133
- }
134
- }
135
- return null;
136
- }
137
-
138
- function derivePartialPrivateApiContextFromCapture(
139
- entries: InstagramProtocolCaptureEntry[],
140
- ): Partial<InstagramPrivateApiContext> {
141
- const context: Partial<InstagramPrivateApiContext> = {};
142
- for (let index = entries.length - 1; index >= 0; index -= 1) {
143
- const headers = entries[index]?.requestHeaders ?? {};
144
- if (!context.asbdId && headers['X-ASBD-ID']) context.asbdId = String(headers['X-ASBD-ID']);
145
- if (!context.csrfToken && headers['X-CSRFToken']) context.csrfToken = String(headers['X-CSRFToken']);
146
- if (!context.igAppId && headers['X-IG-App-ID']) context.igAppId = String(headers['X-IG-App-ID']);
147
- if (!context.igWwwClaim && headers['X-IG-WWW-Claim']) context.igWwwClaim = String(headers['X-IG-WWW-Claim']);
148
- if (!context.instagramAjax && headers['X-Instagram-AJAX']) context.instagramAjax = String(headers['X-Instagram-AJAX']);
149
- if (!context.webSessionId && headers['X-Web-Session-ID']) context.webSessionId = String(headers['X-Web-Session-ID']);
150
- }
151
- return context;
152
- }
153
-
154
- export function deriveInstagramJazoest(value: string): string {
155
- if (!value) return '';
156
- const sum = Array.from(value).reduce((total, char) => total + char.charCodeAt(0), 0);
157
- return `2${sum}`;
158
- }
159
-
160
- function sleep(ms: number): Promise<void> {
161
- return new Promise((resolve) => setTimeout(resolve, ms));
162
- }
163
-
164
- function isTransientPrivateFetchError(error: unknown): boolean {
165
- const message = error instanceof Error ? error.message : String(error);
166
- return /fetch failed|network|socket hang up|econnreset|etimedout/i.test(message);
167
- }
168
-
169
- function getCookieValue(cookies: BrowserCookie[], name: string): string {
170
- return cookies.find((cookie) => cookie.name === name)?.value || '';
171
- }
172
-
173
- export async function resolveInstagramPrivatePublishConfig(page: IPage): Promise<{
174
- apiContext: InstagramPrivateApiContext;
175
- jazoest: string;
176
- }> {
177
- let lastError: unknown;
178
- for (let attempt = 0; attempt < INSTAGRAM_PRIVATE_CONFIG_RETRY_BUDGET; attempt += 1) {
179
- try {
180
- if (typeof page.startNetworkCapture === 'function') {
181
- await page.startNetworkCapture(INSTAGRAM_PRIVATE_CAPTURE_PATTERN);
182
- }
183
- await page.goto(`${INSTAGRAM_HOME_URL}?__opencli_private_probe=${Date.now()}`);
184
- await page.wait({ time: 2 });
185
-
186
- const [cookies, runtime, entries] = await Promise.all([
187
- page.getCookies({ domain: 'instagram.com' }),
188
- page.evaluate(buildReadInstagramRuntimeInfoJs()) as Promise<InstagramRuntimeInfo>,
189
- typeof page.readNetworkCapture === 'function'
190
- ? page.readNetworkCapture() as Promise<unknown[]>
191
- : Promise.resolve([]),
192
- ]);
193
-
194
- const captureEntries = (Array.isArray(entries) ? entries : []) as InstagramProtocolCaptureEntry[];
195
- const capturedContext = derivePrivateApiContextFromCapture(captureEntries)
196
- ?? derivePartialPrivateApiContextFromCapture(captureEntries);
197
-
198
- const csrfToken = runtime?.csrfToken || getCookieValue(cookies, 'csrftoken') || capturedContext.csrfToken || '';
199
- const igAppId = runtime?.appId || capturedContext.igAppId || '';
200
- const instagramAjax = runtime?.instagramAjax || capturedContext.instagramAjax || '';
201
- if (!csrfToken) {
202
- throw new CommandExecutionError('Instagram private route could not derive CSRF token from browser session');
203
- }
204
- if (!igAppId) {
205
- throw new CommandExecutionError('Instagram private route could not derive X-IG-App-ID from instagram runtime');
206
- }
207
- if (!instagramAjax) {
208
- throw new CommandExecutionError('Instagram private route could not derive X-Instagram-AJAX from instagram runtime');
209
- }
210
- const asbdId = capturedContext.asbdId || '';
211
- const igWwwClaim = capturedContext.igWwwClaim || '';
212
- const webSessionId = capturedContext.webSessionId || '';
213
-
214
- return {
215
- apiContext: {
216
- asbdId,
217
- csrfToken,
218
- igAppId,
219
- igWwwClaim,
220
- instagramAjax,
221
- webSessionId,
222
- },
223
- jazoest: deriveInstagramJazoest(csrfToken),
224
- };
225
- } catch (error) {
226
- lastError = error;
227
- if (!isTransientPrivateFetchError(error) || attempt >= INSTAGRAM_PRIVATE_CONFIG_RETRY_BUDGET - 1) {
228
- throw error;
229
- }
230
- }
231
- }
232
- throw lastError instanceof Error ? lastError : new Error(String(lastError));
233
- }
234
-
235
- export function buildConfigureBody(input: {
236
- uploadId: string;
237
- caption: string;
238
- jazoest: string;
239
- }): string {
240
- const body = new URLSearchParams();
241
- body.set('archive_only', 'false');
242
- body.set('caption', input.caption);
243
- body.set('clips_share_preview_to_feed', '1');
244
- body.set('disable_comments', '0');
245
- body.set('disable_oa_reuse', 'false');
246
- body.set('igtv_share_preview_to_feed', '1');
247
- body.set('is_meta_only_post', '0');
248
- body.set('is_unified_video', '1');
249
- body.set('like_and_view_counts_disabled', '0');
250
- body.set('media_share_flow', 'creation_flow');
251
- body.set('share_to_facebook', '');
252
- body.set('share_to_fb_destination_type', 'USER');
253
- body.set('source_type', 'library');
254
- body.set('upload_id', input.uploadId);
255
- body.set('video_subtitles_enabled', '0');
256
- body.set('jazoest', input.jazoest);
257
- return body.toString();
258
- }
259
-
260
- export function buildConfigureSidecarPayload(input: {
261
- uploadIds: string[];
262
- caption: string;
263
- clientSidecarId: string;
264
- jazoest: string;
265
- }): Record<string, unknown> {
266
- return {
267
- archive_only: false,
268
- caption: input.caption,
269
- children_metadata: input.uploadIds.map((uploadId) => ({ upload_id: uploadId })),
270
- client_sidecar_id: input.clientSidecarId,
271
- disable_comments: '0',
272
- is_meta_only_post: false,
273
- is_open_to_public_submission: false,
274
- like_and_view_counts_disabled: 0,
275
- media_share_flow: 'creation_flow',
276
- share_to_facebook: '',
277
- share_to_fb_destination_type: 'USER',
278
- source_type: 'library',
279
- jazoest: input.jazoest,
280
- };
281
- }
282
-
283
- function inferMimeType(filePath: string): string {
284
- const ext = path.extname(filePath).toLowerCase();
285
- switch (ext) {
286
- case '.png':
287
- return 'image/png';
288
- case '.webp':
289
- return 'image/webp';
290
- case '.jpg':
291
- case '.jpeg':
292
- default:
293
- return 'image/jpeg';
294
- }
295
- }
296
-
297
- function readPngDimensions(bytes: Buffer): { width: number; height: number } | null {
298
- if (bytes.length < 24) return null;
299
- if (bytes.subarray(0, 8).toString('hex').toUpperCase() !== '89504E470D0A1A0A') return null;
300
- if (bytes.subarray(12, 16).toString('ascii') !== 'IHDR') return null;
301
- return {
302
- width: bytes.readUInt32BE(16),
303
- height: bytes.readUInt32BE(20),
304
- };
305
- }
306
-
307
- function readJpegDimensions(bytes: Buffer): { width: number; height: number } | null {
308
- if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;
309
- let offset = 2;
310
- while (offset + 9 < bytes.length) {
311
- if (bytes[offset] !== 0xff) {
312
- offset += 1;
313
- continue;
314
- }
315
- const marker = bytes[offset + 1];
316
- offset += 2;
317
- if (marker === 0xd8 || marker === 0xd9) continue;
318
- if (offset + 2 > bytes.length) break;
319
- const segmentLength = bytes.readUInt16BE(offset);
320
- if (segmentLength < 2 || offset + segmentLength > bytes.length) break;
321
- const isStartOfFrame = marker >= 0xc0 && marker <= 0xcf && ![0xc4, 0xc8, 0xcc].includes(marker);
322
- if (isStartOfFrame && segmentLength >= 7) {
323
- return {
324
- height: bytes.readUInt16BE(offset + 3),
325
- width: bytes.readUInt16BE(offset + 5),
326
- };
327
- }
328
- offset += segmentLength;
329
- }
330
- return null;
331
- }
332
-
333
- function readWebpDimensions(bytes: Buffer): { width: number; height: number } | null {
334
- if (bytes.length < 30) return null;
335
- if (bytes.subarray(0, 4).toString('ascii') !== 'RIFF' || bytes.subarray(8, 12).toString('ascii') !== 'WEBP') {
336
- return null;
337
- }
338
-
339
- const chunkType = bytes.subarray(12, 16).toString('ascii');
340
- if (chunkType === 'VP8X' && bytes.length >= 30) {
341
- return {
342
- width: 1 + bytes.readUIntLE(24, 3),
343
- height: 1 + bytes.readUIntLE(27, 3),
344
- };
345
- }
346
-
347
- if (chunkType === 'VP8 ' && bytes.length >= 30) {
348
- return {
349
- width: bytes.readUInt16LE(26) & 0x3fff,
350
- height: bytes.readUInt16LE(28) & 0x3fff,
351
- };
352
- }
353
-
354
- if (chunkType === 'VP8L' && bytes.length >= 25) {
355
- const bits = bytes.readUInt32LE(21);
356
- return {
357
- width: (bits & 0x3fff) + 1,
358
- height: ((bits >> 14) & 0x3fff) + 1,
359
- };
360
- }
361
-
362
- return null;
363
- }
364
-
365
- function readImageDimensions(filePath: string, bytes: Buffer): { width: number; height: number } {
366
- const ext = path.extname(filePath).toLowerCase();
367
- const dimensions = ext === '.png'
368
- ? readPngDimensions(bytes)
369
- : ext === '.webp'
370
- ? readWebpDimensions(bytes)
371
- : readJpegDimensions(bytes);
372
- if (!dimensions) {
373
- throw new CommandExecutionError(`Failed to read image dimensions for ${filePath}`);
374
- }
375
- return dimensions;
376
- }
377
-
378
- export function readImageAsset(filePath: string): InstagramImageAsset {
379
- const bytes = fs.readFileSync(filePath);
380
- const { width, height } = readImageDimensions(filePath, bytes);
381
- return {
382
- filePath,
383
- fileName: path.basename(filePath),
384
- mimeType: inferMimeType(filePath),
385
- width,
386
- height,
387
- byteLength: bytes.length,
388
- bytes,
389
- };
390
- }
391
-
392
- export function isInstagramFeedAspectRatioAllowed(width: number, height: number): boolean {
393
- const ratio = width / Math.max(height, 1);
394
- return ratio >= INSTAGRAM_MIN_FEED_ASPECT_RATIO - 0.001
395
- && ratio <= INSTAGRAM_MAX_FEED_ASPECT_RATIO + 0.001;
396
- }
397
-
398
- export function getInstagramFeedNormalizedDimensions(
399
- width: number,
400
- height: number,
401
- ): { width: number; height: number } | null {
402
- const ratio = width / Math.max(height, 1);
403
- if (ratio < INSTAGRAM_MIN_FEED_ASPECT_RATIO) {
404
- return {
405
- width: Math.ceil(height * INSTAGRAM_MIN_FEED_ASPECT_RATIO),
406
- height,
407
- };
408
- }
409
- if (ratio > INSTAGRAM_MAX_FEED_ASPECT_RATIO) {
410
- return {
411
- width,
412
- height: Math.ceil(width / INSTAGRAM_MAX_FEED_ASPECT_RATIO),
413
- };
414
- }
415
- return null;
416
- }
417
-
418
- export function isInstagramStoryAspectRatioAllowed(width: number, height: number): boolean {
419
- const ratio = width / Math.max(height, 1);
420
- return ratio >= INSTAGRAM_MIN_STORY_ASPECT_RATIO - 0.001
421
- && ratio <= INSTAGRAM_MAX_STORY_ASPECT_RATIO + 0.001;
422
- }
423
-
424
- export function getInstagramStoryNormalizedDimensions(
425
- width: number,
426
- height: number,
427
- ): { width: number; height: number } | null {
428
- const ratio = width / Math.max(height, 1);
429
- if (ratio < INSTAGRAM_MIN_STORY_ASPECT_RATIO) {
430
- return {
431
- width: Math.ceil(height * INSTAGRAM_MIN_STORY_ASPECT_RATIO),
432
- height,
433
- };
434
- }
435
- if (ratio > INSTAGRAM_MAX_STORY_ASPECT_RATIO) {
436
- return {
437
- width,
438
- height: Math.ceil(width / INSTAGRAM_MAX_STORY_ASPECT_RATIO),
439
- };
440
- }
441
- return null;
442
- }
443
-
444
- function buildPrivateNormalizedImagePath(filePath: string): string {
445
- const parsed = path.parse(filePath);
446
- return path.join(
447
- os.tmpdir(),
448
- `opencli-instagram-private-${parsed.name}-${crypto.randomUUID()}${parsed.ext || '.png'}`,
449
- );
450
- }
451
-
452
- export function prepareImageAssetForPrivateUpload(filePath: string): PreparedInstagramImageAsset {
453
- const asset = readImageAsset(filePath);
454
- const normalizedDimensions = getInstagramFeedNormalizedDimensions(asset.width, asset.height);
455
- if (!normalizedDimensions) {
456
- return asset;
457
- }
458
-
459
- if (process.platform !== 'darwin') {
460
- throw new CommandExecutionError(
461
- `Instagram private publish does not support auto-normalizing ${asset.fileName} on ${process.platform}`,
462
- `Use images within ${INSTAGRAM_MIN_FEED_ASPECT_RATIO.toFixed(2)}-${INSTAGRAM_MAX_FEED_ASPECT_RATIO.toFixed(2)} aspect ratio, or use the UI route`,
463
- );
464
- }
465
-
466
- const outputPath = buildPrivateNormalizedImagePath(filePath);
467
- const result = spawnSync('sips', [
468
- '--padToHeightWidth',
469
- String(normalizedDimensions.height),
470
- String(normalizedDimensions.width),
471
- '--padColor',
472
- INSTAGRAM_PRIVATE_PAD_COLOR,
473
- filePath,
474
- '--out',
475
- outputPath,
476
- ], {
477
- encoding: 'utf8',
478
- });
479
-
480
- if (result.error || result.status !== 0 || !fs.existsSync(outputPath)) {
481
- const detail = [result.error?.message, result.stderr, result.stdout]
482
- .map((value) => String(value || '').trim())
483
- .filter(Boolean)
484
- .join(' ');
485
- throw new CommandExecutionError(
486
- `Instagram private publish failed to normalize ${asset.fileName}`,
487
- detail || 'sips padToHeightWidth failed',
488
- );
489
- }
490
-
491
- return {
492
- ...readImageAsset(outputPath),
493
- cleanupPath: outputPath,
494
- };
495
- }
496
-
497
- export function prepareImageAssetForPrivateStoryUpload(filePath: string): PreparedInstagramImageAsset {
498
- const asset = readImageAsset(filePath);
499
- const normalizedDimensions = getInstagramStoryNormalizedDimensions(asset.width, asset.height);
500
- if (!normalizedDimensions) {
501
- return asset;
502
- }
503
-
504
- if (process.platform !== 'darwin') {
505
- throw new CommandExecutionError(
506
- `Instagram private story publish does not support auto-normalizing ${asset.fileName} on ${process.platform}`,
507
- `Use images within ${INSTAGRAM_MIN_STORY_ASPECT_RATIO.toFixed(2)}-${INSTAGRAM_MAX_STORY_ASPECT_RATIO.toFixed(2)} aspect ratio, or use the UI route`,
508
- );
509
- }
510
-
511
- const outputPath = buildPrivateNormalizedImagePath(filePath);
512
- const result = spawnSync('sips', [
513
- '--padToHeightWidth',
514
- String(normalizedDimensions.height),
515
- String(normalizedDimensions.width),
516
- '--padColor',
517
- INSTAGRAM_PRIVATE_PAD_COLOR,
518
- filePath,
519
- '--out',
520
- outputPath,
521
- ], {
522
- encoding: 'utf8',
523
- });
524
-
525
- if (result.error || result.status !== 0 || !fs.existsSync(outputPath)) {
526
- const detail = [result.error?.message, result.stderr, result.stdout]
527
- .map((value) => String(value || '').trim())
528
- .filter(Boolean)
529
- .join(' ');
530
- throw new CommandExecutionError(
531
- `Instagram private story publish failed to normalize ${asset.fileName}`,
532
- detail || 'sips padToHeightWidth failed',
533
- );
534
- }
535
-
536
- return {
537
- ...readImageAsset(outputPath),
538
- cleanupPath: outputPath,
539
- };
540
- }
541
-
542
- function runSwiftJsonScript<T>(script: string, args: string[], stage: string): T {
543
- const scriptPath = path.join(os.tmpdir(), `opencli-instagram-${crypto.randomUUID()}.swift`);
544
- fs.writeFileSync(scriptPath, script);
545
- try {
546
- const result = spawnSync('swift', [scriptPath, ...args], {
547
- encoding: 'utf8',
548
- });
549
- if (result.error || result.status !== 0) {
550
- const detail = [result.error?.message, result.stderr, result.stdout]
551
- .map((value) => String(value || '').trim())
552
- .filter(Boolean)
553
- .join(' ');
554
- throw new CommandExecutionError(
555
- `Instagram private publish failed to ${stage}`,
556
- detail || 'swift helper failed',
557
- );
558
- }
559
- return JSON.parse(String(result.stdout || '{}')) as T;
560
- } catch (error) {
561
- if (error instanceof CommandExecutionError) throw error;
562
- throw new CommandExecutionError(
563
- `Instagram private publish failed to ${stage}`,
564
- error instanceof Error ? error.message : String(error),
565
- );
566
- } finally {
567
- fs.rmSync(scriptPath, { force: true });
568
- }
569
- }
570
-
571
- function readVideoMetadata(filePath: string): { width: number; height: number; durationMs: number } {
572
- if (process.platform !== 'darwin') {
573
- throw new CommandExecutionError(
574
- `Instagram private mixed-media publish does not support reading video metadata on ${process.platform}`,
575
- 'Use macOS for private mixed-media publishing, or rely on the UI fallback',
576
- );
577
- }
578
-
579
- const metadata = runSwiftJsonScript<{ width?: number; height?: number; durationMs?: number }>(`
580
- import AVFoundation
581
- import Foundation
582
-
583
- let path = CommandLine.arguments[1]
584
- let url = URL(fileURLWithPath: path)
585
- let asset = AVURLAsset(url: url)
586
- guard let track = asset.tracks(withMediaType: .video).first else {
587
- fputs("{\\"error\\":\\"missing-video-track\\"}", stderr)
588
- exit(1)
589
- }
590
- let transformed = track.naturalSize.applying(track.preferredTransform)
591
- let width = Int(abs(transformed.width.rounded()))
592
- let height = Int(abs(transformed.height.rounded()))
593
- let durationMs = Int((CMTimeGetSeconds(asset.duration) * 1000.0).rounded())
594
- let payload: [String: Int] = [
595
- "width": width,
596
- "height": height,
597
- "durationMs": durationMs,
598
- ]
599
- let data = try JSONSerialization.data(withJSONObject: payload, options: [])
600
- FileHandle.standardOutput.write(data)
601
- `, [filePath], 'read video metadata');
602
-
603
- if (!metadata.width || !metadata.height || !metadata.durationMs) {
604
- throw new CommandExecutionError(`Instagram private publish failed to read video metadata for ${filePath}`);
605
- }
606
- return {
607
- width: metadata.width,
608
- height: metadata.height,
609
- durationMs: metadata.durationMs,
610
- };
611
- }
612
-
613
- function buildPrivateVideoCoverPath(filePath: string): string {
614
- const parsed = path.parse(filePath);
615
- return path.join(
616
- os.tmpdir(),
617
- `opencli-instagram-private-video-cover-${parsed.name}-${crypto.randomUUID()}.jpg`,
618
- );
619
- }
620
-
621
- function buildPrivateStoryVideoPath(filePath: string): string {
622
- const parsed = path.parse(filePath);
623
- return path.join(
624
- os.tmpdir(),
625
- `opencli-instagram-story-video-${parsed.name}-${crypto.randomUUID()}${parsed.ext || '.mp4'}`,
626
- );
627
- }
628
-
629
- function generateVideoCoverImage(filePath: string): PreparedInstagramImageAsset {
630
- if (process.platform !== 'darwin') {
631
- throw new CommandExecutionError(
632
- `Instagram private mixed-media publish does not support generating video covers on ${process.platform}`,
633
- 'Use macOS for private mixed-media publishing, or rely on the UI fallback',
634
- );
635
- }
636
-
637
- const outputPath = buildPrivateVideoCoverPath(filePath);
638
- runSwiftJsonScript<{ ok?: boolean }>(`
639
- import AVFoundation
640
- import AppKit
641
- import Foundation
642
-
643
- let inputPath = CommandLine.arguments[1]
644
- let outputPath = CommandLine.arguments[2]
645
- let asset = AVURLAsset(url: URL(fileURLWithPath: inputPath))
646
- let generator = AVAssetImageGenerator(asset: asset)
647
- generator.appliesPreferredTrackTransform = true
648
- let image = try generator.copyCGImage(at: CMTime(seconds: 0, preferredTimescale: 600), actualTime: nil)
649
- let rep = NSBitmapImageRep(cgImage: image)
650
- guard let data = rep.representation(using: .jpeg, properties: [.compressionFactor: 0.9]) else {
651
- fputs("{\\"error\\":\\"jpeg-encode-failed\\"}", stderr)
652
- exit(1)
653
- }
654
- try data.write(to: URL(fileURLWithPath: outputPath))
655
- let payload = ["ok": true]
656
- let json = try JSONSerialization.data(withJSONObject: payload, options: [])
657
- FileHandle.standardOutput.write(json)
658
- `, [filePath, outputPath], 'generate video cover');
659
-
660
- return {
661
- ...readImageAsset(outputPath),
662
- cleanupPath: outputPath,
663
- };
664
- }
665
-
666
- export function readVideoAsset(filePath: string): InstagramVideoAsset {
667
- const bytes = fs.readFileSync(filePath);
668
- const metadata = readVideoMetadata(filePath);
669
- const coverImage = generateVideoCoverImage(filePath);
670
- return {
671
- filePath,
672
- fileName: path.basename(filePath),
673
- mimeType: 'video/mp4',
674
- width: metadata.width,
675
- height: metadata.height,
676
- durationMs: metadata.durationMs,
677
- byteLength: bytes.length,
678
- bytes,
679
- coverImage,
680
- cleanupPaths: coverImage.cleanupPath ? [coverImage.cleanupPath] : [],
681
- };
682
- }
683
-
684
- function trimVideoForInstagramStory(filePath: string, maxDurationMs: number): string {
685
- if (process.platform !== 'darwin') {
686
- throw new CommandExecutionError(
687
- `Instagram private story publish does not support trimming long videos on ${process.platform}`,
688
- 'Use macOS for private story video publishing, or trim the video to 15 seconds first',
689
- );
690
- }
691
-
692
- const outputPath = buildPrivateStoryVideoPath(filePath);
693
- runSwiftJsonScript<{ ok?: boolean }>(`
694
- import AVFoundation
695
- import Foundation
696
-
697
- let inputPath = CommandLine.arguments[1]
698
- let outputPath = CommandLine.arguments[2]
699
- let durationMs = Int(CommandLine.arguments[3]) ?? 15000
700
- let asset = AVURLAsset(url: URL(fileURLWithPath: inputPath))
701
- guard let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality) else {
702
- fputs("{\\"error\\":\\"missing-export-session\\"}", stderr)
703
- exit(1)
704
- }
705
- exportSession.outputURL = URL(fileURLWithPath: outputPath)
706
- exportSession.outputFileType = .mp4
707
- exportSession.shouldOptimizeForNetworkUse = true
708
- exportSession.timeRange = CMTimeRange(
709
- start: .zero,
710
- duration: CMTime(seconds: Double(durationMs) / 1000.0, preferredTimescale: 600)
711
- )
712
- let semaphore = DispatchSemaphore(value: 0)
713
- exportSession.exportAsynchronously {
714
- semaphore.signal()
715
- }
716
- semaphore.wait()
717
- if exportSession.status != .completed {
718
- let message = exportSession.error?.localizedDescription ?? "export-failed"
719
- fputs(message, stderr)
720
- exit(1)
721
- }
722
- let payload = ["ok": true]
723
- let json = try JSONSerialization.data(withJSONObject: payload, options: [])
724
- FileHandle.standardOutput.write(json)
725
- `, [filePath, outputPath, String(maxDurationMs)], 'trim story video');
726
-
727
- return outputPath;
728
- }
729
-
730
- function prepareVideoAssetForPrivateStoryUpload(filePath: string): InstagramVideoAsset {
731
- const asset = readVideoAsset(filePath);
732
- if (asset.durationMs <= INSTAGRAM_MAX_STORY_VIDEO_DURATION_MS) {
733
- return asset;
734
- }
735
-
736
- const trimmedPath = trimVideoForInstagramStory(filePath, INSTAGRAM_MAX_STORY_VIDEO_DURATION_MS);
737
- const trimmedAsset = readVideoAsset(trimmedPath);
738
- return {
739
- ...trimmedAsset,
740
- cleanupPaths: [
741
- ...(trimmedAsset.cleanupPaths || []),
742
- trimmedPath,
743
- ],
744
- };
745
- }
746
-
747
- function toUnixSeconds(now: () => number): number {
748
- const value = now();
749
- return value > 10_000_000_000 ? Math.floor(value / 1000) : Math.floor(value);
750
- }
751
-
752
- export function buildConfigureToStoryPhotoPayload(input: StoryPayloadInput): Record<string, unknown> {
753
- const now = input.now ?? (() => Date.now());
754
- const timestamp = toUnixSeconds(now);
755
- return {
756
- source_type: '4',
757
- upload_id: input.uploadId,
758
- story_media_creation_date: String(timestamp - 17),
759
- client_shared_at: String(timestamp - 5),
760
- client_timestamp: String(timestamp),
761
- configure_mode: 1,
762
- edits: {
763
- crop_original_size: [input.width, input.height],
764
- crop_center: [0, 0],
765
- crop_zoom: 1.3333334,
766
- },
767
- extra: {
768
- source_width: input.width,
769
- source_height: input.height,
770
- },
771
- jazoest: input.jazoest,
772
- };
773
- }
774
-
775
- export function buildConfigureToStoryVideoPayload(input: StoryVideoPayloadInput): Record<string, unknown> {
776
- const now = input.now ?? (() => Date.now());
777
- const timestamp = toUnixSeconds(now);
778
- const durationSeconds = Number((input.durationMs / 1000).toFixed(3));
779
- return {
780
- source_type: '4',
781
- upload_id: input.uploadId,
782
- story_media_creation_date: String(timestamp - 17),
783
- client_shared_at: String(timestamp - 5),
784
- client_timestamp: String(timestamp),
785
- configure_mode: 1,
786
- poster_frame_index: 0,
787
- length: durationSeconds,
788
- audio_muted: false,
789
- filter_type: '0',
790
- video_result: 'deprecated',
791
- extra: {
792
- source_width: input.width,
793
- source_height: input.height,
794
- },
795
- jazoest: input.jazoest,
796
- };
797
- }
798
-
799
- function buildFormEncodedBodyFromPayload(payload: Record<string, unknown>): string {
800
- const body = new URLSearchParams();
801
- for (const [key, value] of Object.entries(payload)) {
802
- if (value === undefined || value === null) continue;
803
- if (typeof value === 'object') {
804
- body.set(key, JSON.stringify(value));
805
- continue;
806
- }
807
- body.set(key, String(value));
808
- }
809
- return body.toString();
810
- }
811
-
812
- function buildSignedBody(payload: Record<string, unknown>): string {
813
- const jsonPayload = JSON.stringify(payload);
814
- const signature = crypto
815
- .createHmac('sha256', INSTAGRAM_STORY_SIG_KEY)
816
- .update(jsonPayload)
817
- .digest('hex');
818
- const body = new URLSearchParams();
819
- body.set('ig_sig_key_version', INSTAGRAM_STORY_SIG_KEY_VERSION);
820
- body.set('signed_body', `${signature}.${jsonPayload}`);
821
- return body.toString();
822
- }
823
-
824
- function buildPrivateApiHeaders(context: InstagramPrivateApiContext): Record<string, string> {
825
- return Object.fromEntries(Object.entries({
826
- 'X-ASBD-ID': context.asbdId,
827
- 'X-CSRFToken': context.csrfToken,
828
- 'X-IG-App-ID': context.igAppId,
829
- 'X-IG-WWW-Claim': context.igWwwClaim,
830
- 'X-Instagram-AJAX': context.instagramAjax,
831
- 'X-Web-Session-ID': context.webSessionId,
832
- }).filter(([, value]) => !!value));
833
- }
834
-
835
- function buildRuploadHeaders(
836
- asset: InstagramImageAsset,
837
- uploadId: string,
838
- context: InstagramPrivateApiContext,
839
- ): Record<string, string> {
840
- return {
841
- ...buildPrivateApiHeaders(context),
842
- 'Accept': '*/*',
843
- 'Content-Type': asset.mimeType,
844
- 'Offset': '0',
845
- 'X-Entity-Length': String(asset.byteLength),
846
- 'X-Entity-Name': `fb_uploader_${uploadId}`,
847
- 'X-Entity-Type': asset.mimeType,
848
- 'X-Instagram-Rupload-Params': JSON.stringify({
849
- media_type: 1,
850
- upload_id: uploadId,
851
- upload_media_height: asset.height,
852
- upload_media_width: asset.width,
853
- }),
854
- };
855
- }
856
-
857
- function buildVideoEditParams(asset: InstagramVideoAsset): Record<string, number | boolean> {
858
- const cropSize = Math.min(asset.width, asset.height);
859
- const trimEndSeconds = Number((asset.durationMs / 1000).toFixed(3));
860
- return {
861
- crop_height: cropSize,
862
- crop_width: cropSize,
863
- crop_x1: Math.max(0, Math.floor((asset.width - cropSize) / 2)),
864
- crop_y1: Math.max(0, Math.floor((asset.height - cropSize) / 2)),
865
- mute: false,
866
- trim_end: trimEndSeconds,
867
- trim_start: 0,
868
- };
869
- }
870
-
871
- function buildVideoRuploadHeaders(
872
- asset: InstagramVideoAsset,
873
- uploadId: string,
874
- context: InstagramPrivateApiContext,
875
- ): Record<string, string> {
876
- return {
877
- ...buildPrivateApiHeaders(context),
878
- 'Accept': '*/*',
879
- 'Offset': '0',
880
- 'X-Entity-Length': String(asset.byteLength),
881
- 'X-Entity-Name': `fb_uploader_${uploadId}`,
882
- 'X-Instagram-Rupload-Params': JSON.stringify({
883
- 'client-passthrough': '1',
884
- 'is_unified_video': '0',
885
- 'is_sidecar': '1',
886
- 'media_type': 2,
887
- 'for_album': false,
888
- 'video_format': '',
889
- 'upload_id': uploadId,
890
- 'upload_media_duration_ms': asset.durationMs,
891
- 'upload_media_height': asset.height,
892
- 'upload_media_width': asset.width,
893
- 'video_transform': null,
894
- 'video_edit_params': buildVideoEditParams(asset),
895
- }),
896
- };
897
- }
898
-
899
- function buildStoryVideoRuploadHeaders(
900
- asset: InstagramVideoAsset,
901
- uploadId: string,
902
- context: InstagramPrivateApiContext,
903
- ): Record<string, string> {
904
- return {
905
- ...buildPrivateApiHeaders(context),
906
- 'Accept': '*/*',
907
- 'Offset': '0',
908
- 'X-Entity-Length': String(asset.byteLength),
909
- 'X-Entity-Name': `fb_uploader_${uploadId}`,
910
- 'X-Instagram-Rupload-Params': JSON.stringify({
911
- 'client-passthrough': '1',
912
- 'media_type': 2,
913
- 'upload_id': uploadId,
914
- 'upload_media_duration_ms': asset.durationMs,
915
- 'upload_media_height': asset.height,
916
- 'upload_media_width': asset.width,
917
- 'video_transform': null,
918
- 'video_edit_params': buildVideoEditParams(asset),
919
- }),
920
- };
921
- }
922
-
923
- function buildVideoCoverRuploadHeaders(
924
- asset: InstagramVideoAsset,
925
- uploadId: string,
926
- context: InstagramPrivateApiContext,
927
- ): Record<string, string> {
928
- return {
929
- ...buildPrivateApiHeaders(context),
930
- 'Accept': '*/*',
931
- 'Content-Type': asset.coverImage.mimeType,
932
- 'Offset': '0',
933
- 'X-Entity-Length': String(asset.coverImage.byteLength),
934
- 'X-Entity-Name': `fb_uploader_${uploadId}`,
935
- 'X-Entity-Type': asset.coverImage.mimeType,
936
- 'X-Instagram-Rupload-Params': JSON.stringify({
937
- media_type: 2,
938
- upload_id: uploadId,
939
- upload_media_height: asset.height,
940
- upload_media_width: asset.width,
941
- }),
942
- };
943
- }
944
-
945
- async function parseJsonResponse(response: Response, stage: string): Promise<any> {
946
- const text = await response.text();
947
- let data: any;
948
- try {
949
- data = text ? JSON.parse(text) : {};
950
- } catch {
951
- throw new CommandExecutionError(`Instagram private publish ${stage} returned invalid JSON`);
952
- }
953
- if (!response.ok) {
954
- const detail = text ? ` ${text.slice(0, 500)}` : '';
955
- throw new CommandExecutionError(`Instagram private publish ${stage} failed: ${response.status}${detail}`);
956
- }
957
- return data;
958
- }
959
-
960
- async function fetchPrivateUploadWithRetry(
961
- fetcher: PrivateApiFetchLike,
962
- url: string,
963
- init: PrivateApiFetchInit,
964
- ): Promise<Response> {
965
- let lastError: unknown;
966
- for (let attempt = 0; attempt < INSTAGRAM_PRIVATE_UPLOAD_RETRY_BUDGET; attempt += 1) {
967
- try {
968
- return await fetcher(url, init);
969
- } catch (error) {
970
- lastError = error;
971
- if (!isTransientPrivateFetchError(error) || attempt >= INSTAGRAM_PRIVATE_UPLOAD_RETRY_BUDGET - 1) {
972
- throw error;
973
- }
974
- }
975
- }
976
- throw lastError instanceof Error ? lastError : new Error(String(lastError));
977
- }
978
-
979
- async function prepareInstagramMediaAsset(item: InstagramMediaItem): Promise<PreparedInstagramMediaAsset> {
980
- if (item.type === 'video') {
981
- return {
982
- type: 'video',
983
- asset: readVideoAsset(item.filePath),
984
- };
985
- }
986
- return {
987
- type: 'image',
988
- asset: prepareImageAssetForPrivateUpload(item.filePath),
989
- };
990
- }
991
-
992
- function cleanupPreparedMediaAssets(assets: PreparedInstagramMediaAsset[]): void {
993
- for (const prepared of assets) {
994
- if (prepared.type === 'image') {
995
- if (prepared.asset.cleanupPath) {
996
- fs.rmSync(prepared.asset.cleanupPath, { force: true });
997
- }
998
- continue;
999
- }
1000
- for (const cleanupPath of prepared.asset.cleanupPaths || []) {
1001
- fs.rmSync(cleanupPath, { force: true });
1002
- }
1003
- if (prepared.asset.coverImage.cleanupPath) {
1004
- fs.rmSync(prepared.asset.coverImage.cleanupPath, { force: true });
1005
- }
1006
- }
1007
- }
1008
-
1009
- async function uploadPreparedMediaAsset(
1010
- fetcher: PrivateApiFetchLike,
1011
- prepared: PreparedInstagramMediaAsset,
1012
- uploadId: string,
1013
- context: InstagramPrivateApiContext,
1014
- mode: 'feed' | 'story' = 'feed',
1015
- ): Promise<void> {
1016
- if (prepared.type === 'image') {
1017
- const response = await fetchPrivateUploadWithRetry(fetcher, `https://i.instagram.com/rupload_igphoto/fb_uploader_${uploadId}`, {
1018
- method: 'POST',
1019
- headers: buildRuploadHeaders(prepared.asset, uploadId, context),
1020
- body: prepared.asset.bytes,
1021
- });
1022
- const json = await parseJsonResponse(response, 'upload');
1023
- if (String(json?.status || '') !== 'ok') {
1024
- throw new CommandExecutionError(`Instagram private publish upload failed for ${prepared.asset.fileName}`);
1025
- }
1026
- return;
1027
- }
1028
-
1029
- const videoResponse = await fetchPrivateUploadWithRetry(fetcher, `https://i.instagram.com/rupload_igvideo/fb_uploader_${uploadId}`, {
1030
- method: 'POST',
1031
- headers: mode === 'story'
1032
- ? buildStoryVideoRuploadHeaders(prepared.asset, uploadId, context)
1033
- : buildVideoRuploadHeaders(prepared.asset, uploadId, context),
1034
- body: prepared.asset.bytes,
1035
- });
1036
- const videoJson = await parseJsonResponse(videoResponse, 'video upload');
1037
- if (String(videoJson?.status || '') !== 'ok') {
1038
- throw new CommandExecutionError(`Instagram private publish video upload failed for ${prepared.asset.fileName}`);
1039
- }
1040
-
1041
- const coverResponse = await fetchPrivateUploadWithRetry(fetcher, `https://i.instagram.com/rupload_igphoto/fb_uploader_${uploadId}`, {
1042
- method: 'POST',
1043
- headers: buildVideoCoverRuploadHeaders(prepared.asset, uploadId, context),
1044
- body: prepared.asset.coverImage.bytes,
1045
- });
1046
- const coverJson = await parseJsonResponse(coverResponse, 'video cover upload');
1047
- if (String(coverJson?.status || '') !== 'ok') {
1048
- throw new CommandExecutionError(`Instagram private publish video cover upload failed for ${prepared.asset.fileName}`);
1049
- }
1050
- }
1051
-
1052
- async function publishSidecarWithRetry(input: {
1053
- fetcher: PrivateApiFetchLike;
1054
- payload: Record<string, unknown>;
1055
- apiContext: InstagramPrivateApiContext;
1056
- waitMs?: (ms: number) => Promise<void>;
1057
- }): Promise<{ code?: string }> {
1058
- const waitMs = input.waitMs ?? sleep;
1059
- const requestInit: PrivateApiFetchInit = {
1060
- method: 'POST',
1061
- headers: {
1062
- ...buildPrivateApiHeaders(input.apiContext),
1063
- 'Content-Type': 'application/json',
1064
- },
1065
- body: JSON.stringify(input.payload),
1066
- };
1067
-
1068
- for (let attempt = 0; attempt < INSTAGRAM_PRIVATE_SIDECAR_TRANSCODE_ATTEMPTS; attempt += 1) {
1069
- const response = await input.fetcher('https://www.instagram.com/api/v1/media/configure_sidecar/', requestInit);
1070
- const text = await response.text();
1071
- let json: any = {};
1072
- try {
1073
- json = text ? JSON.parse(text) : {};
1074
- } catch {
1075
- throw new CommandExecutionError('Instagram private publish configure_sidecar returned invalid JSON');
1076
- }
1077
-
1078
- if (!response.ok) {
1079
- const detail = text ? ` ${text.slice(0, 500)}` : '';
1080
- throw new CommandExecutionError(`Instagram private publish configure_sidecar failed: ${response.status}${detail}`);
1081
- }
1082
-
1083
- const message = String(json?.message || '');
1084
- if (
1085
- response.status === 202
1086
- || /transcode not finished yet/i.test(message)
1087
- ) {
1088
- if (attempt >= INSTAGRAM_PRIVATE_SIDECAR_TRANSCODE_ATTEMPTS - 1) {
1089
- throw new CommandExecutionError(
1090
- 'Instagram private publish configure_sidecar timed out waiting for video transcode',
1091
- text.slice(0, 500),
1092
- );
1093
- }
1094
- await waitMs(INSTAGRAM_PRIVATE_SIDECAR_TRANSCODE_WAIT_MS);
1095
- continue;
1096
- }
1097
-
1098
- if (String(json?.status || '').toLowerCase() === 'fail') {
1099
- throw new CommandExecutionError(
1100
- 'Instagram private publish configure_sidecar failed',
1101
- message || text.slice(0, 500),
1102
- );
1103
- }
1104
-
1105
- return { code: json?.media?.code };
1106
- }
1107
-
1108
- throw new CommandExecutionError('Instagram private publish configure_sidecar failed');
1109
- }
1110
-
1111
- export async function publishMediaViaPrivateApi(input: {
1112
- page: unknown;
1113
- mediaItems: InstagramMediaItem[];
1114
- caption: string;
1115
- apiContext: InstagramPrivateApiContext;
1116
- jazoest: string;
1117
- now?: () => number;
1118
- fetcher?: PrivateApiFetchLike;
1119
- prepareMediaAsset?: (item: InstagramMediaItem) => PreparedInstagramMediaAsset | Promise<PreparedInstagramMediaAsset>;
1120
- waitMs?: (ms: number) => Promise<void>;
1121
- }): Promise<{ code?: string; uploadIds: string[] }> {
1122
- const now = input.now ?? (() => Date.now());
1123
- const clientSidecarId = String(now());
1124
- const uploadIds = input.mediaItems.length > 1
1125
- ? input.mediaItems.map((_, index) => String(now() + index + 1))
1126
- : [String(now())];
1127
- const fetcher: PrivateApiFetchLike = input.fetcher ?? ((url, init) => instagramPrivateApiFetch(input.page as any, url, init as any));
1128
- const prepareMediaAsset = input.prepareMediaAsset ?? prepareInstagramMediaAsset;
1129
- const assets = await Promise.all(input.mediaItems.map((item) => prepareMediaAsset(item)));
1130
-
1131
- try {
1132
- for (let index = 0; index < assets.length; index += 1) {
1133
- const asset = assets[index]!;
1134
- const uploadId = uploadIds[index]!;
1135
- await uploadPreparedMediaAsset(fetcher, asset, uploadId, input.apiContext);
1136
- }
1137
-
1138
- if (uploadIds.length === 1) {
1139
- if (assets[0]?.type !== 'image') {
1140
- throw new CommandExecutionError('Instagram private publish only supports single-video uploads through instagram reel');
1141
- }
1142
- const response = await fetcher('https://www.instagram.com/api/v1/media/configure/', {
1143
- method: 'POST',
1144
- headers: {
1145
- ...buildPrivateApiHeaders(input.apiContext),
1146
- 'Content-Type': 'application/x-www-form-urlencoded',
1147
- },
1148
- body: buildConfigureBody({
1149
- uploadId: uploadIds[0]!,
1150
- caption: input.caption,
1151
- jazoest: input.jazoest,
1152
- }),
1153
- });
1154
- const json = await parseJsonResponse(response, 'configure');
1155
- return { code: json?.media?.code, uploadIds };
1156
- }
1157
-
1158
- const result = await publishSidecarWithRetry({
1159
- fetcher,
1160
- payload: buildConfigureSidecarPayload({
1161
- uploadIds,
1162
- caption: input.caption,
1163
- clientSidecarId,
1164
- jazoest: input.jazoest,
1165
- }),
1166
- apiContext: input.apiContext,
1167
- waitMs: input.waitMs,
1168
- });
1169
- return { code: result.code, uploadIds };
1170
- } finally {
1171
- cleanupPreparedMediaAssets(assets);
1172
- }
1173
- }
1174
-
1175
- export async function publishImagesViaPrivateApi(input: {
1176
- page: unknown;
1177
- imagePaths: string[];
1178
- caption: string;
1179
- apiContext: InstagramPrivateApiContext;
1180
- jazoest: string;
1181
- now?: () => number;
1182
- fetcher?: PrivateApiFetchLike;
1183
- prepareAsset?: (filePath: string) => PreparedInstagramImageAsset | Promise<PreparedInstagramImageAsset>;
1184
- waitMs?: (ms: number) => Promise<void>;
1185
- }): Promise<{ code?: string; uploadIds: string[] }> {
1186
- return publishMediaViaPrivateApi({
1187
- page: input.page,
1188
- mediaItems: input.imagePaths.map((filePath) => ({ type: 'image' as const, filePath })),
1189
- caption: input.caption,
1190
- apiContext: input.apiContext,
1191
- jazoest: input.jazoest,
1192
- now: input.now,
1193
- fetcher: input.fetcher,
1194
- waitMs: input.waitMs,
1195
- prepareMediaAsset: input.prepareAsset
1196
- ? async (item) => ({
1197
- type: 'image' as const,
1198
- asset: await input.prepareAsset!(item.filePath),
1199
- })
1200
- : undefined,
1201
- });
1202
- }
1203
-
1204
- export async function publishStoryViaPrivateApi(input: {
1205
- page: unknown;
1206
- mediaItem: InstagramMediaItem;
1207
- content: string;
1208
- apiContext: InstagramPrivateApiContext;
1209
- jazoest: string;
1210
- currentUserId?: string;
1211
- now?: () => number;
1212
- fetcher?: PrivateApiFetchLike;
1213
- prepareMediaAsset?: (item: InstagramMediaItem) => PreparedInstagramMediaAsset | Promise<PreparedInstagramMediaAsset>;
1214
- }): Promise<{ mediaPk?: string; uploadId: string }> {
1215
- const now = input.now ?? (() => Date.now());
1216
- const uploadId = String(now());
1217
- const fetcher: PrivateApiFetchLike = input.fetcher ?? ((url, init) => instagramPrivateApiFetch(input.page as any, url, init as any));
1218
- const prepareMediaAsset = input.prepareMediaAsset ?? (async (item: InstagramMediaItem) => item.type === 'video'
1219
- ? { type: 'video' as const, asset: prepareVideoAssetForPrivateStoryUpload(item.filePath) }
1220
- : { type: 'image' as const, asset: prepareImageAssetForPrivateStoryUpload(item.filePath) });
1221
- const prepared = await prepareMediaAsset(input.mediaItem);
1222
- const currentUserId = input.currentUserId
1223
- || ('getCookies' in (input.page as any)
1224
- ? String((await ((input.page as IPage).getCookies?.({ domain: 'instagram.com' }) ?? Promise.resolve([] as BrowserCookie[])))
1225
- .find((cookie) => cookie.name === 'ds_user_id')?.value || '')
1226
- : '');
1227
- if (!currentUserId) {
1228
- throw new CommandExecutionError('Instagram story publish could not derive current user id from browser session');
1229
- }
1230
-
1231
- const signedPayloadBase = {
1232
- _csrftoken: input.apiContext.csrfToken,
1233
- _uid: currentUserId,
1234
- _uuid: crypto.randomUUID(),
1235
- device: INSTAGRAM_STORY_DEVICE,
1236
- };
1237
- const buildSignedStoryPhotoBody = (width: number, height: number) => buildSignedBody({
1238
- ...buildConfigureToStoryPhotoPayload({
1239
- uploadId,
1240
- width,
1241
- height,
1242
- now,
1243
- jazoest: input.jazoest,
1244
- }),
1245
- ...signedPayloadBase,
1246
- });
1247
- const buildSignedStoryVideoBody = (width: number, height: number, durationMs: number) => buildSignedBody({
1248
- ...buildConfigureToStoryVideoPayload({
1249
- uploadId,
1250
- width,
1251
- height,
1252
- durationMs,
1253
- now,
1254
- jazoest: input.jazoest,
1255
- }),
1256
- ...signedPayloadBase,
1257
- });
1258
-
1259
- try {
1260
- await uploadPreparedMediaAsset(fetcher, prepared, uploadId, input.apiContext, 'story');
1261
-
1262
- if (prepared.type === 'image') {
1263
- const response = await fetcher('https://i.instagram.com/api/v1/media/configure_to_story/', {
1264
- method: 'POST',
1265
- headers: {
1266
- ...buildPrivateApiHeaders(input.apiContext),
1267
- 'Content-Type': 'application/x-www-form-urlencoded',
1268
- },
1269
- body: buildSignedStoryPhotoBody(prepared.asset.width, prepared.asset.height),
1270
- });
1271
- const json = await parseJsonResponse(response, 'configure_to_story');
1272
- return {
1273
- mediaPk: String(json?.media?.pk || json?.media?.id || '').split('_')[0] || undefined,
1274
- uploadId,
1275
- };
1276
- }
1277
-
1278
- await parseJsonResponse(await fetcher('https://i.instagram.com/api/v1/media/configure_to_story/', {
1279
- method: 'POST',
1280
- headers: {
1281
- ...buildPrivateApiHeaders(input.apiContext),
1282
- 'Content-Type': 'application/x-www-form-urlencoded',
1283
- },
1284
- body: buildSignedStoryPhotoBody(prepared.asset.width, prepared.asset.height),
1285
- }), 'configure_to_story cover');
1286
-
1287
- const response = await fetcher('https://i.instagram.com/api/v1/media/configure_to_story/?video=1', {
1288
- method: 'POST',
1289
- headers: {
1290
- ...buildPrivateApiHeaders(input.apiContext),
1291
- 'Content-Type': 'application/x-www-form-urlencoded',
1292
- },
1293
- body: buildSignedStoryVideoBody(prepared.asset.width, prepared.asset.height, prepared.asset.durationMs),
1294
- });
1295
- const json = await parseJsonResponse(response, 'configure_to_story');
1296
- return {
1297
- mediaPk: String(json?.media?.pk || json?.media?.id || '').split('_')[0] || undefined,
1298
- uploadId,
1299
- };
1300
- } finally {
1301
- cleanupPreparedMediaAssets([prepared]);
1302
- }
1303
- }