@jackwener/opencli 1.5.5 → 1.5.7

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 (540) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +31 -4
  3. package/README.zh-CN.md +40 -5
  4. package/SKILL.md +1 -1
  5. package/dist/browser/cdp.d.ts +1 -0
  6. package/dist/browser/cdp.js +30 -27
  7. package/dist/browser/daemon-client.d.ts +11 -1
  8. package/dist/browser/daemon-client.js +3 -0
  9. package/dist/browser/dom-helpers.js +1 -0
  10. package/dist/browser/dom-helpers.test.js +14 -1
  11. package/dist/browser/mcp.js +18 -13
  12. package/dist/browser/page.d.ts +6 -0
  13. package/dist/browser/page.js +37 -2
  14. package/dist/browser/page.test.d.ts +1 -0
  15. package/dist/browser/page.test.js +44 -0
  16. package/dist/browser/stealth.js +198 -0
  17. package/dist/browser/stealth.test.d.ts +1 -0
  18. package/dist/browser/stealth.test.js +134 -0
  19. package/dist/browser.test.js +1 -1
  20. package/dist/build-manifest.d.ts +1 -0
  21. package/dist/build-manifest.js +5 -1
  22. package/dist/build-manifest.test.js +2 -0
  23. package/dist/cli-manifest.json +1821 -252
  24. package/dist/cli.js +20 -3
  25. package/dist/clis/antigravity/serve.d.ts +1 -1
  26. package/dist/clis/antigravity/serve.js +5 -8
  27. package/dist/clis/band/bands.d.ts +1 -0
  28. package/dist/clis/band/bands.js +72 -0
  29. package/dist/clis/band/mentions.d.ts +1 -0
  30. package/dist/clis/band/mentions.js +127 -0
  31. package/dist/clis/band/post.d.ts +1 -0
  32. package/dist/clis/band/post.js +175 -0
  33. package/dist/clis/band/posts.d.ts +1 -0
  34. package/dist/clis/band/posts.js +94 -0
  35. package/dist/clis/bilibili/subtitle.js +4 -0
  36. package/dist/clis/bilibili/subtitle.test.d.ts +1 -0
  37. package/dist/clis/bilibili/subtitle.test.js +48 -0
  38. package/dist/clis/chatwise/ask.js +0 -2
  39. package/dist/clis/chatwise/export.js +0 -2
  40. package/dist/clis/chatwise/history.js +0 -2
  41. package/dist/clis/chatwise/model.js +0 -2
  42. package/dist/clis/chatwise/new.js +1 -2
  43. package/dist/clis/chatwise/read.js +0 -2
  44. package/dist/clis/chatwise/screenshot.js +1 -2
  45. package/dist/clis/chatwise/send.js +0 -2
  46. package/dist/clis/chatwise/status.js +1 -2
  47. package/dist/clis/ctrip/search.d.ts +13 -0
  48. package/dist/clis/ctrip/search.js +73 -48
  49. package/dist/clis/ctrip/search.test.d.ts +1 -0
  50. package/dist/clis/ctrip/search.test.js +64 -0
  51. package/dist/clis/doubao/detail.d.ts +1 -0
  52. package/dist/clis/doubao/detail.js +33 -0
  53. package/dist/clis/doubao/detail.test.d.ts +1 -0
  54. package/dist/clis/doubao/detail.test.js +42 -0
  55. package/dist/clis/doubao/history.d.ts +1 -0
  56. package/dist/clis/doubao/history.js +28 -0
  57. package/dist/clis/doubao/history.test.d.ts +1 -0
  58. package/dist/clis/doubao/history.test.js +37 -0
  59. package/dist/clis/doubao/meeting-summary.d.ts +1 -0
  60. package/dist/clis/doubao/meeting-summary.js +39 -0
  61. package/dist/clis/doubao/meeting-transcript.d.ts +1 -0
  62. package/dist/clis/doubao/meeting-transcript.js +36 -0
  63. package/dist/clis/doubao/utils.d.ts +27 -0
  64. package/dist/clis/doubao/utils.js +317 -0
  65. package/dist/clis/doubao/utils.test.d.ts +1 -0
  66. package/dist/clis/doubao/utils.test.js +24 -0
  67. package/dist/clis/douyin/_shared/public-api.d.ts +33 -0
  68. package/dist/clis/douyin/_shared/public-api.js +29 -0
  69. package/dist/clis/douyin/_shared/sts2.js +8 -2
  70. package/dist/clis/douyin/_shared/sts2.test.d.ts +1 -0
  71. package/dist/clis/douyin/_shared/sts2.test.js +27 -0
  72. package/dist/clis/douyin/activities.js +4 -2
  73. package/dist/clis/douyin/activities.test.js +34 -1
  74. package/dist/clis/douyin/collections.js +1 -1
  75. package/dist/clis/douyin/collections.test.js +24 -2
  76. package/dist/clis/douyin/draft.d.ts +8 -11
  77. package/dist/clis/douyin/draft.js +302 -185
  78. package/dist/clis/douyin/draft.test.d.ts +1 -1
  79. package/dist/clis/douyin/draft.test.js +357 -2
  80. package/dist/clis/douyin/hashtag.js +9 -2
  81. package/dist/clis/douyin/hashtag.test.js +35 -2
  82. package/dist/clis/douyin/profile.js +1 -1
  83. package/dist/clis/douyin/profile.test.js +36 -1
  84. package/dist/clis/douyin/user-videos.d.ts +5 -0
  85. package/dist/clis/douyin/user-videos.js +74 -0
  86. package/dist/clis/douyin/user-videos.test.d.ts +1 -0
  87. package/dist/clis/douyin/user-videos.test.js +108 -0
  88. package/dist/clis/douyin/videos.js +22 -5
  89. package/dist/clis/douyin/videos.test.js +45 -2
  90. package/dist/clis/facebook/search.test.d.ts +5 -0
  91. package/dist/clis/facebook/search.test.js +60 -0
  92. package/dist/clis/facebook/search.yaml +4 -3
  93. package/dist/clis/instagram/download.d.ts +16 -0
  94. package/dist/clis/instagram/download.js +225 -0
  95. package/dist/clis/instagram/download.test.d.ts +1 -0
  96. package/dist/clis/instagram/download.test.js +118 -0
  97. package/dist/clis/notebooklm/bind-current.d.ts +1 -0
  98. package/dist/clis/notebooklm/bind-current.js +29 -0
  99. package/dist/clis/notebooklm/bind-current.test.d.ts +1 -0
  100. package/dist/clis/notebooklm/bind-current.test.js +35 -0
  101. package/dist/clis/notebooklm/binding.test.d.ts +1 -0
  102. package/dist/clis/notebooklm/binding.test.js +44 -0
  103. package/dist/clis/notebooklm/compat.test.d.ts +3 -0
  104. package/dist/clis/notebooklm/compat.test.js +16 -0
  105. package/dist/clis/notebooklm/current.d.ts +1 -0
  106. package/dist/clis/notebooklm/current.js +28 -0
  107. package/dist/clis/notebooklm/get.d.ts +1 -0
  108. package/dist/clis/notebooklm/get.js +37 -0
  109. package/dist/clis/notebooklm/history.d.ts +1 -0
  110. package/dist/clis/notebooklm/history.js +25 -0
  111. package/dist/clis/notebooklm/history.test.d.ts +1 -0
  112. package/dist/clis/notebooklm/history.test.js +58 -0
  113. package/dist/clis/notebooklm/list.d.ts +1 -0
  114. package/dist/clis/notebooklm/list.js +35 -0
  115. package/dist/clis/notebooklm/note-list.d.ts +1 -0
  116. package/dist/clis/notebooklm/note-list.js +28 -0
  117. package/dist/clis/notebooklm/note-list.test.d.ts +1 -0
  118. package/dist/clis/notebooklm/note-list.test.js +56 -0
  119. package/dist/clis/notebooklm/notes-get.d.ts +1 -0
  120. package/dist/clis/notebooklm/notes-get.js +47 -0
  121. package/dist/clis/notebooklm/notes-get.test.d.ts +1 -0
  122. package/dist/clis/notebooklm/notes-get.test.js +72 -0
  123. package/dist/clis/notebooklm/rpc.d.ts +36 -0
  124. package/dist/clis/notebooklm/rpc.js +189 -0
  125. package/dist/clis/notebooklm/rpc.test.d.ts +1 -0
  126. package/dist/clis/notebooklm/rpc.test.js +105 -0
  127. package/dist/clis/notebooklm/shared.d.ts +87 -0
  128. package/dist/clis/notebooklm/shared.js +3 -0
  129. package/dist/clis/notebooklm/source-fulltext.d.ts +1 -0
  130. package/dist/clis/notebooklm/source-fulltext.js +44 -0
  131. package/dist/clis/notebooklm/source-fulltext.test.d.ts +1 -0
  132. package/dist/clis/notebooklm/source-fulltext.test.js +106 -0
  133. package/dist/clis/notebooklm/source-get.d.ts +1 -0
  134. package/dist/clis/notebooklm/source-get.js +40 -0
  135. package/dist/clis/notebooklm/source-get.test.d.ts +1 -0
  136. package/dist/clis/notebooklm/source-get.test.js +84 -0
  137. package/dist/clis/notebooklm/source-guide.d.ts +1 -0
  138. package/dist/clis/notebooklm/source-guide.js +44 -0
  139. package/dist/clis/notebooklm/source-guide.test.d.ts +1 -0
  140. package/dist/clis/notebooklm/source-guide.test.js +104 -0
  141. package/dist/clis/notebooklm/source-list.d.ts +1 -0
  142. package/dist/clis/notebooklm/source-list.js +30 -0
  143. package/dist/clis/notebooklm/status.d.ts +1 -0
  144. package/dist/clis/notebooklm/status.js +31 -0
  145. package/dist/clis/notebooklm/summary.d.ts +1 -0
  146. package/dist/clis/notebooklm/summary.js +30 -0
  147. package/dist/clis/notebooklm/summary.test.d.ts +1 -0
  148. package/dist/clis/notebooklm/summary.test.js +78 -0
  149. package/dist/clis/notebooklm/utils.d.ts +37 -0
  150. package/dist/clis/notebooklm/utils.js +739 -0
  151. package/dist/clis/notebooklm/utils.test.d.ts +1 -0
  152. package/dist/clis/notebooklm/utils.test.js +390 -0
  153. package/dist/clis/ones/common.d.ts +32 -0
  154. package/dist/clis/ones/common.js +144 -0
  155. package/dist/clis/ones/enrich-tasks.d.ts +5 -0
  156. package/dist/clis/ones/enrich-tasks.js +37 -0
  157. package/dist/clis/ones/login.d.ts +1 -0
  158. package/dist/clis/ones/login.js +80 -0
  159. package/dist/clis/ones/logout.d.ts +1 -0
  160. package/dist/clis/ones/logout.js +17 -0
  161. package/dist/clis/ones/me.d.ts +1 -0
  162. package/dist/clis/ones/me.js +30 -0
  163. package/dist/clis/ones/my-tasks.d.ts +1 -0
  164. package/dist/clis/ones/my-tasks.js +120 -0
  165. package/dist/clis/ones/resolve-labels.d.ts +10 -0
  166. package/dist/clis/ones/resolve-labels.js +64 -0
  167. package/dist/clis/ones/task-helpers.d.ts +29 -0
  168. package/dist/clis/ones/task-helpers.js +212 -0
  169. package/dist/clis/ones/task-helpers.test.d.ts +1 -0
  170. package/dist/clis/ones/task-helpers.test.js +12 -0
  171. package/dist/clis/ones/task.d.ts +1 -0
  172. package/dist/clis/ones/task.js +66 -0
  173. package/dist/clis/ones/tasks.d.ts +1 -0
  174. package/dist/clis/ones/tasks.js +79 -0
  175. package/dist/clis/ones/token-info.d.ts +1 -0
  176. package/dist/clis/ones/token-info.js +42 -0
  177. package/dist/clis/ones/worklog.d.ts +11 -0
  178. package/dist/clis/ones/worklog.js +267 -0
  179. package/dist/clis/ones/worklog.test.d.ts +1 -0
  180. package/dist/clis/ones/worklog.test.js +20 -0
  181. package/dist/clis/spotify/spotify.d.ts +1 -0
  182. package/dist/clis/spotify/spotify.js +316 -0
  183. package/dist/clis/spotify/utils.d.ts +21 -0
  184. package/dist/clis/spotify/utils.js +66 -0
  185. package/dist/clis/spotify/utils.test.d.ts +1 -0
  186. package/dist/clis/spotify/utils.test.js +67 -0
  187. package/dist/clis/substack/utils.d.ts +4 -0
  188. package/dist/clis/substack/utils.js +8 -2
  189. package/dist/clis/substack/utils.test.d.ts +1 -0
  190. package/dist/clis/substack/utils.test.js +46 -0
  191. package/dist/clis/tieba/commands.test.d.ts +4 -0
  192. package/dist/clis/tieba/commands.test.js +79 -0
  193. package/dist/clis/tieba/hot.d.ts +1 -0
  194. package/dist/clis/tieba/hot.js +48 -0
  195. package/dist/clis/tieba/posts.d.ts +1 -0
  196. package/dist/clis/tieba/posts.js +85 -0
  197. package/dist/clis/tieba/read.d.ts +1 -0
  198. package/dist/clis/tieba/read.js +140 -0
  199. package/dist/clis/tieba/search.d.ts +1 -0
  200. package/dist/clis/tieba/search.js +108 -0
  201. package/dist/clis/tieba/utils.d.ts +101 -0
  202. package/dist/clis/tieba/utils.js +240 -0
  203. package/dist/clis/tieba/utils.test.d.ts +1 -0
  204. package/dist/clis/tieba/utils.test.js +290 -0
  205. package/dist/clis/v2ex/hot.yaml +4 -1
  206. package/dist/clis/v2ex/latest.yaml +4 -1
  207. package/dist/clis/v2ex/topic.yaml +6 -1
  208. package/dist/clis/weixin/download.d.ts +9 -0
  209. package/dist/clis/weixin/download.js +76 -6
  210. package/dist/clis/weread/book.js +206 -13
  211. package/dist/clis/weread/commands.test.js +331 -0
  212. package/dist/clis/weread/private-api-regression.test.d.ts +1 -0
  213. package/dist/{weread-private-api-regression.test.js → clis/weread/private-api-regression.test.js} +92 -30
  214. package/dist/clis/weread/search-regression.test.d.ts +1 -0
  215. package/dist/clis/weread/search-regression.test.js +407 -0
  216. package/dist/clis/weread/search.js +143 -7
  217. package/dist/clis/weread/shelf.js +13 -95
  218. package/dist/clis/weread/utils.d.ts +56 -0
  219. package/dist/clis/weread/utils.js +234 -7
  220. package/dist/clis/weread/utils.test.js +71 -1
  221. package/dist/clis/xiaohongshu/comments.d.ts +3 -0
  222. package/dist/clis/xiaohongshu/comments.js +76 -17
  223. package/dist/clis/xiaohongshu/comments.test.js +70 -9
  224. package/dist/clis/xiaohongshu/download.d.ts +4 -1
  225. package/dist/clis/xiaohongshu/download.js +83 -22
  226. package/dist/clis/xiaohongshu/download.test.d.ts +1 -0
  227. package/dist/clis/xiaohongshu/download.test.js +75 -0
  228. package/dist/clis/xiaohongshu/note-helpers.d.ts +12 -0
  229. package/dist/clis/xiaohongshu/note-helpers.js +23 -0
  230. package/dist/clis/xiaohongshu/note.d.ts +7 -0
  231. package/dist/clis/xiaohongshu/note.js +76 -0
  232. package/dist/clis/xiaohongshu/note.test.d.ts +1 -0
  233. package/dist/clis/xiaohongshu/note.test.js +136 -0
  234. package/dist/clis/xiaohongshu/publish.d.ts +1 -1
  235. package/dist/clis/xiaohongshu/publish.js +78 -31
  236. package/dist/clis/xiaohongshu/publish.test.js +66 -1
  237. package/dist/clis/xiaohongshu/search.js +9 -0
  238. package/dist/clis/xiaohongshu/search.test.js +10 -4
  239. package/dist/clis/xiaohongshu/user-helpers.d.ts +1 -0
  240. package/dist/clis/xiaohongshu/user-helpers.js +2 -0
  241. package/dist/clis/xiaohongshu/user-helpers.test.js +18 -0
  242. package/dist/clis/xueqiu/comments.d.ts +118 -0
  243. package/dist/clis/xueqiu/comments.js +354 -0
  244. package/dist/clis/xueqiu/comments.test.d.ts +1 -0
  245. package/dist/clis/xueqiu/comments.test.js +696 -0
  246. package/dist/clis/youtube/search.js +57 -17
  247. package/dist/clis/youtube/transcript.js +2 -4
  248. package/dist/clis/youtube/utils.d.ts +9 -0
  249. package/dist/clis/youtube/utils.js +67 -3
  250. package/dist/clis/youtube/utils.test.d.ts +1 -0
  251. package/dist/clis/youtube/utils.test.js +37 -0
  252. package/dist/clis/youtube/video.js +16 -15
  253. package/dist/clis/zhihu/question.js +19 -17
  254. package/dist/clis/zhihu/question.test.d.ts +1 -0
  255. package/dist/clis/zhihu/question.test.js +54 -0
  256. package/dist/clis/zsxq/dynamics.d.ts +1 -0
  257. package/dist/clis/zsxq/dynamics.js +47 -0
  258. package/dist/clis/zsxq/groups.d.ts +1 -0
  259. package/dist/clis/zsxq/groups.js +32 -0
  260. package/dist/clis/zsxq/search.d.ts +1 -0
  261. package/dist/clis/zsxq/search.js +43 -0
  262. package/dist/clis/zsxq/search.test.d.ts +1 -0
  263. package/dist/clis/zsxq/search.test.js +24 -0
  264. package/dist/clis/zsxq/topic.d.ts +1 -0
  265. package/dist/clis/zsxq/topic.js +47 -0
  266. package/dist/clis/zsxq/topic.test.d.ts +1 -0
  267. package/dist/clis/zsxq/topic.test.js +29 -0
  268. package/dist/clis/zsxq/topics.d.ts +1 -0
  269. package/dist/clis/zsxq/topics.js +25 -0
  270. package/dist/clis/zsxq/topics.test.d.ts +1 -0
  271. package/dist/clis/zsxq/topics.test.js +24 -0
  272. package/dist/clis/zsxq/utils.d.ts +97 -0
  273. package/dist/clis/zsxq/utils.js +230 -0
  274. package/dist/commanderAdapter.js +10 -1
  275. package/dist/commanderAdapter.test.js +64 -0
  276. package/dist/commands/daemon.d.ts +9 -0
  277. package/dist/commands/daemon.js +124 -0
  278. package/dist/commands/daemon.test.d.ts +1 -0
  279. package/dist/commands/daemon.test.js +185 -0
  280. package/dist/completion.js +3 -1
  281. package/dist/constants.d.ts +2 -0
  282. package/dist/constants.js +2 -0
  283. package/dist/daemon.d.ts +1 -1
  284. package/dist/daemon.js +25 -14
  285. package/dist/daemon.test.d.ts +1 -0
  286. package/dist/daemon.test.js +65 -0
  287. package/dist/discovery.d.ts +9 -0
  288. package/dist/discovery.js +47 -2
  289. package/dist/electron-apps.d.ts +29 -0
  290. package/dist/electron-apps.js +65 -0
  291. package/dist/electron-apps.test.d.ts +1 -0
  292. package/dist/electron-apps.test.js +43 -0
  293. package/dist/engine.test.js +41 -9
  294. package/dist/execution.js +20 -16
  295. package/dist/external-clis.yaml +17 -0
  296. package/dist/idle-manager.d.ts +19 -0
  297. package/dist/idle-manager.js +54 -0
  298. package/dist/launcher.d.ts +36 -0
  299. package/dist/launcher.js +152 -0
  300. package/dist/launcher.test.d.ts +1 -0
  301. package/dist/launcher.test.js +57 -0
  302. package/dist/main.js +3 -3
  303. package/dist/registry.d.ts +1 -0
  304. package/dist/registry.js +31 -3
  305. package/dist/registry.test.js +13 -0
  306. package/dist/runtime.d.ts +5 -3
  307. package/dist/runtime.js +12 -5
  308. package/dist/serialization.d.ts +1 -0
  309. package/dist/serialization.js +3 -0
  310. package/dist/serialization.test.js +17 -1
  311. package/dist/tui.d.ts +7 -0
  312. package/dist/tui.js +52 -0
  313. package/dist/tui.test.d.ts +1 -0
  314. package/dist/tui.test.js +19 -0
  315. package/dist/types.d.ts +5 -0
  316. package/dist/weixin-download.test.js +14 -0
  317. package/docs/.vitepress/config.mts +4 -0
  318. package/docs/adapters/browser/band.md +63 -0
  319. package/docs/adapters/browser/notebooklm.md +69 -0
  320. package/docs/adapters/browser/ones.md +59 -0
  321. package/docs/adapters/browser/spotify.md +62 -0
  322. package/docs/adapters/browser/tieba.md +45 -0
  323. package/docs/adapters/browser/xiaohongshu.md +19 -10
  324. package/docs/adapters/browser/xueqiu.md +5 -0
  325. package/docs/adapters/browser/zsxq.md +49 -0
  326. package/docs/adapters/index.md +67 -63
  327. package/docs/adapters-doc/ones.md +32 -0
  328. package/docs/guide/browser-bridge.md +12 -0
  329. package/docs/guide/troubleshooting.md +9 -4
  330. package/docs/superpowers/plans/2026-03-31-daemon-lifecycle-redesign.md +857 -0
  331. package/docs/superpowers/specs/2026-03-31-daemon-lifecycle-redesign.md +208 -0
  332. package/docs/zh/guide/browser-bridge.md +12 -0
  333. package/extension/dist/background.js +794 -513
  334. package/extension/src/background.test.ts +202 -2
  335. package/extension/src/background.ts +189 -10
  336. package/extension/src/cdp.ts +54 -0
  337. package/extension/src/protocol.ts +11 -5
  338. package/package.json +1 -1
  339. package/scripts/postinstall.js +16 -0
  340. package/src/browser/cdp.ts +24 -17
  341. package/src/browser/daemon-client.ts +11 -1
  342. package/src/browser/dom-helpers.test.ts +15 -1
  343. package/src/browser/dom-helpers.ts +1 -0
  344. package/src/browser/mcp.ts +18 -13
  345. package/src/browser/page.test.ts +58 -0
  346. package/src/browser/page.ts +34 -2
  347. package/src/browser/stealth.test.ts +153 -0
  348. package/src/browser/stealth.ts +198 -0
  349. package/src/browser.test.ts +1 -1
  350. package/src/build-manifest.test.ts +2 -0
  351. package/src/build-manifest.ts +6 -1
  352. package/src/cli.ts +21 -3
  353. package/src/clis/antigravity/SKILL.md +3 -12
  354. package/src/clis/antigravity/serve.ts +5 -10
  355. package/src/clis/band/bands.ts +76 -0
  356. package/src/clis/band/mentions.ts +134 -0
  357. package/src/clis/band/post.ts +187 -0
  358. package/src/clis/band/posts.ts +106 -0
  359. package/src/clis/bilibili/subtitle.test.ts +60 -0
  360. package/src/clis/bilibili/subtitle.ts +4 -0
  361. package/src/clis/chatwise/ask.ts +0 -2
  362. package/src/clis/chatwise/export.ts +0 -2
  363. package/src/clis/chatwise/history.ts +0 -2
  364. package/src/clis/chatwise/model.ts +0 -2
  365. package/src/clis/chatwise/new.ts +1 -2
  366. package/src/clis/chatwise/read.ts +0 -2
  367. package/src/clis/chatwise/screenshot.ts +1 -2
  368. package/src/clis/chatwise/send.ts +0 -2
  369. package/src/clis/chatwise/status.ts +1 -2
  370. package/src/clis/ctrip/search.test.ts +73 -0
  371. package/src/clis/ctrip/search.ts +97 -47
  372. package/src/clis/doubao/detail.test.ts +53 -0
  373. package/src/clis/doubao/detail.ts +41 -0
  374. package/src/clis/doubao/history.test.ts +45 -0
  375. package/src/clis/doubao/history.ts +32 -0
  376. package/src/clis/doubao/meeting-summary.ts +53 -0
  377. package/src/clis/doubao/meeting-transcript.ts +48 -0
  378. package/src/clis/doubao/utils.test.ts +45 -0
  379. package/src/clis/doubao/utils.ts +371 -0
  380. package/src/clis/douyin/_shared/public-api.ts +84 -0
  381. package/src/clis/douyin/_shared/sts2.test.ts +31 -0
  382. package/src/clis/douyin/_shared/sts2.ts +11 -3
  383. package/src/clis/douyin/activities.test.ts +41 -1
  384. package/src/clis/douyin/activities.ts +12 -3
  385. package/src/clis/douyin/collections.test.ts +35 -2
  386. package/src/clis/douyin/collections.ts +1 -1
  387. package/src/clis/douyin/draft.test.ts +444 -2
  388. package/src/clis/douyin/draft.ts +382 -218
  389. package/src/clis/douyin/hashtag.test.ts +42 -2
  390. package/src/clis/douyin/hashtag.ts +11 -3
  391. package/src/clis/douyin/profile.test.ts +43 -1
  392. package/src/clis/douyin/profile.ts +9 -2
  393. package/src/clis/douyin/user-videos.test.ts +122 -0
  394. package/src/clis/douyin/user-videos.ts +101 -0
  395. package/src/clis/douyin/videos.test.ts +52 -2
  396. package/src/clis/douyin/videos.ts +49 -15
  397. package/src/clis/facebook/search.test.ts +70 -0
  398. package/src/clis/facebook/search.yaml +4 -3
  399. package/src/clis/instagram/download.test.ts +159 -0
  400. package/src/clis/instagram/download.ts +286 -0
  401. package/src/clis/notebooklm/bind-current.test.ts +43 -0
  402. package/src/clis/notebooklm/bind-current.ts +36 -0
  403. package/src/clis/notebooklm/binding.test.ts +53 -0
  404. package/src/clis/notebooklm/compat.test.ts +19 -0
  405. package/src/clis/notebooklm/current.ts +38 -0
  406. package/src/clis/notebooklm/get.ts +53 -0
  407. package/src/clis/notebooklm/history.test.ts +70 -0
  408. package/src/clis/notebooklm/history.ts +36 -0
  409. package/src/clis/notebooklm/list.ts +40 -0
  410. package/src/clis/notebooklm/note-list.test.ts +64 -0
  411. package/src/clis/notebooklm/note-list.ts +42 -0
  412. package/src/clis/notebooklm/notes-get.test.ts +88 -0
  413. package/src/clis/notebooklm/notes-get.ts +67 -0
  414. package/src/clis/notebooklm/rpc.test.ts +126 -0
  415. package/src/clis/notebooklm/rpc.ts +286 -0
  416. package/src/clis/notebooklm/shared.ts +98 -0
  417. package/src/clis/notebooklm/source-fulltext.test.ts +123 -0
  418. package/src/clis/notebooklm/source-fulltext.ts +69 -0
  419. package/src/clis/notebooklm/source-get.test.ts +100 -0
  420. package/src/clis/notebooklm/source-get.ts +60 -0
  421. package/src/clis/notebooklm/source-guide.test.ts +121 -0
  422. package/src/clis/notebooklm/source-guide.ts +69 -0
  423. package/src/clis/notebooklm/source-list.ts +45 -0
  424. package/src/clis/notebooklm/status.ts +34 -0
  425. package/src/clis/notebooklm/summary.test.ts +94 -0
  426. package/src/clis/notebooklm/summary.ts +45 -0
  427. package/src/clis/notebooklm/utils.test.ts +446 -0
  428. package/src/clis/notebooklm/utils.ts +893 -0
  429. package/src/clis/ones/common.ts +187 -0
  430. package/src/clis/ones/enrich-tasks.ts +47 -0
  431. package/src/clis/ones/login.ts +103 -0
  432. package/src/clis/ones/logout.ts +19 -0
  433. package/src/clis/ones/me.ts +34 -0
  434. package/src/clis/ones/my-tasks.ts +148 -0
  435. package/src/clis/ones/resolve-labels.ts +80 -0
  436. package/src/clis/ones/task-helpers.test.ts +14 -0
  437. package/src/clis/ones/task-helpers.ts +214 -0
  438. package/src/clis/ones/task.ts +79 -0
  439. package/src/clis/ones/tasks.ts +92 -0
  440. package/src/clis/ones/token-info.ts +46 -0
  441. package/src/clis/ones/worklog.test.ts +24 -0
  442. package/src/clis/ones/worklog.ts +306 -0
  443. package/src/clis/spotify/spotify.ts +328 -0
  444. package/src/clis/spotify/utils.test.ts +87 -0
  445. package/src/clis/spotify/utils.ts +92 -0
  446. package/src/clis/substack/utils.test.ts +54 -0
  447. package/src/clis/substack/utils.ts +10 -2
  448. package/src/clis/tieba/commands.test.ts +86 -0
  449. package/src/clis/tieba/hot.ts +52 -0
  450. package/src/clis/tieba/posts.ts +108 -0
  451. package/src/clis/tieba/read.ts +158 -0
  452. package/src/clis/tieba/search.ts +119 -0
  453. package/src/clis/tieba/utils.test.ts +322 -0
  454. package/src/clis/tieba/utils.ts +348 -0
  455. package/src/clis/v2ex/hot.yaml +4 -1
  456. package/src/clis/v2ex/latest.yaml +4 -1
  457. package/src/clis/v2ex/topic.yaml +6 -1
  458. package/src/clis/weixin/download.ts +95 -6
  459. package/src/clis/weread/book.ts +256 -13
  460. package/src/clis/weread/commands.test.ts +409 -0
  461. package/src/{weread-private-api-regression.test.ts → clis/weread/private-api-regression.test.ts} +108 -30
  462. package/src/clis/weread/search-regression.test.ts +440 -0
  463. package/src/clis/weread/search.ts +189 -9
  464. package/src/clis/weread/shelf.ts +20 -122
  465. package/src/clis/weread/utils.test.ts +81 -1
  466. package/src/clis/weread/utils.ts +293 -7
  467. package/src/clis/xiaohongshu/comments.test.ts +85 -9
  468. package/src/clis/xiaohongshu/comments.ts +76 -17
  469. package/src/clis/xiaohongshu/download.test.ts +96 -0
  470. package/src/clis/xiaohongshu/download.ts +83 -22
  471. package/src/clis/xiaohongshu/note-helpers.ts +25 -0
  472. package/src/clis/xiaohongshu/note.test.ts +164 -0
  473. package/src/clis/xiaohongshu/note.ts +86 -0
  474. package/src/clis/xiaohongshu/publish.test.ts +79 -1
  475. package/src/clis/xiaohongshu/publish.ts +84 -30
  476. package/src/clis/xiaohongshu/search.test.ts +11 -4
  477. package/src/clis/xiaohongshu/search.ts +13 -0
  478. package/src/clis/xiaohongshu/user-helpers.test.ts +23 -0
  479. package/src/clis/xiaohongshu/user-helpers.ts +4 -0
  480. package/src/clis/xueqiu/comments.test.ts +823 -0
  481. package/src/clis/xueqiu/comments.ts +461 -0
  482. package/src/clis/youtube/search.ts +57 -17
  483. package/src/clis/youtube/transcript.ts +2 -4
  484. package/src/clis/youtube/utils.test.ts +43 -0
  485. package/src/clis/youtube/utils.ts +69 -0
  486. package/src/clis/youtube/video.ts +16 -15
  487. package/src/clis/zhihu/question.test.ts +71 -0
  488. package/src/clis/zhihu/question.ts +27 -15
  489. package/src/clis/zsxq/dynamics.ts +60 -0
  490. package/src/clis/zsxq/groups.ts +41 -0
  491. package/src/clis/zsxq/search.test.ts +29 -0
  492. package/src/clis/zsxq/search.ts +54 -0
  493. package/src/clis/zsxq/topic.test.ts +34 -0
  494. package/src/clis/zsxq/topic.ts +68 -0
  495. package/src/clis/zsxq/topics.test.ts +29 -0
  496. package/src/clis/zsxq/topics.ts +36 -0
  497. package/src/clis/zsxq/utils.ts +351 -0
  498. package/src/commanderAdapter.test.ts +77 -0
  499. package/src/commanderAdapter.ts +8 -1
  500. package/src/commands/daemon.test.ts +238 -0
  501. package/src/commands/daemon.ts +135 -0
  502. package/src/completion.ts +2 -1
  503. package/src/constants.ts +3 -0
  504. package/src/daemon.test.ts +88 -0
  505. package/src/daemon.ts +26 -14
  506. package/src/discovery.ts +52 -2
  507. package/src/electron-apps.test.ts +50 -0
  508. package/src/electron-apps.ts +89 -0
  509. package/src/engine.test.ts +45 -9
  510. package/src/execution.ts +24 -19
  511. package/src/external-clis.yaml +17 -0
  512. package/src/idle-manager.ts +60 -0
  513. package/src/launcher.test.ts +67 -0
  514. package/src/launcher.ts +185 -0
  515. package/src/main.ts +3 -2
  516. package/src/registry.test.ts +15 -0
  517. package/src/registry.ts +32 -3
  518. package/src/runtime.ts +13 -7
  519. package/src/serialization.test.ts +19 -1
  520. package/src/serialization.ts +2 -0
  521. package/src/tui.test.ts +23 -0
  522. package/src/tui.ts +65 -0
  523. package/src/types.ts +5 -0
  524. package/src/weixin-download.test.ts +27 -0
  525. package/tests/e2e/band-auth.test.ts +20 -0
  526. package/tests/e2e/browser-auth-helpers.ts +18 -0
  527. package/tests/e2e/browser-auth.test.ts +35 -47
  528. package/tests/e2e/browser-public-extended.test.ts +6 -2
  529. package/tests/e2e/browser-public.test.ts +288 -0
  530. package/tests/e2e/management.test.ts +1 -1
  531. package/tests/e2e/plugin-management.test.ts +1 -1
  532. package/vitest.config.ts +1 -0
  533. package/chatwise-opencli.ps1 +0 -82
  534. package/dist/clis/chatwise/shared.d.ts +0 -2
  535. package/dist/clis/chatwise/shared.js +0 -6
  536. package/dist/weread-private-api-regression.test.d.ts +0 -1
  537. package/dist/weread-search-regression.test.d.ts +0 -1
  538. package/dist/weread-search-regression.test.js +0 -39
  539. package/src/clis/chatwise/shared.ts +0 -8
  540. package/src/weread-search-regression.test.ts +0 -44
