@jackwener/opencli 1.6.4 → 1.6.6

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 (617) hide show
  1. package/dist/clis/1688/item.js +3 -3
  2. package/dist/clis/1688/search.js +2 -2
  3. package/dist/clis/1688/shared.d.ts +1 -1
  4. package/dist/clis/1688/shared.js +1 -1
  5. package/dist/clis/1688/store.js +2 -2
  6. package/dist/clis/36kr/article.js +2 -2
  7. package/dist/clis/36kr/hot.js +2 -2
  8. package/dist/clis/36kr/news.js +1 -1
  9. package/dist/clis/36kr/search.js +2 -2
  10. package/dist/clis/_shared/desktop-commands.d.ts +5 -5
  11. package/dist/clis/_shared/desktop-commands.js +1 -1
  12. package/dist/clis/amazon/bestsellers.js +1 -1
  13. package/dist/clis/amazon/discussion.js +2 -2
  14. package/dist/clis/amazon/movers-shakers.js +1 -1
  15. package/dist/clis/amazon/new-releases.js +1 -1
  16. package/dist/clis/amazon/offer.js +2 -2
  17. package/dist/clis/amazon/product.js +2 -2
  18. package/dist/clis/amazon/rankings.d.ts +1 -1
  19. package/dist/clis/amazon/rankings.js +2 -2
  20. package/dist/clis/amazon/search.js +2 -2
  21. package/dist/clis/amazon/shared.d.ts +1 -1
  22. package/dist/clis/amazon/shared.js +1 -1
  23. package/dist/clis/antigravity/dump.d.ts +1 -1
  24. package/dist/clis/antigravity/dump.js +1 -1
  25. package/dist/clis/antigravity/extract-code.d.ts +1 -1
  26. package/dist/clis/antigravity/extract-code.js +1 -1
  27. package/dist/clis/antigravity/model.d.ts +1 -1
  28. package/dist/clis/antigravity/model.js +1 -1
  29. package/dist/clis/antigravity/new.d.ts +1 -1
  30. package/dist/clis/antigravity/new.js +1 -1
  31. package/dist/clis/antigravity/read.d.ts +1 -1
  32. package/dist/clis/antigravity/read.js +1 -1
  33. package/dist/clis/antigravity/send.d.ts +1 -1
  34. package/dist/clis/antigravity/send.js +1 -1
  35. package/dist/clis/antigravity/serve.js +3 -3
  36. package/dist/clis/antigravity/status.d.ts +1 -1
  37. package/dist/clis/antigravity/status.js +1 -1
  38. package/dist/clis/antigravity/watch.d.ts +1 -1
  39. package/dist/clis/antigravity/watch.js +1 -1
  40. package/dist/clis/apple-podcasts/commands.test.js +1 -1
  41. package/dist/clis/apple-podcasts/episodes.js +2 -2
  42. package/dist/clis/apple-podcasts/search.js +2 -2
  43. package/dist/clis/apple-podcasts/top.js +2 -2
  44. package/dist/clis/apple-podcasts/utils.js +1 -1
  45. package/dist/clis/arxiv/paper.js +2 -2
  46. package/dist/clis/arxiv/search.js +2 -2
  47. package/dist/clis/arxiv/utils.js +1 -1
  48. package/dist/clis/band/bands.js +2 -2
  49. package/dist/clis/band/mentions.js +2 -2
  50. package/dist/clis/band/post.js +4 -4
  51. package/dist/clis/band/posts.js +2 -2
  52. package/dist/clis/barchart/flow.js +1 -1
  53. package/dist/clis/barchart/greeks.js +1 -1
  54. package/dist/clis/barchart/options.js +1 -1
  55. package/dist/clis/barchart/quote.js +1 -1
  56. package/dist/clis/bbc/news.js +1 -1
  57. package/dist/clis/bilibili/comments.js +1 -1
  58. package/dist/clis/bilibili/comments.test.js +1 -1
  59. package/dist/clis/bilibili/download.js +3 -3
  60. package/dist/clis/bilibili/dynamic.js +1 -1
  61. package/dist/clis/bilibili/dynamic.test.js +1 -1
  62. package/dist/clis/bilibili/favorite.js +1 -1
  63. package/dist/clis/bilibili/feed.js +1 -1
  64. package/dist/clis/bilibili/following.js +2 -2
  65. package/dist/clis/bilibili/history.js +1 -1
  66. package/dist/clis/bilibili/me.js +1 -1
  67. package/dist/clis/bilibili/ranking.js +1 -1
  68. package/dist/clis/bilibili/search.js +1 -1
  69. package/dist/clis/bilibili/subtitle.js +2 -2
  70. package/dist/clis/bilibili/subtitle.test.js +2 -2
  71. package/dist/clis/bilibili/user-videos.js +1 -1
  72. package/dist/clis/bilibili/utils.d.ts +1 -1
  73. package/dist/clis/bilibili/utils.js +1 -1
  74. package/dist/clis/bloomberg/businessweek.js +1 -1
  75. package/dist/clis/bloomberg/economics.js +1 -1
  76. package/dist/clis/bloomberg/feeds.js +1 -1
  77. package/dist/clis/bloomberg/industries.js +1 -1
  78. package/dist/clis/bloomberg/main.js +1 -1
  79. package/dist/clis/bloomberg/markets.js +1 -1
  80. package/dist/clis/bloomberg/news.js +2 -2
  81. package/dist/clis/bloomberg/opinions.js +1 -1
  82. package/dist/clis/bloomberg/politics.js +1 -1
  83. package/dist/clis/bloomberg/tech.js +1 -1
  84. package/dist/clis/bloomberg/utils.js +1 -1
  85. package/dist/clis/boss/batchgreet.js +1 -1
  86. package/dist/clis/boss/chatlist.js +1 -1
  87. package/dist/clis/boss/chatmsg.js +1 -1
  88. package/dist/clis/boss/detail.js +1 -1
  89. package/dist/clis/boss/exchange.js +1 -1
  90. package/dist/clis/boss/greet.js +1 -1
  91. package/dist/clis/boss/invite.js +1 -1
  92. package/dist/clis/boss/joblist.js +1 -1
  93. package/dist/clis/boss/mark.js +2 -2
  94. package/dist/clis/boss/recommend.js +1 -1
  95. package/dist/clis/boss/resume.js +1 -1
  96. package/dist/clis/boss/search.js +1 -1
  97. package/dist/clis/boss/send.js +2 -2
  98. package/dist/clis/boss/stats.js +1 -1
  99. package/dist/clis/boss/utils.d.ts +1 -1
  100. package/dist/clis/chaoxing/assignments.js +2 -2
  101. package/dist/clis/chaoxing/exams.js +1 -1
  102. package/dist/clis/chaoxing/utils.d.ts +1 -1
  103. package/dist/clis/chatgpt/ask.d.ts +1 -1
  104. package/dist/clis/chatgpt/ask.js +2 -2
  105. package/dist/clis/chatgpt/model.d.ts +1 -1
  106. package/dist/clis/chatgpt/model.js +2 -2
  107. package/dist/clis/chatgpt/new.d.ts +1 -1
  108. package/dist/clis/chatgpt/new.js +2 -2
  109. package/dist/clis/chatgpt/read.d.ts +1 -1
  110. package/dist/clis/chatgpt/read.js +2 -2
  111. package/dist/clis/chatgpt/send.d.ts +1 -1
  112. package/dist/clis/chatgpt/send.js +2 -2
  113. package/dist/clis/chatgpt/status.d.ts +1 -1
  114. package/dist/clis/chatgpt/status.js +2 -2
  115. package/dist/clis/chatwise/ask.d.ts +1 -1
  116. package/dist/clis/chatwise/ask.js +2 -2
  117. package/dist/clis/chatwise/export.d.ts +1 -1
  118. package/dist/clis/chatwise/export.js +1 -1
  119. package/dist/clis/chatwise/history.d.ts +1 -1
  120. package/dist/clis/chatwise/history.js +1 -1
  121. package/dist/clis/chatwise/model.d.ts +1 -1
  122. package/dist/clis/chatwise/model.js +2 -2
  123. package/dist/clis/chatwise/read.d.ts +1 -1
  124. package/dist/clis/chatwise/read.js +1 -1
  125. package/dist/clis/chatwise/send.d.ts +1 -1
  126. package/dist/clis/chatwise/send.js +2 -2
  127. package/dist/clis/codex/ask.d.ts +1 -1
  128. package/dist/clis/codex/ask.js +2 -2
  129. package/dist/clis/codex/export.d.ts +1 -1
  130. package/dist/clis/codex/export.js +1 -1
  131. package/dist/clis/codex/extract-diff.d.ts +1 -1
  132. package/dist/clis/codex/extract-diff.js +1 -1
  133. package/dist/clis/codex/history.d.ts +1 -1
  134. package/dist/clis/codex/history.js +1 -1
  135. package/dist/clis/codex/model.d.ts +1 -1
  136. package/dist/clis/codex/model.js +1 -1
  137. package/dist/clis/codex/read.d.ts +1 -1
  138. package/dist/clis/codex/read.js +1 -1
  139. package/dist/clis/codex/send.d.ts +1 -1
  140. package/dist/clis/codex/send.js +2 -2
  141. package/dist/clis/coupang/add-to-cart.js +1 -1
  142. package/dist/clis/coupang/search.js +1 -1
  143. package/dist/clis/ctrip/search.js +2 -2
  144. package/dist/clis/ctrip/search.test.js +1 -1
  145. package/dist/clis/cursor/ask.d.ts +1 -1
  146. package/dist/clis/cursor/ask.js +2 -2
  147. package/dist/clis/cursor/composer.d.ts +1 -1
  148. package/dist/clis/cursor/composer.js +2 -2
  149. package/dist/clis/cursor/export.d.ts +1 -1
  150. package/dist/clis/cursor/export.js +1 -1
  151. package/dist/clis/cursor/extract-code.d.ts +1 -1
  152. package/dist/clis/cursor/extract-code.js +1 -1
  153. package/dist/clis/cursor/history.d.ts +1 -1
  154. package/dist/clis/cursor/history.js +1 -1
  155. package/dist/clis/cursor/model.d.ts +1 -1
  156. package/dist/clis/cursor/model.js +1 -1
  157. package/dist/clis/cursor/read.d.ts +1 -1
  158. package/dist/clis/cursor/read.js +2 -2
  159. package/dist/clis/cursor/send.d.ts +1 -1
  160. package/dist/clis/cursor/send.js +2 -2
  161. package/dist/clis/discord-app/channels.d.ts +1 -1
  162. package/dist/clis/discord-app/channels.js +1 -1
  163. package/dist/clis/discord-app/members.d.ts +1 -1
  164. package/dist/clis/discord-app/members.js +1 -1
  165. package/dist/clis/discord-app/read.d.ts +1 -1
  166. package/dist/clis/discord-app/read.js +1 -1
  167. package/dist/clis/discord-app/search.d.ts +1 -1
  168. package/dist/clis/discord-app/search.js +1 -1
  169. package/dist/clis/discord-app/send.d.ts +1 -1
  170. package/dist/clis/discord-app/send.js +1 -1
  171. package/dist/clis/discord-app/servers.d.ts +1 -1
  172. package/dist/clis/discord-app/servers.js +1 -1
  173. package/dist/clis/discord-app/status.d.ts +1 -1
  174. package/dist/clis/discord-app/status.js +1 -1
  175. package/dist/clis/douban/book-hot.js +1 -1
  176. package/dist/clis/douban/download.js +4 -4
  177. package/dist/clis/douban/download.test.js +3 -3
  178. package/dist/clis/douban/marks.js +1 -1
  179. package/dist/clis/douban/movie-hot.js +1 -1
  180. package/dist/clis/douban/photos.js +1 -1
  181. package/dist/clis/douban/reviews.js +1 -1
  182. package/dist/clis/douban/search.js +1 -1
  183. package/dist/clis/douban/utils.d.ts +1 -1
  184. package/dist/clis/douban/utils.js +1 -1
  185. package/dist/clis/doubao/ask.d.ts +1 -1
  186. package/dist/clis/doubao/ask.js +1 -1
  187. package/dist/clis/doubao/detail.d.ts +1 -1
  188. package/dist/clis/doubao/detail.js +1 -1
  189. package/dist/clis/doubao/detail.test.js +1 -1
  190. package/dist/clis/doubao/history.d.ts +1 -1
  191. package/dist/clis/doubao/history.js +1 -1
  192. package/dist/clis/doubao/history.test.js +1 -1
  193. package/dist/clis/doubao/meeting-summary.d.ts +1 -1
  194. package/dist/clis/doubao/meeting-summary.js +1 -1
  195. package/dist/clis/doubao/meeting-transcript.d.ts +1 -1
  196. package/dist/clis/doubao/meeting-transcript.js +1 -1
  197. package/dist/clis/doubao/new.d.ts +1 -1
  198. package/dist/clis/doubao/new.js +1 -1
  199. package/dist/clis/doubao/read.d.ts +1 -1
  200. package/dist/clis/doubao/read.js +1 -1
  201. package/dist/clis/doubao/send.d.ts +1 -1
  202. package/dist/clis/doubao/send.js +1 -1
  203. package/dist/clis/doubao/status.d.ts +1 -1
  204. package/dist/clis/doubao/status.js +1 -1
  205. package/dist/clis/doubao/utils.d.ts +1 -1
  206. package/dist/clis/doubao-app/ask.d.ts +1 -1
  207. package/dist/clis/doubao-app/ask.js +1 -1
  208. package/dist/clis/doubao-app/dump.d.ts +1 -1
  209. package/dist/clis/doubao-app/dump.js +1 -1
  210. package/dist/clis/doubao-app/new.d.ts +1 -1
  211. package/dist/clis/doubao-app/new.js +1 -1
  212. package/dist/clis/doubao-app/read.d.ts +1 -1
  213. package/dist/clis/doubao-app/read.js +1 -1
  214. package/dist/clis/doubao-app/screenshot.d.ts +1 -1
  215. package/dist/clis/doubao-app/screenshot.js +1 -1
  216. package/dist/clis/doubao-app/send.d.ts +1 -1
  217. package/dist/clis/doubao-app/send.js +1 -1
  218. package/dist/clis/doubao-app/status.d.ts +1 -1
  219. package/dist/clis/doubao-app/status.js +1 -1
  220. package/dist/clis/douyin/_shared/browser-fetch.d.ts +1 -1
  221. package/dist/clis/douyin/_shared/browser-fetch.js +1 -1
  222. package/dist/clis/douyin/_shared/imagex-upload.js +1 -1
  223. package/dist/clis/douyin/_shared/imagex-upload.test.js +1 -1
  224. package/dist/clis/douyin/_shared/public-api.d.ts +1 -1
  225. package/dist/clis/douyin/_shared/sts2.d.ts +1 -1
  226. package/dist/clis/douyin/_shared/sts2.js +1 -1
  227. package/dist/clis/douyin/_shared/sts2.test.js +1 -1
  228. package/dist/clis/douyin/_shared/tos-upload-short-read.test.js +1 -1
  229. package/dist/clis/douyin/_shared/tos-upload.js +1 -1
  230. package/dist/clis/douyin/_shared/transcode.d.ts +1 -1
  231. package/dist/clis/douyin/_shared/transcode.js +1 -1
  232. package/dist/clis/douyin/_shared/transcode.test.js +1 -1
  233. package/dist/clis/douyin/activities.js +1 -1
  234. package/dist/clis/douyin/activities.test.js +1 -1
  235. package/dist/clis/douyin/collections.js +1 -1
  236. package/dist/clis/douyin/collections.test.js +1 -1
  237. package/dist/clis/douyin/delete.js +1 -1
  238. package/dist/clis/douyin/delete.test.js +1 -1
  239. package/dist/clis/douyin/draft.js +2 -2
  240. package/dist/clis/douyin/draft.test.js +2 -2
  241. package/dist/clis/douyin/drafts.js +1 -1
  242. package/dist/clis/douyin/drafts.test.js +1 -1
  243. package/dist/clis/douyin/hashtag.js +2 -2
  244. package/dist/clis/douyin/hashtag.test.js +1 -1
  245. package/dist/clis/douyin/location.js +1 -1
  246. package/dist/clis/douyin/location.test.js +1 -1
  247. package/dist/clis/douyin/profile.js +2 -2
  248. package/dist/clis/douyin/profile.test.js +1 -1
  249. package/dist/clis/douyin/publish.js +2 -2
  250. package/dist/clis/douyin/publish.test.js +1 -1
  251. package/dist/clis/douyin/stats.js +1 -1
  252. package/dist/clis/douyin/stats.test.js +1 -1
  253. package/dist/clis/douyin/update.js +2 -2
  254. package/dist/clis/douyin/update.test.js +1 -1
  255. package/dist/clis/douyin/user-videos.js +1 -1
  256. package/dist/clis/douyin/user-videos.test.js +1 -1
  257. package/dist/clis/douyin/videos.js +1 -1
  258. package/dist/clis/douyin/videos.test.js +1 -1
  259. package/dist/clis/facebook/search.test.js +1 -1
  260. package/dist/clis/gemini/ask.d.ts +1 -1
  261. package/dist/clis/gemini/ask.js +1 -1
  262. package/dist/clis/gemini/deep-research-result.d.ts +1 -1
  263. package/dist/clis/gemini/deep-research-result.js +1 -1
  264. package/dist/clis/gemini/deep-research.d.ts +1 -1
  265. package/dist/clis/gemini/deep-research.js +1 -1
  266. package/dist/clis/gemini/image.d.ts +1 -1
  267. package/dist/clis/gemini/image.js +2 -2
  268. package/dist/clis/gemini/new.d.ts +1 -1
  269. package/dist/clis/gemini/new.js +1 -1
  270. package/dist/clis/gemini/utils.d.ts +1 -1
  271. package/dist/clis/gemini/utils.js +1 -1
  272. package/dist/clis/google/news.js +2 -2
  273. package/dist/clis/google/search.js +2 -2
  274. package/dist/clis/google/suggest.js +2 -2
  275. package/dist/clis/google/trends.js +2 -2
  276. package/dist/clis/grok/ask.d.ts +2 -2
  277. package/dist/clis/grok/ask.js +1 -1
  278. package/dist/clis/hf/top.js +2 -2
  279. package/dist/clis/hupu/detail.js +1 -1
  280. package/dist/clis/hupu/like.js +2 -2
  281. package/dist/clis/hupu/mentions.js +2 -2
  282. package/dist/clis/hupu/reply.js +2 -2
  283. package/dist/clis/hupu/search.js +1 -1
  284. package/dist/clis/hupu/unlike.js +2 -2
  285. package/dist/clis/hupu/utils.d.ts +1 -1
  286. package/dist/clis/hupu/utils.js +1 -1
  287. package/dist/clis/imdb/person.js +2 -2
  288. package/dist/clis/imdb/reviews.js +2 -2
  289. package/dist/clis/imdb/search.js +2 -2
  290. package/dist/clis/imdb/title.js +2 -2
  291. package/dist/clis/imdb/top.js +2 -2
  292. package/dist/clis/imdb/trending.js +2 -2
  293. package/dist/clis/imdb/utils.d.ts +1 -1
  294. package/dist/clis/imdb/utils.js +1 -1
  295. package/dist/clis/instagram/_shared/private-publish.d.ts +1 -1
  296. package/dist/clis/instagram/_shared/private-publish.js +1 -1
  297. package/dist/clis/instagram/_shared/protocol-capture.d.ts +1 -1
  298. package/dist/clis/instagram/_shared/runtime-info.d.ts +1 -1
  299. package/dist/clis/instagram/download.js +3 -3
  300. package/dist/clis/instagram/download.test.js +4 -4
  301. package/dist/clis/instagram/note.js +2 -2
  302. package/dist/clis/instagram/note.test.js +2 -2
  303. package/dist/clis/instagram/post.js +2 -2
  304. package/dist/clis/instagram/post.test.js +2 -2
  305. package/dist/clis/instagram/reel.js +3 -3
  306. package/dist/clis/instagram/reel.test.js +2 -2
  307. package/dist/clis/instagram/story.js +2 -2
  308. package/dist/clis/instagram/story.test.js +2 -2
  309. package/dist/clis/jd/item.js +1 -1
  310. package/dist/clis/jd/item.test.js +1 -1
  311. package/dist/clis/jike/comment.js +1 -1
  312. package/dist/clis/jike/create.js +1 -1
  313. package/dist/clis/jike/feed.js +1 -1
  314. package/dist/clis/jike/like.js +1 -1
  315. package/dist/clis/jike/notifications.js +1 -1
  316. package/dist/clis/jike/repost.js +1 -1
  317. package/dist/clis/jike/search.js +1 -1
  318. package/dist/clis/lesswrong/_helpers.js +1 -1
  319. package/dist/clis/lesswrong/comments.js +2 -2
  320. package/dist/clis/lesswrong/curated.js +1 -1
  321. package/dist/clis/lesswrong/frontpage.js +1 -1
  322. package/dist/clis/lesswrong/new.js +1 -1
  323. package/dist/clis/lesswrong/read.js +2 -2
  324. package/dist/clis/lesswrong/sequences.js +1 -1
  325. package/dist/clis/lesswrong/shortform.js +1 -1
  326. package/dist/clis/lesswrong/tag.js +2 -2
  327. package/dist/clis/lesswrong/tags.js +1 -1
  328. package/dist/clis/lesswrong/top-month.js +1 -1
  329. package/dist/clis/lesswrong/top-week.js +1 -1
  330. package/dist/clis/lesswrong/top-year.js +1 -1
  331. package/dist/clis/lesswrong/top.js +1 -1
  332. package/dist/clis/lesswrong/user-posts.js +1 -1
  333. package/dist/clis/lesswrong/user.js +2 -2
  334. package/dist/clis/linkedin/search.js +2 -2
  335. package/dist/clis/linkedin/timeline.js +2 -2
  336. package/dist/clis/linkedin/timeline.test.js +1 -1
  337. package/dist/clis/linux-do/category.js +1 -1
  338. package/dist/clis/linux-do/feed.d.ts +2 -2
  339. package/dist/clis/linux-do/feed.js +2 -2
  340. package/dist/clis/linux-do/hot.js +1 -1
  341. package/dist/clis/linux-do/latest.js +1 -1
  342. package/dist/clis/medium/feed.js +1 -1
  343. package/dist/clis/medium/search.js +1 -1
  344. package/dist/clis/medium/user.js +1 -1
  345. package/dist/clis/medium/utils.d.ts +1 -1
  346. package/dist/clis/medium/utils.js +1 -1
  347. package/dist/clis/notebooklm/compat.test.js +1 -1
  348. package/dist/clis/notebooklm/current.js +2 -2
  349. package/dist/clis/notebooklm/get.js +2 -2
  350. package/dist/clis/notebooklm/history.js +2 -2
  351. package/dist/clis/notebooklm/history.test.js +1 -1
  352. package/dist/clis/notebooklm/list.js +2 -2
  353. package/dist/clis/notebooklm/note-list.js +2 -2
  354. package/dist/clis/notebooklm/note-list.test.js +1 -1
  355. package/dist/clis/notebooklm/notes-get.js +2 -2
  356. package/dist/clis/notebooklm/notes-get.test.js +1 -1
  357. package/dist/clis/notebooklm/open.js +2 -2
  358. package/dist/clis/notebooklm/open.test.js +1 -1
  359. package/dist/clis/notebooklm/rpc.d.ts +1 -1
  360. package/dist/clis/notebooklm/rpc.js +1 -1
  361. package/dist/clis/notebooklm/rpc.test.js +1 -1
  362. package/dist/clis/notebooklm/source-fulltext.js +2 -2
  363. package/dist/clis/notebooklm/source-fulltext.test.js +1 -1
  364. package/dist/clis/notebooklm/source-get.js +2 -2
  365. package/dist/clis/notebooklm/source-get.test.js +1 -1
  366. package/dist/clis/notebooklm/source-guide.js +2 -2
  367. package/dist/clis/notebooklm/source-guide.test.js +1 -1
  368. package/dist/clis/notebooklm/source-list.js +2 -2
  369. package/dist/clis/notebooklm/status.js +1 -1
  370. package/dist/clis/notebooklm/summary.js +2 -2
  371. package/dist/clis/notebooklm/summary.test.js +1 -1
  372. package/dist/clis/notebooklm/utils.d.ts +1 -1
  373. package/dist/clis/notebooklm/utils.js +1 -1
  374. package/dist/clis/notion/export.d.ts +1 -1
  375. package/dist/clis/notion/export.js +1 -1
  376. package/dist/clis/notion/favorites.d.ts +1 -1
  377. package/dist/clis/notion/favorites.js +1 -1
  378. package/dist/clis/notion/new.d.ts +1 -1
  379. package/dist/clis/notion/new.js +1 -1
  380. package/dist/clis/notion/read.d.ts +1 -1
  381. package/dist/clis/notion/read.js +1 -1
  382. package/dist/clis/notion/search.d.ts +1 -1
  383. package/dist/clis/notion/search.js +1 -1
  384. package/dist/clis/notion/sidebar.d.ts +1 -1
  385. package/dist/clis/notion/sidebar.js +1 -1
  386. package/dist/clis/notion/status.d.ts +1 -1
  387. package/dist/clis/notion/status.js +1 -1
  388. package/dist/clis/notion/write.d.ts +1 -1
  389. package/dist/clis/notion/write.js +1 -1
  390. package/dist/clis/ones/common.d.ts +1 -1
  391. package/dist/clis/ones/common.js +1 -1
  392. package/dist/clis/ones/enrich-tasks.d.ts +1 -1
  393. package/dist/clis/ones/login.js +2 -2
  394. package/dist/clis/ones/logout.js +1 -1
  395. package/dist/clis/ones/me.js +2 -2
  396. package/dist/clis/ones/my-tasks.js +2 -2
  397. package/dist/clis/ones/resolve-labels.d.ts +1 -1
  398. package/dist/clis/ones/task-helpers.js +1 -1
  399. package/dist/clis/ones/task.js +2 -2
  400. package/dist/clis/ones/tasks.js +2 -2
  401. package/dist/clis/ones/token-info.js +2 -2
  402. package/dist/clis/ones/worklog.js +2 -2
  403. package/dist/clis/paperreview/commands.test.js +1 -1
  404. package/dist/clis/paperreview/feedback.js +2 -2
  405. package/dist/clis/paperreview/review.js +2 -2
  406. package/dist/clis/paperreview/submit.js +2 -2
  407. package/dist/clis/paperreview/utils.js +1 -1
  408. package/dist/clis/paperreview/utils.test.js +1 -1
  409. package/dist/clis/pixiv/download.js +4 -4
  410. package/dist/clis/pixiv/download.test.js +3 -3
  411. package/dist/clis/pixiv/illusts.js +2 -2
  412. package/dist/clis/pixiv/illusts.test.js +2 -2
  413. package/dist/clis/pixiv/search.js +1 -1
  414. package/dist/clis/pixiv/search.test.js +2 -2
  415. package/dist/clis/pixiv/test-utils.d.ts +1 -1
  416. package/dist/clis/pixiv/utils.d.ts +1 -1
  417. package/dist/clis/pixiv/utils.js +1 -1
  418. package/dist/clis/producthunt/browse.js +2 -2
  419. package/dist/clis/producthunt/hot.js +2 -2
  420. package/dist/clis/producthunt/posts.js +1 -1
  421. package/dist/clis/producthunt/today.js +1 -1
  422. package/dist/clis/reddit/comment.js +2 -2
  423. package/dist/clis/reddit/read.js +2 -2
  424. package/dist/clis/reddit/read.test.js +1 -1
  425. package/dist/clis/reddit/save.js +2 -2
  426. package/dist/clis/reddit/saved.js +2 -2
  427. package/dist/clis/reddit/subscribe.js +2 -2
  428. package/dist/clis/reddit/upvote.js +2 -2
  429. package/dist/clis/reddit/upvoted.js +2 -2
  430. package/dist/clis/reuters/search.js +1 -1
  431. package/dist/clis/sinablog/article.js +1 -1
  432. package/dist/clis/sinablog/hot.js +1 -1
  433. package/dist/clis/sinablog/search.js +1 -1
  434. package/dist/clis/sinablog/user.js +1 -1
  435. package/dist/clis/sinablog/utils.d.ts +1 -1
  436. package/dist/clis/sinafinance/news.js +2 -2
  437. package/dist/clis/sinafinance/rolling-news.js +1 -1
  438. package/dist/clis/sinafinance/stock-rank.js +1 -1
  439. package/dist/clis/sinafinance/stock.js +2 -2
  440. package/dist/clis/smzdm/search.js +1 -1
  441. package/dist/clis/spotify/spotify.js +2 -2
  442. package/dist/clis/spotify/utils.js +1 -1
  443. package/dist/clis/substack/feed.js +1 -1
  444. package/dist/clis/substack/publication.js +1 -1
  445. package/dist/clis/substack/search.js +2 -2
  446. package/dist/clis/substack/utils.d.ts +1 -1
  447. package/dist/clis/substack/utils.js +1 -1
  448. package/dist/clis/tieba/commands.test.js +1 -1
  449. package/dist/clis/tieba/hot.js +2 -2
  450. package/dist/clis/tieba/posts.js +2 -2
  451. package/dist/clis/tieba/read.js +2 -2
  452. package/dist/clis/tieba/search.js +2 -2
  453. package/dist/clis/twitter/accept.js +2 -2
  454. package/dist/clis/twitter/article.js +2 -2
  455. package/dist/clis/twitter/block.js +2 -2
  456. package/dist/clis/twitter/bookmark.js +2 -2
  457. package/dist/clis/twitter/bookmarks.js +2 -2
  458. package/dist/clis/twitter/delete.js +2 -2
  459. package/dist/clis/twitter/delete.test.js +2 -2
  460. package/dist/clis/twitter/download.js +3 -3
  461. package/dist/clis/twitter/follow.js +2 -2
  462. package/dist/clis/twitter/followers.js +2 -2
  463. package/dist/clis/twitter/following.js +2 -2
  464. package/dist/clis/twitter/hide-reply.js +2 -2
  465. package/dist/clis/twitter/like.js +2 -2
  466. package/dist/clis/twitter/likes.js +2 -2
  467. package/dist/clis/twitter/notifications.js +2 -2
  468. package/dist/clis/twitter/post.js +2 -2
  469. package/dist/clis/twitter/post.test.js +1 -1
  470. package/dist/clis/twitter/profile.js +2 -2
  471. package/dist/clis/twitter/reply-dm.js +2 -2
  472. package/dist/clis/twitter/reply.js +2 -2
  473. package/dist/clis/twitter/reply.test.js +1 -1
  474. package/dist/clis/twitter/search.js +2 -2
  475. package/dist/clis/twitter/search.test.js +1 -1
  476. package/dist/clis/twitter/shared.d.ts +1 -1
  477. package/dist/clis/twitter/thread.js +2 -2
  478. package/dist/clis/twitter/timeline.js +2 -2
  479. package/dist/clis/twitter/trending.js +2 -2
  480. package/dist/clis/twitter/unblock.js +2 -2
  481. package/dist/clis/twitter/unbookmark.js +2 -2
  482. package/dist/clis/twitter/unfollow.js +2 -2
  483. package/dist/clis/v2ex/daily.js +2 -2
  484. package/dist/clis/v2ex/me.js +2 -2
  485. package/dist/clis/v2ex/notifications.js +2 -2
  486. package/dist/clis/web/read.js +2 -2
  487. package/dist/clis/weibo/comments.js +1 -1
  488. package/dist/clis/weibo/feed.js +1 -1
  489. package/dist/clis/weibo/hot.js +1 -1
  490. package/dist/clis/weibo/me.js +2 -2
  491. package/dist/clis/weibo/post.js +2 -2
  492. package/dist/clis/weibo/search.js +2 -2
  493. package/dist/clis/weibo/user.js +2 -2
  494. package/dist/clis/weibo/utils.d.ts +1 -1
  495. package/dist/clis/weibo/utils.js +1 -1
  496. package/dist/clis/weixin/download.js +2 -2
  497. package/dist/clis/weread/book.js +2 -2
  498. package/dist/clis/weread/commands.test.js +2 -2
  499. package/dist/clis/weread/highlights.js +1 -1
  500. package/dist/clis/weread/notebooks.js +1 -1
  501. package/dist/clis/weread/notes.js +1 -1
  502. package/dist/clis/weread/private-api-regression.test.js +2 -2
  503. package/dist/clis/weread/ranking.js +1 -1
  504. package/dist/clis/weread/search-regression.test.js +1 -1
  505. package/dist/clis/weread/search.js +1 -1
  506. package/dist/clis/weread/shelf.js +3 -3
  507. package/dist/clis/weread/utils.d.ts +1 -1
  508. package/dist/clis/weread/utils.js +1 -1
  509. package/dist/clis/wikipedia/random.js +2 -2
  510. package/dist/clis/wikipedia/search.js +2 -2
  511. package/dist/clis/wikipedia/summary.js +2 -2
  512. package/dist/clis/wikipedia/trending.js +2 -2
  513. package/dist/clis/wikipedia/utils.js +1 -1
  514. package/dist/clis/xianyu/chat.js +2 -2
  515. package/dist/clis/xianyu/item.js +2 -2
  516. package/dist/clis/xianyu/item.test.js +2 -2
  517. package/dist/clis/xianyu/search.js +2 -2
  518. package/dist/clis/xianyu/utils.js +1 -1
  519. package/dist/clis/xiaohongshu/comments.js +2 -2
  520. package/dist/clis/xiaohongshu/comments.test.js +1 -1
  521. package/dist/clis/xiaohongshu/creator-note-detail.d.ts +1 -1
  522. package/dist/clis/xiaohongshu/creator-note-detail.js +1 -1
  523. package/dist/clis/xiaohongshu/creator-note-detail.test.js +1 -1
  524. package/dist/clis/xiaohongshu/creator-notes-summary.js +1 -1
  525. package/dist/clis/xiaohongshu/creator-notes.d.ts +1 -1
  526. package/dist/clis/xiaohongshu/creator-notes.js +1 -1
  527. package/dist/clis/xiaohongshu/creator-notes.test.js +1 -1
  528. package/dist/clis/xiaohongshu/creator-profile.js +1 -1
  529. package/dist/clis/xiaohongshu/creator-stats.js +1 -1
  530. package/dist/clis/xiaohongshu/download.js +3 -3
  531. package/dist/clis/xiaohongshu/download.test.js +3 -3
  532. package/dist/clis/xiaohongshu/note.js +2 -2
  533. package/dist/clis/xiaohongshu/note.test.js +1 -1
  534. package/dist/clis/xiaohongshu/publish.js +1 -1
  535. package/dist/clis/xiaohongshu/publish.test.js +1 -1
  536. package/dist/clis/xiaohongshu/search.js +2 -2
  537. package/dist/clis/xiaohongshu/search.test.js +1 -1
  538. package/dist/clis/xiaohongshu/user.js +1 -1
  539. package/dist/clis/xiaoyuzhou/episode.js +2 -2
  540. package/dist/clis/xiaoyuzhou/podcast-episodes.js +2 -2
  541. package/dist/clis/xiaoyuzhou/podcast.js +2 -2
  542. package/dist/clis/xiaoyuzhou/utils.js +1 -1
  543. package/dist/clis/xueqiu/comments.d.ts +1 -1
  544. package/dist/clis/xueqiu/comments.js +4 -4
  545. package/dist/clis/xueqiu/comments.test.js +3 -3
  546. package/dist/clis/xueqiu/danjuan-utils.d.ts +1 -1
  547. package/dist/clis/xueqiu/fund-holdings.js +1 -1
  548. package/dist/clis/xueqiu/fund-snapshot.js +1 -1
  549. package/dist/clis/yahoo-finance/quote.js +1 -1
  550. package/dist/clis/yollomi/background.js +4 -4
  551. package/dist/clis/yollomi/edit.js +5 -5
  552. package/dist/clis/yollomi/face-swap.js +4 -4
  553. package/dist/clis/yollomi/generate.js +5 -5
  554. package/dist/clis/yollomi/models.js +1 -1
  555. package/dist/clis/yollomi/object-remover.js +4 -4
  556. package/dist/clis/yollomi/remove-bg.js +4 -4
  557. package/dist/clis/yollomi/restore.js +4 -4
  558. package/dist/clis/yollomi/try-on.js +4 -4
  559. package/dist/clis/yollomi/upload.js +5 -5
  560. package/dist/clis/yollomi/upscale.js +5 -5
  561. package/dist/clis/yollomi/utils.d.ts +1 -1
  562. package/dist/clis/yollomi/utils.js +1 -1
  563. package/dist/clis/yollomi/video.js +5 -5
  564. package/dist/clis/youtube/channel.js +2 -2
  565. package/dist/clis/youtube/comments.js +2 -2
  566. package/dist/clis/youtube/search.js +1 -1
  567. package/dist/clis/youtube/transcript.js +2 -2
  568. package/dist/clis/youtube/utils.d.ts +1 -1
  569. package/dist/clis/youtube/video.js +2 -2
  570. package/dist/clis/yuanbao/ask.d.ts +1 -1
  571. package/dist/clis/yuanbao/ask.js +36 -53
  572. package/dist/clis/yuanbao/ask.test.js +1 -1
  573. package/dist/clis/yuanbao/new.d.ts +1 -1
  574. package/dist/clis/yuanbao/new.js +1 -1
  575. package/dist/clis/yuanbao/new.test.js +1 -1
  576. package/dist/clis/yuanbao/shared.d.ts +2 -2
  577. package/dist/clis/yuanbao/shared.js +1 -1
  578. package/dist/clis/zhihu/download.js +2 -2
  579. package/dist/clis/zhihu/question.js +2 -2
  580. package/dist/clis/zhihu/question.test.js +2 -2
  581. package/dist/clis/zsxq/dynamics.js +1 -1
  582. package/dist/clis/zsxq/groups.js +1 -1
  583. package/dist/clis/zsxq/search.js +1 -1
  584. package/dist/clis/zsxq/search.test.js +1 -1
  585. package/dist/clis/zsxq/topic.js +2 -2
  586. package/dist/clis/zsxq/topic.test.js +1 -1
  587. package/dist/clis/zsxq/topics.js +1 -1
  588. package/dist/clis/zsxq/topics.test.js +1 -1
  589. package/dist/clis/zsxq/utils.d.ts +1 -1
  590. package/dist/clis/zsxq/utils.js +1 -1
  591. package/dist/src/discovery.d.ts +5 -5
  592. package/dist/src/discovery.js +20 -75
  593. package/dist/src/engine.test.js +6 -5
  594. package/dist/src/logger.d.ts +4 -0
  595. package/dist/src/logger.js +8 -0
  596. package/dist/src/package-exports.test.d.ts +1 -0
  597. package/dist/src/package-exports.test.js +112 -0
  598. package/dist/src/registry-api.d.ts +1 -1
  599. package/dist/src/utils.d.ts +3 -0
  600. package/dist/src/utils.js +22 -0
  601. package/package.json +15 -11
  602. package/dist/browser/cdp.d.ts +0 -1
  603. package/dist/browser/cdp.js +0 -2
  604. package/dist/browser/page.d.ts +0 -1
  605. package/dist/browser/page.js +0 -2
  606. package/dist/browser/utils.d.ts +0 -1
  607. package/dist/browser/utils.js +0 -2
  608. package/dist/download/article-download.d.ts +0 -1
  609. package/dist/download/article-download.js +0 -2
  610. package/dist/download/index.d.ts +0 -1
  611. package/dist/download/index.js +0 -2
  612. package/dist/download/media-download.d.ts +0 -1
  613. package/dist/download/media-download.js +0 -2
  614. package/dist/download/progress.d.ts +0 -1
  615. package/dist/download/progress.js +0 -2
  616. package/dist/pipeline/index.d.ts +0 -1
  617. package/dist/pipeline/index.js +0 -2
