@sovovs/bycli 1.8.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/cli-manifest.json +0 -61
  2. package/clis/twitter/search.js +3 -3
  3. package/dist/src/adapter-shadow.js +2 -2
  4. package/dist/src/browser/analyze.d.ts +10 -99
  5. package/dist/src/browser/analyze.js +10 -226
  6. package/dist/src/browser/cdp.js +67 -7
  7. package/dist/src/browser/daemon-client.d.ts +2 -0
  8. package/dist/src/browser/daemon-client.js +1 -1
  9. package/dist/src/browser/extension-capabilities.d.ts +13 -0
  10. package/dist/src/browser/extension-capabilities.js +22 -0
  11. package/dist/src/browser/extension-capabilities.test.d.ts +1 -0
  12. package/dist/src/browser/extension-version-metadata.test.d.ts +1 -0
  13. package/dist/src/browser/navigation-guard.d.ts +78 -0
  14. package/dist/src/browser/navigation-guard.js +142 -0
  15. package/dist/src/browser/navigation-guard.test.d.ts +1 -0
  16. package/dist/src/browser/page.d.ts +1 -0
  17. package/dist/src/browser/page.js +20 -1
  18. package/dist/src/browser/url-policy.d.ts +89 -0
  19. package/dist/src/browser/url-policy.js +311 -0
  20. package/dist/src/browser/url-policy.test.d.ts +1 -0
  21. package/dist/src/browser/verify-fixture.js +2 -2
  22. package/dist/src/build-manifest.js +4 -2
  23. package/dist/src/capabilityRouting.d.ts +3 -2
  24. package/dist/src/capabilityRouting.js +10 -2
  25. package/dist/src/cli.js +11 -14
  26. package/dist/src/commanderAdapter.js +5 -5
  27. package/dist/src/config-paths.d.ts +19 -0
  28. package/dist/src/config-paths.js +31 -0
  29. package/dist/src/daemon.js +256 -0
  30. package/dist/src/discovery.d.ts +10 -3
  31. package/dist/src/discovery.js +20 -10
  32. package/dist/src/discovery.test.d.ts +1 -0
  33. package/dist/src/execution.d.ts +5 -0
  34. package/dist/src/execution.js +272 -48
  35. package/dist/src/help.js +8 -8
  36. package/dist/src/main.js +18 -2
  37. package/dist/src/manifest-schema.d.ts +9 -0
  38. package/dist/src/manifest-schema.js +162 -0
  39. package/dist/src/manifest-schema.test.d.ts +1 -0
  40. package/dist/src/manifest-types.d.ts +1 -1
  41. package/dist/src/observation/redaction.js +10 -4
  42. package/dist/src/plugin.js +11 -8
  43. package/dist/src/recorder/highlevel/analyze.d.ts +29 -0
  44. package/dist/src/recorder/highlevel/analyze.js +91 -0
  45. package/dist/src/recorder/highlevel/init.d.ts +125 -0
  46. package/dist/src/recorder/highlevel/init.js +279 -0
  47. package/dist/src/recorder/highlevel/init.test.d.ts +1 -0
  48. package/dist/src/recorder/highlevel/verify.d.ts +73 -0
  49. package/dist/src/recorder/highlevel/verify.js +74 -0
  50. package/dist/src/recorder/http/analyze-runner.d.ts +28 -0
  51. package/dist/src/recorder/http/analyze-runner.js +78 -0
  52. package/dist/src/recorder/http/analyze-runner.test.d.ts +1 -0
  53. package/dist/src/recorder/http/handlers.d.ts +51 -0
  54. package/dist/src/recorder/http/handlers.js +219 -0
  55. package/dist/src/recorder/http/wrapper-config.d.ts +20 -0
  56. package/dist/src/recorder/http/wrapper-config.js +82 -0
  57. package/dist/src/recorder/http/wrapper-envelope.d.ts +31 -0
  58. package/dist/src/recorder/http/wrapper-envelope.js +51 -0
  59. package/dist/src/recorder/http/wrapper-gates.d.ts +16 -0
  60. package/dist/src/recorder/http/wrapper-gates.js +28 -0
  61. package/dist/src/recorder/http/wrapper-metrics.d.ts +1 -0
  62. package/dist/src/recorder/http/wrapper-metrics.js +5 -0
  63. package/dist/src/recorder/http/wrapper-registry.d.ts +50 -0
  64. package/dist/src/recorder/http/wrapper-registry.js +98 -0
  65. package/dist/src/recorder/http/wrapper-server.d.ts +59 -0
  66. package/dist/src/recorder/http/wrapper-server.js +240 -0
  67. package/dist/src/recorder/http/wrapper.test.d.ts +1 -0
  68. package/dist/src/recorder/observability/logger.d.ts +5 -0
  69. package/dist/src/recorder/observability/logger.js +13 -0
  70. package/dist/src/recorder/runner/config.d.ts +34 -0
  71. package/dist/src/recorder/runner/config.js +84 -0
  72. package/dist/src/recorder/runner/config.test.d.ts +1 -0
  73. package/dist/src/recorder/runner/reap.d.ts +79 -0
  74. package/dist/src/recorder/runner/reap.js +230 -0
  75. package/dist/src/recorder/runner/reap.test.d.ts +1 -0
  76. package/dist/src/recorder/runner/runner-port.d.ts +95 -0
  77. package/dist/src/recorder/runner/runner-port.js +518 -0
  78. package/dist/src/recorder/runner/runner-port.test.d.ts +1 -0
  79. package/dist/src/recorder/runner/session-keys.d.ts +28 -0
  80. package/dist/src/recorder/runner/session-keys.js +72 -0
  81. package/dist/src/recorder/runner/session-keys.test.d.ts +1 -0
  82. package/dist/src/recorder/runner/verify-runner-main.d.ts +96 -0
  83. package/dist/src/recorder/runner/verify-runner-main.js +292 -0
  84. package/dist/src/recorder/runner/verify-runner-main.test.d.ts +1 -0
  85. package/dist/src/registry-api.d.ts +1 -1
  86. package/dist/src/registry-api.types.test.d.ts +1 -0
  87. package/dist/src/registry-transaction.d.ts +42 -0
  88. package/dist/src/registry-transaction.js +194 -0
  89. package/dist/src/registry-transaction.test.d.ts +1 -0
  90. package/dist/src/registry.d.ts +58 -16
  91. package/dist/src/registry.js +131 -15
  92. package/dist/src/serialization.d.ts +1 -1
  93. package/dist/src/serialization.js +3 -3
  94. package/dist/src/types.d.ts +2 -0
  95. package/package.json +8 -5
  96. package/scripts/m1-daemon-navigate-drive.mjs +138 -0
  97. package/scripts/m1-extension-spike.mjs +237 -0
  98. package/scripts/m1-live-spike.mjs +156 -0
  99. package/scripts/m6b-connect-back-spike.sh +31 -0
  100. package/clis/12306/utils.test.js +0 -331
  101. package/clis/1688/assets.test.js +0 -39
  102. package/clis/1688/download.test.js +0 -31
  103. package/clis/1688/item.test.js +0 -67
  104. package/clis/1688/search.test.js +0 -75
  105. package/clis/1688/shared.test.js +0 -57
  106. package/clis/1688/store.test.js +0 -62
  107. package/clis/36kr/article.test.js +0 -46
  108. package/clis/36kr/hot.test.js +0 -15
  109. package/clis/36kr/news.test.js +0 -85
  110. package/clis/51job/utils.test.js +0 -69
  111. package/clis/_atlassian/shared.test.js +0 -170
  112. package/clis/aibase/news.test.js +0 -59
  113. package/clis/amazon/bestsellers.test.js +0 -29
  114. package/clis/amazon/discussion.test.js +0 -124
  115. package/clis/amazon/offer.test.js +0 -29
  116. package/clis/amazon/product.test.js +0 -24
  117. package/clis/amazon/rankings.test.js +0 -41
  118. package/clis/amazon/search.test.js +0 -22
  119. package/clis/amazon/shared.test.js +0 -44
  120. package/clis/apple-podcasts/commands.test.js +0 -119
  121. package/clis/apple-podcasts/utils.test.js +0 -57
  122. package/clis/arxiv/arxiv.test.js +0 -112
  123. package/clis/baidu-scholar/search.test.js +0 -23
  124. package/clis/barchart/greeks.test.js +0 -138
  125. package/clis/bilibili/comment.test.js +0 -153
  126. package/clis/bilibili/comments.test.js +0 -142
  127. package/clis/bilibili/dynamic.test.js +0 -68
  128. package/clis/bilibili/hot.test.js +0 -17
  129. package/clis/bilibili/subtitle.test.js +0 -196
  130. package/clis/bilibili/summary.test.js +0 -210
  131. package/clis/bilibili/utils.test.js +0 -61
  132. package/clis/bilibili/video.test.js +0 -132
  133. package/clis/binance/commands.test.js +0 -70
  134. package/clis/bloomberg/utils.test.js +0 -129
  135. package/clis/booking/booking.test.js +0 -356
  136. package/clis/boss/chatlist.test.js +0 -211
  137. package/clis/boss/chatmsg.test.js +0 -230
  138. package/clis/boss/search.test.js +0 -78
  139. package/clis/boss/utils.test.js +0 -34
  140. package/clis/brave/search.test.js +0 -76
  141. package/clis/chaoxing/utils.test.js +0 -45
  142. package/clis/chatgpt/commands.test.js +0 -45
  143. package/clis/chatgpt/envelope.test.js +0 -108
  144. package/clis/chatgpt/image.test.js +0 -188
  145. package/clis/chatgpt/utils.test.js +0 -330
  146. package/clis/chatgpt-app/ax.test.js +0 -35
  147. package/clis/chatwise/composer.test.js +0 -186
  148. package/clis/chess/analyze.test.js +0 -79
  149. package/clis/chess/game.test.js +0 -178
  150. package/clis/chess/games.test.js +0 -164
  151. package/clis/chess/stats.test.js +0 -79
  152. package/clis/chess/utils.test.js +0 -230
  153. package/clis/claude/ask.test.js +0 -338
  154. package/clis/claude/commands.test.js +0 -118
  155. package/clis/claude/utils.test.js +0 -148
  156. package/clis/cnki/search.test.js +0 -18
  157. package/clis/codex/sidebar.test.js +0 -329
  158. package/clis/coingecko/coingecko.test.js +0 -109
  159. package/clis/confluence/commands.test.js +0 -195
  160. package/clis/coupang/coupang.test.js +0 -159
  161. package/clis/coupang/utils.test.js +0 -62
  162. package/clis/ctrip/ctrip.test.js +0 -719
  163. package/clis/dblp/dblp.test.js +0 -397
  164. package/clis/deepseek/ask.test.js +0 -312
  165. package/clis/deepseek/detail.test.js +0 -81
  166. package/clis/deepseek/send.test.js +0 -107
  167. package/clis/deepseek/utils.test.js +0 -370
  168. package/clis/defillama/defillama.test.js +0 -99
  169. package/clis/devto/devto.test.js +0 -236
  170. package/clis/dianping/dianping.test.js +0 -578
  171. package/clis/douban/download.test.js +0 -170
  172. package/clis/douban/movie-hot.test.js +0 -14
  173. package/clis/douban/search.test.js +0 -11
  174. package/clis/douban/subject.test.js +0 -11
  175. package/clis/douban/utils.test.js +0 -438
  176. package/clis/doubao/detail.test.js +0 -42
  177. package/clis/doubao/history.test.js +0 -37
  178. package/clis/doubao/utils.test.js +0 -344
  179. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  180. package/clis/douyin/_shared/creation-id.test.js +0 -22
  181. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  182. package/clis/douyin/_shared/sts2.test.js +0 -27
  183. package/clis/douyin/_shared/text-extra.test.js +0 -37
  184. package/clis/douyin/_shared/timing.test.js +0 -28
  185. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  186. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  187. package/clis/douyin/_shared/transcode.test.js +0 -91
  188. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  189. package/clis/douyin/activities.test.js +0 -55
  190. package/clis/douyin/collections.test.js +0 -45
  191. package/clis/douyin/delete.test.js +0 -100
  192. package/clis/douyin/draft.test.js +0 -335
  193. package/clis/douyin/drafts.test.js +0 -11
  194. package/clis/douyin/hashtag.test.js +0 -171
  195. package/clis/douyin/location.test.js +0 -23
  196. package/clis/douyin/profile.test.js +0 -46
  197. package/clis/douyin/publish-upload-id.test.js +0 -170
  198. package/clis/douyin/publish.test.js +0 -38
  199. package/clis/douyin/stats.test.js +0 -22
  200. package/clis/douyin/update.test.js +0 -11
  201. package/clis/douyin/user-videos.test.js +0 -151
  202. package/clis/douyin/videos.test.js +0 -54
  203. package/clis/duckduckgo/search.test.js +0 -128
  204. package/clis/duckduckgo/suggest.test.js +0 -66
  205. package/clis/eastmoney/hot-rank.test.js +0 -59
  206. package/clis/endoflife/endoflife.test.js +0 -51
  207. package/clis/facebook/feed.test.js +0 -169
  208. package/clis/facebook/marketplace.test.js +0 -91
  209. package/clis/facebook/notifications.test.js +0 -458
  210. package/clis/facebook/search.test.js +0 -55
  211. package/clis/flathub/flathub.test.js +0 -90
  212. package/clis/flomo/memos.test.js +0 -144
  213. package/clis/gemini/ask.test.js +0 -100
  214. package/clis/gemini/deep-research-result.test.js +0 -155
  215. package/clis/gemini/deep-research.test.js +0 -181
  216. package/clis/gemini/reply-state.test.js +0 -671
  217. package/clis/gemini/utils.test.js +0 -198
  218. package/clis/geogebra/geogebra.test.js +0 -175
  219. package/clis/gitee/search.test.js +0 -65
  220. package/clis/gitee/user.test.js +0 -63
  221. package/clis/google/utils.test.js +0 -75
  222. package/clis/google-scholar/cite.test.js +0 -47
  223. package/clis/google-scholar/profile.test.js +0 -49
  224. package/clis/google-scholar/search.test.js +0 -71
  225. package/clis/goproxy/goproxy.test.js +0 -103
  226. package/clis/gov-law/commands.test.js +0 -39
  227. package/clis/gov-policy/gov-policy.test.js +0 -224
  228. package/clis/grok/ask.test.js +0 -29
  229. package/clis/grok/utils.test.js +0 -103
  230. package/clis/hackernews/hackernews.test.js +0 -132
  231. package/clis/hf/hf.test.js +0 -16
  232. package/clis/hupu/hot.test.js +0 -224
  233. package/clis/imdb/utils.test.js +0 -88
  234. package/clis/indeed/indeed.test.js +0 -375
  235. package/clis/instagram/_shared/private-publish.test.js +0 -705
  236. package/clis/instagram/_shared/protocol-capture.test.js +0 -114
  237. package/clis/instagram/download.test.js +0 -118
  238. package/clis/instagram/note.test.js +0 -53
  239. package/clis/instagram/post.test.js +0 -1647
  240. package/clis/instagram/reel.test.js +0 -167
  241. package/clis/instagram/story.test.js +0 -134
  242. package/clis/jd/commands.test.js +0 -41
  243. package/clis/jd/item.test.js +0 -354
  244. package/clis/jianyu/search.test.js +0 -153
  245. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  246. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  247. package/clis/jike/read.test.js +0 -86
  248. package/clis/jira/commands.test.js +0 -287
  249. package/clis/juejin/search.js +0 -123
  250. package/clis/juejin/search.test.js +0 -98
  251. package/clis/lesswrong/frontpage.test.js +0 -37
  252. package/clis/lichess/lichess.test.js +0 -85
  253. package/clis/linkedin/connect.test.js +0 -213
  254. package/clis/linkedin/inbox.test.js +0 -152
  255. package/clis/linkedin/job-detail.test.js +0 -38
  256. package/clis/linkedin/jobs-preferences.test.js +0 -43
  257. package/clis/linkedin/people-search.test.js +0 -216
  258. package/clis/linkedin/post-analytics.test.js +0 -40
  259. package/clis/linkedin/posts.test.js +0 -40
  260. package/clis/linkedin/profile-analytics.test.js +0 -67
  261. package/clis/linkedin/profile-experience.test.js +0 -152
  262. package/clis/linkedin/profile-projects.test.js +0 -111
  263. package/clis/linkedin/profile-read.test.js +0 -77
  264. package/clis/linkedin/safe-send.test.js +0 -204
  265. package/clis/linkedin/salesnav-inbox.test.js +0 -113
  266. package/clis/linkedin/salesnav-message.test.js +0 -172
  267. package/clis/linkedin/salesnav-search.test.js +0 -76
  268. package/clis/linkedin/salesnav-thread.test.js +0 -79
  269. package/clis/linkedin/search.test.js +0 -222
  270. package/clis/linkedin/sent-invitations.test.js +0 -62
  271. package/clis/linkedin/services-read.test.js +0 -105
  272. package/clis/linkedin/thread-snapshot.test.js +0 -89
  273. package/clis/linkedin/timeline.test.js +0 -81
  274. package/clis/linkedin-learning/course.test.js +0 -114
  275. package/clis/linkedin-learning/search.test.js +0 -144
  276. package/clis/linkedin-learning/trending.test.js +0 -123
  277. package/clis/linux-do/feed.test.js +0 -153
  278. package/clis/linux-do/topic-content.test.js +0 -59
  279. package/clis/lobsters/lobsters.test.js +0 -169
  280. package/clis/notebooklm/add-source.test.js +0 -97
  281. package/clis/notebooklm/compat.test.js +0 -16
  282. package/clis/notebooklm/create.test.js +0 -58
  283. package/clis/notebooklm/generate-audio.test.js +0 -63
  284. package/clis/notebooklm/generate-slides.test.js +0 -75
  285. package/clis/notebooklm/history.test.js +0 -58
  286. package/clis/notebooklm/note-list.test.js +0 -56
  287. package/clis/notebooklm/notes-get.test.js +0 -72
  288. package/clis/notebooklm/open.test.js +0 -63
  289. package/clis/notebooklm/rpc.test.js +0 -131
  290. package/clis/notebooklm/source-fulltext.test.js +0 -106
  291. package/clis/notebooklm/source-get.test.js +0 -84
  292. package/clis/notebooklm/source-guide.test.js +0 -104
  293. package/clis/notebooklm/summary.test.js +0 -78
  294. package/clis/notebooklm/utils.test.js +0 -449
  295. package/clis/notebooklm/write-note.test.js +0 -70
  296. package/clis/nuget/nuget.test.js +0 -111
  297. package/clis/oeis/oeis.test.js +0 -88
  298. package/clis/ones/task-helpers.test.js +0 -12
  299. package/clis/ones/worklog.test.js +0 -20
  300. package/clis/openfda/openfda.test.js +0 -114
  301. package/clis/openreview/openreview.test.js +0 -427
  302. package/clis/osv/osv.test.js +0 -97
  303. package/clis/paperreview/commands.test.js +0 -243
  304. package/clis/paperreview/utils.test.js +0 -49
  305. package/clis/pixiv/download.test.js +0 -87
  306. package/clis/pixiv/illusts.test.js +0 -99
  307. package/clis/pixiv/search.test.js +0 -83
  308. package/clis/powerchina/search.test.js +0 -93
  309. package/clis/producthunt/utils.test.js +0 -64
  310. package/clis/pubmed/pubmed.test.js +0 -276
  311. package/clis/quark/utils.test.js +0 -58
  312. package/clis/qwen/utils.test.js +0 -45
  313. package/clis/reddit/extract-media.test.js +0 -149
  314. package/clis/reddit/frontpage.test.js +0 -34
  315. package/clis/reddit/home.test.js +0 -170
  316. package/clis/reddit/hot.test.js +0 -32
  317. package/clis/reddit/popular.test.js +0 -26
  318. package/clis/reddit/read.test.js +0 -335
  319. package/clis/reddit/reply.test.js +0 -89
  320. package/clis/reddit/search.test.js +0 -26
  321. package/clis/reddit/subreddit-info.test.js +0 -163
  322. package/clis/reddit/subreddit.test.js +0 -31
  323. package/clis/reddit/subscribed.test.js +0 -168
  324. package/clis/reddit/whoami.test.js +0 -105
  325. package/clis/rednote/navigation.test.js +0 -26
  326. package/clis/rednote/rednote.test.js +0 -222
  327. package/clis/rest-countries/rest-countries.test.js +0 -83
  328. package/clis/reuters/reuters.test.js +0 -299
  329. package/clis/rfc/rfc.test.js +0 -74
  330. package/clis/sinafinance/stock.test.js +0 -59
  331. package/clis/spotify/utils.test.js +0 -67
  332. package/clis/stackoverflow/stackoverflow.test.js +0 -404
  333. package/clis/steam/steam.test.js +0 -46
  334. package/clis/substack/utils.test.js +0 -44
  335. package/clis/suno/commands.test.js +0 -188
  336. package/clis/suno/download.test.js +0 -151
  337. package/clis/suno/generate.test.js +0 -252
  338. package/clis/suno/utils.test.js +0 -329
  339. package/clis/taobao/commands.test.js +0 -41
  340. package/clis/tdx/hot-rank.test.js +0 -59
  341. package/clis/ths/hot-rank.test.js +0 -64
  342. package/clis/tieba/commands.test.js +0 -79
  343. package/clis/tieba/utils.test.js +0 -290
  344. package/clis/tiktok/creator-videos.test.js +0 -113
  345. package/clis/tiktok/refactor.test.js +0 -389
  346. package/clis/tiktok/write-refactor.test.js +0 -370
  347. package/clis/toutiao/toutiao.test.js +0 -378
  348. package/clis/tvmaze/tvmaze.test.js +0 -93
  349. package/clis/twitter/bookmark-folder.test.js +0 -395
  350. package/clis/twitter/bookmark-folders.test.js +0 -152
  351. package/clis/twitter/bookmark.test.js +0 -74
  352. package/clis/twitter/bookmarks.test.js +0 -205
  353. package/clis/twitter/delete.test.js +0 -85
  354. package/clis/twitter/device-follow.test.js +0 -287
  355. package/clis/twitter/download.test.js +0 -457
  356. package/clis/twitter/followers.test.js +0 -62
  357. package/clis/twitter/following.test.js +0 -338
  358. package/clis/twitter/hide-reply.test.js +0 -76
  359. package/clis/twitter/like.test.js +0 -73
  360. package/clis/twitter/likes.test.js +0 -220
  361. package/clis/twitter/list-add.test.js +0 -133
  362. package/clis/twitter/list-create.test.js +0 -169
  363. package/clis/twitter/list-remove.test.js +0 -110
  364. package/clis/twitter/list-tweets.test.js +0 -196
  365. package/clis/twitter/lists.test.js +0 -253
  366. package/clis/twitter/post.test.js +0 -258
  367. package/clis/twitter/profile.test.js +0 -39
  368. package/clis/twitter/quote.test.js +0 -194
  369. package/clis/twitter/reply.test.js +0 -237
  370. package/clis/twitter/retweet.test.js +0 -73
  371. package/clis/twitter/search.test.js +0 -349
  372. package/clis/twitter/shared.test.js +0 -794
  373. package/clis/twitter/thread.test.js +0 -58
  374. package/clis/twitter/timeline.test.js +0 -104
  375. package/clis/twitter/trending.test.js +0 -15
  376. package/clis/twitter/tweets.test.js +0 -362
  377. package/clis/twitter/unbookmark.test.js +0 -73
  378. package/clis/twitter/unlike.test.js +0 -75
  379. package/clis/twitter/unretweet.test.js +0 -73
  380. package/clis/twitter/utils.test.js +0 -169
  381. package/clis/uisdc/news.test.js +0 -66
  382. package/clis/uiverse/_shared.test.js +0 -62
  383. package/clis/uiverse/navigation.test.js +0 -12
  384. package/clis/upwork/upwork.test.js +0 -566
  385. package/clis/wanfang/search.test.js +0 -23
  386. package/clis/web/read.test.js +0 -392
  387. package/clis/weibo/delete.test.js +0 -94
  388. package/clis/weibo/envelope.test.js +0 -85
  389. package/clis/weibo/favorites.test.js +0 -114
  390. package/clis/weibo/publish.test.js +0 -192
  391. package/clis/weibo/user-posts.test.js +0 -92
  392. package/clis/weibo/utils.test.js +0 -36
  393. package/clis/weixin/drafts.test.js +0 -69
  394. package/clis/weixin/search.test.js +0 -227
  395. package/clis/weread/ai-outline.test.js +0 -83
  396. package/clis/weread/book-search.test.js +0 -242
  397. package/clis/weread/commands.test.js +0 -398
  398. package/clis/weread/private-api-regression.test.js +0 -369
  399. package/clis/weread/search-regression.test.js +0 -494
  400. package/clis/weread/utils.test.js +0 -128
  401. package/clis/weread-official/commands.test.js +0 -385
  402. package/clis/weread-official/utils.test.js +0 -242
  403. package/clis/wikidata/wikidata.test.js +0 -83
  404. package/clis/wikipedia/trending.test.js +0 -57
  405. package/clis/wttr/wttr.test.js +0 -84
  406. package/clis/xianyu/chat.test.js +0 -84
  407. package/clis/xianyu/im.test.js +0 -253
  408. package/clis/xianyu/item.test.js +0 -56
  409. package/clis/xianyu/publish.test.js +0 -220
  410. package/clis/xianyu/search.test.js +0 -17
  411. package/clis/xiaoe/xiaoe.test.js +0 -486
  412. package/clis/xiaohongshu/comments.test.js +0 -258
  413. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  414. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  415. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  416. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  417. package/clis/xiaohongshu/delete-note.test.js +0 -172
  418. package/clis/xiaohongshu/download.test.js +0 -316
  419. package/clis/xiaohongshu/navigation.test.js +0 -34
  420. package/clis/xiaohongshu/note.test.js +0 -249
  421. package/clis/xiaohongshu/publish.test.js +0 -608
  422. package/clis/xiaohongshu/search.test.js +0 -325
  423. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  424. package/clis/xiaoyuzhou/auth.test.js +0 -124
  425. package/clis/xiaoyuzhou/download.test.js +0 -135
  426. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  427. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  428. package/clis/xiaoyuzhou/utils.test.js +0 -39
  429. package/clis/xueqiu/comments.test.js +0 -696
  430. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  431. package/clis/xueqiu/utils.test.js +0 -26
  432. package/clis/yahoo/search.test.js +0 -94
  433. package/clis/youdao/note.test.js +0 -99
  434. package/clis/youtube/channel.test.js +0 -59
  435. package/clis/youtube/feed.test.js +0 -131
  436. package/clis/youtube/transcript-group.test.js +0 -99
  437. package/clis/youtube/transcript.test.js +0 -296
  438. package/clis/youtube/utils.test.js +0 -84
  439. package/clis/yuanbao/ask.test.js +0 -124
  440. package/clis/yuanbao/new.test.js +0 -30
  441. package/clis/yuanbao/shared.test.js +0 -80
  442. package/clis/zhihu/answer-comments.test.js +0 -287
  443. package/clis/zhihu/answer-detail.test.js +0 -338
  444. package/clis/zhihu/answer.test.js +0 -54
  445. package/clis/zhihu/collection.test.js +0 -337
  446. package/clis/zhihu/collections.test.js +0 -182
  447. package/clis/zhihu/comment.test.js +0 -50
  448. package/clis/zhihu/download.test.js +0 -12
  449. package/clis/zhihu/favorite.test.js +0 -59
  450. package/clis/zhihu/follow.test.js +0 -42
  451. package/clis/zhihu/like.test.js +0 -41
  452. package/clis/zhihu/question.test.js +0 -251
  453. package/clis/zhihu/recommend.test.js +0 -143
  454. package/clis/zhihu/search.test.js +0 -198
  455. package/clis/zhihu/target.test.js +0 -77
  456. package/clis/zhihu/text.test.js +0 -24
  457. package/clis/zhihu/write-shared.test.js +0 -176
  458. package/clis/zlibrary/commands.test.js +0 -65
  459. package/clis/zsxq/search.test.js +0 -24
  460. package/clis/zsxq/topic.test.js +0 -30
  461. package/clis/zsxq/topics.test.js +0 -24
  462. package/clis/zsxq/utils.test.js +0 -31
  463. package/dist/src/adapter-shadow.test.js +0 -49
  464. package/dist/src/adapter-source.test.js +0 -29
  465. package/dist/src/browser/analyze.test.js +0 -166
  466. package/dist/src/browser/article-extract.e2e.test.js +0 -105
  467. package/dist/src/browser/article-extract.test.js +0 -94
  468. package/dist/src/browser/ax-snapshot.test.js +0 -91
  469. package/dist/src/browser/base-page.test.js +0 -758
  470. package/dist/src/browser/cdp-click-fixture.test.js +0 -87
  471. package/dist/src/browser/cdp.test.js +0 -79
  472. package/dist/src/browser/compound.test.js +0 -175
  473. package/dist/src/browser/daemon-client.test.js +0 -199
  474. package/dist/src/browser/dom-helpers.test.js +0 -106
  475. package/dist/src/browser/dom-snapshot.test.js +0 -313
  476. package/dist/src/browser/errors.test.js +0 -60
  477. package/dist/src/browser/extract.test.js +0 -129
  478. package/dist/src/browser/find.test.js +0 -180
  479. package/dist/src/browser/html-tree.test.js +0 -181
  480. package/dist/src/browser/network-cache.test.js +0 -58
  481. package/dist/src/browser/network-key.test.js +0 -49
  482. package/dist/src/browser/page.test.js +0 -378
  483. package/dist/src/browser/shape-filter.test.js +0 -101
  484. package/dist/src/browser/shape.test.js +0 -82
  485. package/dist/src/browser/stealth.test.js +0 -134
  486. package/dist/src/browser/target-errors.test.js +0 -94
  487. package/dist/src/browser/target-resolver.test.js +0 -118
  488. package/dist/src/browser/utils.test.js +0 -29
  489. package/dist/src/browser/verify-fixture.test.js +0 -219
  490. package/dist/src/browser.test.js +0 -232
  491. package/dist/src/build-manifest.test.js +0 -341
  492. package/dist/src/capabilityRouting.test.js +0 -63
  493. package/dist/src/cli-argv-preprocess.test.js +0 -209
  494. package/dist/src/cli.test.js +0 -2803
  495. package/dist/src/commanderAdapter.test.js +0 -352
  496. package/dist/src/commands/daemon.test.js +0 -219
  497. package/dist/src/completion.test.js +0 -24
  498. package/dist/src/convention-audit.test.js +0 -247
  499. package/dist/src/daemon.test.js +0 -60
  500. package/dist/src/doctor.test.js +0 -263
  501. package/dist/src/download/article-download.test.js +0 -235
  502. package/dist/src/download/index.test.js +0 -140
  503. package/dist/src/download/media-download.test.js +0 -112
  504. package/dist/src/download/progress.test.js +0 -36
  505. package/dist/src/electron-apps.test.js +0 -49
  506. package/dist/src/engine.test.js +0 -312
  507. package/dist/src/errors.test.js +0 -109
  508. package/dist/src/execution.test.js +0 -623
  509. package/dist/src/extension-manifest-regression.test.js +0 -12
  510. package/dist/src/external.test.js +0 -146
  511. package/dist/src/help.test.js +0 -58
  512. package/dist/src/hooks.test.js +0 -92
  513. package/dist/src/interceptor.test.js +0 -81
  514. package/dist/src/launcher.test.js +0 -138
  515. package/dist/src/node-network.test.js +0 -55
  516. package/dist/src/observation/artifact.test.js +0 -121
  517. package/dist/src/observation/manager.test.js +0 -13
  518. package/dist/src/observation/redaction.test.js +0 -32
  519. package/dist/src/observation/retention.test.js +0 -118
  520. package/dist/src/observation/ring-buffer.test.js +0 -22
  521. package/dist/src/output.test.js +0 -53
  522. package/dist/src/package-exports.test.js +0 -112
  523. package/dist/src/pipeline/executor.test.js +0 -182
  524. package/dist/src/pipeline/steps/download.test.js +0 -102
  525. package/dist/src/pipeline/steps/fetch.test.js +0 -117
  526. package/dist/src/pipeline/template.test.js +0 -175
  527. package/dist/src/pipeline/transform.test.js +0 -133
  528. package/dist/src/plugin-manifest.test.js +0 -179
  529. package/dist/src/plugin-scaffold.test.js +0 -83
  530. package/dist/src/plugin.test.js +0 -1324
  531. package/dist/src/registry.test.js +0 -209
  532. package/dist/src/runtime-detect.test.js +0 -39
  533. package/dist/src/serialization.test.js +0 -78
  534. package/dist/src/snapshotFormatter.test.js +0 -521
  535. package/dist/src/tui.test.js +0 -19
  536. package/dist/src/update-check.test.js +0 -116
  537. package/dist/src/utils.test.js +0 -155
  538. package/dist/src/validate.test.js +0 -90
  539. package/dist/src/weixin-download.test.js +0 -45