@@ -402,6 +402,150 @@
402
402
  "type": "ts",
403
403
  "modulePath": "arxiv/search.js"
404
404
  },
405
+ {
406
+ "site": "band",
407
+ "name": "bands",
408
+ "description": "List all Bands you belong to",
409
+ "domain": "www.band.us",
410
+ "strategy": "cookie",
411
+ "browser": true,
412
+ "args": [],
413
+ "columns": [
414
+ "band_no",
415
+ "name",
416
+ "members"
417
+ ],
418
+ "type": "ts",
419
+ "modulePath": "band/bands.js"
420
+ },
421
+ {
422
+ "site": "band",
423
+ "name": "mentions",
424
+ "description": "Show Band notifications where you are @mentioned",
425
+ "domain": "www.band.us",
426
+ "strategy": "intercept",
427
+ "browser": true,
428
+ "args": [
429
+ {
430
+ "name": "filter",
431
+ "type": "str",
432
+ "default": "mentioned",
433
+ "required": false,
434
+ "help": "Filter: mentioned (default) | all | post | comment",
435
+ "choices": [
436
+ "mentioned",
437
+ "all",
438
+ "post",
439
+ "comment"
440
+ ]
441
+ },
442
+ {
443
+ "name": "limit",
444
+ "type": "int",
445
+ "default": 20,
446
+ "required": false,
447
+ "help": "Max results"
448
+ },
449
+ {
450
+ "name": "unread",
451
+ "type": "bool",
452
+ "default": false,
453
+ "required": false,
454
+ "help": "Show only unread notifications"
455
+ }
456
+ ],
457
+ "columns": [
458
+ "time",
459
+ "band",
460
+ "type",
461
+ "from",
462
+ "text",
463
+ "url"
464
+ ],
465
+ "type": "ts",
466
+ "modulePath": "band/mentions.js"
467
+ },
468
+ {
469
+ "site": "band",
470
+ "name": "post",
471
+ "description": "Export full content of a post including comments",
472
+ "domain": "www.band.us",
473
+ "strategy": "cookie",
474
+ "browser": true,
475
+ "args": [
476
+ {
477
+ "name": "band_no",
478
+ "type": "int",
479
+ "required": true,
480
+ "positional": true,
481
+ "help": "Band number"
482
+ },
483
+ {
484
+ "name": "post_no",
485
+ "type": "int",
486
+ "required": true,
487
+ "positional": true,
488
+ "help": "Post number"
489
+ },
490
+ {
491
+ "name": "output",
492
+ "type": "str",
493
+ "default": "",
494
+ "required": false,
495
+ "help": "Directory to save attached photos"
496
+ },
497
+ {
498
+ "name": "comments",
499
+ "type": "bool",
500
+ "default": true,
501
+ "required": false,
502
+ "help": "Include comments (default: true)"
503
+ }
504
+ ],
505
+ "columns": [
506
+ "type",
507
+ "author",
508
+ "date",
509
+ "text"
510
+ ],
511
+ "type": "ts",
512
+ "modulePath": "band/post.js",
513
+ "navigateBefore": false
514
+ },
515
+ {
516
+ "site": "band",
517
+ "name": "posts",
518
+ "description": "List posts from a Band",
519
+ "domain": "www.band.us",
520
+ "strategy": "cookie",
521
+ "browser": true,
522
+ "args": [
523
+ {
524
+ "name": "band_no",
525
+ "type": "int",
526
+ "required": true,
527
+ "positional": true,
528
+ "help": "Band number (get it from: band bands)"
529
+ },
530
+ {
531
+ "name": "limit",
532
+ "type": "int",
533
+ "default": 20,
534
+ "required": false,
535
+ "help": "Max results"
536
+ }
537
+ ],
538
+ "columns": [
539
+ "date",
540
+ "author",
541
+ "content",
542
+ "comments",
543
+ "url"
544
+ ],
545
+ "type": "ts",
546
+ "modulePath": "band/posts.js",
547
+ "navigateBefore": false
548
+ },
405
549
  {
406
550
  "site": "barchart",
407
551
  "name": "flow",
@@ -2882,10 +3026,9 @@
2882
3026
  {
2883
3027
  "site": "ctrip",
2884
3028
  "name": "search",
2885
- "description": "携程旅行搜索",
2886
- "domain": "www.ctrip.com",
2887
- "strategy": "cookie",
2888
- "browser": true,
3029
+ "description": "搜索携程目的地、景区和酒店联想结果",
3030
+ "strategy": "public",
3031
+ "browser": false,
2889
3032
  "args": [
2890
3033
  {
2891
3034
  "name": "query",
@@ -3875,6 +4018,118 @@
3875
4018
  "modulePath": "doubao/ask.js",
3876
4019
  "navigateBefore": false
3877
4020
  },
4021
+ {
4022
+ "site": "doubao",
4023
+ "name": "detail",
4024
+ "description": "Read a specific Doubao conversation by ID",
4025
+ "domain": "www.doubao.com",
4026
+ "strategy": "cookie",
4027
+ "browser": true,
4028
+ "args": [
4029
+ {
4030
+ "name": "id",
4031
+ "type": "str",
4032
+ "required": true,
4033
+ "positional": true,
4034
+ "help": "Conversation ID (numeric or full URL)"
4035
+ }
4036
+ ],
4037
+ "columns": [
4038
+ "Role",
4039
+ "Text"
4040
+ ],
4041
+ "type": "ts",
4042
+ "modulePath": "doubao/detail.js",
4043
+ "navigateBefore": false
4044
+ },
4045
+ {
4046
+ "site": "doubao",
4047
+ "name": "history",
4048
+ "description": "List conversation history from Doubao sidebar",
4049
+ "domain": "www.doubao.com",
4050
+ "strategy": "cookie",
4051
+ "browser": true,
4052
+ "args": [
4053
+ {
4054
+ "name": "limit",
4055
+ "type": "str",
4056
+ "default": "50",
4057
+ "required": false,
4058
+ "help": "Max number of conversations to show"
4059
+ }
4060
+ ],
4061
+ "columns": [
4062
+ "Index",
4063
+ "Id",
4064
+ "Title",
4065
+ "Url"
4066
+ ],
4067
+ "type": "ts",
4068
+ "modulePath": "doubao/history.js",
4069
+ "navigateBefore": false
4070
+ },
4071
+ {
4072
+ "site": "doubao",
4073
+ "name": "meeting-summary",
4074
+ "description": "Get meeting summary and chapters from a Doubao conversation",
4075
+ "domain": "www.doubao.com",
4076
+ "strategy": "cookie",
4077
+ "browser": true,
4078
+ "args": [
4079
+ {
4080
+ "name": "id",
4081
+ "type": "str",
4082
+ "required": true,
4083
+ "positional": true,
4084
+ "help": "Conversation ID (numeric or full URL)"
4085
+ },
4086
+ {
4087
+ "name": "chapters",
4088
+ "type": "str",
4089
+ "default": "false",
4090
+ "required": false,
4091
+ "help": "Also include AI chapters"
4092
+ }
4093
+ ],
4094
+ "columns": [
4095
+ "Section",
4096
+ "Content"
4097
+ ],
4098
+ "type": "ts",
4099
+ "modulePath": "doubao/meeting-summary.js",
4100
+ "navigateBefore": false
4101
+ },
4102
+ {
4103
+ "site": "doubao",
4104
+ "name": "meeting-transcript",
4105
+ "description": "Get or download the meeting transcript from a Doubao conversation",
4106
+ "domain": "www.doubao.com",
4107
+ "strategy": "cookie",
4108
+ "browser": true,
4109
+ "args": [
4110
+ {
4111
+ "name": "id",
4112
+ "type": "str",
4113
+ "required": true,
4114
+ "positional": true,
4115
+ "help": "Conversation ID (numeric or full URL)"
4116
+ },
4117
+ {
4118
+ "name": "download",
4119
+ "type": "str",
4120
+ "default": "false",
4121
+ "required": false,
4122
+ "help": "Trigger browser file download instead of reading text"
4123
+ }
4124
+ ],
4125
+ "columns": [
4126
+ "Section",
4127
+ "Content"
4128
+ ],
4129
+ "type": "ts",
4130
+ "modulePath": "doubao/meeting-transcript.js",
4131
+ "navigateBefore": false
4132
+ },
3878
4133
  {
3879
4134
  "site": "doubao",
3880
4135
  "name": "new",
@@ -4197,10 +4452,11 @@
4197
4452
  ],
4198
4453
  "columns": [
4199
4454
  "status",
4200
- "aweme_id"
4455
+ "draft_id"
4201
4456
  ],
4202
4457
  "type": "ts",
4203
- "modulePath": "douyin/draft.js"
4458
+ "modulePath": "douyin/draft.js",
4459
+ "navigateBefore": false
4204
4460
  },
4205
4461
  {
4206
4462
  "site": "douyin",
@@ -4504,6 +4760,55 @@
4504
4760
  "type": "ts",
4505
4761
  "modulePath": "douyin/update.js"
4506
4762
  },
4763
+ {
4764
+ "site": "douyin",
4765
+ "name": "user-videos",
4766
+ "description": "获取指定用户的视频列表(含下载地址和热门评论)",
4767
+ "domain": "www.douyin.com",
4768
+ "strategy": "cookie",
4769
+ "browser": true,
4770
+ "args": [
4771
+ {
4772
+ "name": "sec_uid",
4773
+ "type": "string",
4774
+ "required": true,
4775
+ "positional": true,
4776
+ "help": "用户 sec_uid(URL 末尾部分)"
4777
+ },
4778
+ {
4779
+ "name": "limit",
4780
+ "type": "int",
4781
+ "default": 20,
4782
+ "required": false,
4783
+ "help": "获取数量(最大 20)"
4784
+ },
4785
+ {
4786
+ "name": "with_comments",
4787
+ "type": "bool",
4788
+ "default": true,
4789
+ "required": false,
4790
+ "help": "包含热门评论(默认: true)"
4791
+ },
4792
+ {
4793
+ "name": "comment_limit",
4794
+ "type": "int",
4795
+ "default": 10,
4796
+ "required": false,
4797
+ "help": "每个视频获取多少条评论(最大 10)"
4798
+ }
4799
+ ],
4800
+ "columns": [
4801
+ "index",
4802
+ "aweme_id",
4803
+ "title",
4804
+ "duration",
4805
+ "digg_count",
4806
+ "play_url",
4807
+ "top_comments"
4808
+ ],
4809
+ "type": "ts",
4810
+ "modulePath": "douyin/user-videos.js"
4811
+ },
4507
4812
  {
4508
4813
  "site": "douyin",
4509
4814
  "name": "videos",
@@ -4902,7 +5207,13 @@
4902
5207
  "navigate": "https://www.facebook.com"
4903
5208
  },
4904
5209
  {
4905
- "evaluate": "(async () => {\n const query = ${{ args.query | json }};\n const limit = ${{ args.limit }};\n window.location.href = 'https://www.facebook.com/search/top?q=' + encodeURIComponent(query);\n await new Promise(r => setTimeout(r, 4000));\n // Search results are typically in role=\"article\" or role=\"listitem\"\n let items = document.querySelectorAll('[role=\"article\"]');\n if (items.length === 0) {\n items = document.querySelectorAll('[role=\"listitem\"]');\n }\n return Array.from(items)\n .filter(el => el.textContent.trim().length > 20)\n .slice(0, limit)\n .map((el, i) => {\n const link = el.querySelector('a[href*=\"facebook.com/\"]');\n const heading = el.querySelector('h2, h3, h4, strong');\n return {\n index: i + 1,\n title: heading ? heading.textContent.trim().substring(0, 80) : '',\n text: el.textContent.trim().replace(/\\s+/g, ' ').substring(0, 150),\n url: link ? link.href.split('?')[0] : '',\n };\n });\n})()\n"
5210
+ "navigate": {
5211
+ "url": "https://www.facebook.com/search/top?q=${{ args.query | urlencode }}",
5212
+ "settleMs": 4000
5213
+ }
5214
+ },
5215
+ {
5216
+ "evaluate": "(async () => {\n const limit = ${{ args.limit }};\n // Search results are typically in role=\"article\" or role=\"listitem\"\n let items = document.querySelectorAll('[role=\"article\"]');\n if (items.length === 0) {\n items = document.querySelectorAll('[role=\"listitem\"]');\n }\n return Array.from(items)\n .filter(el => el.textContent.trim().length > 20)\n .slice(0, limit)\n .map((el, i) => {\n const link = el.querySelector('a[href*=\"facebook.com/\"]');\n const heading = el.querySelector('h2, h3, h4, strong');\n return {\n index: i + 1,\n title: heading ? heading.textContent.trim().substring(0, 80) : '',\n text: el.textContent.trim().replace(/\\s+/g, ' ').substring(0, 150),\n url: link ? link.href.split('?')[0] : '',\n };\n });\n})()\n"
4906
5217
  }
4907
5218
  ],
4908
5219
  "type": "yaml"
@@ -5840,19 +6151,46 @@
5840
6151
  },