@@ -1,5 +1,5 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { getRegistry } from '../../src/registry.js';
2
+ import { getRegistry } from '@jackwener/opencli/registry';
3
3
  import './topic.js';
4
4
  describe('zsxq topic command', () => {
5
5
  beforeEach(() => {
@@ -1,4 +1,4 @@
1
- import { cli, Strategy } from '../../src/registry.js';
1
+ import { cli, Strategy } from '@jackwener/opencli/registry';
2
2
  import { getActiveGroupId, ensureZsxqAuth, ensureZsxqPage, fetchFirstJson, getTopicsFromResponse, toTopicRow, } from './utils.js';
3
3
  cli({
4
4
  site: 'zsxq',
@@ -1,5 +1,5 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { getRegistry } from '../../src/registry.js';
2
+ import { getRegistry } from '@jackwener/opencli/registry';
3
3
  import './topics.js';
4
4
  describe('zsxq topics command', () => {
5
5
  beforeEach(() => {
@@ -1,4 +1,4 @@
1
- import type { IPage } from '../../src/types.js';
1
+ import type { IPage } from '@jackwener/opencli/types';
2
2
  export interface ZsxqUser {
3
3
  user_id?: number;
4
4
  name?: string;
@@ -1,4 +1,4 @@
1
- import { ArgumentError, AuthRequiredError, CliError } from '../../src/errors.js';
1
+ import { ArgumentError, AuthRequiredError, CliError } from '@jackwener/opencli/errors';
2
2
  const SITE_DOMAIN = 'wx.zsxq.com';
3
3
  const SITE_URL = 'https://wx.zsxq.com';
4
4
  function asRecord(value) {
@@ -14,12 +14,12 @@ export declare const USER_CLIS_DIR: string;
14
14
  /** Plugins directory: ~/.opencli/plugins/ */
15
15
  export declare const PLUGINS_DIR: string;
16
16
  /**
17
- * Create runtime shim files under ~/.opencli so user CLIs can keep
18
- * importing ../../registry(.js), ../../errors(.js), etc.
17
+ * Ensure ~/.opencli/node_modules/@jackwener/opencli symlink exists so that
18
+ * user CLIs in ~/.opencli/clis/ can `import { cli } from '@jackwener/opencli/registry'`.
19
19
  *
20
- * Adapters use relative imports like `../../registry.js` which, from
21
- * ~/.opencli/clis/<site>/<cmd>.js, resolve to ~/.opencli/registry.js.
22
- * We create shim files that re-export from the installed opencli runtime.
20
+ * This is the sole resolution mechanism adapters use package exports
21
+ * (e.g. `@jackwener/opencli/registry`, `@jackwener/opencli/errors`) and
22
+ * Node.js resolves them through this symlink.
23
23
  */
24
24
  export declare function ensureUserCliCompatShims(baseDir?: string): Promise<void>;
25
25
  /**
@@ -43,88 +43,32 @@ function findPackageRoot() {
43
43
  }
44
44
  return dir;
45
45
  }
46
- function resolveHostRuntimeModulePath(moduleName) {
47
- const runtimeDir = path.dirname(fileURLToPath(import.meta.url));
48
- for (const ext of ['.js', '.ts']) {
49
- const candidate = path.join(runtimeDir, `${moduleName}${ext}`);
50
- if (fs.existsSync(candidate))
51
- return candidate;
52
- }
53
- return path.join(runtimeDir, `${moduleName}.js`);
54
- }
55
- async function writeCompatShimIfNeeded(filePath, content) {
56
- try {
57
- const existing = await fs.promises.readFile(filePath, 'utf-8');
58
- if (existing === content)
59
- return;
60
- }
61
- catch {
62
- // Fall through to write missing shim
63
- }
64
- await fs.promises.writeFile(filePath, content, 'utf-8');
65
- }
66
46
  /**
67
- * Create runtime shim files under ~/.opencli so user CLIs can keep
68
- * importing ../../registry(.js), ../../errors(.js), etc.
47
+ * Ensure ~/.opencli/node_modules/@jackwener/opencli symlink exists so that
48
+ * user CLIs in ~/.opencli/clis/ can `import { cli } from '@jackwener/opencli/registry'`.
69
49
  *
70
- * Adapters use relative imports like `../../registry.js` which, from
71
- * ~/.opencli/clis/<site>/<cmd>.js, resolve to ~/.opencli/registry.js.
72
- * We create shim files that re-export from the installed opencli runtime.
50
+ * This is the sole resolution mechanism adapters use package exports
51
+ * (e.g. `@jackwener/opencli/registry`, `@jackwener/opencli/errors`) and
52
+ * Node.js resolves them through this symlink.
73
53
  */
74
54
  export async function ensureUserCliCompatShims(baseDir = USER_OPENCLI_DIR) {
75
55
  await fs.promises.mkdir(baseDir, { recursive: true });
76
- // Map of shim name runtime module name (resolved via resolveHostRuntimeModulePath)
77
- const rootShims = [
78
- ['registry', 'registry-api'],
79
- ['errors', 'errors'],
80
- ['types', 'types'],
81
- ['utils', 'utils'],
82
- ['logger', 'logger'],
83
- ['launcher', 'launcher'],
84
- ];
85
- // Subdirectory shims: [subdir, filename, runtime module path relative to src/]
86
- const subdirShims = [
87
- ['browser', 'cdp', 'browser/cdp'],
88
- ['browser', 'page', 'browser/page'],
89
- ['browser', 'utils', 'browser/utils'],
90
- ['download', 'index', 'download/index'],
91
- ['download', 'article-download', 'download/article-download'],
92
- ['download', 'media-download', 'download/media-download'],
93
- ['download', 'progress', 'download/progress'],
94
- ['pipeline', 'index', 'pipeline/index'],
95
- ];
96
- const writes = [];
97
- // Root-level shims (both with and without .js extension)
98
- // Also generate src/ shims: adapters import ../../src/registry.js etc., which
99
- // resolve to ~/.opencli/src/registry.js when running from ~/.opencli/clis/<site>/
100
- const srcDir = path.join(baseDir, 'src');
101
- await fs.promises.mkdir(srcDir, { recursive: true });
102
- for (const [shimName, moduleName] of rootShims) {
103
- const url = pathToFileURL(resolveHostRuntimeModulePath(moduleName)).href;
104
- const content = `export * from '${url}';\n`;
105
- writes.push(writeCompatShimIfNeeded(path.join(baseDir, shimName), content));
106
- writes.push(writeCompatShimIfNeeded(path.join(baseDir, `${shimName}.js`), content));
107
- writes.push(writeCompatShimIfNeeded(path.join(srcDir, `${shimName}.js`), content));
56
+ // package.json for ESM resolution in ~/.opencli/
57
+ const pkgJsonPath = path.join(baseDir, 'package.json');
58
+ const pkgJsonContent = `${JSON.stringify({ name: 'opencli-user-runtime', private: true, type: 'module' }, null, 2)}\n`;
59
+ try {
60
+ const existing = await fs.promises.readFile(pkgJsonPath, 'utf-8');
61
+ if (existing !== pkgJsonContent)
62
+ await fs.promises.writeFile(pkgJsonPath, pkgJsonContent, 'utf-8');
108
63
  }
109
- // Subdirectory shims
110
- for (const [subdir, filename, runtimePath] of subdirShims) {
111
- const dir = path.join(baseDir, subdir);
112
- await fs.promises.mkdir(dir, { recursive: true });
113
- const url = pathToFileURL(resolveHostRuntimeModulePath(runtimePath)).href;
114
- const content = `export * from '${url}';\n`;
115
- writes.push(writeCompatShimIfNeeded(path.join(dir, `${filename}.js`), content));
64
+ catch {
65
+ await fs.promises.writeFile(pkgJsonPath, pkgJsonContent, 'utf-8');
116
66
  }
117
- // package.json for ESM resolution
118
- writes.push(writeCompatShimIfNeeded(path.join(baseDir, 'package.json'), `${JSON.stringify({ name: 'opencli-user-runtime', private: true, type: 'module' }, null, 2)}\n`));
119
- await Promise.all(writes);
120
- // Create node_modules/@jackwener/opencli symlink so user TS CLIs can import
121
- // from '@jackwener/opencli/registry' (the package export).
122
- // This is needed because ~/.opencli/clis/ is outside opencli's node_modules tree.
67
+ // Create node_modules/@jackwener/opencli symlink pointing to the installed package root.
123
68
  const opencliRoot = findPackageRoot();
124
69
  const symlinkDir = path.join(baseDir, 'node_modules', '@jackwener');
125
70
  const symlinkPath = path.join(symlinkDir, 'opencli');
126
71
  try {
127
- // Only recreate if symlink is missing or points to wrong target
128
72
  let needsUpdate = true;
129
73
  try {
130
74
  const existing = await fs.promises.readlink(symlinkPath);
@@ -135,14 +79,15 @@ export async function ensureUserCliCompatShims(baseDir = USER_OPENCLI_DIR) {
135
79
  if (needsUpdate) {
136
80
  await fs.promises.mkdir(symlinkDir, { recursive: true });
137
81
  try {
138
- await fs.promises.unlink(symlinkPath);
82
+ await fs.promises.rm(symlinkPath, { recursive: true, force: true });
139
83
  }
140
84
  catch { /* doesn't exist */ }
141
- await fs.promises.symlink(opencliRoot, symlinkPath, 'dir');
85
+ const symlinkType = process.platform === 'win32' ? 'junction' : 'dir';
86
+ await fs.promises.symlink(opencliRoot, symlinkPath, symlinkType);
142
87
  }
143
88
  }
144
- catch {
145
- // Non-fatal: npm-linked installs or permission issues may prevent this
89
+ catch (err) {
90
+ log.warn(`Could not create symlink at ${symlinkPath}: ${getErrorMessage(err)}`);
146
91
  }
147
92
  }
148
93
  const ADAPTER_MANIFEST_PATH = path.join(USER_OPENCLI_DIR, 'adapter-manifest.json');
@@ -71,7 +71,7 @@ cli({
71
71
  await fs.promises.rm(tempBuildRoot, { recursive: true, force: true });
72
72
  }
73
73
  });
74
- it('loads legacy user TS CLI modules via compatibility shims', async () => {
74
+ it('loads user CLI modules via package exports symlink', async () => {
75
75
  const tempOpencliRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'opencli-user-clis-'));
76
76
  const userClisDir = path.join(tempOpencliRoot, 'clis');
77
77
  const siteDir = path.join(userClisDir, 'legacy-site');
@@ -80,8 +80,9 @@ cli({
80
80
  await ensureUserCliCompatShims(tempOpencliRoot);
81
81
  await fs.promises.mkdir(siteDir, { recursive: true });
82
82
  await fs.promises.writeFile(commandPath, `
83
- import { cli, Strategy } from '../../registry';
84
- import { CommandExecutionError } from '../../errors';
83
+ import { cli, Strategy } from '@jackwener/opencli/registry';
84
+ import { CommandExecutionError } from '@jackwener/opencli/errors';
85
+ import { htmlToMarkdown } from '@jackwener/opencli/utils';
85
86
 
86
87
  cli({
87
88
  site: 'legacy-site',
@@ -89,13 +90,13 @@ cli({
89
90
  description: 'hello command',
90
91
  strategy: Strategy.PUBLIC,
91
92
  browser: false,
92
- func: async () => [{ ok: true, errorName: new CommandExecutionError('boom').name }],
93
+ func: async () => [{ ok: true, errorName: new CommandExecutionError('boom').name, markdown: htmlToMarkdown('<p>hello</p>') }],
93
94
  });
94
95
  `);
95
96
  await discoverClis(userClisDir);
96
97
  const cmd = getRegistry().get('legacy-site/hello');
97
98
  expect(cmd).toBeDefined();
98
- await expect(executeCommand(cmd, {})).resolves.toEqual([{ ok: true, errorName: 'CommandExecutionError' }]);
99
+ await expect(executeCommand(cmd, {})).resolves.toEqual([{ ok: true, errorName: 'CommandExecutionError', markdown: 'hello' }]);
99
100
  }
100
101
  finally {
101
102
  await fs.promises.rm(tempOpencliRoot, { recursive: true, force: true });
@@ -7,6 +7,10 @@
7
7
  export declare const log: {
8
8
  /** Informational message (always shown) */
9
9
  info(msg: string): void;
10
+ /** Lightweight status line for adapter progress updates */
11
+ status(msg: string): void;
12
+ /** Positive completion/status line without the heavier info prefix */
13
+ success(msg: string): void;
10
14
  /** Warning (always shown) */
11
15
  warn(msg: string): void;
12
16
  /** Error (always shown) */
@@ -16,6 +16,14 @@ export const log = {
16
16
  info(msg) {
17
17
  process.stderr.write(`${chalk.blue('ℹ')} ${msg}\n`);
18
18
  },
19
+ /** Lightweight status line for adapter progress updates */
20
+ status(msg) {
21
+ process.stderr.write(`${chalk.dim(msg)}\n`);
22
+ },
23
+ /** Positive completion/status line without the heavier info prefix */
24
+ success(msg) {
25
+ process.stderr.write(`${chalk.green(msg)}\n`);
26
+ },
19
27
  /** Warning (always shown) */
20
28
  warn(msg) {
21
29
  process.stderr.write(`${chalk.yellow('⚠')} ${msg}\n`);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Regression tests for package exports.
3
+ *
4
+ * Ensures adapter files use @jackwener/opencli/... package imports
5
+ * (not fragile relative paths) and that all declared exports resolve
6
+ * to real files. Prevents regressions like #788 / #791.
7
+ */
8
+ import { describe, it, expect } from 'vitest';
9
+ import * as fs from 'node:fs';
10
+ import * as path from 'node:path';
11
+ import { builtinModules } from 'node:module';
12
+ import { fileURLToPath } from 'node:url';
13
+ import ts from 'typescript';
14
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
15
+ const ROOT = path.resolve(__dirname, '..');
16
+ const CLIS_DIR = path.join(ROOT, 'clis');
17
+ /** Recursively collect all .ts files in a directory. */
18
+ function collectTsFiles(dir, opts) {
19
+ const results = [];
20
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
21
+ const full = path.join(dir, entry.name);
22
+ if (entry.isDirectory()) {
23
+ results.push(...collectTsFiles(full, opts));
24
+ }
25
+ else if (entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts')) {
26
+ if (opts?.excludeTests && (entry.name.endsWith('.test.ts') || entry.name === 'test-utils.ts'))
27
+ continue;
28
+ results.push(full);
29
+ }
30
+ }
31
+ return results;
32
+ }
33
+ const ALLOWED_BARE_IMPORTS = new Set([
34
+ '@jackwener/opencli',
35
+ ...builtinModules.flatMap((name) => name.startsWith('node:')
36
+ ? [name, name.slice(5)]
37
+ : [name, `node:${name}`]),
38
+ ]);
39
+ function isAllowedImport(specifier) {
40
+ return specifier.startsWith('./')
41
+ || specifier.startsWith('../')
42
+ || specifier.startsWith('/')
43
+ || specifier.startsWith('@jackwener/opencli/')
44
+ || ALLOWED_BARE_IMPORTS.has(specifier);
45
+ }
46
+ /** Forbidden relative import patterns that should have been replaced.
47
+ * Uses (?:\.\./)+ to catch any depth of ../ traversal.
48
+ * Covers: import/export from, vi.mock(), vi.importActual(). */
49
+ const FORBIDDEN_PATTERNS = [
50
+ /(?:from|mock|importActual)\s*\(?['"](?:\.\.\/)+src\//,
51
+ /(?:from|mock|importActual)\s*\(?['"](?:\.\.\/)+browser\//,
52
+ /(?:from|mock|importActual)\s*\(?['"](?:\.\.\/)+download\//,
53
+ /(?:from|mock|importActual)\s*\(?['"](?:\.\.\/)+pipeline\//,
54
+ ];
55
+ describe('adapter imports use package exports', () => {
56
+ const adapterFiles = collectTsFiles(CLIS_DIR);
57
+ const runtimeAdapterFiles = collectTsFiles(CLIS_DIR, { excludeTests: true });
58
+ it('found adapter files to check', () => {
59
+ expect(adapterFiles.length).toBeGreaterThan(100);
60
+ });
61
+ it('no adapter uses relative imports to src/, browser/, download/, or pipeline/', () => {
62
+ const violations = [];
63
+ for (const file of adapterFiles) {
64
+ const content = fs.readFileSync(file, 'utf-8');
65
+ for (const pattern of FORBIDDEN_PATTERNS) {
66
+ if (pattern.test(content)) {
67
+ const rel = path.relative(ROOT, file);
68
+ const match = content.match(pattern)?.[0];
69
+ violations.push(`${rel}: ${match}`);
70
+ }
71
+ }
72
+ }
73
+ expect(violations).toEqual([]);
74
+ });
75
+ it('non-test adapters only import node builtins, relative modules, or opencli public APIs', () => {
76
+ const violations = [];
77
+ for (const file of runtimeAdapterFiles) {
78
+ const source = fs.readFileSync(file, 'utf-8');
79
+ const module = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
80
+ for (const stmt of module.statements) {
81
+ if (!ts.isImportDeclaration(stmt) && !ts.isExportDeclaration(stmt))
82
+ continue;
83
+ const specifier = stmt.moduleSpecifier?.getText(module).slice(1, -1);
84
+ if (specifier && !isAllowedImport(specifier)) {
85
+ violations.push({
86
+ file: path.relative(ROOT, file),
87
+ specifier,
88
+ });
89
+ }
90
+ }
91
+ }
92
+ expect(violations).toEqual([]);
93
+ });
94
+ });
95
+ describe('package.json exports resolve to real files', () => {
96
+ const pkgJson = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf-8'));
97
+ const exports = pkgJson.exports;
98
+ it('has exports defined', () => {
99
+ expect(Object.keys(exports).length).toBeGreaterThan(5);
100
+ });
101
+ for (const [exportPath, target] of Object.entries(exports)) {
102
+ it(`export "${exportPath}" → ${target} has a source file`, () => {
103
+ // Export targets point to dist/ (compiled). Verify the source .ts exists.
104
+ // dist/src/foo.js → src/foo.ts
105
+ const sourcePath = target
106
+ .replace(/^\.\/dist\//, './')
107
+ .replace(/\.js$/, '.ts');
108
+ const fullPath = path.join(ROOT, sourcePath);
109
+ expect(fs.existsSync(fullPath), `Missing source: ${sourcePath}`).toBe(true);
110
+ });
111
+ }
112
+ });
@@ -7,7 +7,7 @@
7
7
  * plugins are dynamically imported during discoverPlugins().
8
8
  */
9
9
  export { cli, Strategy, getRegistry, fullName, registerCommand } from './registry.js';
10
- export type { CliCommand, Arg, CliOptions } from './registry.js';
10
+ export type { CliCommand, Arg, CliOptions, CommandArgs } from './registry.js';
11
11
  export type { IPage } from './types.js';
12
12
  export { onStartup, onBeforeExecute, onAfterExecute } from './hooks.js';
13
13
  export type { HookFn, HookContext, HookName } from './hooks.js';
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Shared utility functions used across the codebase.
3
3
  */
4
+ import TurndownService from 'turndown';
4
5
  /** Type guard: checks if a value is a non-null, non-array object. */
5
6
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
6
7
  /** Simple async concurrency limiter. */
@@ -9,3 +10,5 @@ export declare function mapConcurrent<T, R>(items: T[], limit: number, fn: (item
9
10
  export declare function sleep(ms: number): Promise<void>;
10
11
  /** Save a base64-encoded string to a file, creating parent directories as needed. */
11
12
  export declare function saveBase64ToFile(base64: string, filePath: string): Promise<void>;
13
+ export declare function createMarkdownConverter(configure?: (td: TurndownService) => void): TurndownService;
14
+ export declare function htmlToMarkdown(value: string, configure?: (td: TurndownService) => void): string;
package/dist/src/utils.js CHANGED
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import * as fs from 'node:fs';
5
5
  import * as path from 'node:path';
6
+ import TurndownService from 'turndown';
6
7
  /** Type guard: checks if a value is a non-null, non-array object. */
7
8
  export function isRecord(value) {
8
9
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -31,3 +32,24 @@ export async function saveBase64ToFile(base64, filePath) {
31
32
  await fs.promises.mkdir(dir, { recursive: true });
32
33
  await fs.promises.writeFile(filePath, Buffer.from(base64, 'base64'));
33
34
  }
35
+ export function createMarkdownConverter(configure) {
36
+ const td = new TurndownService({
37
+ headingStyle: 'atx',
38
+ codeBlockStyle: 'fenced',
39
+ bulletListMarker: '-',
40
+ });
41
+ td.addRule('linebreak', {
42
+ filter: 'br',
43
+ replacement: () => '\n',
44
+ });
45
+ if (configure)
46
+ configure(td);
47
+ return td;
48
+ }
49
+ export function htmlToMarkdown(value, configure) {
50
+ return createMarkdownConverter(configure).turndown(value || '')
51
+ .replace(/\u00a0/g, ' ')
52
+ .replace(/\n{4,}/g, '\n\n\n')
53
+ .replace(/[ \t]+$/gm, '')
54
+ .trim();
55
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jackwener/opencli",
3
- "version": "1.6.4",
3
+ "version": "1.6.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -15,21 +15,25 @@
15
15
  },
16
16
  "exports": {
17
17
  ".": "./dist/src/main.js",
18
- "./registry": "./dist/src/registry-api.js"
18
+ "./registry": "./dist/src/registry-api.js",
19
+ "./errors": "./dist/src/errors.js",
20
+ "./types": "./dist/src/types.js",
21
+ "./utils": "./dist/src/utils.js",
22
+ "./logger": "./dist/src/logger.js",
23
+ "./launcher": "./dist/src/launcher.js",
24
+ "./browser/cdp": "./dist/src/browser/cdp.js",
25
+ "./browser/page": "./dist/src/browser/page.js",
26
+ "./browser/utils": "./dist/src/browser/utils.js",
27
+ "./download": "./dist/src/download/index.js",
28
+ "./download/article-download": "./dist/src/download/article-download.js",
29
+ "./download/media-download": "./dist/src/download/media-download.js",
30
+ "./download/progress": "./dist/src/download/progress.js",
31
+ "./pipeline": "./dist/src/pipeline/index.js"
19
32
  },
20
33
  "files": [
21
34
  "dist/src/",
22
35
  "dist/clis/",
23
36
  "dist/cli-manifest.json",
24
- "dist/registry.*",
25
- "dist/errors.*",
26
- "dist/types.*",
27
- "dist/utils.*",
28
- "dist/logger.*",
29
- "dist/launcher.*",
30
- "dist/browser/",
31
- "dist/download/",
32
- "dist/pipeline/",
33
37
  "scripts/",
34
38
  "README.md",
35
39
  "LICENSE"
@@ -1 +0,0 @@
1
- export * from '../src/browser/cdp.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/browser/ for adapter imports
2
- export * from '../src/browser/cdp.js';
@@ -1 +0,0 @@
1
- export * from '../src/browser/page.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/browser/ for adapter imports
2
- export * from '../src/browser/page.js';
@@ -1 +0,0 @@
1
- export * from '../src/browser/utils.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/browser/ for adapter imports
2
- export * from '../src/browser/utils.js';
@@ -1 +0,0 @@
1
- export * from '../src/download/article-download.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/download/ for adapter imports
2
- export * from '../src/download/article-download.js';
@@ -1 +0,0 @@
1
- export * from '../src/download/index.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/download/ for adapter imports
2
- export * from '../src/download/index.js';
@@ -1 +0,0 @@
1
- export * from '../src/download/media-download.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/download/ for adapter imports
2
- export * from '../src/download/media-download.js';
@@ -1 +0,0 @@
1
- export * from '../src/download/progress.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/download/ for adapter imports
2
- export * from '../src/download/progress.js';
@@ -1 +0,0 @@
1
- export * from '../src/pipeline/index.js';
@@ -1,2 +0,0 @@
1
- // Shim: re-exports from src/pipeline/ for adapter imports
2
- export * from '../src/pipeline/index.js';