@@ -1,63 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { mockGetNotebooklmPageState, mockReadCurrentNotebooklm, mockRequireNotebooklmSession, } = vi.hoisted(() => ({
3
- mockGetNotebooklmPageState: vi.fn(),
4
- mockReadCurrentNotebooklm: vi.fn(),
5
- mockRequireNotebooklmSession: vi.fn(),
6
- }));
7
- vi.mock('./utils.js', async () => {
8
- const actual = await vi.importActual('./utils.js');
9
- return {
10
- ...actual,
11
- getNotebooklmPageState: mockGetNotebooklmPageState,
12
- readCurrentNotebooklm: mockReadCurrentNotebooklm,
13
- requireNotebooklmSession: mockRequireNotebooklmSession,
14
- };
15
- });
16
- import { getRegistry } from '@sovovs/bycli/registry';
17
- import './open.js';
18
- describe('notebooklm open', () => {
19
- const command = getRegistry().get('notebooklm/open');
20
- beforeEach(() => {
21
- mockGetNotebooklmPageState.mockReset();
22
- mockReadCurrentNotebooklm.mockReset();
23
- mockRequireNotebooklmSession.mockReset();
24
- mockRequireNotebooklmSession.mockResolvedValue(undefined);
25
- mockGetNotebooklmPageState.mockResolvedValue({
26
- url: 'https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345',
27
- title: 'Browser Automation',
28
- hostname: 'notebooklm.google.com',
29
- kind: 'notebook',
30
- notebookId: '17e2b882-1234-1234-1234-abcdef012345',
31
- loginRequired: false,
32
- notebookCount: 1,
33
- });
34
- mockReadCurrentNotebooklm.mockResolvedValue({
35
- id: '17e2b882-1234-1234-1234-abcdef012345',
36
- title: 'Browser Automation',
37
- url: 'https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345',
38
- source: 'current-page',
39
- });
40
- });
41
- it('opens a notebook by id in the adapter session', async () => {
42
- const page = {
43
- goto: vi.fn(async () => { }),
44
- wait: vi.fn(async () => { }),
45
- };
46
- const result = await command.func(page, { notebook: '17e2b882-1234-1234-1234-abcdef012345' });
47
- expect(page.goto).toHaveBeenCalledWith('https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345');
48
- expect(result).toEqual([{
49
- id: '17e2b882-1234-1234-1234-abcdef012345',
50
- title: 'Browser Automation',
51
- url: 'https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345',
52
- source: 'current-page',
53
- }]);
54
- });
55
- it('accepts a full notebook url', async () => {
56
- const page = {
57
- goto: vi.fn(async () => { }),
58
- wait: vi.fn(async () => { }),
59
- };
60
- await command.func(page, { notebook: 'https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345?pli=1' });
61
- expect(page.goto).toHaveBeenCalledWith('https://notebooklm.google.com/notebook/17e2b882-1234-1234-1234-abcdef012345');
62
- });
63
- });
@@ -1,131 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { AuthRequiredError } from '@sovovs/bycli/errors';
3
- import { buildNotebooklmRpcBody, extractNotebooklmRpcResult, getNotebooklmPageAuth, parseNotebooklmChunkedResponse, unwrapNotebooklmEvaluateResult, } from './rpc.js';
4
- describe('notebooklm rpc transport', () => {
5
- it('unwraps Browser Bridge evaluate envelopes', () => {
6
- const data = { ok: true };
7
- expect(unwrapNotebooklmEvaluateResult({ session: 'site:notebooklm:abc', data })).toBe(data);
8
- expect(unwrapNotebooklmEvaluateResult(data)).toBe(data);
9
- });
10
-
11
- it('extracts auth tokens from the page html via page evaluation', async () => {
12
- const page = {
13
- evaluate: vi.fn(async (script) => {
14
- expect(script).toContain('document.documentElement.innerHTML');
15
- return {
16
- html: '<html>"SNlM0e":"csrf-123","FdrFJe":"sess-456"</html>',
17
- sourcePath: '/',
18
- };
19
- }),
20
- };
21
- await expect(getNotebooklmPageAuth(page)).resolves.toEqual({
22
- csrfToken: 'csrf-123',
23
- sessionId: 'sess-456',
24
- sourcePath: '/',
25
- authuser: '',
26
- });
27
- expect(page.evaluate).toHaveBeenCalledTimes(1);
28
- });
29
- it('extracts auth tokens when page evaluation is wrapped in a Browser Bridge envelope', async () => {
30
- const page = {
31
- evaluate: vi.fn(async () => ({
32
- session: 'site:notebooklm:abc',
33
- data: {
34
- html: '<html>"SNlM0e":"csrf-123","FdrFJe":"sess-456"</html>',
35
- sourcePath: '/notebook/nb-demo',
36
- },
37
- })),
38
- };
39
- await expect(getNotebooklmPageAuth(page)).resolves.toEqual({
40
- csrfToken: 'csrf-123',
41
- sessionId: 'sess-456',
42
- sourcePath: '/notebook/nb-demo',
43
- authuser: '',
44
- });
45
- });
46
- it('falls back to WIZ_global_data tokens when html regex data is missing', async () => {
47
- const page = {
48
- evaluate: vi.fn(async () => ({
49
- html: '<html><body>NotebookLM</body></html>',
50
- sourcePath: '/notebook/nb-demo',
51
- readyState: 'complete',
52
- csrfToken: 'csrf-wiz',
53
- sessionId: 'sess-wiz',
54
- })),
55
- };
56
- await expect(getNotebooklmPageAuth(page)).resolves.toEqual({
57
- csrfToken: 'csrf-wiz',
58
- sessionId: 'sess-wiz',
59
- sourcePath: '/notebook/nb-demo',
60
- authuser: '',
61
- });
62
- });
63
- it('retries token extraction once when the first probe returns no tokens', async () => {
64
- const page = {
65
- evaluate: vi.fn()
66
- .mockResolvedValueOnce({
67
- html: '<html><body>Loading…</body></html>',
68
- sourcePath: '/notebook/nb-demo',
69
- readyState: 'interactive',
70
- csrfToken: '',
71
- sessionId: '',
72
- })
73
- .mockResolvedValueOnce({
74
- html: '<html>"SNlM0e":"csrf-123","FdrFJe":"sess-456"</html>',
75
- sourcePath: '/notebook/nb-demo',
76
- readyState: 'complete',
77
- csrfToken: '',
78
- sessionId: '',
79
- }),
80
- wait: vi.fn(async () => undefined),
81
- };
82
- await expect(getNotebooklmPageAuth(page)).resolves.toEqual({
83
- csrfToken: 'csrf-123',
84
- sessionId: 'sess-456',
85
- sourcePath: '/notebook/nb-demo',
86
- authuser: '',
87
- });
88
- expect(page.evaluate).toHaveBeenCalledTimes(2);
89
- });
90
- it('builds the rpc body with the expected notebooklm payload shape', () => {
91
- const body = buildNotebooklmRpcBody('wXbhsf', [null, 1, null, [2]], 'csrf-123');
92
- expect(body).toContain('f.req=');
93
- expect(body).toContain('at=csrf-123');
94
- expect(body.endsWith('&')).toBe(true);
95
- expect(decodeURIComponent(body)).toContain('"[null,1,null,[2]]"');
96
- });
97
- it('parses chunked batchexecute responses into json chunks', () => {
98
- const raw = `)]}'\n107\n[["wrb.fr","wXbhsf","[[[\\\"Notebook One\\\",null,\\\"nb1\\\",null,null,[null,false,null,null,null,[1704067200]]]]]"]]`;
99
- const chunks = parseNotebooklmChunkedResponse(raw);
100
- expect(chunks).toHaveLength(1);
101
- expect(Array.isArray(chunks[0])).toBe(true);
102
- expect(chunks[0]).toEqual([
103
- [
104
- 'wrb.fr',
105
- 'wXbhsf',
106
- '[[["Notebook One",null,"nb1",null,null,[null,false,null,null,null,[1704067200]]]]]',
107
- ],
108
- ]);
109
- });
110
- it('extracts the rpc payload from wrb.fr responses', () => {
111
- const raw = `)]}'\n107\n[["wrb.fr","wXbhsf","[[[\\\"Notebook One\\\",null,\\\"nb1\\\",null,null,[null,false,null,null,null,[1704067200]]]]]"]]`;
112
- const result = extractNotebooklmRpcResult(raw, 'wXbhsf');
113
- expect(result).toEqual([
114
- [
115
- ['Notebook One', null, 'nb1', null, null, [null, false, null, null, null, [1704067200]]],
116
- ],
117
- ]);
118
- });
119
- it('classifies auth errors as AuthRequiredError', () => {
120
- const raw = `)]}'\n25\n[["er",null,null,null,null,401,"generic"]]`;
121
- expect(() => extractNotebooklmRpcResult(raw, 'wXbhsf')).toThrow(AuthRequiredError);
122
- try {
123
- extractNotebooklmRpcResult(raw, 'wXbhsf');
124
- }
125
- catch (error) {
126
- expect(error).toBeInstanceOf(AuthRequiredError);
127
- expect(error.domain).toBe('notebooklm.google.com');
128
- expect(error.code).toBe('AUTH_REQUIRED');
129
- }
130
- });
131
- });
@@ -1,106 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { mockListNotebooklmSourcesViaRpc, mockListNotebooklmSourcesFromPage, mockGetNotebooklmSourceFulltextViaRpc, mockGetNotebooklmPageState, mockRequireNotebooklmSession, } = vi.hoisted(() => ({
3
- mockListNotebooklmSourcesViaRpc: vi.fn(),
4
- mockListNotebooklmSourcesFromPage: vi.fn(),
5
- mockGetNotebooklmSourceFulltextViaRpc: vi.fn(),
6
- mockGetNotebooklmPageState: vi.fn(),
7
- mockRequireNotebooklmSession: vi.fn(),
8
- }));
9
- vi.mock('./utils.js', async () => {
10
- const actual = await vi.importActual('./utils.js');
11
- return {
12
- ...actual,
13
- listNotebooklmSourcesViaRpc: mockListNotebooklmSourcesViaRpc,
14
- listNotebooklmSourcesFromPage: mockListNotebooklmSourcesFromPage,
15
- getNotebooklmSourceFulltextViaRpc: mockGetNotebooklmSourceFulltextViaRpc,
16
- getNotebooklmPageState: mockGetNotebooklmPageState,
17
- requireNotebooklmSession: mockRequireNotebooklmSession,
18
- };
19
- });
20
- import { getRegistry } from '@sovovs/bycli/registry';
21
- import './source-fulltext.js';
22
- describe('notebooklm source-fulltext', () => {
23
- const command = getRegistry().get('notebooklm/source-fulltext');
24
- beforeEach(() => {
25
- mockListNotebooklmSourcesViaRpc.mockReset();
26
- mockListNotebooklmSourcesFromPage.mockReset();
27
- mockGetNotebooklmSourceFulltextViaRpc.mockReset();
28
- mockGetNotebooklmPageState.mockReset();
29
- mockRequireNotebooklmSession.mockReset();
30
- mockRequireNotebooklmSession.mockResolvedValue(undefined);
31
- mockGetNotebooklmPageState.mockResolvedValue({
32
- url: 'https://notebooklm.google.com/notebook/nb-demo',
33
- title: 'Browser Automation',
34
- hostname: 'notebooklm.google.com',
35
- kind: 'notebook',
36
- notebookId: 'nb-demo',
37
- loginRequired: false,
38
- notebookCount: 1,
39
- });
40
- });
41
- it('returns fulltext for a source matched from rpc source rows', async () => {
42
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([
43
- {
44
- id: 'src-1',
45
- notebook_id: 'nb-demo',
46
- title: '粘贴的文字',
47
- url: 'https://notebooklm.google.com/notebook/nb-demo',
48
- source: 'rpc',
49
- type: 'pasted-text',
50
- },
51
- ]);
52
- mockGetNotebooklmSourceFulltextViaRpc.mockResolvedValue({
53
- source_id: 'src-1',
54
- notebook_id: 'nb-demo',
55
- title: '粘贴的文字',
56
- kind: 'generated-text',
57
- content: '第一段\n第二段',
58
- char_count: 7,
59
- url: 'https://example.com/source',
60
- source: 'rpc',
61
- });
62
- const result = await command.func({}, { source: 'src-1' });
63
- expect(result).toEqual([
64
- {
65
- source_id: 'src-1',
66
- notebook_id: 'nb-demo',
67
- title: '粘贴的文字',
68
- kind: 'generated-text',
69
- content: '第一段\n第二段',
70
- char_count: 7,
71
- url: 'https://example.com/source',
72
- source: 'rpc',
73
- },
74
- ]);
75
- });
76
- it('matches by title from dom rows when rpc source list is unavailable', async () => {
77
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([]);
78
- mockListNotebooklmSourcesFromPage.mockResolvedValue([
79
- {
80
- id: 'src-1',
81
- notebook_id: 'nb-demo',
82
- title: '粘贴的文字',
83
- url: 'https://notebooklm.google.com/notebook/nb-demo',
84
- source: 'current-page',
85
- },
86
- ]);
87
- mockGetNotebooklmSourceFulltextViaRpc.mockResolvedValue({
88
- source_id: 'src-1',
89
- notebook_id: 'nb-demo',
90
- title: '粘贴的文字',
91
- kind: 'generated-text',
92
- content: '第一段\n第二段',
93
- char_count: 7,
94
- url: 'https://example.com/source',
95
- source: 'rpc',
96
- });
97
- const result = await command.func({}, { source: '粘贴的文字' });
98
- expect(result).toEqual([
99
- expect.objectContaining({
100
- source_id: 'src-1',
101
- title: '粘贴的文字',
102
- content: '第一段\n第二段',
103
- }),
104
- ]);
105
- });
106
- });
@@ -1,84 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { mockListNotebooklmSourcesViaRpc, mockListNotebooklmSourcesFromPage, mockGetNotebooklmPageState, mockRequireNotebooklmSession, } = vi.hoisted(() => ({
3
- mockListNotebooklmSourcesViaRpc: vi.fn(),
4
- mockListNotebooklmSourcesFromPage: vi.fn(),
5
- mockGetNotebooklmPageState: vi.fn(),
6
- mockRequireNotebooklmSession: vi.fn(),
7
- }));
8
- vi.mock('./utils.js', async () => {
9
- const actual = await vi.importActual('./utils.js');
10
- return {
11
- ...actual,
12
- getNotebooklmPageState: mockGetNotebooklmPageState,
13
- listNotebooklmSourcesViaRpc: mockListNotebooklmSourcesViaRpc,
14
- listNotebooklmSourcesFromPage: mockListNotebooklmSourcesFromPage,
15
- requireNotebooklmSession: mockRequireNotebooklmSession,
16
- };
17
- });
18
- import { getRegistry } from '@sovovs/bycli/registry';
19
- import './source-get.js';
20
- describe('notebooklm source-get', () => {
21
- const command = getRegistry().get('notebooklm/source-get');
22
- beforeEach(() => {
23
- mockListNotebooklmSourcesViaRpc.mockReset();
24
- mockListNotebooklmSourcesFromPage.mockReset();
25
- mockGetNotebooklmPageState.mockReset();
26
- mockRequireNotebooklmSession.mockReset();
27
- mockRequireNotebooklmSession.mockResolvedValue(undefined);
28
- mockGetNotebooklmPageState.mockResolvedValue({
29
- url: 'https://notebooklm.google.com/notebook/nb-demo',
30
- title: 'Browser Automation',
31
- hostname: 'notebooklm.google.com',
32
- kind: 'notebook',
33
- notebookId: 'nb-demo',
34
- loginRequired: false,
35
- notebookCount: 1,
36
- });
37
- });
38
- it('returns a source by exact id from rpc results', async () => {
39
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([
40
- {
41
- id: 'src-1',
42
- notebook_id: 'nb-demo',
43
- title: 'Release Notes',
44
- url: 'https://notebooklm.google.com/notebook/nb-demo',
45
- source: 'rpc',
46
- type: 'web',
47
- },
48
- ]);
49
- const result = await command.func({}, { source: 'src-1' });
50
- expect(result).toEqual([
51
- {
52
- id: 'src-1',
53
- notebook_id: 'nb-demo',
54
- title: 'Release Notes',
55
- url: 'https://notebooklm.google.com/notebook/nb-demo',
56
- source: 'rpc',
57
- type: 'web',
58
- },
59
- ]);
60
- expect(mockListNotebooklmSourcesFromPage).not.toHaveBeenCalled();
61
- });
62
- it('falls back to page results and matches by title when rpc is empty', async () => {
63
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([]);
64
- mockListNotebooklmSourcesFromPage.mockResolvedValue([
65
- {
66
- id: 'Meeting Notes',
67
- notebook_id: 'nb-demo',
68
- title: 'Meeting Notes',
69
- url: 'https://notebooklm.google.com/notebook/nb-demo',
70
- source: 'current-page',
71
- },
72
- ]);
73
- const result = await command.func({}, { source: 'meeting notes' });
74
- expect(result).toEqual([
75
- {
76
- id: 'Meeting Notes',
77
- notebook_id: 'nb-demo',
78
- title: 'Meeting Notes',
79
- url: 'https://notebooklm.google.com/notebook/nb-demo',
80
- source: 'current-page',
81
- },
82
- ]);
83
- });
84
- });
@@ -1,104 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { mockListNotebooklmSourcesViaRpc, mockListNotebooklmSourcesFromPage, mockGetNotebooklmSourceGuideViaRpc, mockGetNotebooklmPageState, mockRequireNotebooklmSession, } = vi.hoisted(() => ({
3
- mockListNotebooklmSourcesViaRpc: vi.fn(),
4
- mockListNotebooklmSourcesFromPage: vi.fn(),
5
- mockGetNotebooklmSourceGuideViaRpc: vi.fn(),
6
- mockGetNotebooklmPageState: vi.fn(),
7
- mockRequireNotebooklmSession: vi.fn(),
8
- }));
9
- vi.mock('./utils.js', async () => {
10
- const actual = await vi.importActual('./utils.js');
11
- return {
12
- ...actual,
13
- listNotebooklmSourcesViaRpc: mockListNotebooklmSourcesViaRpc,
14
- listNotebooklmSourcesFromPage: mockListNotebooklmSourcesFromPage,
15
- getNotebooklmSourceGuideViaRpc: mockGetNotebooklmSourceGuideViaRpc,
16
- getNotebooklmPageState: mockGetNotebooklmPageState,
17
- requireNotebooklmSession: mockRequireNotebooklmSession,
18
- };
19
- });
20
- import { getRegistry } from '@sovovs/bycli/registry';
21
- import './source-guide.js';
22
- describe('notebooklm source-guide', () => {
23
- const command = getRegistry().get('notebooklm/source-guide');
24
- beforeEach(() => {
25
- mockListNotebooklmSourcesViaRpc.mockReset();
26
- mockListNotebooklmSourcesFromPage.mockReset();
27
- mockGetNotebooklmSourceGuideViaRpc.mockReset();
28
- mockGetNotebooklmPageState.mockReset();
29
- mockRequireNotebooklmSession.mockReset();
30
- mockRequireNotebooklmSession.mockResolvedValue(undefined);
31
- mockGetNotebooklmPageState.mockResolvedValue({
32
- url: 'https://notebooklm.google.com/notebook/nb-demo',
33
- title: 'Browser Automation',
34
- hostname: 'notebooklm.google.com',
35
- kind: 'notebook',
36
- notebookId: 'nb-demo',
37
- loginRequired: false,
38
- notebookCount: 1,
39
- });
40
- });
41
- it('returns source guide for a source matched from rpc source rows', async () => {
42
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([
43
- {
44
- id: 'src-yt',
45
- notebook_id: 'nb-demo',
46
- title: 'Video Source',
47
- url: 'https://notebooklm.google.com/notebook/nb-demo',
48
- source: 'rpc',
49
- type: 'youtube',
50
- type_code: 9,
51
- },
52
- ]);
53
- mockGetNotebooklmSourceGuideViaRpc.mockResolvedValue({
54
- source_id: 'src-yt',
55
- notebook_id: 'nb-demo',
56
- title: 'Video Source',
57
- type: 'youtube',
58
- summary: 'Guide summary.',
59
- keywords: ['AI', 'agents'],
60
- source: 'rpc',
61
- });
62
- const result = await command.func({}, { source: 'src-yt' });
63
- expect(result).toEqual([
64
- {
65
- source_id: 'src-yt',
66
- notebook_id: 'nb-demo',
67
- title: 'Video Source',
68
- type: 'youtube',
69
- summary: 'Guide summary.',
70
- keywords: ['AI', 'agents'],
71
- source: 'rpc',
72
- },
73
- ]);
74
- });
75
- it('matches by title from dom rows when rpc source list is unavailable', async () => {
76
- mockListNotebooklmSourcesViaRpc.mockResolvedValue([]);
77
- mockListNotebooklmSourcesFromPage.mockResolvedValue([
78
- {
79
- id: 'src-1',
80
- notebook_id: 'nb-demo',
81
- title: 'Example Source',
82
- url: 'https://notebooklm.google.com/notebook/nb-demo',
83
- source: 'current-page',
84
- },
85
- ]);
86
- mockGetNotebooklmSourceGuideViaRpc.mockResolvedValue({
87
- source_id: 'src-1',
88
- notebook_id: 'nb-demo',
89
- title: 'Example Source',
90
- type: null,
91
- summary: 'Guide summary.',
92
- keywords: ['topic'],
93
- source: 'rpc',
94
- });
95
- const result = await command.func({}, { source: 'example source' });
96
- expect(result).toEqual([
97
- expect.objectContaining({
98
- source_id: 'src-1',
99
- title: 'Example Source',
100
- summary: 'Guide summary.',
101
- }),
102
- ]);
103
- });
104
- });
@@ -1,78 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { mockReadNotebooklmSummaryFromPage, mockGetNotebooklmSummaryViaRpc, mockGetNotebooklmPageState, mockRequireNotebooklmSession, } = vi.hoisted(() => ({
3
- mockReadNotebooklmSummaryFromPage: vi.fn(),
4
- mockGetNotebooklmSummaryViaRpc: vi.fn(),
5
- mockGetNotebooklmPageState: vi.fn(),
6
- mockRequireNotebooklmSession: vi.fn(),
7
- }));
8
- vi.mock('./utils.js', async () => {
9
- const actual = await vi.importActual('./utils.js');
10
- return {
11
- ...actual,
12
- readNotebooklmSummaryFromPage: mockReadNotebooklmSummaryFromPage,
13
- getNotebooklmSummaryViaRpc: mockGetNotebooklmSummaryViaRpc,
14
- getNotebooklmPageState: mockGetNotebooklmPageState,
15
- requireNotebooklmSession: mockRequireNotebooklmSession,
16
- };
17
- });
18
- import { getRegistry } from '@sovovs/bycli/registry';
19
- import './summary.js';
20
- describe('notebooklm summary', () => {
21
- const command = getRegistry().get('notebooklm/summary');
22
- beforeEach(() => {
23
- mockReadNotebooklmSummaryFromPage.mockReset();
24
- mockGetNotebooklmSummaryViaRpc.mockReset();
25
- mockGetNotebooklmPageState.mockReset();
26
- mockRequireNotebooklmSession.mockReset();
27
- mockRequireNotebooklmSession.mockResolvedValue(undefined);
28
- mockGetNotebooklmPageState.mockResolvedValue({
29
- url: 'https://notebooklm.google.com/notebook/nb-demo',
30
- title: 'Browser Automation',
31
- hostname: 'notebooklm.google.com',
32
- kind: 'notebook',
33
- notebookId: 'nb-demo',
34
- loginRequired: false,
35
- notebookCount: 1,
36
- });
37
- });
38
- it('returns the current notebook summary from the visible page first', async () => {
39
- mockReadNotebooklmSummaryFromPage.mockResolvedValue({
40
- notebook_id: 'nb-demo',
41
- title: 'Browser Automation',
42
- summary: 'A concise notebook summary.',
43
- url: 'https://notebooklm.google.com/notebook/nb-demo',
44
- source: 'summary-dom',
45
- });
46
- const result = await command.func({}, {});
47
- expect(result).toEqual([
48
- {
49
- notebook_id: 'nb-demo',
50
- title: 'Browser Automation',
51
- summary: 'A concise notebook summary.',
52
- url: 'https://notebooklm.google.com/notebook/nb-demo',
53
- source: 'summary-dom',
54
- },
55
- ]);
56
- expect(mockGetNotebooklmSummaryViaRpc).not.toHaveBeenCalled();
57
- });
58
- it('falls back to rpc summary extraction when no visible summary block is found', async () => {
59
- mockReadNotebooklmSummaryFromPage.mockResolvedValue(null);
60
- mockGetNotebooklmSummaryViaRpc.mockResolvedValue({
61
- notebook_id: 'nb-demo',
62
- title: 'Browser Automation',
63
- summary: 'Summary recovered from rpc.',
64
- url: 'https://notebooklm.google.com/notebook/nb-demo',
65
- source: 'rpc',
66
- });
67
- const result = await command.func({}, {});
68
- expect(result).toEqual([
69
- {
70
- notebook_id: 'nb-demo',
71
- title: 'Browser Automation',
72
- summary: 'Summary recovered from rpc.',
73
- url: 'https://notebooklm.google.com/notebook/nb-demo',
74
- source: 'rpc',
75
- },
76
- ]);
77
- });
78
- });