5841
6152
  {
5842
6153
  "site": "instagram",
5843
- "name": "explore",
5844
- "description": "Instagram explore/discover trending posts",
6154
+ "name": "download",
6155
+ "description": "Download images and videos from Instagram posts and reels",
5845
6156
  "domain": "www.instagram.com",
5846
6157
  "strategy": "cookie",
5847
6158
  "browser": true,
5848
6159
  "args": [
5849
6160
  {
5850
- "name": "limit",
5851
- "type": "int",
5852
- "default": 20,
6161
+ "name": "url",
6162
+ "type": "str",
6163
+ "required": true,
6164
+ "positional": true,
6165
+ "help": "Instagram post / reel / tv URL"
6166
+ },
6167
+ {
6168
+ "name": "path",
6169
+ "type": "str",
6170
+ "default": "/home/runner/Downloads/Instagram",
5853
6171
  "required": false,
5854
- "positional": false,
5855
- "help": "Number of posts"
6172
+ "help": "Download directory"
6173
+ }
6174
+ ],
6175
+ "type": "ts",
6176
+ "modulePath": "instagram/download.js",
6177
+ "navigateBefore": false
6178
+ },
6179
+ {
6180
+ "site": "instagram",
6181
+ "name": "explore",
6182
+ "description": "Instagram explore/discover trending posts",
6183
+ "domain": "www.instagram.com",
6184
+ "strategy": "cookie",
6185
+ "browser": true,
6186
+ "args": [
6187
+ {
6188
+ "name": "limit",
6189
+ "type": "int",
6190
+ "default": 20,
6191
+ "required": false,
6192
+ "positional": false,
6193
+ "help": "Number of posts"
5856
6194
  }
5857
6195
  ],
5858
6196
  "columns": [
@@ -7741,6 +8079,304 @@
7741
8079
  "type": "ts",
7742
8080
  "modulePath": "medium/user.js"
7743
8081
  },
8082
+ {
8083
+ "site": "notebooklm",
8084
+ "name": "bind-current",
8085
+ "aliases": [
8086
+ "use"
8087
+ ],
8088
+ "description": "Bind the current active NotebookLM notebook tab into the site:notebooklm workspace",
8089
+ "domain": "notebooklm.google.com",
8090
+ "strategy": "cookie",
8091
+ "browser": true,
8092
+ "args": [],
8093
+ "columns": [
8094
+ "workspace",
8095
+ "tab_id",
8096
+ "notebook_id",
8097
+ "title",
8098
+ "url"
8099
+ ],
8100
+ "type": "ts",
8101
+ "modulePath": "notebooklm/bind-current.js",
8102
+ "navigateBefore": false
8103
+ },
8104
+ {
8105
+ "site": "notebooklm",
8106
+ "name": "current",
8107
+ "description": "Show metadata for the currently opened NotebookLM notebook tab",
8108
+ "domain": "notebooklm.google.com",
8109
+ "strategy": "cookie",
8110
+ "browser": true,
8111
+ "args": [],
8112
+ "columns": [
8113
+ "id",
8114
+ "title",
8115
+ "url",
8116
+ "source"
8117
+ ],
8118
+ "type": "ts",
8119
+ "modulePath": "notebooklm/current.js",
8120
+ "navigateBefore": false
8121
+ },
8122
+ {
8123
+ "site": "notebooklm",
8124
+ "name": "get",
8125
+ "aliases": [
8126
+ "metadata"
8127
+ ],
8128
+ "description": "Get rich metadata for the currently opened NotebookLM notebook",
8129
+ "domain": "notebooklm.google.com",
8130
+ "strategy": "cookie",
8131
+ "browser": true,
8132
+ "args": [],
8133
+ "columns": [
8134
+ "id",
8135
+ "title",
8136
+ "emoji",
8137
+ "source_count",
8138
+ "created_at",
8139
+ "updated_at",
8140
+ "url",
8141
+ "source"
8142
+ ],
8143
+ "type": "ts",
8144
+ "modulePath": "notebooklm/get.js",
8145
+ "navigateBefore": false
8146
+ },
8147
+ {
8148
+ "site": "notebooklm",
8149
+ "name": "history",
8150
+ "description": "List NotebookLM conversation history threads in the current notebook",
8151
+ "domain": "notebooklm.google.com",
8152
+ "strategy": "cookie",
8153
+ "browser": true,
8154
+ "args": [],
8155
+ "columns": [
8156
+ "thread_id",
8157
+ "item_count",
8158
+ "preview",
8159
+ "source",
8160
+ "notebook_id",
8161
+ "url"
8162
+ ],
8163
+ "type": "ts",
8164
+ "modulePath": "notebooklm/history.js",
8165
+ "navigateBefore": false
8166
+ },
8167
+ {
8168
+ "site": "notebooklm",
8169
+ "name": "list",
8170
+ "description": "List NotebookLM notebooks via in-page batchexecute RPC in the current logged-in session",
8171
+ "domain": "notebooklm.google.com",
8172
+ "strategy": "cookie",
8173
+ "browser": true,
8174
+ "args": [],
8175
+ "columns": [
8176
+ "title",
8177
+ "id",
8178
+ "is_owner",
8179
+ "created_at",
8180
+ "source",
8181
+ "url"
8182
+ ],
8183
+ "type": "ts",
8184
+ "modulePath": "notebooklm/list.js",
8185
+ "navigateBefore": false
8186
+ },
8187
+ {
8188
+ "site": "notebooklm",
8189
+ "name": "note-list",
8190
+ "aliases": [
8191
+ "notes-list"
8192
+ ],
8193
+ "description": "List saved notes from the Studio panel of the current NotebookLM notebook",
8194
+ "domain": "notebooklm.google.com",
8195
+ "strategy": "cookie",
8196
+ "browser": true,
8197
+ "args": [],
8198
+ "columns": [
8199
+ "title",
8200
+ "created_at",
8201
+ "source",
8202
+ "url"
8203
+ ],
8204
+ "type": "ts",
8205
+ "modulePath": "notebooklm/note-list.js",
8206
+ "navigateBefore": false
8207
+ },
8208
+ {
8209
+ "site": "notebooklm",
8210
+ "name": "notes-get",
8211
+ "description": "Get one note from the current NotebookLM notebook by title from the visible note editor",
8212
+ "domain": "notebooklm.google.com",
8213
+ "strategy": "cookie",
8214
+ "browser": true,
8215
+ "args": [
8216
+ {
8217
+ "name": "note",
8218
+ "type": "str",
8219
+ "required": true,
8220
+ "positional": true,
8221
+ "help": "Note title or id from the current notebook"
8222
+ }
8223
+ ],
8224
+ "columns": [
8225
+ "title",
8226
+ "content",
8227
+ "source",
8228
+ "url"
8229
+ ],
8230
+ "type": "ts",
8231
+ "modulePath": "notebooklm/notes-get.js",
8232
+ "navigateBefore": false
8233
+ },
8234
+ {
8235
+ "site": "notebooklm",
8236
+ "name": "source-fulltext",
8237
+ "description": "Get the extracted fulltext for one source in the currently opened NotebookLM notebook",
8238
+ "domain": "notebooklm.google.com",
8239
+ "strategy": "cookie",
8240
+ "browser": true,
8241
+ "args": [
8242
+ {
8243
+ "name": "source",
8244
+ "type": "str",
8245
+ "required": true,
8246
+ "positional": true,
8247
+ "help": "Source id or title from the current notebook"
8248
+ }
8249
+ ],
8250
+ "columns": [
8251
+ "title",
8252
+ "kind",
8253
+ "char_count",
8254
+ "url",
8255
+ "source"
8256
+ ],
8257
+ "type": "ts",
8258
+ "modulePath": "notebooklm/source-fulltext.js",
8259
+ "navigateBefore": false
8260
+ },
8261
+ {
8262
+ "site": "notebooklm",
8263
+ "name": "source-get",
8264
+ "description": "Get one source from the currently opened NotebookLM notebook by id or title",
8265
+ "domain": "notebooklm.google.com",
8266
+ "strategy": "cookie",
8267
+ "browser": true,
8268
+ "args": [
8269
+ {
8270
+ "name": "source",
8271
+ "type": "str",
8272
+ "required": true,
8273
+ "positional": true,
8274
+ "help": "Source id or title from the current notebook"
8275
+ }
8276
+ ],
8277
+ "columns": [
8278
+ "title",
8279
+ "id",
8280
+ "type",
8281
+ "size",
8282
+ "created_at",
8283
+ "updated_at",
8284
+ "url",
8285
+ "source"
8286
+ ],
8287
+ "type": "ts",
8288
+ "modulePath": "notebooklm/source-get.js",
8289
+ "navigateBefore": false
8290
+ },
8291
+ {
8292
+ "site": "notebooklm",
8293
+ "name": "source-guide",
8294
+ "description": "Get the guide summary and keywords for one source in the currently opened NotebookLM notebook",
8295
+ "domain": "notebooklm.google.com",
8296
+ "strategy": "cookie",
8297
+ "browser": true,
8298
+ "args": [
8299
+ {
8300
+ "name": "source",
8301
+ "type": "str",
8302
+ "required": true,
8303
+ "positional": true,
8304
+ "help": "Source id or title from the current notebook"
8305
+ }
8306
+ ],
8307
+ "columns": [
8308
+ "source_id",
8309
+ "notebook_id",
8310
+ "title",
8311
+ "type",
8312
+ "summary",
8313
+ "keywords",
8314
+ "source"
8315
+ ],
8316
+ "type": "ts",
8317
+ "modulePath": "notebooklm/source-guide.js",
8318
+ "navigateBefore": false
8319
+ },
8320
+ {
8321
+ "site": "notebooklm",
8322
+ "name": "source-list",
8323
+ "description": "List sources for the currently opened NotebookLM notebook",
8324
+ "domain": "notebooklm.google.com",
8325
+ "strategy": "cookie",
8326
+ "browser": true,
8327
+ "args": [],
8328
+ "columns": [
8329
+ "title",
8330
+ "id",
8331
+ "type",
8332
+ "size",
8333
+ "created_at",
8334
+ "updated_at",
8335
+ "url",
8336
+ "source"
8337
+ ],
8338
+ "type": "ts",
8339
+ "modulePath": "notebooklm/source-list.js",
8340
+ "navigateBefore": false
8341
+ },
8342
+ {
8343
+ "site": "notebooklm",
8344
+ "name": "status",
8345
+ "description": "Check NotebookLM page availability and login state in the current Chrome session",
8346
+ "domain": "notebooklm.google.com",
8347
+ "strategy": "cookie",
8348
+ "browser": true,
8349
+ "args": [],
8350
+ "columns": [
8351
+ "status",
8352
+ "login",
8353
+ "page",
8354
+ "url",
8355
+ "title",
8356
+ "notebooks"
8357
+ ],
8358
+ "type": "ts",
8359
+ "modulePath": "notebooklm/status.js",
8360
+ "navigateBefore": false
8361
+ },
8362
+ {
8363
+ "site": "notebooklm",
8364
+ "name": "summary",
8365
+ "description": "Get the summary block from the currently opened NotebookLM notebook",
8366
+ "domain": "notebooklm.google.com",
8367
+ "strategy": "cookie",
8368
+ "browser": true,
8369
+ "args": [],
8370
+ "columns": [
8371
+ "title",
8372
+ "summary",
8373
+ "source",
8374
+ "url"
8375
+ ],
8376
+ "type": "ts",
8377
+ "modulePath": "notebooklm/summary.js",
8378
+ "navigateBefore": false
8379
+ },
7744
8380
  {
7745
8381
  "site": "notion",
7746
8382
  "name": "export",
@@ -7893,48 +8529,328 @@
7893
8529
  "modulePath": "notion/write.js"
7894
8530
  },
7895
8531
  {
7896
- "site": "paperreview",
7897
- "name": "feedback",
7898
- "description": "Submit feedback for a paperreview.ai review token",
7899
- "domain": "paperreview.ai",
7900
- "strategy": "public",
7901
- "browser": false,
8532
+ "site": "ones",
8533
+ "name": "login",
8534
+ "description": "ONES Project API — login via Chrome Bridge (POST auth/login); stderr prints export hints for ONES_USER_ID / TOKEN",
8535
+ "domain": "ones.cn",
8536
+ "strategy": "cookie",
8537
+ "browser": true,
7902
8538
  "args": [
7903
8539
  {
7904
- "name": "token",
8540
+ "name": "email",
7905
8541
  "type": "str",
7906
- "required": true,
7907
- "positional": true,
7908
- "help": "Review token returned by paperreview.ai"
7909
- },
7910
- {
7911
- "name": "helpfulness",
7912
- "type": "int",
7913
- "required": true,
7914
- "help": "Helpfulness score from 1 to 5"
8542
+ "required": false,
8543
+ "help": "Account email (or set ONES_EMAIL)"
7915
8544
  },
7916
8545
  {
7917
- "name": "critical-error",
8546
+ "name": "phone",
7918
8547
  "type": "str",
7919
- "required": true,
7920
- "help": "Whether the review contains a critical error",
7921
- "choices": [
7922
- "yes",
7923
- "no"
7924
- ]
8548
+ "required": false,
8549
+ "help": "Account phone (or set ONES_PHONE); ignored if email is set"
7925
8550
  },
7926
8551
  {
7927
- "name": "actionable-suggestions",
8552
+ "name": "password",
7928
8553
  "type": "str",
7929
- "required": true,
7930
- "help": "Whether the review contains actionable suggestions",
7931
- "choices": [
7932
- "yes",
7933
- "no"
7934
- ]
7935
- },
7936
- {
7937
- "name": "additional-comments",
8554
+ "required": false,
8555
+ "help": "Password (or set ONES_PASSWORD)"
8556
+ }
8557
+ ],
8558
+ "columns": [
8559
+ "uuid",
8560
+ "name",
8561
+ "email",
8562
+ "token_preview"
8563
+ ],
8564
+ "type": "ts",
8565
+ "modulePath": "ones/login.js",
8566
+ "navigateBefore": false
8567
+ },
8568
+ {
8569
+ "site": "ones",
8570
+ "name": "logout",
8571
+ "description": "ONES Project API — invalidate current token (GET auth/logout) via Chrome Bridge",
8572
+ "domain": "ones.cn",
8573
+ "strategy": "cookie",
8574
+ "browser": true,
8575
+ "args": [],
8576
+ "columns": [
8577
+ "ok",
8578
+ "detail"
8579
+ ],
8580
+ "type": "ts",
8581
+ "modulePath": "ones/logout.js",
8582
+ "navigateBefore": false
8583
+ },
8584
+ {
8585
+ "site": "ones",
8586
+ "name": "me",
8587
+ "description": "ONES Project API — current user (GET users/me) via Chrome Bridge",
8588
+ "domain": "ones.cn",
8589
+ "strategy": "cookie",
8590
+ "browser": true,
8591
+ "args": [],
8592
+ "columns": [
8593
+ "uuid",
8594
+ "name",
8595
+ "email",
8596
+ "phone",
8597
+ "status"
8598
+ ],
8599
+ "type": "ts",
8600
+ "modulePath": "ones/me.js",
8601
+ "navigateBefore": false
8602
+ },
8603
+ {
8604
+ "site": "ones",
8605
+ "name": "my-tasks",
8606
+ "description": "ONES — my work items (filters/peek + strict must query). Default: assignee=me. Use --mode if your site uses field004 for assignee.",
8607
+ "domain": "ones.cn",
8608
+ "strategy": "cookie",
8609
+ "browser": true,
8610
+ "args": [
8611
+ {
8612
+ "name": "team",
8613
+ "type": "str",
8614
+ "required": false,
8615
+ "positional": true,
8616
+ "help": "Team UUID from URL …/team/<uuid>/…, or set ONES_TEAM_UUID"
8617
+ },
8618
+ {
8619
+ "name": "limit",
8620
+ "type": "int",
8621
+ "default": 100,
8622
+ "required": false,
8623
+ "help": "Max rows (default 100, max 500)"
8624
+ },
8625
+ {
8626
+ "name": "mode",
8627
+ "type": "str",
8628
+ "default": "assign",
8629
+ "required": false,
8630
+ "help": "assign=负责人(顶层 assign);field004=负责人(筛选器示例里的 field004);owner=创建者;both=负责人∪创建者(两次 peek 去重)",
8631
+ "choices": [
8632
+ "assign",
8633
+ "field004",
8634
+ "owner",
8635
+ "both"
8636
+ ]
8637
+ }
8638
+ ],
8639
+ "columns": [
8640
+ "title",
8641
+ "status",
8642
+ "project",
8643
+ "uuid",
8644
+ "updated",
8645
+ "工时"
8646
+ ],
8647
+ "type": "ts",
8648
+ "modulePath": "ones/my-tasks.js",
8649
+ "navigateBefore": false
8650
+ },
8651
+ {
8652
+ "site": "ones",
8653
+ "name": "task",
8654
+ "description": "ONES — work item detail (GET team/:team/task/:id/info); id is URL segment after …/task/",
8655
+ "domain": "ones.cn",
8656
+ "strategy": "cookie",
8657
+ "browser": true,
8658
+ "args": [
8659
+ {
8660
+ "name": "id",
8661
+ "type": "str",
8662
+ "required": true,
8663
+ "positional": true,
8664
+ "help": "Work item UUID (often 16 chars) from …/task/<id>"
8665
+ },
8666
+ {
8667
+ "name": "team",
8668
+ "type": "str",
8669
+ "required": false,
8670
+ "help": "Team UUID (8 chars from …/team/<team>/…), or set ONES_TEAM_UUID"
8671
+ }
8672
+ ],
8673
+ "columns": [
8674
+ "uuid",
8675
+ "summary",
8676
+ "number",
8677
+ "status_uuid",
8678
+ "assign",
8679
+ "owner",
8680
+ "project_uuid",
8681
+ "updated"
8682
+ ],
8683
+ "type": "ts",
8684
+ "modulePath": "ones/task.js",
8685
+ "navigateBefore": false
8686
+ },
8687
+ {
8688
+ "site": "ones",
8689
+ "name": "tasks",
8690
+ "description": "ONES Project API — list work items (POST team/:team/filters/peek); use token-info -f json for team uuid",
8691
+ "domain": "ones.cn",
8692
+ "strategy": "cookie",
8693
+ "browser": true,
8694
+ "args": [
8695
+ {
8696
+ "name": "team",
8697
+ "type": "str",
8698
+ "required": false,
8699
+ "positional": true,
8700
+ "help": "Team UUID (8 chars), or set ONES_TEAM_UUID"
8701
+ },
8702
+ {
8703
+ "name": "project",
8704
+ "type": "str",
8705
+ "required": false,
8706
+ "help": "Filter by project UUID (field006 / 所属项目)"
8707
+ },
8708
+ {
8709
+ "name": "assign",
8710
+ "type": "str",
8711
+ "required": false,
8712
+ "help": "Filter by assignee user UUID (负责人 assign)"
8713
+ },
8714
+ {
8715
+ "name": "limit",
8716
+ "type": "int",
8717
+ "default": 30,
8718
+ "required": false,
8719
+ "help": "Max rows after flattening groups (default 30)"
8720
+ }
8721
+ ],
8722
+ "columns": [
8723
+ "title",
8724
+ "status",
8725
+ "project",
8726
+ "uuid",
8727
+ "updated",
8728
+ "工时"
8729
+ ],
8730
+ "type": "ts",
8731
+ "modulePath": "ones/tasks.js",
8732
+ "navigateBefore": false
8733
+ },
8734
+ {
8735
+ "site": "ones",
8736
+ "name": "token-info",
8737
+ "description": "ONES Project API — session detail (GET auth/token_info) via Chrome Bridge: user, teams, org",
8738
+ "domain": "ones.cn",
8739
+ "strategy": "cookie",
8740
+ "browser": true,
8741
+ "args": [],
8742
+ "columns": [
8743
+ "uuid",
8744
+ "name",
8745
+ "email",
8746
+ "teams",
8747
+ "org_name"
8748
+ ],
8749
+ "type": "ts",
8750
+ "modulePath": "ones/token-info.js",
8751
+ "navigateBefore": false
8752
+ },
8753
+ {
8754
+ "site": "ones",
8755
+ "name": "worklog",
8756
+ "description": "ONES — log work hours on a task (defaults to today; use --date to backfill; endpoint falls back by deployment).",
8757
+ "domain": "ones.cn",
8758
+ "strategy": "cookie",
8759
+ "browser": true,
8760
+ "args": [
8761
+ {
8762
+ "name": "task",
8763
+ "type": "str",
8764
+ "required": true,
8765
+ "positional": true,
8766
+ "help": "Work item UUID (usually 16 chars), from my-tasks or browser URL …/task/<id>"
8767
+ },
8768
+ {
8769
+ "name": "hours",
8770
+ "type": "str",
8771
+ "required": true,
8772
+ "positional": true,
8773
+ "help": "Hours to log for this entry (e.g. 2 or 1.5), converted with ONES_MANHOUR_SCALE"
8774
+ },
8775
+ {
8776
+ "name": "team",
8777
+ "type": "str",
8778
+ "required": false,
8779
+ "help": "Team UUID from URL …/team/<uuid>/…, or set ONES_TEAM_UUID"
8780
+ },
8781
+ {
8782
+ "name": "date",
8783
+ "type": "str",
8784
+ "required": false,
8785
+ "help": "Entry date YYYY-MM-DD, defaults to today (local timezone); use for backfill"
8786
+ },
8787
+ {
8788
+ "name": "note",
8789
+ "type": "str",
8790
+ "required": false,
8791
+ "help": "Optional note (written to description/desc)"
8792
+ },
8793
+ {
8794
+ "name": "owner",
8795
+ "type": "str",
8796
+ "required": false,
8797
+ "help": "Owner user UUID (defaults to current logged-in user)"
8798
+ }
8799
+ ],
8800
+ "columns": [
8801
+ "task",
8802
+ "date",
8803
+ "hours",
8804
+ "owner",
8805
+ "endpoint"
8806
+ ],
8807
+ "type": "ts",
8808
+ "modulePath": "ones/worklog.js",
8809
+ "navigateBefore": false
8810
+ },
8811
+ {
8812
+ "site": "paperreview",
8813
+ "name": "feedback",
8814
+ "description": "Submit feedback for a paperreview.ai review token",
8815
+ "domain": "paperreview.ai",
8816
+ "strategy": "public",
8817
+ "browser": false,
8818
+ "args": [
8819
+ {
8820
+ "name": "token",
8821
+ "type": "str",
8822
+ "required": true,
8823
+ "positional": true,
8824
+ "help": "Review token returned by paperreview.ai"
8825
+ },
8826
+ {
8827
+ "name": "helpfulness",
8828
+ "type": "int",
8829
+ "required": true,
8830
+ "help": "Helpfulness score from 1 to 5"
8831
+ },
8832
+ {
8833
+ "name": "critical-error",
8834
+ "type": "str",
8835
+ "required": true,
8836
+ "help": "Whether the review contains a critical error",
8837
+ "choices": [
8838
+ "yes",
8839
+ "no"
8840
+ ]
8841
+ },
8842
+ {
8843
+ "name": "actionable-suggestions",
8844
+ "type": "str",
8845
+ "required": true,
8846
+ "help": "Whether the review contains actionable suggestions",
8847
+ "choices": [
8848
+ "yes",
8849
+ "no"
8850
+ ]
8851
+ },
8852
+ {
8853
+ "name": "additional-comments",
7938
8854
  "type": "str",
7939
8855
  "required": false,
7940
8856
  "help": "Optional free-text feedback"
@@ -8955,6 +9871,42 @@
8955
9871
  "type": "ts",
8956
9872
  "modulePath": "reddit/upvoted.js"
8957
9873
  },
9874
+ {
9875
+ "site": "reddit",
9876
+ "name": "user",
9877
+ "description": "View a Reddit user profile",
9878
+ "domain": "reddit.com",
9879
+ "strategy": "cookie",
9880
+ "browser": true,
9881
+ "args": [
9882
+ {
9883
+ "name": "username",
9884
+ "type": "string",
9885
+ "required": true,
9886
+ "positional": true,
9887
+ "help": ""
9888
+ }
9889
+ ],
9890
+ "columns": [
9891
+ "field",
9892
+ "value"
9893
+ ],
9894
+ "pipeline": [
9895
+ {
9896
+ "navigate": "https://www.reddit.com"
9897
+ },
9898
+ {
9899
+ "evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const name = username.startsWith('u/') ? username.slice(2) : username;\n const res = await fetch('/user/' + name + '/about.json?raw_json=1', {\n credentials: 'include'\n });\n const d = await res.json();\n const u = d?.data || d || {};\n const created = u.created_utc ? new Date(u.created_utc * 1000).toISOString().split('T')[0] : '-';\n return [\n { field: 'Username', value: 'u/' + (u.name || name) },\n { field: 'Post Karma', value: String(u.link_karma || 0) },\n { field: 'Comment Karma', value: String(u.comment_karma || 0) },\n { field: 'Total Karma', value: String(u.total_karma || (u.link_karma||0) + (u.comment_karma||0)) },\n { field: 'Account Created', value: created },\n { field: 'Gold', value: u.is_gold ? '⭐ Yes' : 'No' },\n { field: 'Verified', value: u.verified ? '✅ Yes' : 'No' },\n ];\n})()\n"
9900
+ },
9901
+ {
9902
+ "map": {
9903
+ "field": "${{ item.field }}",
9904
+ "value": "${{ item.value }}"
9905
+ }
9906
+ }
9907
+ ],
9908
+ "type": "yaml"
9909
+ },
8958
9910
  {
8959
9911
  "site": "reddit",
8960
9912
  "name": "user-comments",
@@ -9060,46 +10012,10 @@
9060
10012
  "type": "yaml"
9061
10013
  },
9062
10014
  {
9063
- "site": "reddit",
9064
- "name": "user",
9065
- "description": "View a Reddit user profile",
9066
- "domain": "reddit.com",
9067
- "strategy": "cookie",
9068
- "browser": true,
9069
- "args": [
9070
- {
9071
- "name": "username",
9072
- "type": "string",
9073
- "required": true,
9074
- "positional": true,
9075
- "help": ""
9076
- }
9077
- ],
9078
- "columns": [
9079
- "field",
9080
- "value"
9081
- ],
9082
- "pipeline": [
9083
- {
9084
- "navigate": "https://www.reddit.com"
9085
- },
9086
- {
9087
- "evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const name = username.startsWith('u/') ? username.slice(2) : username;\n const res = await fetch('/user/' + name + '/about.json?raw_json=1', {\n credentials: 'include'\n });\n const d = await res.json();\n const u = d?.data || d || {};\n const created = u.created_utc ? new Date(u.created_utc * 1000).toISOString().split('T')[0] : '-';\n return [\n { field: 'Username', value: 'u/' + (u.name || name) },\n { field: 'Post Karma', value: String(u.link_karma || 0) },\n { field: 'Comment Karma', value: String(u.comment_karma || 0) },\n { field: 'Total Karma', value: String(u.total_karma || (u.link_karma||0) + (u.comment_karma||0)) },\n { field: 'Account Created', value: created },\n { field: 'Gold', value: u.is_gold ? '⭐ Yes' : 'No' },\n { field: 'Verified', value: u.verified ? '✅ Yes' : 'No' },\n ];\n})()\n"
9088
- },
9089
- {
9090
- "map": {
9091
- "field": "${{ item.field }}",
9092
- "value": "${{ item.value }}"
9093
- }
9094
- }
9095
- ],
9096
- "type": "yaml"
9097
- },
9098
- {
9099
- "site": "reuters",
9100
- "name": "search",
9101
- "description": "Reuters 路透社新闻搜索",
9102
- "domain": "www.reuters.com",
10015
+ "site": "reuters",
10016
+ "name": "search",
10017
+ "description": "Reuters 路透社新闻搜索",
10018
+ "domain": "www.reuters.com",
9103
10019
  "strategy": "cookie",
9104
10020
  "browser": true,
9105
10021
  "args": [
@@ -9371,6 +10287,228 @@
9371
10287
  "type": "ts",
9372
10288
  "modulePath": "smzdm/search.js"
9373
10289
  },
10290
+ {
10291
+ "site": "spotify",
10292
+ "name": "auth",
10293
+ "description": "Authenticate with Spotify (OAuth — run once)",
10294
+ "strategy": "public",
10295
+ "browser": false,
10296
+ "args": [],
10297
+ "columns": [
10298
+ "status"
10299
+ ],
10300
+ "type": "ts",
10301
+ "modulePath": "spotify/spotify.js"
10302
+ },
10303
+ {
10304
+ "site": "spotify",
10305
+ "name": "next",
10306
+ "description": "Skip to next track",
10307
+ "strategy": "public",
10308
+ "browser": false,
10309
+ "args": [],
10310
+ "columns": [
10311
+ "status"
10312
+ ],
10313
+ "type": "ts",
10314
+ "modulePath": "spotify/spotify.js"
10315
+ },
10316
+ {
10317
+ "site": "spotify",
10318
+ "name": "pause",
10319
+ "description": "Pause playback",
10320
+ "strategy": "public",
10321
+ "browser": false,
10322
+ "args": [],
10323
+ "columns": [
10324
+ "status"
10325
+ ],
10326
+ "type": "ts",
10327
+ "modulePath": "spotify/spotify.js"
10328
+ },
10329
+ {
10330
+ "site": "spotify",
10331
+ "name": "play",
10332
+ "description": "Resume playback or search and play a track/artist",
10333
+ "strategy": "public",
10334
+ "browser": false,
10335
+ "args": [
10336
+ {
10337
+ "name": "query",
10338
+ "type": "str",
10339
+ "default": "",
10340
+ "required": false,
10341
+ "positional": true,
10342
+ "help": "Track or artist to play (optional)"
10343
+ }
10344
+ ],
10345
+ "columns": [
10346
+ "track",
10347
+ "artist",
10348
+ "status"
10349
+ ],
10350
+ "type": "ts",
10351
+ "modulePath": "spotify/spotify.js"
10352
+ },
10353
+ {
10354
+ "site": "spotify",
10355
+ "name": "prev",
10356
+ "description": "Skip to previous track",
10357
+ "strategy": "public",
10358
+ "browser": false,
10359
+ "args": [],
10360
+ "columns": [
10361
+ "status"
10362
+ ],
10363
+ "type": "ts",
10364
+ "modulePath": "spotify/spotify.js"
10365
+ },
10366
+ {
10367
+ "site": "spotify",
10368
+ "name": "queue",
10369
+ "description": "Add a track to the playback queue",
10370
+ "strategy": "public",
10371
+ "browser": false,
10372
+ "args": [
10373
+ {
10374
+ "name": "query",
10375
+ "type": "str",
10376
+ "required": true,
10377
+ "positional": true,
10378
+ "help": "Track to add to queue"
10379
+ }
10380
+ ],
10381
+ "columns": [
10382
+ "track",
10383
+ "artist",
10384
+ "status"
10385
+ ],
10386
+ "type": "ts",
10387
+ "modulePath": "spotify/spotify.js"
10388
+ },
10389
+ {
10390
+ "site": "spotify",
10391
+ "name": "repeat",
10392
+ "description": "Set repeat mode (off / track / context)",
10393
+ "strategy": "public",
10394
+ "browser": false,
10395
+ "args": [
10396
+ {
10397
+ "name": "mode",
10398
+ "type": "str",
10399
+ "default": "context",
10400
+ "required": false,
10401
+ "positional": true,
10402
+ "help": "off / track / context",
10403
+ "choices": [
10404
+ "off",
10405
+ "track",
10406
+ "context"
10407
+ ]
10408
+ }
10409
+ ],
10410
+ "columns": [
10411
+ "repeat"
10412
+ ],
10413
+ "type": "ts",
10414
+ "modulePath": "spotify/spotify.js"
10415
+ },
10416
+ {
10417
+ "site": "spotify",
10418
+ "name": "search",
10419
+ "description": "Search for tracks",
10420
+ "strategy": "public",
10421
+ "browser": false,
10422
+ "args": [
10423
+ {
10424
+ "name": "query",
10425
+ "type": "str",
10426
+ "required": true,
10427
+ "positional": true,
10428
+ "help": "Search query"
10429
+ },
10430
+ {
10431
+ "name": "limit",
10432
+ "type": "int",
10433
+ "default": 10,
10434
+ "required": false,
10435
+ "help": "Number of results (default: 10)"
10436
+ }
10437
+ ],
10438
+ "columns": [
10439
+ "track",
10440
+ "artist",
10441
+ "album",
10442
+ "uri"
10443
+ ],
10444
+ "type": "ts",
10445
+ "modulePath": "spotify/spotify.js"
10446
+ },
10447
+ {
10448
+ "site": "spotify",
10449
+ "name": "shuffle",
10450
+ "description": "Toggle shuffle on/off",
10451
+ "strategy": "public",
10452
+ "browser": false,
10453
+ "args": [
10454
+ {
10455
+ "name": "state",
10456
+ "type": "str",
10457
+ "default": "on",
10458
+ "required": false,
10459
+ "positional": true,
10460
+ "help": "on or off",
10461
+ "choices": [
10462
+ "on",
10463
+ "off"
10464
+ ]
10465
+ }
10466
+ ],
10467
+ "columns": [
10468
+ "shuffle"
10469
+ ],
10470
+ "type": "ts",
10471
+ "modulePath": "spotify/spotify.js"
10472
+ },
10473
+ {
10474
+ "site": "spotify",
10475
+ "name": "status",
10476
+ "description": "Show current playback status",
10477
+ "strategy": "public",
10478
+ "browser": false,
10479
+ "args": [],
10480
+ "columns": [
10481
+ "track",
10482
+ "artist",
10483
+ "album",
10484
+ "status",
10485
+ "progress"
10486
+ ],
10487
+ "type": "ts",
10488
+ "modulePath": "spotify/spotify.js"
10489
+ },
10490
+ {
10491
+ "site": "spotify",
10492
+ "name": "volume",
10493
+ "description": "Set playback volume (0-100)",
10494
+ "strategy": "public",
10495
+ "browser": false,
10496
+ "args": [
10497
+ {
10498
+ "name": "level",
10499
+ "type": "int",
10500
+ "default": 50,
10501
+ "required": true,
10502
+ "positional": true,
10503
+ "help": "Volume 0–100"
10504
+ }
10505
+ ],
10506
+ "columns": [
10507
+ "volume"
10508
+ ],
10509
+ "type": "ts",
10510
+ "modulePath": "spotify/spotify.js"
10511
+ },
9374
10512
  {
9375
10513
  "site": "stackoverflow",
9376
10514
  "name": "bounties",
@@ -9570,139 +10708,289 @@
9570
10708
  "description": "Steam top selling games",
9571
10709
  "domain": "store.steampowered.com",
9572
10710
  "strategy": "public",
9573
- "browser": false,
10711
+ "browser": false,
10712
+ "args": [
10713
+ {
10714
+ "name": "limit",
10715
+ "type": "int",
10716
+ "default": 10,
10717
+ "required": false,
10718
+ "positional": false,
10719
+ "help": "Number of games"
10720
+ }
10721
+ ],
10722
+ "columns": [
10723
+ "rank",
10724
+ "name",
10725
+ "price",
10726
+ "discount",
10727
+ "url"
10728
+ ],
10729
+ "pipeline": [
10730
+ {
10731
+ "fetch": {
10732
+ "url": "https://store.steampowered.com/api/featuredcategories/"
10733
+ }
10734
+ },
10735
+ {
10736
+ "select": "top_sellers.items"
10737
+ },
10738
+ {
10739
+ "map": {
10740
+ "rank": "${{ index + 1 }}",
10741
+ "name": "${{ item.name }}",
10742
+ "price": "${{ item.final_price }}",
10743
+ "discount": "${{ item.discount_percent }}",
10744
+ "url": "https://store.steampowered.com/app/${{ item.id }}"
10745
+ }
10746
+ },
10747
+ {
10748
+ "limit": "${{ args.limit }}"
10749
+ }
10750
+ ],
10751
+ "type": "yaml"
10752
+ },
10753
+ {
10754
+ "site": "substack",
10755
+ "name": "feed",
10756
+ "description": "Substack 热门文章 Feed",
10757
+ "domain": "substack.com",
10758
+ "strategy": "cookie",
10759
+ "browser": true,
10760
+ "args": [
10761
+ {
10762
+ "name": "category",
10763
+ "type": "str",
10764
+ "default": "all",
10765
+ "required": false,
10766
+ "help": "文章分类: all, tech, business, culture, politics, science, health"
10767
+ },
10768
+ {
10769
+ "name": "limit",
10770
+ "type": "int",
10771
+ "default": 20,
10772
+ "required": false,
10773
+ "help": "返回的文章数量"
10774
+ }
10775
+ ],
10776
+ "columns": [
10777
+ "rank",
10778
+ "title",
10779
+ "author",
10780
+ "date",
10781
+ "readTime",
10782
+ "url"
10783
+ ],
10784
+ "type": "ts",
10785
+ "modulePath": "substack/feed.js"
10786
+ },
10787
+ {
10788
+ "site": "substack",
10789
+ "name": "publication",
10790
+ "description": "获取特定 Substack Newsletter 的最新文章",
10791
+ "domain": "substack.com",
10792
+ "strategy": "cookie",
10793
+ "browser": true,
10794
+ "args": [
10795
+ {
10796
+ "name": "url",
10797
+ "type": "str",
10798
+ "required": true,
10799
+ "positional": true,
10800
+ "help": "Newsletter URL(如 https://example.substack.com)"
10801
+ },
10802
+ {
10803
+ "name": "limit",
10804
+ "type": "int",
10805
+ "default": 20,
10806
+ "required": false,
10807
+ "help": "返回的文章数量"
10808
+ }
10809
+ ],
10810
+ "columns": [
10811
+ "rank",
10812
+ "title",
10813
+ "date",
10814
+ "description",
10815
+ "url"
10816
+ ],
10817
+ "type": "ts",
10818
+ "modulePath": "substack/publication.js"
10819
+ },
10820
+ {
10821
+ "site": "substack",
10822
+ "name": "search",
10823
+ "description": "搜索 Substack 文章和 Newsletter",
10824
+ "domain": "substack.com",
10825
+ "strategy": "public",
10826
+ "browser": false,
10827
+ "args": [
10828
+ {
10829
+ "name": "keyword",
10830
+ "type": "str",
10831
+ "required": true,
10832
+ "positional": true,
10833
+ "help": "搜索关键词"
10834
+ },
10835
+ {
10836
+ "name": "type",
10837
+ "type": "str",
10838
+ "default": "posts",
10839
+ "required": false,
10840
+ "help": "搜索类型(posts=文章, publications=Newsletter)",
10841
+ "choices": [
10842
+ "posts",
10843
+ "publications"
10844
+ ]
10845
+ },
10846
+ {
10847
+ "name": "limit",
10848
+ "type": "int",
10849
+ "default": 20,
10850
+ "required": false,
10851
+ "help": "返回结果数量"
10852
+ }
10853
+ ],
10854
+ "columns": [
10855
+ "rank",
10856
+ "title",
10857
+ "author",
10858
+ "date",
10859
+ "description",
10860
+ "url"
10861
+ ],
10862
+ "type": "ts",
10863
+ "modulePath": "substack/search.js"
10864
+ },
10865
+ {
10866
+ "site": "tieba",
10867
+ "name": "hot",
10868
+ "description": "Tieba hot topics",
10869
+ "domain": "tieba.baidu.com",
10870
+ "strategy": "public",
10871
+ "browser": true,
9574
10872
  "args": [
9575
10873
  {
9576
10874
  "name": "limit",
9577
10875
  "type": "int",
9578
- "default": 10,
10876
+ "default": 20,
9579
10877
  "required": false,
9580
- "positional": false,
9581
- "help": "Number of games"
10878
+ "help": "Number of items to return"
9582
10879
  }
9583
10880
  ],
9584
10881
  "columns": [
9585
10882
  "rank",
9586
- "name",
9587
- "price",
9588
- "discount",
9589
- "url"
9590
- ],
9591
- "pipeline": [
9592
- {
9593
- "fetch": {
9594
- "url": "https://store.steampowered.com/api/featuredcategories/"
9595
- }
9596
- },
9597
- {
9598
- "select": "top_sellers.items"
9599
- },
9600
- {
9601
- "map": {
9602
- "rank": "${{ index + 1 }}",
9603
- "name": "${{ item.name }}",
9604
- "price": "${{ item.final_price }}",
9605
- "discount": "${{ item.discount_percent }}",
9606
- "url": "https://store.steampowered.com/app/${{ item.id }}"
9607
- }
9608
- },
9609
- {
9610
- "limit": "${{ args.limit }}"
9611
- }
10883
+ "title",
10884
+ "discussions",
10885
+ "description"
9612
10886
  ],
9613
- "type": "yaml"
10887
+ "type": "ts",
10888
+ "modulePath": "tieba/hot.js",
10889
+ "navigateBefore": false
9614
10890
  },
9615
10891
  {
9616
- "site": "substack",
9617
- "name": "feed",
9618
- "description": "Substack 热门文章 Feed",
9619
- "domain": "substack.com",
10892
+ "site": "tieba",
10893
+ "name": "posts",
10894
+ "description": "Browse posts in a tieba forum",
10895
+ "domain": "tieba.baidu.com",
9620
10896
  "strategy": "cookie",
9621
10897
  "browser": true,
9622
10898
  "args": [
9623
10899
  {
9624
- "name": "category",
9625
- "type": "str",
9626
- "default": "all",
10900
+ "name": "forum",
10901
+ "type": "string",
10902
+ "required": true,
10903
+ "positional": true,
10904
+ "help": "Forum name in Chinese"
10905
+ },
10906
+ {
10907
+ "name": "page",
10908
+ "type": "int",
10909
+ "default": 1,
9627
10910
  "required": false,
9628
- "help": "文章分类: all, tech, business, culture, politics, science, health"
10911
+ "help": "Page number"
9629
10912
  },
9630
10913
  {
9631
10914
  "name": "limit",
9632
10915
  "type": "int",
9633
10916
  "default": 20,
9634
10917
  "required": false,
9635
- "help": "返回的文章数量"
10918
+ "help": "Number of items to return"
9636
10919
  }
9637
10920
  ],
9638
10921
  "columns": [
9639
10922
  "rank",
9640
10923
  "title",
9641
10924
  "author",
9642
- "date",
9643
- "readTime",
9644
- "url"
10925
+ "replies"
9645
10926
  ],
9646
10927
  "type": "ts",
9647
- "modulePath": "substack/feed.js"
10928
+ "modulePath": "tieba/posts.js",
10929
+ "navigateBefore": false
9648
10930
  },
9649
10931
  {
9650
- "site": "substack",
9651
- "name": "publication",
9652
- "description": "获取特定 Substack Newsletter 的最新文章",
9653
- "domain": "substack.com",
10932
+ "site": "tieba",
10933
+ "name": "read",
10934
+ "description": "Read a tieba thread",
10935
+ "domain": "tieba.baidu.com",
9654
10936
  "strategy": "cookie",
9655
10937
  "browser": true,
9656
10938
  "args": [
9657
10939
  {
9658
- "name": "url",
9659
- "type": "str",
10940
+ "name": "id",
10941
+ "type": "string",
9660
10942
  "required": true,
9661
10943
  "positional": true,
9662
- "help": "Newsletter URL(如 https://example.substack.com)"
10944
+ "help": "Thread ID"
10945
+ },
10946
+ {
10947
+ "name": "page",
10948
+ "type": "int",
10949
+ "default": 1,
10950
+ "required": false,
10951
+ "help": "Page number"
9663
10952
  },
9664
10953
  {
9665
10954
  "name": "limit",
9666
10955
  "type": "int",
9667
- "default": 20,
10956
+ "default": 30,
9668
10957
  "required": false,
9669
- "help": "返回的文章数量"
10958
+ "help": "Number of replies to return"
9670
10959
  }
9671
10960
  ],
9672
10961
  "columns": [
9673
- "rank",
9674
- "title",
9675
- "date",
9676
- "description",
9677
- "url"
10962
+ "floor",
10963
+ "author",
10964
+ "content",
10965
+ "time"
9678
10966
  ],
9679
10967
  "type": "ts",
9680
- "modulePath": "substack/publication.js"
10968
+ "modulePath": "tieba/read.js",
10969
+ "navigateBefore": false
9681
10970
  },
9682
10971
  {
9683
- "site": "substack",
10972
+ "site": "tieba",
9684
10973
  "name": "search",
9685
- "description": "搜索 Substack 文章和 Newsletter",
9686
- "domain": "substack.com",
9687
- "strategy": "public",
9688
- "browser": false,
10974
+ "description": "Search posts across tieba",
10975
+ "domain": "tieba.baidu.com",
10976
+ "strategy": "cookie",
10977
+ "browser": true,
9689
10978
  "args": [
9690
10979
  {
9691
10980
  "name": "keyword",
9692
- "type": "str",
10981
+ "type": "string",
9693
10982
  "required": true,
9694
10983
  "positional": true,
9695
- "help": "搜索关键词"
10984
+ "help": "Search keyword"
9696
10985
  },
9697
10986
  {
9698
- "name": "type",
9699
- "type": "str",
9700
- "default": "posts",
10987
+ "name": "page",
10988
+ "type": "int",
10989
+ "default": 1,
9701
10990
  "required": false,
9702
- "help": "搜索类型(posts=文章, publications=Newsletter)",
10991
+ "help": "Page number (currently only 1 is supported)",
9703
10992
  "choices": [
9704
- "posts",
9705
- "publications"
10993
+ "1"
9706
10994
  ]
9707
10995
  },
9708
10996
  {
@@ -9710,19 +10998,19 @@
9710
10998
  "type": "int",
9711
10999
  "default": 20,
9712
11000
  "required": false,
9713
- "help": "返回结果数量"
11001
+ "help": "Number of items to return"
9714
11002
  }
9715
11003
  ],
9716
11004
  "columns": [
9717
11005
  "rank",
9718
11006
  "title",
11007
+ "forum",
9719
11008
  "author",
9720
- "date",
9721
- "description",
9722
- "url"
11009
+ "time"
9723
11010
  ],
9724
11011
  "type": "ts",
9725
- "modulePath": "substack/search.js"
11012
+ "modulePath": "tieba/search.js",
11013
+ "navigateBefore": false
9726
11014
  },
9727
11015
  {
9728
11016
  "site": "tiktok",
@@ -10729,6 +12017,37 @@
10729
12017
  "type": "ts",
10730
12018
  "modulePath": "twitter/profile.js"
10731
12019
  },
12020
+ {
12021
+ "site": "twitter",
12022
+ "name": "reply",
12023
+ "description": "Reply to a specific tweet",
12024
+ "domain": "x.com",
12025
+ "strategy": "ui",
12026
+ "browser": true,
12027
+ "args": [
12028
+ {
12029
+ "name": "url",
12030
+ "type": "string",
12031
+ "required": true,
12032
+ "positional": true,
12033
+ "help": "The URL of the tweet to reply to"
12034
+ },
12035
+ {
12036
+ "name": "text",
12037
+ "type": "string",
12038
+ "required": true,
12039
+ "positional": true,
12040
+ "help": "The text content of your reply"
12041
+ }
12042
+ ],
12043
+ "columns": [
12044
+ "status",
12045
+ "message",
12046
+ "text"
12047
+ ],
12048
+ "type": "ts",
12049
+ "modulePath": "twitter/reply.js"
12050
+ },
10732
12051
  {
10733
12052
  "site": "twitter",
10734
12053
  "name": "reply-dm",
@@ -10769,37 +12088,6 @@
10769
12088
  "type": "ts",
10770
12089
  "modulePath": "twitter/reply-dm.js"
10771
12090
  },
10772
- {
10773
- "site": "twitter",
10774
- "name": "reply",
10775
- "description": "Reply to a specific tweet",
10776
- "domain": "x.com",
10777
- "strategy": "ui",
10778
- "browser": true,
10779
- "args": [
10780
- {
10781
- "name": "url",
10782
- "type": "string",
10783
- "required": true,
10784
- "positional": true,
10785
- "help": "The URL of the tweet to reply to"
10786
- },
10787
- {
10788
- "name": "text",
10789
- "type": "string",
10790
- "required": true,
10791
- "positional": true,
10792
- "help": "The text content of your reply"
10793
- }
10794
- ],
10795
- "columns": [
10796
- "status",
10797
- "message",
10798
- "text"
10799
- ],
10800
- "type": "ts",
10801
- "modulePath": "twitter/reply.js"
10802
- },
10803
12091
  {
10804
12092
  "site": "twitter",
10805
12093
  "name": "search",
@@ -11048,9 +12336,12 @@
11048
12336
  }
11049
12337
  ],
11050
12338
  "columns": [
12339
+ "id",
11051
12340
  "rank",
11052
12341
  "title",
11053
- "replies"
12342
+ "node",
12343
+ "replies",
12344
+ "url"
11054
12345
  ],
11055
12346
  "pipeline": [
11056
12347
  {
@@ -11060,9 +12351,12 @@
11060
12351
  },
11061
12352
  {
11062
12353
  "map": {
12354
+ "id": "${{ item.id }}",
11063
12355
  "rank": "${{ index + 1 }}",
11064
12356
  "title": "${{ item.title }}",
11065
- "replies": "${{ item.replies }}"
12357
+ "node": "${{ item.node.title }}",
12358
+ "replies": "${{ item.replies }}",
12359
+ "url": "${{ item.url }}"
11066
12360
  }
11067
12361
  },
11068
12362
  {
@@ -11089,9 +12383,12 @@
11089
12383
  }
11090
12384
  ],
11091
12385
  "columns": [
12386
+ "id",
11092
12387
  "rank",
11093
12388
  "title",
11094
- "replies"
12389
+ "node",
12390
+ "replies",
12391
+ "url"
11095
12392
  ],
11096
12393
  "pipeline": [
11097
12394
  {
@@ -11101,9 +12398,12 @@
11101
12398
  },
11102
12399
  {
11103
12400
  "map": {
12401
+ "id": "${{ item.id }}",
11104
12402
  "rank": "${{ index + 1 }}",
11105
12403
  "title": "${{ item.title }}",
11106
- "replies": "${{ item.replies }}"
12404
+ "node": "${{ item.node.title }}",
12405
+ "replies": "${{ item.replies }}",
12406
+ "url": "${{ item.url }}"
11107
12407
  }
11108
12408
  },
11109
12409
  {
@@ -11373,7 +12673,12 @@
11373
12673
  }
11374
12674
  ],
11375
12675
  "columns": [
12676
+ "id",
11376
12677
  "title",
12678
+ "content",
12679
+ "member",
12680
+ "created",
12681
+ "node",
11377
12682
  "replies",
11378
12683
  "url"
11379
12684
  ],
@@ -11388,7 +12693,12 @@
11388
12693
  },
11389
12694
  {
11390
12695
  "map": {
12696
+ "id": "${{ item.id }}",
11391
12697
  "title": "${{ item.title }}",
12698
+ "content": "${{ item.content }}",
12699
+ "member": "${{ item.member.username }}",
12700
+ "created": "${{ item.created }}",
12701
+ "node": "${{ item.node.title }}",
11392
12702
  "replies": "${{ item.replies }}",
11393
12703
  "url": "${{ item.url }}"
11394
12704
  }
@@ -11747,7 +13057,7 @@
11747
13057
  "type": "str",
11748
13058
  "required": true,
11749
13059
  "positional": true,
11750
- "help": "Book ID (numeric, from search or shelf results)"
13060
+ "help": "Book ID from search or shelf results"
11751
13061
  }
11752
13062
  ],
11753
13063
  "columns": [
@@ -12060,7 +13370,7 @@
12060
13370
  {
12061
13371
  "site": "xiaohongshu",
12062
13372
  "name": "comments",
12063
- "description": "获取小红书笔记评论(仅主评论,不含楼中楼)",
13373
+ "description": "获取小红书笔记评论(支持楼中楼子回复)",
12064
13374
  "domain": "www.xiaohongshu.com",
12065
13375
  "strategy": "cookie",
12066
13376
  "browser": true,
@@ -12070,14 +13380,21 @@
12070
13380
  "type": "str",
12071
13381
  "required": true,
12072
13382
  "positional": true,
12073
- "help": "Note ID or full /explore/<id> URL"
13383
+ "help": "Note ID or full URL (preserves xsec_token for access)"
12074
13384
  },
12075
13385
  {
12076
13386
  "name": "limit",
12077
13387
  "type": "int",
12078
13388
  "default": 20,
12079
13389
  "required": false,
12080
- "help": "Number of comments (max 50)"
13390
+ "help": "Number of top-level comments (max 50)"
13391
+ },
13392
+ {
13393
+ "name": "with-replies",
13394
+ "type": "boolean",
13395
+ "default": false,
13396
+ "required": false,
13397
+ "help": "Include nested replies (楼中楼)"
12081
13398
  }
12082
13399
  ],
12083
13400
  "columns": [
@@ -12085,7 +13402,9 @@
12085
13402
  "author",
12086
13403
  "text",
12087
13404
  "likes",
12088
- "time"
13405
+ "time",
13406
+ "is_reply",
13407
+ "reply_to"
12089
13408
  ],
12090
13409
  "type": "ts",
12091
13410
  "modulePath": "xiaohongshu/comments.js"
@@ -12236,7 +13555,7 @@
12236
13555
  "type": "str",
12237
13556
  "required": true,
12238
13557
  "positional": true,
12239
- "help": "Note ID (from URL)"
13558
+ "help": "Note ID, full URL, or short link"
12240
13559
  },
