@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,1427 +0,0 @@
1
- /**
2
- * Tests for plugin management: install, uninstall, list, and lock file support.
3
- */
4
-
5
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
6
- import * as fs from 'node:fs';
7
- import * as os from 'node:os';
8
- import * as path from 'node:path';
9
- import { pathToFileURL } from 'node:url';
10
- import { PLUGINS_DIR } from './discovery.js';
11
- import type { LockEntry } from './plugin.js';
12
- import * as pluginModule from './plugin.js';
13
-
14
- const { mockExecFileSync, mockExecSync } = vi.hoisted(() => ({
15
- mockExecFileSync: vi.fn(),
16
- mockExecSync: vi.fn(),
17
- }));
18
-
19
- const {
20
- _getCommitHash,
21
- _installDependencies,
22
- _postInstallMonorepoLifecycle,
23
- _promoteDir,
24
- _replaceDir,
25
- installPlugin,
26
- listPlugins,
27
- _readLockFile,
28
- _readLockFileWithWriter,
29
- _resolveEsbuildBin,
30
- uninstallPlugin,
31
- updatePlugin,
32
- _parseSource,
33
- _updateAllPlugins,
34
- _validatePluginStructure,
35
- _writeLockFile,
36
- _writeLockFileWithFs,
37
- _isSymlinkSync,
38
- _getMonoreposDir,
39
- getLockFilePath,
40
- _installLocalPlugin,
41
- _isLocalPluginSource,
42
- _moveDir,
43
- _resolvePluginSource,
44
- _resolveStoredPluginSource,
45
- _toStoredPluginSource,
46
- _toLocalPluginSource,
47
- } = pluginModule;
48
-
49
- describe('parseSource', () => {
50
- it('parses github:user/repo format', () => {
51
- const result = _parseSource('github:ByteYue/opencli-plugin-github-trending');
52
- expect(result).toEqual({
53
- type: 'git',
54
- cloneUrl: 'https://github.com/ByteYue/opencli-plugin-github-trending.git',
55
- name: 'github-trending',
56
- });
57
- });
58
-
59
- it('parses https URL format', () => {
60
- const result = _parseSource('https://github.com/ByteYue/opencli-plugin-hot-digest');
61
- expect(result).toEqual({
62
- type: 'git',
63
- cloneUrl: 'https://github.com/ByteYue/opencli-plugin-hot-digest.git',
64
- name: 'hot-digest',
65
- });
66
- });
67
-
68
- it('strips opencli-plugin- prefix from name', () => {
69
- const result = _parseSource('github:user/opencli-plugin-my-tool');
70
- expect(result!.name).toBe('my-tool');
71
- });
72
-
73
- it('keeps name without prefix', () => {
74
- const result = _parseSource('github:user/awesome-cli');
75
- expect(result!.name).toBe('awesome-cli');
76
- });
77
-
78
- it('returns null for invalid source', () => {
79
- expect(_parseSource('invalid')).toBeNull();
80
- expect(_parseSource('npm:some-package')).toBeNull();
81
- });
82
-
83
- it('parses file:// local plugin directories', () => {
84
- const localDir = path.join(os.tmpdir(), 'opencli-plugin-test');
85
- const fileUrl = pathToFileURL(localDir).href;
86
- const result = _parseSource(fileUrl);
87
- expect(result).toEqual({
88
- type: 'local',
89
- localPath: localDir,
90
- name: 'test',
91
- });
92
- });
93
-
94
- it('parses plain absolute local plugin directories', () => {
95
- const localDir = path.join(os.tmpdir(), 'my-plugin');
96
- const result = _parseSource(localDir);
97
- expect(result).toEqual({
98
- type: 'local',
99
- localPath: localDir,
100
- name: 'my-plugin',
101
- });
102
- });
103
-
104
- it('strips opencli-plugin- prefix for local paths', () => {
105
- const localDir = path.join(os.tmpdir(), 'opencli-plugin-foo');
106
- const result = _parseSource(localDir);
107
- expect(result!.name).toBe('foo');
108
- });
109
-
110
- // ── Generic git URL support ──
111
- it('parses ssh:// URLs', () => {
112
- const result = _parseSource('ssh://git@gitlab.com/team/opencli-plugin-tools.git');
113
- expect(result).toEqual({
114
- type: 'git',
115
- cloneUrl: 'ssh://git@gitlab.com/team/opencli-plugin-tools.git',
116
- name: 'tools',
117
- });
118
- });
119
-
120
- it('parses ssh:// URLs without .git suffix', () => {
121
- const result = _parseSource('ssh://git@gitlab.com/team/my-plugin');
122
- expect(result).toEqual({
123
- type: 'git',
124
- cloneUrl: 'ssh://git@gitlab.com/team/my-plugin',
125
- name: 'my-plugin',
126
- });
127
- });
128
-
129
- it('parses git@ SCP-style URLs', () => {
130
- const result = _parseSource('git@gitlab.com:team/my-plugin.git');
131
- expect(result).toEqual({
132
- type: 'git',
133
- cloneUrl: 'git@gitlab.com:team/my-plugin.git',
134
- name: 'my-plugin',
135
- });
136
- });
137
-
138
- it('parses git@ SCP-style URLs and strips opencli-plugin- prefix', () => {
139
- const result = _parseSource('git@github.com:user/opencli-plugin-awesome.git');
140
- expect(result).toEqual({
141
- type: 'git',
142
- cloneUrl: 'git@github.com:user/opencli-plugin-awesome.git',
143
- name: 'awesome',
144
- });
145
- });
146
-
147
- it('parses generic HTTPS git URLs (non-GitHub)', () => {
148
- const result = _parseSource('https://codehub.example.com/Team/App/opencli-plugins-app.git');
149
- expect(result).toEqual({
150
- type: 'git',
151
- cloneUrl: 'https://codehub.example.com/Team/App/opencli-plugins-app.git',
152
- name: 'opencli-plugins-app',
153
- });
154
- });
155
-
156
- it('parses generic HTTPS git URLs without .git suffix', () => {
157
- const result = _parseSource('https://gitlab.example.com/org/my-plugin');
158
- expect(result).toEqual({
159
- type: 'git',
160
- cloneUrl: 'https://gitlab.example.com/org/my-plugin.git',
161
- name: 'my-plugin',
162
- });
163
- });
164
-
165
- it('still prefers GitHub shorthand over generic HTTPS for github.com', () => {
166
- const result = _parseSource('https://github.com/user/repo');
167
- // Should be handled by the GitHub-specific matcher (normalizes URL)
168
- expect(result).toEqual({
169
- type: 'git',
170
- cloneUrl: 'https://github.com/user/repo.git',
171
- name: 'repo',
172
- });
173
- });
174
- });
175
-
176
- describe('validatePluginStructure', () => {
177
- const testDir = path.join(PLUGINS_DIR, '__test-validate__');
178
-
179
- beforeEach(() => {
180
- fs.mkdirSync(testDir, { recursive: true });
181
- });
182
-
183
- afterEach(() => {
184
- try { fs.rmSync(testDir, { recursive: true }); } catch {}
185
- });
186
-
187
- it('returns invalid for non-existent directory', () => {
188
- const res = _validatePluginStructure(path.join(PLUGINS_DIR, '__does_not_exist__'));
189
- expect(res.valid).toBe(false);
190
- expect(res.errors[0]).toContain('does not exist');
191
- });
192
-
193
- it('returns invalid for empty directory', () => {
194
- const res = _validatePluginStructure(testDir);
195
- expect(res.valid).toBe(false);
196
- expect(res.errors[0]).toContain('No command files found');
197
- });
198
-
199
- it('returns valid for YAML plugin', () => {
200
- fs.writeFileSync(path.join(testDir, 'cmd.yaml'), 'site: test');
201
- const res = _validatePluginStructure(testDir);
202
- expect(res.valid).toBe(true);
203
- expect(res.errors).toHaveLength(0);
204
- });
205
-
206
- it('returns valid for JS plugin', () => {
207
- fs.writeFileSync(path.join(testDir, 'cmd.js'), 'console.log("hi");');
208
- const res = _validatePluginStructure(testDir);
209
- expect(res.valid).toBe(true);
210
- expect(res.errors).toHaveLength(0);
211
- });
212
-
213
- it('returns invalid for TS plugin without package.json', () => {
214
- fs.writeFileSync(path.join(testDir, 'cmd.ts'), 'console.log("hi");');
215
- const res = _validatePluginStructure(testDir);
216
- expect(res.valid).toBe(false);
217
- expect(res.errors[0]).toContain('contains .ts files but no package.json');
218
- });
219
-
220
- it('returns invalid for TS plugin with missing type: module', () => {
221
- fs.writeFileSync(path.join(testDir, 'cmd.ts'), 'console.log("hi");');
222
- fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ name: 'test' }));
223
- const res = _validatePluginStructure(testDir);
224
- expect(res.valid).toBe(false);
225
- expect(res.errors[0]).toContain('must have "type": "module"');
226
- });
227
-
228
- it('returns valid for TS plugin with correct package.json', () => {
229
- fs.writeFileSync(path.join(testDir, 'cmd.ts'), 'console.log("hi");');
230
- fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ type: 'module' }));
231
- const res = _validatePluginStructure(testDir);
232
- expect(res.valid).toBe(true);
233
- expect(res.errors).toHaveLength(0);
234
- });
235
- });
236
-
237
- describe('lock file', () => {
238
- const backupPath = `${getLockFilePath()}.test-backup`;
239
- let hadOriginal = false;
240
-
241
- beforeEach(() => {
242
- hadOriginal = fs.existsSync(getLockFilePath());
243
- if (hadOriginal) {
244
- fs.mkdirSync(path.dirname(backupPath), { recursive: true });
245
- fs.copyFileSync(getLockFilePath(), backupPath);
246
- }
247
- });
248
-
249
- afterEach(() => {
250
- if (hadOriginal) {
251
- fs.copyFileSync(backupPath, getLockFilePath());
252
- fs.unlinkSync(backupPath);
253
- return;
254
- }
255
- try { fs.unlinkSync(getLockFilePath()); } catch {}
256
- });
257
-
258
- it('reads empty lock when file does not exist', () => {
259
- try { fs.unlinkSync(getLockFilePath()); } catch {}
260
- expect(_readLockFile()).toEqual({});
261
- });
262
-
263
- it('round-trips lock entries', () => {
264
- const entries: Record<string, LockEntry> = {
265
- 'test-plugin': {
266
- source: { kind: 'git', url: 'https://github.com/user/repo.git' },
267
- commitHash: 'abc1234567890def',
268
- installedAt: '2025-01-01T00:00:00.000Z',
269
- },
270
- 'another-plugin': {
271
- source: { kind: 'git', url: 'https://github.com/user/another.git' },
272
- commitHash: 'def4567890123abc',
273
- installedAt: '2025-02-01T00:00:00.000Z',
274
- updatedAt: '2025-03-01T00:00:00.000Z',
275
- },
276
- };
277
-
278
- _writeLockFile(entries);
279
- expect(_readLockFile()).toEqual(entries);
280
- });
281
-
282
- it('handles malformed lock file gracefully', () => {
283
- fs.mkdirSync(path.dirname(getLockFilePath()), { recursive: true });
284
- fs.writeFileSync(getLockFilePath(), 'not valid json');
285
- expect(_readLockFile()).toEqual({});
286
- });
287
-
288
- it('keeps the previous lockfile contents when atomic rewrite fails', () => {
289
- const existing: Record<string, LockEntry> = {
290
- stable: {
291
- source: { kind: 'git', url: 'https://github.com/user/stable.git' },
292
- commitHash: 'stable1234567890',
293
- installedAt: '2025-01-01T00:00:00.000Z',
294
- },
295
- };
296
- _writeLockFile(existing);
297
-
298
- const renameSync = vi.fn(() => {
299
- throw new Error('rename failed');
300
- });
301
- const rmSync = vi.fn(() => undefined);
302
-
303
- expect(() => _writeLockFileWithFs({
304
- broken: {
305
- source: { kind: 'git', url: 'https://github.com/user/broken.git' },
306
- commitHash: 'broken1234567890',
307
- installedAt: '2025-02-01T00:00:00.000Z',
308
- },
309
- }, {
310
- mkdirSync: fs.mkdirSync,
311
- writeFileSync: fs.writeFileSync,
312
- renameSync,
313
- rmSync,
314
- })).toThrow('rename failed');
315
-
316
- expect(_readLockFile()).toEqual(existing);
317
- expect(rmSync).toHaveBeenCalledTimes(1);
318
- });
319
-
320
- it('migrates legacy string sources to structured sources on read', () => {
321
- const legacyLocalPath = path.resolve(path.join(os.tmpdir(), 'opencli-legacy-local-plugin'));
322
- fs.mkdirSync(path.dirname(getLockFilePath()), { recursive: true });
323
- fs.writeFileSync(getLockFilePath(), JSON.stringify({
324
- alpha: {
325
- source: 'https://github.com/user/opencli-plugins.git',
326
- commitHash: 'abc1234567890def',
327
- installedAt: '2025-01-01T00:00:00.000Z',
328
- monorepo: { name: 'opencli-plugins', subPath: 'packages/alpha' },
329
- },
330
- beta: {
331
- source: `local:${legacyLocalPath}`,
332
- commitHash: 'local',
333
- installedAt: '2025-01-01T00:00:00.000Z',
334
- },
335
- }, null, 2));
336
-
337
- expect(_readLockFile()).toEqual({
338
- alpha: {
339
- source: {
340
- kind: 'monorepo',
341
- url: 'https://github.com/user/opencli-plugins.git',
342
- repoName: 'opencli-plugins',
343
- subPath: 'packages/alpha',
344
- },
345
- commitHash: 'abc1234567890def',
346
- installedAt: '2025-01-01T00:00:00.000Z',
347
- },
348
- beta: {
349
- source: { kind: 'local', path: legacyLocalPath },
350
- commitHash: 'local',
351
- installedAt: '2025-01-01T00:00:00.000Z',
352
- },
353
- });
354
- });
355
-
356
- it('returns normalized entries even when migration rewrite fails', () => {
357
- fs.mkdirSync(path.dirname(getLockFilePath()), { recursive: true });
358
- fs.writeFileSync(getLockFilePath(), JSON.stringify({
359
- alpha: {
360
- source: 'https://github.com/user/opencli-plugins.git',
361
- commitHash: 'abc1234567890def',
362
- installedAt: '2025-01-01T00:00:00.000Z',
363
- monorepo: { name: 'opencli-plugins', subPath: 'packages/alpha' },
364
- },
365
- }, null, 2));
366
-
367
- expect(_readLockFileWithWriter(() => {
368
- throw new Error('disk full');
369
- })).toEqual({
370
- alpha: {
371
- source: {
372
- kind: 'monorepo',
373
- url: 'https://github.com/user/opencli-plugins.git',
374
- repoName: 'opencli-plugins',
375
- subPath: 'packages/alpha',
376
- },
377
- commitHash: 'abc1234567890def',
378
- installedAt: '2025-01-01T00:00:00.000Z',
379
- },
380
- });
381
- });
382
- });
383
-
384
- describe('getCommitHash', () => {
385
- it('returns a hash for a git repo', () => {
386
- const hash = _getCommitHash(process.cwd());
387
- expect(hash).toBeDefined();
388
- expect(hash).toMatch(/^[0-9a-f]{40}$/);
389
- });
390
-
391
- it('returns undefined for non-git directory', () => {
392
- expect(_getCommitHash(os.tmpdir())).toBeUndefined();
393
- });
394
- });
395
-
396
- describe('resolveEsbuildBin', () => {
397
- it('resolves a usable esbuild executable path', () => {
398
- const binPath = _resolveEsbuildBin();
399
- expect(binPath).not.toBeNull();
400
- expect(typeof binPath).toBe('string');
401
- expect(fs.existsSync(binPath!)).toBe(true);
402
- expect(binPath).toMatch(/esbuild(\.cmd)?$/);
403
- });
404
- });
405
-
406
- describe('listPlugins', () => {
407
- const testDir = path.join(PLUGINS_DIR, '__test-list-plugin__');
408
-
409
- afterEach(() => {
410
- try { fs.rmSync(testDir, { recursive: true }); } catch {}
411
- });
412
-
413
- it('lists installed plugins', () => {
414
- fs.mkdirSync(testDir, { recursive: true });
415
- fs.writeFileSync(path.join(testDir, 'hello.yaml'), 'site: test\nname: hello\n');
416
-
417
- const plugins = listPlugins();
418
- const found = plugins.find(p => p.name === '__test-list-plugin__');
419
- expect(found).toBeDefined();
420
- expect(found!.commands).toContain('hello');
421
- });
422
-
423
- it('includes version metadata from the lock file', () => {
424
- fs.mkdirSync(testDir, { recursive: true });
425
- fs.writeFileSync(path.join(testDir, 'hello.yaml'), 'site: test\nname: hello\n');
426
-
427
- const lock = _readLockFile();
428
- lock['__test-list-plugin__'] = {
429
- source: { kind: 'git', url: 'https://github.com/user/repo.git' },
430
- commitHash: 'abcdef1234567890abcdef1234567890abcdef12',
431
- installedAt: '2025-01-01T00:00:00.000Z',
432
- };
433
- _writeLockFile(lock);
434
-
435
- const plugins = listPlugins();
436
- const found = plugins.find(p => p.name === '__test-list-plugin__');
437
- expect(found).toBeDefined();
438
- expect(found!.version).toBe('abcdef1');
439
- expect(found!.installedAt).toBe('2025-01-01T00:00:00.000Z');
440
-
441
- delete lock['__test-list-plugin__'];
442
- _writeLockFile(lock);
443
- });
444
-
445
- it('returns empty array when no plugins dir', () => {
446
- const plugins = listPlugins();
447
- expect(Array.isArray(plugins)).toBe(true);
448
- });
449
-
450
- it('prefers lockfile source for local symlink plugins', () => {
451
- const localTarget = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-local-list-'));
452
- const linkPath = path.join(PLUGINS_DIR, '__test-list-plugin__');
453
-
454
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
455
- fs.writeFileSync(path.join(localTarget, 'hello.yaml'), 'site: test\nname: hello\n');
456
- try { fs.unlinkSync(linkPath); } catch {}
457
- try { fs.rmSync(linkPath, { recursive: true, force: true }); } catch {}
458
- fs.symlinkSync(localTarget, linkPath, 'dir');
459
-
460
- const lock = _readLockFile();
461
- lock['__test-list-plugin__'] = {
462
- source: { kind: 'local', path: localTarget },
463
- commitHash: 'local',
464
- installedAt: '2025-01-01T00:00:00.000Z',
465
- };
466
- _writeLockFile(lock);
467
-
468
- const plugins = listPlugins();
469
- const found = plugins.find(p => p.name === '__test-list-plugin__');
470
- expect(found?.source).toBe(`local:${localTarget}`);
471
-
472
- try { fs.unlinkSync(linkPath); } catch {}
473
- try { fs.rmSync(localTarget, { recursive: true, force: true }); } catch {}
474
- delete lock['__test-list-plugin__'];
475
- _writeLockFile(lock);
476
- });
477
- });
478
-
479
- describe('uninstallPlugin', () => {
480
- const testDir = path.join(PLUGINS_DIR, '__test-uninstall__');
481
-
482
- afterEach(() => {
483
- try { fs.rmSync(testDir, { recursive: true }); } catch {}
484
- });
485
-
486
- it('removes plugin directory', () => {
487
- fs.mkdirSync(testDir, { recursive: true });
488
- fs.writeFileSync(path.join(testDir, 'test.yaml'), 'site: test');
489
-
490
- uninstallPlugin('__test-uninstall__');
491
- expect(fs.existsSync(testDir)).toBe(false);
492
- });
493
-
494
- it('removes lock entry on uninstall', () => {
495
- fs.mkdirSync(testDir, { recursive: true });
496
- fs.writeFileSync(path.join(testDir, 'test.yaml'), 'site: test');
497
-
498
- const lock = _readLockFile();
499
- lock['__test-uninstall__'] = {
500
- source: { kind: 'git', url: 'https://github.com/user/repo.git' },
501
- commitHash: 'abc123',
502
- installedAt: '2025-01-01T00:00:00.000Z',
503
- };
504
- _writeLockFile(lock);
505
-
506
- uninstallPlugin('__test-uninstall__');
507
- expect(_readLockFile()['__test-uninstall__']).toBeUndefined();
508
- });
509
-
510
- it('throws for non-existent plugin', () => {
511
- expect(() => uninstallPlugin('__nonexistent__')).toThrow('not installed');
512
- });
513
- });
514
-
515
- describe('updatePlugin', () => {
516
- it('throws for non-existent plugin', () => {
517
- expect(() => updatePlugin('__nonexistent__')).toThrow('not installed');
518
- });
519
-
520
- it('refreshes local plugins without running git pull', () => {
521
- const localTarget = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-local-update-'));
522
- const linkPath = path.join(PLUGINS_DIR, '__test-local-update__');
523
-
524
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
525
- fs.writeFileSync(path.join(localTarget, 'hello.yaml'), 'site: test\nname: hello\n');
526
- fs.symlinkSync(localTarget, linkPath, 'dir');
527
-
528
- const lock = _readLockFile();
529
- lock['__test-local-update__'] = {
530
- source: { kind: 'local', path: localTarget },
531
- commitHash: 'local',
532
- installedAt: '2025-01-01T00:00:00.000Z',
533
- };
534
- _writeLockFile(lock);
535
-
536
- mockExecFileSync.mockClear();
537
- updatePlugin('__test-local-update__');
538
-
539
- expect(
540
- mockExecFileSync.mock.calls.some(
541
- ([cmd, args, opts]) => cmd === 'git'
542
- && Array.isArray(args)
543
- && args[0] === 'pull'
544
- && opts?.cwd === linkPath,
545
- ),
546
- ).toBe(false);
547
-
548
- const updated = _readLockFile()['__test-local-update__'];
549
- expect(updated?.source).toEqual({ kind: 'local', path: path.resolve(localTarget) });
550
- expect(updated?.updatedAt).toBeDefined();
551
-
552
- try { fs.unlinkSync(linkPath); } catch {}
553
- try { fs.rmSync(localTarget, { recursive: true, force: true }); } catch {}
554
- const finalLock = _readLockFile();
555
- delete finalLock['__test-local-update__'];
556
- _writeLockFile(finalLock);
557
- });
558
- });
559
-
560
- vi.mock('node:child_process', () => {
561
- return {
562
- execFileSync: mockExecFileSync.mockImplementation((_cmd, args, opts) => {
563
- if (Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
564
- if (opts?.cwd === os.tmpdir()) {
565
- throw new Error('not a git repository');
566
- }
567
- return '1234567890abcdef1234567890abcdef12345678\n';
568
- }
569
- if (opts && opts.cwd && String(opts.cwd).endsWith('plugin-b')) {
570
- throw new Error('Network error');
571
- }
572
- return '';
573
- }),
574
- execSync: mockExecSync.mockImplementation(() => ''),
575
- };
576
- });
577
-
578
- describe('installDependencies', () => {
579
- beforeEach(() => {
580
- mockExecFileSync.mockClear();
581
- mockExecSync.mockClear();
582
- });
583
-
584
- it('throws when npm install fails', () => {
585
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-plugin-b-'));
586
- const failingDir = path.join(tmpDir, 'plugin-b');
587
- fs.mkdirSync(failingDir, { recursive: true });
588
- fs.writeFileSync(path.join(failingDir, 'package.json'), JSON.stringify({ name: 'plugin-b' }));
589
-
590
- expect(() => _installDependencies(failingDir)).toThrow('npm install failed');
591
-
592
- fs.rmSync(tmpDir, { recursive: true, force: true });
593
- });
594
- });
595
-
596
- describe('postInstallMonorepoLifecycle', () => {
597
- let repoDir: string;
598
- let subDir: string;
599
-
600
- beforeEach(() => {
601
- mockExecFileSync.mockClear();
602
- mockExecSync.mockClear();
603
- repoDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-monorepo-'));
604
- subDir = path.join(repoDir, 'packages', 'alpha');
605
- fs.mkdirSync(subDir, { recursive: true });
606
- fs.writeFileSync(path.join(repoDir, 'package.json'), JSON.stringify({
607
- name: 'opencli-plugins',
608
- private: true,
609
- workspaces: ['packages/*'],
610
- }));
611
- fs.writeFileSync(path.join(subDir, 'hello.yaml'), 'site: test\nname: hello\n');
612
- });
613
-
614
- afterEach(() => {
615
- fs.rmSync(repoDir, { recursive: true, force: true });
616
- });
617
-
618
- it('installs dependencies once at the monorepo root, not in each sub-plugin', () => {
619
- _postInstallMonorepoLifecycle(repoDir, [subDir]);
620
-
621
- const npmCalls = mockExecFileSync.mock.calls.filter(
622
- ([cmd, args]) => cmd === 'npm' && Array.isArray(args) && args[0] === 'install',
623
- );
624
-
625
- expect(npmCalls).toHaveLength(1);
626
- expect(npmCalls[0][2]).toMatchObject({ cwd: repoDir });
627
- expect(npmCalls.some(([, , opts]) => opts?.cwd === subDir)).toBe(false);
628
- });
629
- });
630
-
631
- describe('updateAllPlugins', () => {
632
- const testDirA = path.join(PLUGINS_DIR, 'plugin-a');
633
- const testDirB = path.join(PLUGINS_DIR, 'plugin-b');
634
- const testDirC = path.join(PLUGINS_DIR, 'plugin-c');
635
-
636
- beforeEach(() => {
637
- fs.mkdirSync(testDirA, { recursive: true });
638
- fs.mkdirSync(testDirB, { recursive: true });
639
- fs.mkdirSync(testDirC, { recursive: true });
640
- fs.writeFileSync(path.join(testDirA, 'cmd.yaml'), 'site: a');
641
- fs.writeFileSync(path.join(testDirB, 'cmd.yaml'), 'site: b');
642
- fs.writeFileSync(path.join(testDirC, 'cmd.yaml'), 'site: c');
643
-
644
- const lock = _readLockFile();
645
- lock['plugin-a'] = {
646
- source: { kind: 'git', url: 'https://github.com/user/plugin-a.git' },
647
- commitHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
648
- installedAt: '2025-01-01T00:00:00.000Z',
649
- };
650
- lock['plugin-b'] = {
651
- source: { kind: 'git', url: 'https://github.com/user/plugin-b.git' },
652
- commitHash: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
653
- installedAt: '2025-01-01T00:00:00.000Z',
654
- };
655
- lock['plugin-c'] = {
656
- source: { kind: 'git', url: 'https://github.com/user/plugin-c.git' },
657
- commitHash: 'cccccccccccccccccccccccccccccccccccccccc',
658
- installedAt: '2025-01-01T00:00:00.000Z',
659
- };
660
- _writeLockFile(lock);
661
- });
662
-
663
- afterEach(() => {
664
- try { fs.rmSync(testDirA, { recursive: true }); } catch {}
665
- try { fs.rmSync(testDirB, { recursive: true }); } catch {}
666
- try { fs.rmSync(testDirC, { recursive: true }); } catch {}
667
- const lock = _readLockFile();
668
- delete lock['plugin-a'];
669
- delete lock['plugin-b'];
670
- delete lock['plugin-c'];
671
- _writeLockFile(lock);
672
- vi.clearAllMocks();
673
- });
674
-
675
- it('collects successes and failures without throwing', () => {
676
- mockExecFileSync.mockImplementation((cmd, args) => {
677
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
678
- const cloneUrl = String(args[3]);
679
- const cloneDir = String(args[4]);
680
- fs.mkdirSync(cloneDir, { recursive: true });
681
- fs.writeFileSync(path.join(cloneDir, 'cmd.yaml'), 'site: test\nname: hello\n');
682
- if (cloneUrl.includes('plugin-b')) {
683
- fs.writeFileSync(path.join(cloneDir, 'package.json'), JSON.stringify({ name: 'plugin-b' }));
684
- }
685
- return '';
686
- }
687
- if (cmd === 'npm' && Array.isArray(args) && args[0] === 'install') {
688
- throw new Error('Network error');
689
- }
690
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
691
- return '1234567890abcdef1234567890abcdef12345678\n';
692
- }
693
- return '';
694
- });
695
-
696
- const results = _updateAllPlugins();
697
-
698
- const resA = results.find(r => r.name === 'plugin-a');
699
- const resB = results.find(r => r.name === 'plugin-b');
700
- const resC = results.find(r => r.name === 'plugin-c');
701
-
702
- expect(resA).toBeDefined();
703
- expect(resA!.success).toBe(true);
704
-
705
- expect(resB).toBeDefined();
706
- expect(resB!.success).toBe(false);
707
- expect(resB!.error).toContain('Network error');
708
-
709
- expect(resC).toBeDefined();
710
- expect(resC!.success).toBe(true);
711
- });
712
- });
713
-
714
- // ── Monorepo-specific tests ─────────────────────────────────────────────────
715
-
716
- describe('parseSource with monorepo subplugin', () => {
717
- it('parses github:user/repo/subplugin format', () => {
718
- const result = _parseSource('github:ByteYue/opencli-plugins/polymarket');
719
- expect(result).toEqual({
720
- type: 'git',
721
- cloneUrl: 'https://github.com/ByteYue/opencli-plugins.git',
722
- name: 'opencli-plugins',
723
- subPlugin: 'polymarket',
724
- });
725
- });
726
-
727
- it('strips opencli-plugin- prefix from repo name in subplugin format', () => {
728
- const result = _parseSource('github:user/opencli-plugin-collection/defi');
729
- expect(result!.name).toBe('collection');
730
- expect(result!.subPlugin).toBe('defi');
731
- });
732
-
733
- it('still parses github:user/repo without subplugin', () => {
734
- const result = _parseSource('github:user/my-repo');
735
- expect(result).toEqual({
736
- type: 'git',
737
- cloneUrl: 'https://github.com/user/my-repo.git',
738
- name: 'my-repo',
739
- });
740
- expect(result!.subPlugin).toBeUndefined();
741
- });
742
- });
743
-
744
- describe('isSymlinkSync', () => {
745
- let tmpDir: string;
746
-
747
- beforeEach(() => {
748
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-symlink-test-'));
749
- });
750
-
751
- afterEach(() => {
752
- fs.rmSync(tmpDir, { recursive: true, force: true });
753
- });
754
-
755
- it('returns false for a regular directory', () => {
756
- const dir = path.join(tmpDir, 'regular');
757
- fs.mkdirSync(dir);
758
- expect(_isSymlinkSync(dir)).toBe(false);
759
- });
760
-
761
- it('returns true for a symlink', () => {
762
- const target = path.join(tmpDir, 'target');
763
- const link = path.join(tmpDir, 'link');
764
- fs.mkdirSync(target);
765
- fs.symlinkSync(target, link, 'dir');
766
- expect(_isSymlinkSync(link)).toBe(true);
767
- });
768
-
769
- it('returns false for non-existent path', () => {
770
- expect(_isSymlinkSync(path.join(tmpDir, 'nope'))).toBe(false);
771
- });
772
- });
773
-
774
- describe('monorepo uninstall with symlink', () => {
775
- let tmpDir: string;
776
- let pluginDir: string;
777
- let monoDir: string;
778
-
779
- beforeEach(() => {
780
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-mono-uninstall-'));
781
- pluginDir = path.join(PLUGINS_DIR, '__test-mono-sub__');
782
- monoDir = path.join(_getMonoreposDir(), '__test-mono__');
783
-
784
- const subDir = path.join(monoDir, 'packages', 'sub');
785
- fs.mkdirSync(subDir, { recursive: true });
786
- fs.writeFileSync(path.join(subDir, 'cmd.yaml'), 'site: test');
787
-
788
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
789
- fs.symlinkSync(subDir, pluginDir, 'dir');
790
-
791
- const lock = _readLockFile();
792
- lock['__test-mono-sub__'] = {
793
- source: {
794
- kind: 'monorepo',
795
- url: 'https://github.com/user/test.git',
796
- repoName: '__test-mono__',
797
- subPath: 'packages/sub',
798
- },
799
- commitHash: 'abc123',
800
- installedAt: '2025-01-01T00:00:00.000Z',
801
- };
802
- _writeLockFile(lock);
803
- });
804
-
805
- afterEach(() => {
806
- try { fs.unlinkSync(pluginDir); } catch {}
807
- try { fs.rmSync(pluginDir, { recursive: true, force: true }); } catch {}
808
- try { fs.rmSync(monoDir, { recursive: true, force: true }); } catch {}
809
- const lock = _readLockFile();
810
- delete lock['__test-mono-sub__'];
811
- _writeLockFile(lock);
812
- });
813
-
814
- it('removes symlink but keeps monorepo if other sub-plugins reference it', () => {
815
- const lock = _readLockFile();
816
- lock['__test-mono-other__'] = {
817
- source: {
818
- kind: 'monorepo',
819
- url: 'https://github.com/user/test.git',
820
- repoName: '__test-mono__',
821
- subPath: 'packages/other',
822
- },
823
- commitHash: 'abc123',
824
- installedAt: '2025-01-01T00:00:00.000Z',
825
- };
826
- _writeLockFile(lock);
827
-
828
- uninstallPlugin('__test-mono-sub__');
829
-
830
- expect(fs.existsSync(pluginDir)).toBe(false);
831
- expect(fs.existsSync(monoDir)).toBe(true);
832
- expect(_readLockFile()['__test-mono-sub__']).toBeUndefined();
833
- expect(_readLockFile()['__test-mono-other__']).toBeDefined();
834
-
835
- const finalLock = _readLockFile();
836
- delete finalLock['__test-mono-other__'];
837
- _writeLockFile(finalLock);
838
- });
839
-
840
- it('removes symlink AND monorepo dir when last sub-plugin is uninstalled', () => {
841
- uninstallPlugin('__test-mono-sub__');
842
-
843
- expect(fs.existsSync(pluginDir)).toBe(false);
844
- expect(fs.existsSync(monoDir)).toBe(false);
845
- expect(_readLockFile()['__test-mono-sub__']).toBeUndefined();
846
- });
847
- });
848
-
849
- describe('listPlugins with monorepo metadata', () => {
850
- const testSymlinkTarget = path.join(os.tmpdir(), 'opencli-list-mono-target');
851
- const testLink = path.join(PLUGINS_DIR, '__test-mono-list__');
852
-
853
- beforeEach(() => {
854
- fs.mkdirSync(testSymlinkTarget, { recursive: true });
855
- fs.writeFileSync(path.join(testSymlinkTarget, 'hello.yaml'), 'site: test\nname: hello\n');
856
-
857
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
858
- try { fs.unlinkSync(testLink); } catch {}
859
- fs.symlinkSync(testSymlinkTarget, testLink, 'dir');
860
-
861
- const lock = _readLockFile();
862
- lock['__test-mono-list__'] = {
863
- source: {
864
- kind: 'monorepo',
865
- url: 'https://github.com/user/test-mono.git',
866
- repoName: 'test-mono',
867
- subPath: 'packages/list',
868
- },
869
- commitHash: 'def456def456def456def456def456def456def4',
870
- installedAt: '2025-01-01T00:00:00.000Z',
871
- };
872
- _writeLockFile(lock);
873
- });
874
-
875
- afterEach(() => {
876
- try { fs.unlinkSync(testLink); } catch {}
877
- try { fs.rmSync(testSymlinkTarget, { recursive: true, force: true }); } catch {}
878
- const lock = _readLockFile();
879
- delete lock['__test-mono-list__'];
880
- _writeLockFile(lock);
881
- });
882
-
883
- it('lists symlinked plugins with monorepoName', () => {
884
- const plugins = listPlugins();
885
- const found = plugins.find(p => p.name === '__test-mono-list__');
886
- expect(found).toBeDefined();
887
- expect(found!.monorepoName).toBe('test-mono');
888
- expect(found!.commands).toContain('hello');
889
- expect(found!.source).toBe('https://github.com/user/test-mono.git');
890
- });
891
- });
892
-
893
- describe('installLocalPlugin', () => {
894
- let tmpDir: string;
895
- const pluginName = '__test-local-plugin__';
896
-
897
- beforeEach(() => {
898
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencli-local-install-'));
899
- fs.writeFileSync(path.join(tmpDir, 'hello.yaml'), 'site: test\nname: hello\n');
900
- });
901
-
902
- afterEach(() => {
903
- const linkPath = path.join(PLUGINS_DIR, pluginName);
904
- try { fs.unlinkSync(linkPath); } catch {}
905
- try { fs.rmSync(tmpDir, { recursive: true, force: true }); } catch {}
906
- const lock = _readLockFile();
907
- delete lock[pluginName];
908
- _writeLockFile(lock);
909
- });
910
-
911
- it('creates a symlink to the local directory', () => {
912
- const result = _installLocalPlugin(tmpDir, pluginName);
913
- expect(result).toBe(pluginName);
914
- const linkPath = path.join(PLUGINS_DIR, pluginName);
915
- expect(fs.existsSync(linkPath)).toBe(true);
916
- expect(_isSymlinkSync(linkPath)).toBe(true);
917
- });
918
-
919
- it('records local: source in lockfile', () => {
920
- _installLocalPlugin(tmpDir, pluginName);
921
- const lock = _readLockFile();
922
- expect(lock[pluginName]).toBeDefined();
923
- expect(lock[pluginName].source).toEqual({ kind: 'local', path: path.resolve(tmpDir) });
924
- });
925
-
926
- it('lists the recorded local source', () => {
927
- _installLocalPlugin(tmpDir, pluginName);
928
- const plugins = listPlugins();
929
- const found = plugins.find(p => p.name === pluginName);
930
- expect(found).toBeDefined();
931
- expect(found!.source).toBe(`local:${path.resolve(tmpDir)}`);
932
- });
933
-
934
- it('throws for non-existent path', () => {
935
- expect(() => _installLocalPlugin('/does/not/exist', 'x')).toThrow('does not exist');
936
- });
937
- });
938
-
939
- describe('isLocalPluginSource', () => {
940
- it('detects lockfile local sources', () => {
941
- expect(_isLocalPluginSource('local:/tmp/plugin')).toBe(true);
942
- expect(_isLocalPluginSource('https://github.com/user/repo.git')).toBe(false);
943
- expect(_isLocalPluginSource(undefined)).toBe(false);
944
- });
945
- });
946
-
947
- describe('plugin source helpers', () => {
948
- it('formats local plugin sources consistently', () => {
949
- const dir = path.join(os.tmpdir(), 'opencli-plugin-source');
950
- expect(_toLocalPluginSource(dir)).toBe(`local:${path.resolve(dir)}`);
951
- });
952
-
953
- it('serializes structured local sources consistently', () => {
954
- const dir = path.join(os.tmpdir(), 'opencli-plugin-source');
955
- expect(_toStoredPluginSource({ kind: 'local', path: dir })).toBe(`local:${path.resolve(dir)}`);
956
- });
957
-
958
- it('prefers lockfile source over git remote lookup', () => {
959
- const dir = path.join(os.tmpdir(), 'opencli-plugin-source');
960
- const localPath = path.resolve(path.join(os.tmpdir(), 'opencli-plugin-source-local'));
961
- const source = _resolveStoredPluginSource({
962
- source: { kind: 'local', path: localPath },
963
- commitHash: 'local',
964
- installedAt: '2025-01-01T00:00:00.000Z',
965
- }, dir);
966
- expect(source).toBe(`local:${localPath}`);
967
- });
968
-
969
- it('returns structured monorepo sources unchanged', () => {
970
- const dir = path.join(os.tmpdir(), 'opencli-plugin-source');
971
- const source = _resolvePluginSource({
972
- source: {
973
- kind: 'monorepo',
974
- url: 'https://github.com/user/opencli-plugins.git',
975
- repoName: 'opencli-plugins',
976
- subPath: 'packages/alpha',
977
- },
978
- commitHash: 'abcdef1234567890abcdef1234567890abcdef12',
979
- installedAt: '2025-01-01T00:00:00.000Z',
980
- }, dir);
981
- expect(source).toEqual({
982
- kind: 'monorepo',
983
- url: 'https://github.com/user/opencli-plugins.git',
984
- repoName: 'opencli-plugins',
985
- subPath: 'packages/alpha',
986
- });
987
- });
988
- });
989
-
990
- describe('moveDir', () => {
991
- it('cleans up destination when EXDEV fallback copy fails', () => {
992
- const src = path.join(os.tmpdir(), 'opencli-move-src');
993
- const dest = path.join(os.tmpdir(), 'opencli-move-dest');
994
- const renameErr = Object.assign(new Error('cross-device link not permitted'), { code: 'EXDEV' });
995
- const copyErr = new Error('copy failed');
996
- const renameSync = vi.fn(() => { throw renameErr; });
997
- const cpSync = vi.fn(() => { throw copyErr; });
998
- const rmSync = vi.fn(() => undefined);
999
-
1000
- expect(() => _moveDir(src, dest, { renameSync, cpSync, rmSync })).toThrow(copyErr);
1001
- expect(renameSync).toHaveBeenCalledWith(src, dest);
1002
- expect(cpSync).toHaveBeenCalledWith(src, dest, { recursive: true });
1003
- expect(rmSync).toHaveBeenCalledWith(dest, { recursive: true, force: true });
1004
- });
1005
- });
1006
-
1007
- describe('promoteDir', () => {
1008
- it('cleans up temporary publish dir when final rename fails', () => {
1009
- const staging = path.join(os.tmpdir(), 'opencli-promote-stage');
1010
- const dest = path.join(os.tmpdir(), 'opencli-promote-dest');
1011
- const publishErr = new Error('publish failed');
1012
- const existsSync = vi.fn(() => false);
1013
- const mkdirSync = vi.fn(() => undefined);
1014
- const cpSync = vi.fn(() => undefined);
1015
- const rmSync = vi.fn(() => undefined);
1016
- const renameSync = vi.fn((src, _target) => {
1017
- if (String(src) === staging) return;
1018
- throw publishErr;
1019
- });
1020
-
1021
- expect(() => _promoteDir(staging, dest, { existsSync, mkdirSync, renameSync, cpSync, rmSync })).toThrow(publishErr);
1022
-
1023
- const tempDest = renameSync.mock.calls[0][1];
1024
- expect(renameSync).toHaveBeenNthCalledWith(1, staging, tempDest);
1025
- expect(renameSync).toHaveBeenNthCalledWith(2, tempDest, dest);
1026
- expect(rmSync).toHaveBeenCalledWith(tempDest, { recursive: true, force: true });
1027
- });
1028
- });
1029
-
1030
- describe('replaceDir', () => {
1031
- it('rolls back the original destination when swap fails', () => {
1032
- const staging = path.join(os.tmpdir(), 'opencli-replace-stage');
1033
- const dest = path.join(os.tmpdir(), 'opencli-replace-dest');
1034
- const publishErr = new Error('swap failed');
1035
- const existingPaths = new Set([dest]);
1036
- const existsSync = vi.fn((p) => existingPaths.has(String(p)));
1037
- const mkdirSync = vi.fn(() => undefined);
1038
- const cpSync = vi.fn(() => undefined);
1039
- const rmSync = vi.fn(() => undefined);
1040
- const renameSync = vi.fn((src, target) => {
1041
- if (String(src) === staging) {
1042
- existingPaths.add(String(target));
1043
- return;
1044
- }
1045
- if (String(src) === dest) {
1046
- existingPaths.delete(dest);
1047
- existingPaths.add(String(target));
1048
- return;
1049
- }
1050
- if (String(target) === dest) throw publishErr;
1051
- if (existingPaths.has(String(src))) {
1052
- existingPaths.delete(String(src));
1053
- existingPaths.add(String(target));
1054
- }
1055
- });
1056
-
1057
- expect(() => _replaceDir(staging, dest, { existsSync, mkdirSync, renameSync, cpSync, rmSync })).toThrow(publishErr);
1058
-
1059
- const tempDest = renameSync.mock.calls[0][1];
1060
- const backupDest = renameSync.mock.calls[1][1];
1061
- expect(renameSync).toHaveBeenNthCalledWith(1, staging, tempDest);
1062
- expect(renameSync).toHaveBeenNthCalledWith(2, dest, backupDest);
1063
- expect(renameSync).toHaveBeenNthCalledWith(3, tempDest, dest);
1064
- expect(renameSync).toHaveBeenNthCalledWith(4, backupDest, dest);
1065
- expect(rmSync).toHaveBeenCalledWith(tempDest, { recursive: true, force: true });
1066
- });
1067
- });
1068
-
1069
- describe('installPlugin transactional staging', () => {
1070
- const standaloneSource = 'github:user/opencli-plugin-__test-transactional-standalone__';
1071
- const standaloneName = '__test-transactional-standalone__';
1072
- const standaloneDir = path.join(PLUGINS_DIR, standaloneName);
1073
- const monorepoSource = 'github:user/opencli-plugins-__test-transactional__';
1074
- const monorepoRepoDir = path.join(_getMonoreposDir(), 'opencli-plugins-__test-transactional__');
1075
- const monorepoLink = path.join(PLUGINS_DIR, 'alpha');
1076
-
1077
- beforeEach(() => {
1078
- mockExecFileSync.mockClear();
1079
- mockExecSync.mockClear();
1080
- });
1081
-
1082
- afterEach(() => {
1083
- try { fs.unlinkSync(monorepoLink); } catch {}
1084
- try { fs.rmSync(monorepoLink, { recursive: true, force: true }); } catch {}
1085
- try { fs.rmSync(monorepoRepoDir, { recursive: true, force: true }); } catch {}
1086
- try { fs.rmSync(standaloneDir, { recursive: true, force: true }); } catch {}
1087
- const lock = _readLockFile();
1088
- delete lock[standaloneName];
1089
- delete lock.alpha;
1090
- _writeLockFile(lock);
1091
- vi.clearAllMocks();
1092
- });
1093
-
1094
- it('does not expose the final standalone plugin dir when lifecycle fails in staging', () => {
1095
- mockExecFileSync.mockImplementation((cmd, args) => {
1096
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1097
- const cloneDir = String(args[args.length - 1]);
1098
- fs.mkdirSync(cloneDir, { recursive: true });
1099
- fs.writeFileSync(path.join(cloneDir, 'hello.yaml'), 'site: test\nname: hello\n');
1100
- fs.writeFileSync(path.join(cloneDir, 'package.json'), JSON.stringify({ name: standaloneName }));
1101
- return '';
1102
- }
1103
- if (cmd === 'npm' && Array.isArray(args) && args[0] === 'install') {
1104
- throw new Error('boom');
1105
- }
1106
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1107
- return '1234567890abcdef1234567890abcdef12345678\n';
1108
- }
1109
- return '';
1110
- });
1111
-
1112
- expect(() => installPlugin(standaloneSource)).toThrow(`npm install failed`);
1113
- expect(fs.existsSync(standaloneDir)).toBe(false);
1114
- expect(_readLockFile()[standaloneName]).toBeUndefined();
1115
- });
1116
-
1117
- it('does not expose monorepo links or repo dir when lifecycle fails in staging', () => {
1118
- mockExecFileSync.mockImplementation((cmd, args) => {
1119
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1120
- const cloneDir = String(args[args.length - 1]);
1121
- const alphaDir = path.join(cloneDir, 'packages', 'alpha');
1122
- fs.mkdirSync(alphaDir, { recursive: true });
1123
- fs.writeFileSync(path.join(cloneDir, 'package.json'), JSON.stringify({
1124
- name: 'opencli-plugins-__test-transactional__',
1125
- private: true,
1126
- }));
1127
- fs.writeFileSync(path.join(cloneDir, 'opencli-plugin.json'), JSON.stringify({
1128
- plugins: {
1129
- alpha: { path: 'packages/alpha' },
1130
- },
1131
- }));
1132
- fs.writeFileSync(path.join(alphaDir, 'hello.yaml'), 'site: test\nname: hello\n');
1133
- return '';
1134
- }
1135
- if (cmd === 'npm' && Array.isArray(args) && args[0] === 'install') {
1136
- throw new Error('boom');
1137
- }
1138
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1139
- return '1234567890abcdef1234567890abcdef12345678\n';
1140
- }
1141
- return '';
1142
- });
1143
-
1144
- expect(() => installPlugin(monorepoSource)).toThrow(`npm install failed`);
1145
- expect(fs.existsSync(monorepoRepoDir)).toBe(false);
1146
- expect(fs.existsSync(monorepoLink)).toBe(false);
1147
- expect(_readLockFile().alpha).toBeUndefined();
1148
- });
1149
- });
1150
-
1151
- describe('installPlugin with existing monorepo', () => {
1152
- const repoName = '__test-existing-monorepo__';
1153
- const repoDir = path.join(_getMonoreposDir(), repoName);
1154
- const pluginName = 'beta';
1155
- const pluginLink = path.join(PLUGINS_DIR, pluginName);
1156
-
1157
- beforeEach(() => {
1158
- mockExecFileSync.mockClear();
1159
- mockExecSync.mockClear();
1160
- });
1161
-
1162
- afterEach(() => {
1163
- try { fs.unlinkSync(pluginLink); } catch {}
1164
- try { fs.rmSync(pluginLink, { recursive: true, force: true }); } catch {}
1165
- try { fs.rmSync(repoDir, { recursive: true, force: true }); } catch {}
1166
- const lock = _readLockFile();
1167
- delete lock[pluginName];
1168
- _writeLockFile(lock);
1169
- vi.clearAllMocks();
1170
- });
1171
-
1172
- it('reinstalls root dependencies when adding a sub-plugin from an existing monorepo', () => {
1173
- const subDir = path.join(repoDir, 'packages', pluginName);
1174
- fs.mkdirSync(subDir, { recursive: true });
1175
- fs.writeFileSync(path.join(repoDir, 'package.json'), JSON.stringify({
1176
- name: repoName,
1177
- private: true,
1178
- workspaces: ['packages/*'],
1179
- }));
1180
- fs.writeFileSync(path.join(repoDir, 'opencli-plugin.json'), JSON.stringify({
1181
- plugins: {
1182
- [pluginName]: { path: `packages/${pluginName}` },
1183
- },
1184
- }));
1185
- fs.writeFileSync(path.join(subDir, 'hello.yaml'), 'site: test\nname: hello\n');
1186
-
1187
- mockExecFileSync.mockImplementation((cmd, args) => {
1188
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1189
- const cloneDir = String(args[4]);
1190
- fs.mkdirSync(cloneDir, { recursive: true });
1191
- fs.writeFileSync(path.join(cloneDir, 'opencli-plugin.json'), JSON.stringify({
1192
- plugins: {
1193
- [pluginName]: { path: `packages/${pluginName}` },
1194
- },
1195
- }));
1196
- return '';
1197
- }
1198
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1199
- return '1234567890abcdef1234567890abcdef12345678\n';
1200
- }
1201
- return '';
1202
- });
1203
-
1204
- installPlugin(`github:user/${repoName}/${pluginName}`);
1205
-
1206
- const npmCalls = mockExecFileSync.mock.calls.filter(
1207
- ([cmd, args]) => cmd === 'npm' && Array.isArray(args) && args[0] === 'install',
1208
- );
1209
- expect(npmCalls.some(([, , opts]) => opts?.cwd === repoDir)).toBe(true);
1210
- expect(fs.realpathSync(pluginLink)).toBe(fs.realpathSync(subDir));
1211
- });
1212
- });
1213
-
1214
- describe('updatePlugin transactional staging', () => {
1215
- const standaloneName = '__test-transactional-update__';
1216
- const standaloneDir = path.join(PLUGINS_DIR, standaloneName);
1217
- const monorepoName = '__test-transactional-mono-update__';
1218
- const monorepoRepoDir = path.join(_getMonoreposDir(), monorepoName);
1219
- const monorepoPluginName = 'alpha-update';
1220
- const monorepoLink = path.join(PLUGINS_DIR, monorepoPluginName);
1221
-
1222
- beforeEach(() => {
1223
- mockExecFileSync.mockClear();
1224
- mockExecSync.mockClear();
1225
- });
1226
-
1227
- afterEach(() => {
1228
- try { fs.unlinkSync(monorepoLink); } catch {}
1229
- try { fs.rmSync(monorepoLink, { recursive: true, force: true }); } catch {}
1230
- try { fs.rmSync(monorepoRepoDir, { recursive: true, force: true }); } catch {}
1231
- try { fs.rmSync(standaloneDir, { recursive: true, force: true }); } catch {}
1232
- const lock = _readLockFile();
1233
- delete lock[standaloneName];
1234
- delete lock[monorepoPluginName];
1235
- _writeLockFile(lock);
1236
- vi.clearAllMocks();
1237
- });
1238
-
1239
- it('keeps the existing standalone plugin when staged update preparation fails', () => {
1240
- fs.mkdirSync(standaloneDir, { recursive: true });
1241
- fs.writeFileSync(path.join(standaloneDir, 'old.yaml'), 'site: old\nname: old\n');
1242
-
1243
- const lock = _readLockFile();
1244
- lock[standaloneName] = {
1245
- source: {
1246
- kind: 'git',
1247
- url: 'https://github.com/user/opencli-plugin-__test-transactional-update__.git',
1248
- },
1249
- commitHash: 'oldhasholdhasholdhasholdhasholdhasholdh',
1250
- installedAt: '2025-01-01T00:00:00.000Z',
1251
- };
1252
- _writeLockFile(lock);
1253
-
1254
- mockExecFileSync.mockImplementation((cmd, args) => {
1255
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1256
- const cloneDir = String(args[4]);
1257
- fs.mkdirSync(cloneDir, { recursive: true });
1258
- fs.writeFileSync(path.join(cloneDir, 'hello.yaml'), 'site: test\nname: hello\n');
1259
- fs.writeFileSync(path.join(cloneDir, 'package.json'), JSON.stringify({ name: standaloneName }));
1260
- return '';
1261
- }
1262
- if (cmd === 'npm' && Array.isArray(args) && args[0] === 'install') {
1263
- throw new Error('boom');
1264
- }
1265
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1266
- return '1234567890abcdef1234567890abcdef12345678\n';
1267
- }
1268
- return '';
1269
- });
1270
-
1271
- expect(() => updatePlugin(standaloneName)).toThrow('npm install failed');
1272
- expect(fs.existsSync(standaloneDir)).toBe(true);
1273
- expect(fs.readFileSync(path.join(standaloneDir, 'old.yaml'), 'utf-8')).toContain('site: old');
1274
- expect(_readLockFile()[standaloneName]?.commitHash).toBe('oldhasholdhasholdhasholdhasholdhasholdh');
1275
- });
1276
-
1277
- it('keeps the existing monorepo repo and link when staged update preparation fails', () => {
1278
- const subDir = path.join(monorepoRepoDir, 'packages', monorepoPluginName);
1279
- fs.mkdirSync(subDir, { recursive: true });
1280
- fs.writeFileSync(path.join(subDir, 'old.yaml'), 'site: old\nname: old\n');
1281
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
1282
- fs.symlinkSync(subDir, monorepoLink, 'dir');
1283
-
1284
- const lock = _readLockFile();
1285
- lock[monorepoPluginName] = {
1286
- source: {
1287
- kind: 'monorepo',
1288
- url: 'https://github.com/user/opencli-plugins-__test-transactional-mono-update__.git',
1289
- repoName: monorepoName,
1290
- subPath: `packages/${monorepoPluginName}`,
1291
- },
1292
- commitHash: 'oldmonooldmonooldmonooldmonooldmonoold',
1293
- installedAt: '2025-01-01T00:00:00.000Z',
1294
- };
1295
- _writeLockFile(lock);
1296
-
1297
- mockExecFileSync.mockImplementation((cmd, args) => {
1298
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1299
- const cloneDir = String(args[4]);
1300
- const alphaDir = path.join(cloneDir, 'packages', monorepoPluginName);
1301
- fs.mkdirSync(alphaDir, { recursive: true });
1302
- fs.writeFileSync(path.join(cloneDir, 'package.json'), JSON.stringify({
1303
- name: 'opencli-plugins-__test-transactional-mono-update__',
1304
- private: true,
1305
- }));
1306
- fs.writeFileSync(path.join(cloneDir, 'opencli-plugin.json'), JSON.stringify({
1307
- plugins: {
1308
- [monorepoPluginName]: { path: `packages/${monorepoPluginName}` },
1309
- },
1310
- }));
1311
- fs.writeFileSync(path.join(alphaDir, 'hello.yaml'), 'site: test\nname: hello\n');
1312
- return '';
1313
- }
1314
- if (cmd === 'npm' && Array.isArray(args) && args[0] === 'install') {
1315
- throw new Error('boom');
1316
- }
1317
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1318
- return '1234567890abcdef1234567890abcdef12345678\n';
1319
- }
1320
- return '';
1321
- });
1322
-
1323
- expect(() => updatePlugin(monorepoPluginName)).toThrow('npm install failed');
1324
- expect(fs.existsSync(monorepoRepoDir)).toBe(true);
1325
- expect(fs.existsSync(monorepoLink)).toBe(true);
1326
- expect(fs.readFileSync(path.join(subDir, 'old.yaml'), 'utf-8')).toContain('site: old');
1327
- expect(_readLockFile()[monorepoPluginName]?.commitHash).toBe('oldmonooldmonooldmonooldmonooldmonoold');
1328
- });
1329
-
1330
- it('relinks monorepo plugins when the updated manifest moves their subPath', () => {
1331
- const oldSubDir = path.join(monorepoRepoDir, 'packages', 'old-alpha');
1332
- fs.mkdirSync(oldSubDir, { recursive: true });
1333
- fs.writeFileSync(path.join(oldSubDir, 'old.yaml'), 'site: old\nname: old\n');
1334
- fs.mkdirSync(PLUGINS_DIR, { recursive: true });
1335
- fs.symlinkSync(oldSubDir, monorepoLink, 'dir');
1336
-
1337
- const lock = _readLockFile();
1338
- lock[monorepoPluginName] = {
1339
- source: {
1340
- kind: 'monorepo',
1341
- url: 'https://github.com/user/opencli-plugins-__test-transactional-mono-update__.git',
1342
- repoName: monorepoName,
1343
- subPath: 'packages/old-alpha',
1344
- },
1345
- commitHash: 'oldmonooldmonooldmonooldmonooldmonoold',
1346
- installedAt: '2025-01-01T00:00:00.000Z',
1347
- };
1348
- _writeLockFile(lock);
1349
-
1350
- mockExecFileSync.mockImplementation((cmd, args) => {
1351
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1352
- const cloneDir = String(args[4]);
1353
- const movedDir = path.join(cloneDir, 'packages', 'moved-alpha');
1354
- fs.mkdirSync(movedDir, { recursive: true });
1355
- fs.writeFileSync(path.join(cloneDir, 'opencli-plugin.json'), JSON.stringify({
1356
- plugins: {
1357
- [monorepoPluginName]: { path: 'packages/moved-alpha' },
1358
- },
1359
- }));
1360
- fs.writeFileSync(path.join(movedDir, 'hello.yaml'), 'site: test\nname: hello\n');
1361
- return '';
1362
- }
1363
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1364
- return '1234567890abcdef1234567890abcdef12345678\n';
1365
- }
1366
- return '';
1367
- });
1368
-
1369
- updatePlugin(monorepoPluginName);
1370
-
1371
- const expectedTarget = path.join(monorepoRepoDir, 'packages', 'moved-alpha');
1372
- expect(fs.realpathSync(monorepoLink)).toBe(fs.realpathSync(expectedTarget));
1373
- expect(_readLockFile()[monorepoPluginName]?.source).toMatchObject({
1374
- kind: 'monorepo',
1375
- subPath: 'packages/moved-alpha',
1376
- });
1377
- });
1378
-
1379
- it('rolls back the monorepo repo swap when relinking fails', () => {
1380
- const oldSubDir = path.join(monorepoRepoDir, 'packages', 'old-alpha');
1381
- fs.mkdirSync(oldSubDir, { recursive: true });
1382
- fs.writeFileSync(path.join(oldSubDir, 'old.yaml'), 'site: old\nname: old\n');
1383
- fs.mkdirSync(monorepoLink, { recursive: true });
1384
- fs.writeFileSync(path.join(monorepoLink, 'blocker.txt'), 'not a symlink');
1385
-
1386
- const lock = _readLockFile();
1387
- lock[monorepoPluginName] = {
1388
- source: {
1389
- kind: 'monorepo',
1390
- url: 'https://github.com/user/opencli-plugins-__test-transactional-mono-update__.git',
1391
- repoName: monorepoName,
1392
- subPath: 'packages/old-alpha',
1393
- },
1394
- commitHash: 'oldmonooldmonooldmonooldmonooldmonoold',
1395
- installedAt: '2025-01-01T00:00:00.000Z',
1396
- };
1397
- _writeLockFile(lock);
1398
-
1399
- mockExecFileSync.mockImplementation((cmd, args) => {
1400
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'clone') {
1401
- const cloneDir = String(args[4]);
1402
- const movedDir = path.join(cloneDir, 'packages', 'moved-alpha');
1403
- fs.mkdirSync(movedDir, { recursive: true });
1404
- fs.writeFileSync(path.join(cloneDir, 'opencli-plugin.json'), JSON.stringify({
1405
- plugins: {
1406
- [monorepoPluginName]: { path: 'packages/moved-alpha' },
1407
- },
1408
- }));
1409
- fs.writeFileSync(path.join(movedDir, 'hello.yaml'), 'site: test\nname: hello\n');
1410
- return '';
1411
- }
1412
- if (cmd === 'git' && Array.isArray(args) && args[0] === 'rev-parse' && args[1] === 'HEAD') {
1413
- return '1234567890abcdef1234567890abcdef12345678\n';
1414
- }
1415
- return '';
1416
- });
1417
-
1418
- expect(() => updatePlugin(monorepoPluginName)).toThrow('to be a symlink');
1419
- expect(fs.existsSync(path.join(monorepoRepoDir, 'packages', 'old-alpha', 'old.yaml'))).toBe(true);
1420
- expect(fs.existsSync(path.join(monorepoRepoDir, 'packages', 'moved-alpha'))).toBe(false);
1421
- expect(fs.readFileSync(path.join(monorepoLink, 'blocker.txt'), 'utf-8')).toBe('not a symlink');
1422
- expect(_readLockFile()[monorepoPluginName]?.source).toMatchObject({
1423
- kind: 'monorepo',
1424
- subPath: 'packages/old-alpha',
1425
- });
1426
- });
1427
- });