12241
13560
  {
12242
13561
  "name": "output",
@@ -12308,6 +13627,29 @@
12308
13627
  ],
12309
13628
  "type": "yaml"
12310
13629
  },
13630
+ {
13631
+ "site": "xiaohongshu",
13632
+ "name": "note",
13633
+ "description": "获取小红书笔记正文和互动数据",
13634
+ "domain": "www.xiaohongshu.com",
13635
+ "strategy": "cookie",
13636
+ "browser": true,
13637
+ "args": [
13638
+ {
13639
+ "name": "note-id",
13640
+ "type": "str",
13641
+ "required": true,
13642
+ "positional": true,
13643
+ "help": "Note ID or full URL (preserves xsec_token for access)"
13644
+ }
13645
+ ],
13646
+ "columns": [
13647
+ "field",
13648
+ "value"
13649
+ ],
13650
+ "type": "ts",
13651
+ "modulePath": "xiaohongshu/note.js"
13652
+ },
12311
13653
  {
12312
13654
  "site": "xiaohongshu",
12313
13655
  "name": "notifications",
@@ -12514,7 +13856,34 @@
12514
13856
  "date"
12515
13857
  ],
12516
13858
  "type": "ts",
12517
- "modulePath": "xiaoyuzhou/episode.js"
13859
+ "modulePath": "xiaoyuzhou/episode.js"
13860
+ },
13861
+ {
13862
+ "site": "xiaoyuzhou",
13863
+ "name": "podcast",
13864
+ "description": "View a Xiaoyuzhou podcast profile",
13865
+ "domain": "www.xiaoyuzhoufm.com",
13866
+ "strategy": "public",
13867
+ "browser": false,
13868
+ "args": [
13869
+ {
13870
+ "name": "id",
13871
+ "type": "str",
13872
+ "required": true,
13873
+ "positional": true,
13874
+ "help": "Podcast ID (from xiaoyuzhoufm.com URL)"
13875
+ }
13876
+ ],
13877
+ "columns": [
13878
+ "title",
13879
+ "author",
13880
+ "description",
13881
+ "subscribers",
13882
+ "episodes",
13883
+ "updated"
13884
+ ],
13885
+ "type": "ts",
13886
+ "modulePath": "xiaoyuzhou/podcast.js"
12518
13887
  },
12519
13888
  {
12520
13889
  "site": "xiaoyuzhou",
@@ -12550,31 +13919,40 @@
12550
13919
  "modulePath": "xiaoyuzhou/podcast-episodes.js"
12551
13920
  },
12552
13921
  {
12553
- "site": "xiaoyuzhou",
12554
- "name": "podcast",
12555
- "description": "View a Xiaoyuzhou podcast profile",
12556
- "domain": "www.xiaoyuzhoufm.com",
12557
- "strategy": "public",
12558
- "browser": false,
13922
+ "site": "xueqiu",
13923
+ "name": "comments",
13924
+ "description": "获取单只股票的讨论动态",
13925
+ "domain": "xueqiu.com",
13926
+ "strategy": "cookie",
13927
+ "browser": true,
12559
13928
  "args": [
12560
13929
  {
12561
- "name": "id",
13930
+ "name": "symbol",
12562
13931
  "type": "str",
12563
13932
  "required": true,
12564
13933
  "positional": true,
12565
- "help": "Podcast ID (from xiaoyuzhoufm.com URL)"
13934
+ "help": "Stock symbol, e.g. SH600519, AAPL, or 00700"
13935
+ },
13936
+ {
13937
+ "name": "limit",
13938
+ "type": "int",
13939
+ "default": 20,
13940
+ "required": false,
13941
+ "help": "Number of discussion posts to return"
12566
13942
  }
12567
13943
  ],
12568
13944
  "columns": [
12569
- "title",
12570
13945
  "author",
12571
- "description",
12572
- "subscribers",
12573
- "episodes",
12574
- "updated"
13946
+ "text",
13947
+ "likes",
13948
+ "replies",
13949
+ "retweets",
13950
+ "created_at",
13951
+ "url"
12575
13952
  ],
12576
13953
  "type": "ts",
12577
- "modulePath": "xiaoyuzhou/podcast.js"
13954
+ "modulePath": "xueqiu/comments.js",
13955
+ "navigateBefore": false
12578
13956
  },
12579
13957
  {
12580
13958
  "site": "xueqiu",
@@ -12739,8 +14117,8 @@
12739
14117
  },
12740
14118
  {
12741
14119
  "site": "xueqiu",
12742
- "name": "hot-stock",
12743
- "description": "获取雪球热门股票榜",
14120
+ "name": "hot",
14121
+ "description": "获取雪球热门动态",
12744
14122
  "domain": "xueqiu.com",
12745
14123
  "strategy": "cookie",
12746
14124
  "browser": true,
@@ -12752,39 +14130,29 @@
12752
14130
  "required": false,
12753
14131
  "positional": false,
12754
14132
  "help": "返回数量,默认 20,最大 50"
12755
- },
12756
- {
12757
- "name": "type",
12758
- "type": "str",
12759
- "default": "10",
12760
- "required": false,
12761
- "positional": false,
12762
- "help": "榜单类型 10=人气榜(默认) 12=关注榜"
12763
14133
  }
12764
14134
  ],
12765
14135
  "columns": [
12766
14136
  "rank",
12767
- "symbol",
12768
- "name",
12769
- "price",
12770
- "changePercent",
12771
- "heat"
14137
+ "author",
14138
+ "text",
14139
+ "likes",
14140
+ "url"
12772
14141
  ],
12773
14142
  "pipeline": [
12774
14143
  {
12775
14144
  "navigate": "https://xueqiu.com"
12776
14145
  },
12777
14146
  {
12778
- "evaluate": "(async () => {\n const count = ${{ args.limit }};\n const type = ${{ args.type | json }};\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/hot_stock/list.json?size=${count}&type=${type}`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.items) throw new Error('获取失败');\n return d.data.items.map((s, i) => ({\n rank: i + 1,\n symbol: s.symbol,\n name: s.name,\n price: s.current,\n changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,\n heat: s.value,\n rank_change: s.rank_change,\n url: 'https://xueqiu.com/S/' + s.symbol\n }));\n})()\n"
14147
+ "evaluate": "(async () => {\n const resp = await fetch('https://xueqiu.com/statuses/hot/listV3.json?source=hot&page=1', {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n const list = d.list || [];\n \n const strip = (html) => (html || '').replace(/<[^>]+>/g, '').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').trim();\n return list.map((item, i) => {\n const user = item.user || {};\n return {\n rank: i + 1,\n text: strip(item.description).substring(0, 200),\n url: 'https://xueqiu.com/' + user.id + '/' + item.id,\n author: user.screen_name,\n likes: item.fav_count,\n retweets: item.retweet_count,\n replies: item.reply_count\n };\n });\n})()\n"
12779
14148
  },
12780
14149
  {
12781
14150
  "map": {
12782
14151
  "rank": "${{ item.rank }}",
12783
- "symbol": "${{ item.symbol }}",
12784
- "name": "${{ item.name }}",
12785
- "price": "${{ item.price }}",
12786
- "changePercent": "${{ item.changePercent }}",
12787
- "heat": "${{ item.heat }}"
14152
+ "author": "${{ item.author }}",
14153
+ "text": "${{ item.text }}",
14154
+ "likes": "${{ item.likes }}",
14155
+ "url": "${{ item.url }}"
12788
14156
  }
12789
14157
  },
12790
14158
  {
@@ -12795,8 +14163,8 @@
12795
14163
  },
12796
14164
  {
12797
14165
  "site": "xueqiu",
12798
- "name": "hot",
12799
- "description": "获取雪球热门动态",
14166
+ "name": "hot-stock",
14167
+ "description": "获取雪球热门股票榜",
12800
14168
  "domain": "xueqiu.com",
12801
14169
  "strategy": "cookie",
12802
14170
  "browser": true,
@@ -12808,29 +14176,39 @@
12808
14176
  "required": false,
12809
14177
  "positional": false,
12810
14178
  "help": "返回数量,默认 20,最大 50"
14179
+ },
14180
+ {
14181
+ "name": "type",
14182
+ "type": "str",
14183
+ "default": "10",
14184
+ "required": false,
14185
+ "positional": false,
14186
+ "help": "榜单类型 10=人气榜(默认) 12=关注榜"
12811
14187
  }
12812
14188
  ],
12813
14189
  "columns": [
12814
14190
  "rank",
12815
- "author",
12816
- "text",
12817
- "likes",
12818
- "url"
14191
+ "symbol",
14192
+ "name",
14193
+ "price",
14194
+ "changePercent",
14195
+ "heat"
12819
14196
  ],
12820
14197
  "pipeline": [
12821
14198
  {
12822
14199
  "navigate": "https://xueqiu.com"
12823
14200
  },
12824
14201
  {
12825
- "evaluate": "(async () => {\n const resp = await fetch('https://xueqiu.com/statuses/hot/listV3.json?source=hot&page=1', {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n const list = d.list || [];\n \n const strip = (html) => (html || '').replace(/<[^>]+>/g, '').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').trim();\n return list.map((item, i) => {\n const user = item.user || {};\n return {\n rank: i + 1,\n text: strip(item.description).substring(0, 200),\n url: 'https://xueqiu.com/' + user.id + '/' + item.id,\n author: user.screen_name,\n likes: item.fav_count,\n retweets: item.retweet_count,\n replies: item.reply_count\n };\n });\n})()\n"
14202
+ "evaluate": "(async () => {\n const count = ${{ args.limit }};\n const type = ${{ args.type | json }};\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/hot_stock/list.json?size=${count}&type=${type}`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.items) throw new Error('获取失败');\n return d.data.items.map((s, i) => ({\n rank: i + 1,\n symbol: s.symbol,\n name: s.name,\n price: s.current,\n changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,\n heat: s.value,\n rank_change: s.rank_change,\n url: 'https://xueqiu.com/S/' + s.symbol\n }));\n})()\n"
12826
14203
  },
12827
14204
  {
12828
14205
  "map": {
12829
14206
  "rank": "${{ item.rank }}",
12830
- "author": "${{ item.author }}",
12831
- "text": "${{ item.text }}",
12832
- "likes": "${{ item.likes }}",
12833
- "url": "${{ item.url }}"
14207
+ "symbol": "${{ item.symbol }}",
14208
+ "name": "${{ item.name }}",
14209
+ "price": "${{ item.price }}",
14210
+ "changePercent": "${{ item.changePercent }}",
14211
+ "heat": "${{ item.heat }}"
12834
14212
  }
12835
14213
  },
12836
14214
  {
@@ -13672,6 +15050,27 @@
13672
15050
  "default": 20,
13673
15051
  "required": false,
13674
15052
  "help": "Max results (max 50)"
15053
+ },
15054
+ {
15055
+ "name": "type",
15056
+ "type": "str",
15057
+ "default": "",
15058
+ "required": false,
15059
+ "help": "Filter type: shorts, video, channel, playlist"
15060
+ },
15061
+ {
15062
+ "name": "upload",
15063
+ "type": "str",
15064
+ "default": "",
15065
+ "required": false,
15066
+ "help": "Upload date: hour, today, week, month, year"
15067
+ },
15068
+ {
15069
+ "name": "sort",
15070
+ "type": "str",
15071
+ "default": "",
15072
+ "required": false,
15073
+ "help": "Sort by: relevance, date, views, rating"
13675
15074
  }
13676
15075
  ],
13677
15076
  "columns": [
@@ -13680,6 +15079,7 @@
13680
15079
  "channel",
13681
15080
  "views",
13682
15081
  "duration",
15082
+ "published",
13683
15083
  "url"
13684
15084
  ],
13685
15085
  "type": "ts",
@@ -13910,5 +15310,174 @@
13910
15310
  }
13911
15311
  ],
13912
15312
  "type": "yaml"
15313
+ },
15314
+ {
15315
+ "site": "zsxq",
15316
+ "name": "dynamics",
15317
+ "description": "获取所有星球的最新动态",
15318
+ "domain": "wx.zsxq.com",
15319
+ "strategy": "cookie",
15320
+ "browser": true,
15321
+ "args": [
15322
+ {
15323
+ "name": "limit",
15324
+ "type": "int",
15325
+ "default": 20,
15326
+ "required": false,
15327
+ "help": "Number of dynamics to return"
15328
+ }
15329
+ ],
15330
+ "columns": [
15331
+ "time",
15332
+ "group",
15333
+ "author",
15334
+ "title",
15335
+ "comments",
15336
+ "likes",
15337
+ "url"
15338
+ ],
15339
+ "type": "ts",
15340
+ "modulePath": "zsxq/dynamics.js"
15341
+ },
15342
+ {
15343
+ "site": "zsxq",
15344
+ "name": "groups",
15345
+ "description": "列出当前账号加入的星球",
15346
+ "domain": "wx.zsxq.com",
15347
+ "strategy": "cookie",
15348
+ "browser": true,
15349
+ "args": [
15350
+ {
15351
+ "name": "limit",
15352
+ "type": "int",
15353
+ "default": 50,
15354
+ "required": false,
15355
+ "help": "Number of groups to return"
15356
+ }
15357
+ ],
15358
+ "columns": [
15359
+ "group_id",
15360
+ "name",
15361
+ "category",
15362
+ "members",
15363
+ "topics",
15364
+ "joined_at",
15365
+ "url"
15366
+ ],
15367
+ "type": "ts",
15368
+ "modulePath": "zsxq/groups.js"
15369
+ },
15370
+ {
15371
+ "site": "zsxq",
15372
+ "name": "search",
15373
+ "description": "搜索星球内容",
15374
+ "domain": "wx.zsxq.com",
15375
+ "strategy": "cookie",
15376
+ "browser": true,
15377
+ "args": [
15378
+ {
15379
+ "name": "keyword",
15380
+ "type": "str",
15381
+ "required": true,
15382
+ "positional": true,
15383
+ "help": "Search keyword"
15384
+ },
15385
+ {
15386
+ "name": "limit",
15387
+ "type": "int",
15388
+ "default": 20,
15389
+ "required": false,
15390
+ "help": "Number of results to return"
15391
+ },
15392
+ {
15393
+ "name": "group_id",
15394
+ "type": "str",
15395
+ "required": false,
15396
+ "help": "Optional group id; defaults to the active group in Chrome"
15397
+ }
15398
+ ],
15399
+ "columns": [
15400
+ "topic_id",
15401
+ "group",
15402
+ "author",
15403
+ "title",
15404
+ "comments",
15405
+ "likes",
15406
+ "time",
15407
+ "url"
15408
+ ],
15409
+ "type": "ts",
15410
+ "modulePath": "zsxq/search.js"
15411
+ },
15412
+ {
15413
+ "site": "zsxq",
15414
+ "name": "topic",
15415
+ "description": "获取单个话题详情和评论",
15416
+ "domain": "wx.zsxq.com",
15417
+ "strategy": "cookie",
15418
+ "browser": true,
15419
+ "args": [
15420
+ {
15421
+ "name": "id",
15422
+ "type": "str",
15423
+ "required": true,
15424
+ "positional": true,
15425
+ "help": "Topic ID"
15426
+ },
15427
+ {
15428
+ "name": "comment_limit",
15429
+ "type": "int",
15430
+ "default": 20,
15431
+ "required": false,
15432
+ "help": "Number of comments to fetch"
15433
+ }
15434
+ ],
15435
+ "columns": [
15436
+ "topic_id",
15437
+ "type",
15438
+ "author",
15439
+ "title",
15440
+ "comments",
15441
+ "likes",
15442
+ "comment_preview",
15443
+ "url"
15444
+ ],
15445
+ "type": "ts",
15446
+ "modulePath": "zsxq/topic.js"
15447
+ },
15448
+ {
15449
+ "site": "zsxq",
15450
+ "name": "topics",
15451
+ "description": "获取当前星球的话题列表",
15452
+ "domain": "wx.zsxq.com",
15453
+ "strategy": "cookie",
15454
+ "browser": true,
15455
+ "args": [
15456
+ {
15457
+ "name": "limit",
15458
+ "type": "int",
15459
+ "default": 20,
15460
+ "required": false,
15461
+ "help": "Number of topics to return"
15462
+ },
15463
+ {
15464
+ "name": "group_id",
15465
+ "type": "str",
15466
+ "required": false,
15467
+ "help": "Optional group id; defaults to the active group in Chrome"
15468
+ }
15469
+ ],
15470
+ "columns": [
15471
+ "topic_id",
15472
+ "type",
15473
+ "author",
15474
+ "title",
15475
+ "comments",
15476
+ "likes",
15477
+ "time",
15478
+ "url"
15479
+ ],
15480
+ "type": "ts",
15481
+ "modulePath": "zsxq/topics.js"
13913
15482
  }
13914
15483
  ]