@agentrhq/webcmd 0.1.1 → 0.2.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 (1290) hide show
  1. package/README.md +278 -20
  2. package/cli-manifest.json +16247 -34913
  3. package/clis/_atlassian/shared.js +1 -1
  4. package/clis/booking/search.js +4 -4
  5. package/clis/chatgpt/ask.js +2 -2
  6. package/clis/chatgpt/utils.js +41 -42
  7. package/clis/chatgpt/utils.test.js +23 -23
  8. package/clis/chatgpt-app/ax.js +5 -5
  9. package/clis/chatgpt-app/ax.test.js +8 -8
  10. package/clis/chatgpt-app/new.js +2 -2
  11. package/clis/codex/sidebar.js +1 -1
  12. package/clis/codex/sidebar.test.js +12 -12
  13. package/clis/coingecko/top.js +3 -3
  14. package/clis/dblp/dblp.test.js +1 -1
  15. package/clis/discord-app/search.js +1 -1
  16. package/clis/discord-app/utils.js +6 -6
  17. package/clis/facebook/__fixtures__/notifications-page.html +6 -6
  18. package/clis/facebook/add-friend.js +2 -2
  19. package/clis/facebook/feed.js +18 -18
  20. package/clis/facebook/friends.js +4 -4
  21. package/clis/facebook/groups.js +3 -3
  22. package/clis/facebook/join-group.js +2 -2
  23. package/clis/facebook/marketplace-inbox.js +3 -3
  24. package/clis/facebook/marketplace-listings.js +1 -1
  25. package/clis/facebook/notifications.js +14 -15
  26. package/clis/facebook/notifications.test.js +28 -29
  27. package/clis/gemini/ask.test.js +12 -12
  28. package/clis/gemini/deep-research-result.js +2 -2
  29. package/clis/gemini/deep-research-result.test.js +2 -2
  30. package/clis/gemini/deep-research.js +2 -2
  31. package/clis/gemini/deep-research.test.js +1 -1
  32. package/clis/gemini/models.js +11 -11
  33. package/clis/gemini/models.test.js +1 -1
  34. package/clis/gemini/reply-state.test.js +89 -89
  35. package/clis/gemini/utils.js +41 -41
  36. package/clis/gemini/utils.test.js +30 -30
  37. package/clis/geogebra/utils.js +1 -1
  38. package/clis/google-scholar/search.js +3 -3
  39. package/clis/grok/delete.js +1 -1
  40. package/clis/grok/export-all.js +2 -2
  41. package/clis/grok/export.js +2 -2
  42. package/clis/grok/pin.js +3 -3
  43. package/clis/grok/utils.js +12 -12
  44. package/clis/grok/utils.test.js +2 -2
  45. package/clis/indeed/indeed.test.js +3 -3
  46. package/clis/indeed/utils.js +1 -1
  47. package/clis/instagram/post.js +19 -19
  48. package/clis/instagram/post.test.js +2 -2
  49. package/clis/instagram/reel.js +6 -6
  50. package/clis/linkedin/connect.js +3 -3
  51. package/clis/linkedin/people-search.js +4 -4
  52. package/clis/linkedin/profile-experience.js +6 -6
  53. package/clis/linkedin/profile-experience.test.js +10 -10
  54. package/clis/linkedin/profile-read.js +1 -1
  55. package/clis/linkedin/safe-send.js +1 -1
  56. package/clis/linkedin/search.js +1 -1
  57. package/clis/linkedin/shared.js +2 -2
  58. package/clis/linkedin/timeline.js +5 -5
  59. package/clis/manus/manus.test.js +2 -2
  60. package/clis/medium/feed.js +3 -3
  61. package/clis/medium/search.js +3 -3
  62. package/clis/medium/user.js +3 -3
  63. package/clis/notebooklm/auth.js +2 -2
  64. package/clis/notebooklm/note-list.test.js +4 -4
  65. package/clis/notebooklm/notes-get.test.js +8 -8
  66. package/clis/notebooklm/source-fulltext.test.js +11 -11
  67. package/clis/notebooklm/utils.js +28 -28
  68. package/clis/notebooklm/utils.test.js +10 -10
  69. package/clis/pixiv/search.test.js +3 -3
  70. package/clis/qoder/quest.js +2 -2
  71. package/clis/reddit/home.js +2 -2
  72. package/clis/reddit/hot.js +1 -1
  73. package/clis/reddit/read.js +2 -2
  74. package/clis/reddit/read.test.js +1 -1
  75. package/clis/reddit/reply.js +2 -2
  76. package/clis/reddit/whoami.js +2 -2
  77. package/clis/reuters/article-detail.js +1 -1
  78. package/clis/reuters/search.js +1 -1
  79. package/clis/slock/attachment-upload.test.js +1 -1
  80. package/clis/slock/task-convert.js +1 -1
  81. package/clis/substack/feed.js +3 -3
  82. package/clis/substack/publication.js +3 -3
  83. package/clis/substack/search.js +4 -4
  84. package/clis/tiktok/comment.js +2 -2
  85. package/clis/tiktok/follow.js +4 -4
  86. package/clis/tiktok/like.js +1 -1
  87. package/clis/tiktok/save.js +1 -1
  88. package/clis/tiktok/unfollow.js +4 -4
  89. package/clis/tiktok/unlike.js +1 -1
  90. package/clis/tiktok/unsave.js +2 -2
  91. package/clis/tiktok/write-refactor.test.js +5 -5
  92. package/clis/twitter/accept.js +3 -3
  93. package/clis/twitter/followers.js +1 -1
  94. package/clis/twitter/list-remove-core.js +2 -2
  95. package/clis/twitter/list-tweets.test.js +3 -3
  96. package/clis/twitter/lists.js +6 -6
  97. package/clis/twitter/lists.test.js +2 -2
  98. package/clis/twitter/reply-dm.js +1 -1
  99. package/clis/twitter/shared.test.js +4 -5
  100. package/clis/twitter/trending.js +1 -1
  101. package/clis/twitter/utils.js +1 -1
  102. package/clis/web/read.js +1 -1
  103. package/clis/web/read.test.js +2 -2
  104. package/clis/yahoo-finance/quote.js +1 -1
  105. package/clis/youtube/history.js +4 -4
  106. package/clis/youtube/transcript-group.js +1 -1
  107. package/clis/youtube/transcript-group.test.js +5 -5
  108. package/clis/youtube/transcript.js +5 -5
  109. package/clis/youtube/video.js +4 -4
  110. package/clis/youtube/video.test.js +6 -6
  111. package/dist/src/adapter-shadow.d.ts +11 -0
  112. package/dist/src/adapter-shadow.js +72 -0
  113. package/dist/src/adapter-shadow.test.js +49 -0
  114. package/dist/src/adapter-source.d.ts +11 -0
  115. package/dist/src/adapter-source.js +24 -0
  116. package/dist/src/adapter-source.test.d.ts +1 -0
  117. package/dist/src/adapter-source.test.js +29 -0
  118. package/dist/src/brand.d.ts +9 -0
  119. package/dist/src/brand.js +9 -0
  120. package/dist/src/brand.test.d.ts +1 -0
  121. package/dist/src/brand.test.js +15 -0
  122. package/dist/src/browser/analyze.d.ts +118 -0
  123. package/dist/src/browser/analyze.js +405 -0
  124. package/dist/src/browser/analyze.test.d.ts +1 -0
  125. package/dist/src/browser/analyze.test.js +209 -0
  126. package/dist/src/browser/article-extract.d.ts +57 -0
  127. package/dist/src/browser/article-extract.e2e.test.d.ts +1 -0
  128. package/dist/src/browser/article-extract.e2e.test.js +105 -0
  129. package/dist/src/browser/article-extract.js +169 -0
  130. package/dist/src/browser/article-extract.test.d.ts +1 -0
  131. package/dist/src/browser/article-extract.test.js +94 -0
  132. package/dist/src/browser/ax-snapshot.d.ts +37 -0
  133. package/dist/src/browser/ax-snapshot.js +217 -0
  134. package/dist/src/browser/ax-snapshot.test.d.ts +1 -0
  135. package/dist/src/browser/ax-snapshot.test.js +91 -0
  136. package/dist/src/browser/base-page.d.ts +151 -0
  137. package/dist/src/browser/base-page.js +1060 -0
  138. package/dist/src/browser/base-page.test.d.ts +1 -0
  139. package/dist/src/browser/base-page.test.js +803 -0
  140. package/dist/src/browser/bridge-readiness.d.ts +14 -0
  141. package/dist/src/browser/bridge-readiness.js +24 -0
  142. package/dist/src/browser/bridge-readiness.test.d.ts +1 -0
  143. package/dist/src/browser/bridge-readiness.test.js +58 -0
  144. package/dist/src/browser/bridge.d.ts +26 -0
  145. package/dist/src/browser/bridge.js +58 -0
  146. package/dist/src/browser/cdp-click-fixture.test.d.ts +1 -0
  147. package/dist/src/browser/cdp-click-fixture.test.js +87 -0
  148. package/dist/src/browser/cdp.d.ts +46 -0
  149. package/dist/src/browser/cdp.js +536 -0
  150. package/dist/src/browser/cdp.test.d.ts +1 -0
  151. package/dist/src/browser/cdp.test.js +79 -0
  152. package/dist/src/browser/compound.d.ts +59 -0
  153. package/dist/src/browser/compound.js +112 -0
  154. package/dist/src/browser/compound.test.d.ts +1 -0
  155. package/dist/src/browser/compound.test.js +175 -0
  156. package/dist/src/browser/config.d.ts +2 -0
  157. package/dist/src/browser/config.js +14 -0
  158. package/dist/src/browser/daemon-client.d.ts +33 -0
  159. package/dist/src/browser/daemon-client.js +187 -0
  160. package/dist/src/browser/daemon-client.test.d.ts +1 -0
  161. package/dist/src/browser/daemon-client.test.js +411 -0
  162. package/dist/src/browser/daemon-lifecycle.d.ts +37 -0
  163. package/dist/src/browser/daemon-lifecycle.js +147 -0
  164. package/dist/src/browser/daemon-transport.d.ts +54 -0
  165. package/dist/src/browser/daemon-transport.js +68 -0
  166. package/dist/src/browser/daemon-version.d.ts +4 -0
  167. package/dist/src/browser/daemon-version.js +12 -0
  168. package/dist/src/browser/dom-helpers.d.ts +41 -0
  169. package/dist/src/browser/dom-helpers.js +239 -0
  170. package/dist/src/browser/dom-helpers.test.d.ts +1 -0
  171. package/dist/src/browser/dom-helpers.test.js +106 -0
  172. package/dist/src/browser/dom-snapshot.d.ts +93 -0
  173. package/dist/src/browser/dom-snapshot.js +894 -0
  174. package/dist/src/browser/dom-snapshot.test.d.ts +11 -0
  175. package/dist/src/browser/dom-snapshot.test.js +313 -0
  176. package/dist/src/browser/errors.d.ts +38 -0
  177. package/dist/src/browser/errors.js +90 -0
  178. package/dist/src/browser/errors.test.d.ts +1 -0
  179. package/dist/src/browser/errors.test.js +60 -0
  180. package/dist/src/browser/extract.d.ts +69 -0
  181. package/dist/src/browser/extract.js +132 -0
  182. package/dist/src/browser/extract.test.d.ts +1 -0
  183. package/dist/src/browser/extract.test.js +129 -0
  184. package/dist/src/browser/find.d.ts +84 -0
  185. package/dist/src/browser/find.js +398 -0
  186. package/dist/src/browser/find.test.d.ts +1 -0
  187. package/dist/src/browser/find.test.js +180 -0
  188. package/dist/src/browser/html-tree.d.ts +75 -0
  189. package/dist/src/browser/html-tree.js +112 -0
  190. package/dist/src/browser/html-tree.test.d.ts +1 -0
  191. package/dist/src/browser/html-tree.test.js +181 -0
  192. package/dist/src/browser/index.d.ts +14 -0
  193. package/dist/src/browser/index.js +12 -0
  194. package/dist/src/browser/network-cache.d.ts +49 -0
  195. package/dist/src/browser/network-cache.js +78 -0
  196. package/dist/src/browser/network-cache.test.d.ts +1 -0
  197. package/dist/src/browser/network-cache.test.js +75 -0
  198. package/dist/src/browser/network-interceptor.d.ts +11 -0
  199. package/dist/src/browser/network-interceptor.js +11 -0
  200. package/dist/src/browser/network-key.d.ts +22 -0
  201. package/dist/src/browser/network-key.js +66 -0
  202. package/dist/src/browser/network-key.test.d.ts +1 -0
  203. package/dist/src/browser/network-key.test.js +49 -0
  204. package/dist/src/browser/page.d.ts +83 -0
  205. package/dist/src/browser/page.js +453 -0
  206. package/dist/src/browser/page.test.d.ts +1 -0
  207. package/dist/src/browser/page.test.js +406 -0
  208. package/dist/src/browser/profile.d.ts +14 -0
  209. package/dist/src/browser/profile.js +86 -0
  210. package/dist/src/browser/protocol.d.ts +65 -0
  211. package/dist/src/browser/protocol.js +1 -0
  212. package/dist/src/browser/runtime/local-cloak/actions.d.ts +3 -0
  213. package/dist/src/browser/runtime/local-cloak/actions.js +240 -0
  214. package/dist/src/browser/runtime/local-cloak/downloads.d.ts +3 -0
  215. package/dist/src/browser/runtime/local-cloak/downloads.js +28 -0
  216. package/dist/src/browser/runtime/local-cloak/network.d.ts +28 -0
  217. package/dist/src/browser/runtime/local-cloak/network.js +120 -0
  218. package/dist/src/browser/runtime/local-cloak/network.test.d.ts +1 -0
  219. package/dist/src/browser/runtime/local-cloak/network.test.js +124 -0
  220. package/dist/src/browser/runtime/local-cloak/profiles.d.ts +6 -0
  221. package/dist/src/browser/runtime/local-cloak/profiles.js +17 -0
  222. package/dist/src/browser/runtime/local-cloak/profiles.test.d.ts +1 -0
  223. package/dist/src/browser/runtime/local-cloak/profiles.test.js +19 -0
  224. package/dist/src/browser/runtime/local-cloak/provider.d.ts +15 -0
  225. package/dist/src/browser/runtime/local-cloak/provider.js +27 -0
  226. package/dist/src/browser/runtime/local-cloak/provider.test.d.ts +1 -0
  227. package/dist/src/browser/runtime/local-cloak/provider.test.js +244 -0
  228. package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +77 -0
  229. package/dist/src/browser/runtime/local-cloak/session-manager.js +280 -0
  230. package/dist/src/browser/runtime/local-cloak/session-manager.test.d.ts +1 -0
  231. package/dist/src/browser/runtime/local-cloak/session-manager.test.js +92 -0
  232. package/dist/src/browser/runtime/provider.d.ts +9 -0
  233. package/dist/src/browser/runtime/provider.js +1 -0
  234. package/dist/src/browser/runtime/provider.test.d.ts +2 -0
  235. package/dist/src/browser/runtime/provider.test.js +49 -0
  236. package/dist/src/browser/shape-filter.d.ts +52 -0
  237. package/dist/src/browser/shape-filter.js +101 -0
  238. package/dist/src/browser/shape-filter.test.d.ts +1 -0
  239. package/dist/src/browser/shape-filter.test.js +101 -0
  240. package/dist/src/browser/shape.d.ts +23 -0
  241. package/dist/src/browser/shape.js +95 -0
  242. package/dist/src/browser/shape.test.d.ts +1 -0
  243. package/dist/src/browser/shape.test.js +82 -0
  244. package/dist/src/browser/stealth.d.ts +11 -0
  245. package/dist/src/browser/stealth.js +359 -0
  246. package/dist/src/browser/stealth.test.d.ts +1 -0
  247. package/dist/src/browser/stealth.test.js +134 -0
  248. package/dist/src/browser/tabs.d.ts +13 -0
  249. package/dist/src/browser/tabs.js +70 -0
  250. package/dist/src/browser/target-errors.d.ts +39 -0
  251. package/dist/src/browser/target-errors.js +45 -0
  252. package/dist/src/browser/target-errors.test.d.ts +1 -0
  253. package/dist/src/browser/target-errors.test.js +94 -0
  254. package/dist/src/browser/target-resolver.d.ts +158 -0
  255. package/dist/src/browser/target-resolver.js +570 -0
  256. package/dist/src/browser/target-resolver.test.d.ts +1 -0
  257. package/dist/src/browser/target-resolver.test.js +118 -0
  258. package/dist/src/browser/utils.d.ts +20 -0
  259. package/dist/src/browser/utils.js +64 -0
  260. package/dist/src/browser/utils.test.d.ts +1 -0
  261. package/dist/src/browser/utils.test.js +29 -0
  262. package/dist/src/browser/verify-fixture.d.ts +65 -0
  263. package/dist/src/browser/verify-fixture.js +318 -0
  264. package/dist/src/browser/verify-fixture.test.d.ts +1 -0
  265. package/dist/src/browser/verify-fixture.test.js +219 -0
  266. package/dist/src/browser/visual-refs.d.ts +11 -0
  267. package/dist/src/browser/visual-refs.js +108 -0
  268. package/dist/src/browser.test.d.ts +1 -0
  269. package/dist/src/browser.test.js +297 -0
  270. package/dist/src/build-manifest.d.ts +103 -0
  271. package/dist/src/build-manifest.js +363 -0
  272. package/dist/src/build-manifest.test.d.ts +1 -0
  273. package/dist/src/build-manifest.test.js +341 -0
  274. package/dist/src/capabilityRouting.d.ts +19 -0
  275. package/dist/src/capabilityRouting.js +56 -0
  276. package/dist/src/capabilityRouting.test.d.ts +1 -0
  277. package/dist/src/capabilityRouting.test.js +63 -0
  278. package/dist/src/cli-argv-preprocess.d.ts +63 -0
  279. package/dist/src/cli-argv-preprocess.js +303 -0
  280. package/dist/src/cli-argv-preprocess.test.d.ts +1 -0
  281. package/dist/src/cli-argv-preprocess.test.js +304 -0
  282. package/dist/src/cli.d.ts +79 -0
  283. package/dist/src/cli.js +3350 -0
  284. package/dist/src/cli.test.d.ts +1 -0
  285. package/dist/src/cli.test.js +3041 -0
  286. package/dist/src/commanderAdapter.d.ts +21 -0
  287. package/dist/src/commanderAdapter.js +208 -0
  288. package/dist/src/commanderAdapter.test.d.ts +1 -0
  289. package/dist/src/commanderAdapter.test.js +352 -0
  290. package/dist/src/commands/auth.d.ts +40 -0
  291. package/dist/src/commands/auth.js +434 -0
  292. package/dist/src/commands/auth.test.d.ts +1 -0
  293. package/dist/src/commands/auth.test.js +252 -0
  294. package/dist/src/commands/daemon.d.ts +9 -0
  295. package/dist/src/commands/daemon.js +91 -0
  296. package/dist/src/commands/daemon.test.d.ts +1 -0
  297. package/dist/src/commands/daemon.test.js +293 -0
  298. package/dist/src/completion-fast.d.ts +22 -0
  299. package/dist/src/completion-fast.js +88 -0
  300. package/dist/src/completion-shared.d.ts +13 -0
  301. package/dist/src/completion-shared.js +61 -0
  302. package/dist/src/completion.d.ts +21 -0
  303. package/dist/src/completion.js +68 -0
  304. package/dist/src/completion.test.d.ts +1 -0
  305. package/dist/src/completion.test.js +24 -0
  306. package/dist/src/constants.d.ts +18 -0
  307. package/dist/src/constants.js +41 -0
  308. package/dist/src/convention-audit.d.ts +50 -0
  309. package/dist/src/convention-audit.js +553 -0
  310. package/dist/src/convention-audit.test.d.ts +1 -0
  311. package/dist/src/convention-audit.test.js +255 -0
  312. package/dist/src/daemon/server.d.ts +13 -0
  313. package/dist/src/daemon/server.js +190 -0
  314. package/dist/src/daemon/server.test.d.ts +1 -0
  315. package/dist/src/daemon/server.test.js +184 -0
  316. package/dist/src/daemon-utils.d.ts +19 -0
  317. package/dist/src/daemon-utils.js +46 -0
  318. package/dist/src/daemon.d.ts +1 -0
  319. package/dist/src/daemon.js +27 -0
  320. package/dist/src/daemon.test.d.ts +1 -0
  321. package/dist/src/daemon.test.js +69 -0
  322. package/dist/src/discovery.d.ts +46 -0
  323. package/dist/src/discovery.js +341 -0
  324. package/dist/src/doctor.d.ts +39 -0
  325. package/dist/src/doctor.js +174 -0
  326. package/dist/src/doctor.test.d.ts +1 -0
  327. package/dist/src/doctor.test.js +309 -0
  328. package/dist/src/download/article-download.d.ts +72 -0
  329. package/dist/src/download/article-download.js +305 -0
  330. package/dist/src/download/article-download.test.d.ts +1 -0
  331. package/dist/src/download/article-download.test.js +235 -0
  332. package/dist/src/download/index.d.ts +71 -0
  333. package/dist/src/download/index.js +363 -0
  334. package/dist/src/download/index.test.d.ts +1 -0
  335. package/dist/src/download/index.test.js +173 -0
  336. package/dist/src/download/media-download.d.ts +49 -0
  337. package/dist/src/download/media-download.js +127 -0
  338. package/dist/src/download/media-download.test.d.ts +1 -0
  339. package/dist/src/download/media-download.test.js +112 -0
  340. package/dist/src/download/progress.d.ts +36 -0
  341. package/dist/src/download/progress.js +120 -0
  342. package/dist/src/download/progress.test.d.ts +1 -0
  343. package/dist/src/download/progress.test.js +36 -0
  344. package/dist/src/electron-apps.d.ts +31 -0
  345. package/dist/src/electron-apps.js +83 -0
  346. package/dist/src/electron-apps.test.d.ts +1 -0
  347. package/dist/src/electron-apps.test.js +67 -0
  348. package/dist/src/engine.test.d.ts +1 -0
  349. package/dist/src/engine.test.js +312 -0
  350. package/dist/src/errors.d.ts +114 -0
  351. package/dist/src/errors.js +174 -0
  352. package/dist/src/errors.test.d.ts +1 -0
  353. package/dist/src/errors.test.js +109 -0
  354. package/dist/src/execution.d.ts +24 -0
  355. package/dist/src/execution.js +511 -0
  356. package/dist/src/execution.test.d.ts +1 -0
  357. package/dist/src/execution.test.js +657 -0
  358. package/dist/src/external-clis.yaml +0 -37
  359. package/dist/src/external.d.ts +49 -0
  360. package/dist/src/external.js +211 -0
  361. package/dist/src/external.test.d.ts +1 -0
  362. package/dist/src/external.test.js +95 -0
  363. package/dist/src/generate-release-notes-cli.test.d.ts +1 -0
  364. package/dist/src/generate-release-notes-cli.test.js +140 -0
  365. package/dist/src/help.d.ts +88 -0
  366. package/dist/src/help.js +556 -0
  367. package/dist/src/help.test.d.ts +1 -0
  368. package/dist/src/help.test.js +58 -0
  369. package/dist/src/hooks.d.ts +46 -0
  370. package/dist/src/hooks.js +58 -0
  371. package/dist/src/hooks.test.d.ts +4 -0
  372. package/dist/src/hooks.test.js +92 -0
  373. package/dist/src/interceptor.d.ts +44 -0
  374. package/dist/src/interceptor.js +183 -0
  375. package/dist/src/interceptor.test.d.ts +4 -0
  376. package/dist/src/interceptor.test.js +81 -0
  377. package/dist/src/launcher.d.ts +41 -0
  378. package/dist/src/launcher.js +226 -0
  379. package/dist/src/launcher.test.d.ts +1 -0
  380. package/dist/src/launcher.test.js +153 -0
  381. package/dist/src/logger.d.ts +26 -0
  382. package/dist/src/logger.js +49 -0
  383. package/dist/src/main.d.ts +5 -0
  384. package/dist/src/main.js +177 -0
  385. package/dist/src/manifest-types.d.ts +43 -0
  386. package/dist/src/manifest-types.js +9 -0
  387. package/dist/src/node-network.d.ts +10 -0
  388. package/dist/src/node-network.js +174 -0
  389. package/dist/src/node-network.test.d.ts +1 -0
  390. package/dist/src/node-network.test.js +55 -0
  391. package/dist/src/observation/artifact.d.ts +16 -0
  392. package/dist/src/observation/artifact.js +260 -0
  393. package/dist/src/observation/artifact.test.d.ts +1 -0
  394. package/dist/src/observation/artifact.test.js +121 -0
  395. package/dist/src/observation/events.d.ts +89 -0
  396. package/dist/src/observation/events.js +1 -0
  397. package/dist/src/observation/index.d.ts +7 -0
  398. package/dist/src/observation/index.js +7 -0
  399. package/dist/src/observation/manager.d.ts +9 -0
  400. package/dist/src/observation/manager.js +27 -0
  401. package/dist/src/observation/manager.test.d.ts +1 -0
  402. package/dist/src/observation/manager.test.js +13 -0
  403. package/dist/src/observation/redaction.d.ts +11 -0
  404. package/dist/src/observation/redaction.js +81 -0
  405. package/dist/src/observation/redaction.test.d.ts +1 -0
  406. package/dist/src/observation/redaction.test.js +32 -0
  407. package/dist/src/observation/retention.d.ts +32 -0
  408. package/dist/src/observation/retention.js +160 -0
  409. package/dist/src/observation/retention.test.d.ts +1 -0
  410. package/dist/src/observation/retention.test.js +118 -0
  411. package/dist/src/observation/ring-buffer.d.ts +22 -0
  412. package/dist/src/observation/ring-buffer.js +45 -0
  413. package/dist/src/observation/ring-buffer.test.d.ts +1 -0
  414. package/dist/src/observation/ring-buffer.test.js +22 -0
  415. package/dist/src/observation/session.d.ts +25 -0
  416. package/dist/src/observation/session.js +50 -0
  417. package/dist/src/output.d.ts +14 -0
  418. package/dist/src/output.js +152 -0
  419. package/dist/src/output.test.d.ts +1 -0
  420. package/dist/src/output.test.js +53 -0
  421. package/dist/src/package-exports.test.d.ts +1 -0
  422. package/dist/src/package-exports.test.js +112 -0
  423. package/dist/src/package-paths.d.ts +8 -0
  424. package/dist/src/package-paths.js +41 -0
  425. package/dist/src/pipeline/executor.d.ts +11 -0
  426. package/dist/src/pipeline/executor.js +93 -0
  427. package/dist/src/pipeline/executor.test.d.ts +4 -0
  428. package/dist/src/pipeline/executor.test.js +182 -0
  429. package/dist/src/pipeline/index.d.ts +5 -0
  430. package/dist/src/pipeline/index.js +5 -0
  431. package/dist/src/pipeline/registry.d.ts +28 -0
  432. package/dist/src/pipeline/registry.js +55 -0
  433. package/dist/src/pipeline/steps/browser.d.ts +13 -0
  434. package/dist/src/pipeline/steps/browser.js +86 -0
  435. package/dist/src/pipeline/steps/download.d.ts +18 -0
  436. package/dist/src/pipeline/steps/download.js +252 -0
  437. package/dist/src/pipeline/steps/download.test.d.ts +1 -0
  438. package/dist/src/pipeline/steps/download.test.js +102 -0
  439. package/dist/src/pipeline/steps/fetch.d.ts +5 -0
  440. package/dist/src/pipeline/steps/fetch.js +122 -0
  441. package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
  442. package/dist/src/pipeline/steps/fetch.test.js +117 -0
  443. package/dist/src/pipeline/steps/intercept.d.ts +5 -0
  444. package/dist/src/pipeline/steps/intercept.js +50 -0
  445. package/dist/src/pipeline/steps/tap.d.ts +12 -0
  446. package/dist/src/pipeline/steps/tap.js +93 -0
  447. package/dist/src/pipeline/steps/transform.d.ts +9 -0
  448. package/dist/src/pipeline/steps/transform.js +70 -0
  449. package/dist/src/pipeline/template.d.ts +17 -0
  450. package/dist/src/pipeline/template.js +344 -0
  451. package/dist/src/pipeline/template.test.d.ts +4 -0
  452. package/dist/src/pipeline/template.test.js +197 -0
  453. package/dist/src/pipeline/transform.test.d.ts +4 -0
  454. package/dist/src/pipeline/transform.test.js +133 -0
  455. package/dist/src/plugin-manifest.d.ts +70 -0
  456. package/dist/src/plugin-manifest.js +160 -0
  457. package/dist/src/plugin-manifest.test.d.ts +4 -0
  458. package/dist/src/plugin-manifest.test.js +179 -0
  459. package/dist/src/plugin-scaffold.d.ts +28 -0
  460. package/dist/src/plugin-scaffold.js +143 -0
  461. package/dist/src/plugin-scaffold.test.d.ts +4 -0
  462. package/dist/src/plugin-scaffold.test.js +83 -0
  463. package/dist/src/plugin.d.ts +146 -0
  464. package/dist/src/plugin.js +1303 -0
  465. package/dist/src/plugin.test.d.ts +4 -0
  466. package/dist/src/plugin.test.js +1363 -0
  467. package/dist/src/registry-api.d.ts +13 -0
  468. package/dist/src/registry-api.js +10 -0
  469. package/dist/src/registry.d.ts +123 -0
  470. package/dist/src/registry.js +125 -0
  471. package/dist/src/registry.test.d.ts +4 -0
  472. package/dist/src/registry.test.js +209 -0
  473. package/dist/src/release-notes.d.ts +38 -0
  474. package/dist/src/release-notes.js +99 -0
  475. package/dist/src/release-notes.test.d.ts +1 -0
  476. package/dist/src/release-notes.test.js +61 -0
  477. package/dist/src/runtime-copy.test.d.ts +1 -0
  478. package/dist/src/runtime-copy.test.js +29 -0
  479. package/dist/src/runtime-detect.d.ts +31 -0
  480. package/dist/src/runtime-detect.js +47 -0
  481. package/dist/src/runtime-detect.test.d.ts +1 -0
  482. package/dist/src/runtime-detect.test.js +39 -0
  483. package/dist/src/runtime-identity.test.d.ts +1 -0
  484. package/dist/src/runtime-identity.test.js +18 -0
  485. package/dist/src/runtime.d.ts +47 -0
  486. package/dist/src/runtime.js +54 -0
  487. package/dist/src/scripts/framework.d.ts +7 -0
  488. package/dist/src/scripts/framework.js +25 -0
  489. package/dist/src/scripts/interact.d.ts +4 -0
  490. package/dist/src/scripts/interact.js +20 -0
  491. package/dist/src/scripts/store.d.ts +13 -0
  492. package/dist/src/scripts/store.js +48 -0
  493. package/dist/src/serialization.d.ts +42 -0
  494. package/dist/src/serialization.js +103 -0
  495. package/dist/src/serialization.test.d.ts +1 -0
  496. package/dist/src/serialization.test.js +78 -0
  497. package/dist/src/skills.d.ts +14 -0
  498. package/dist/src/skills.js +127 -0
  499. package/dist/src/skills.test.d.ts +1 -0
  500. package/dist/src/skills.test.js +71 -0
  501. package/dist/src/snapshotFormatter.d.ts +11 -0
  502. package/dist/src/snapshotFormatter.js +336 -0
  503. package/dist/src/snapshotFormatter.test.d.ts +7 -0
  504. package/dist/src/snapshotFormatter.test.js +521 -0
  505. package/dist/src/tui.d.ts +28 -0
  506. package/dist/src/tui.js +179 -0
  507. package/dist/src/tui.test.d.ts +1 -0
  508. package/dist/src/tui.test.js +19 -0
  509. package/dist/src/types.d.ts +236 -0
  510. package/dist/src/types.js +7 -0
  511. package/dist/src/update-check.d.ts +66 -0
  512. package/dist/src/update-check.js +206 -0
  513. package/dist/src/update-check.test.d.ts +1 -0
  514. package/dist/src/update-check.test.js +117 -0
  515. package/dist/src/utils.d.ts +57 -0
  516. package/dist/src/utils.js +152 -0
  517. package/dist/src/utils.test.d.ts +1 -0
  518. package/dist/src/utils.test.js +155 -0
  519. package/dist/src/validate.d.ts +21 -0
  520. package/dist/src/validate.js +130 -0
  521. package/dist/src/validate.test.d.ts +9 -0
  522. package/dist/src/validate.test.js +90 -0
  523. package/dist/src/verify.d.ts +26 -0
  524. package/dist/src/verify.js +67 -0
  525. package/dist/src/version.d.ts +4 -0
  526. package/dist/src/version.js +22 -0
  527. package/package.json +7 -3
  528. package/scripts/check-package-bin.mjs +95 -0
  529. package/scripts/generate-release-notes.ts +234 -0
  530. package/scripts/postinstall.js +1 -1
  531. package/scripts/silent-column-drop-baseline.json +0 -498
  532. package/scripts/typed-error-lint-baseline.json +0 -464
  533. package/skills/webcmd-adapter-author/SKILL.md +216 -213
  534. package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
  535. package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
  536. package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
  537. package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
  538. package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
  539. package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
  540. package/skills/webcmd-adapter-author/references/output-design.md +47 -125
  541. package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
  542. package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
  543. package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
  544. package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
  545. package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
  546. package/skills/webcmd-autofix/SKILL.md +136 -143
  547. package/skills/webcmd-sitemap-author/SKILL.md +58 -67
  548. package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
  549. package/skills/webcmd-usage/SKILL.md +106 -97
  550. package/clis/12306/auth.js +0 -59
  551. package/clis/12306/me.js +0 -73
  552. package/clis/12306/orders.js +0 -96
  553. package/clis/12306/passengers.js +0 -90
  554. package/clis/12306/price.js +0 -166
  555. package/clis/12306/stations.js +0 -66
  556. package/clis/12306/train.js +0 -91
  557. package/clis/12306/trains.js +0 -166
  558. package/clis/12306/utils.js +0 -272
  559. package/clis/12306/utils.test.js +0 -424
  560. package/clis/1688/assets.js +0 -205
  561. package/clis/1688/assets.test.js +0 -39
  562. package/clis/1688/auth.js +0 -46
  563. package/clis/1688/download.js +0 -77
  564. package/clis/1688/download.test.js +0 -31
  565. package/clis/1688/item.js +0 -188
  566. package/clis/1688/item.test.js +0 -67
  567. package/clis/1688/search.js +0 -310
  568. package/clis/1688/search.test.js +0 -75
  569. package/clis/1688/shared.js +0 -557
  570. package/clis/1688/shared.test.js +0 -57
  571. package/clis/1688/store.js +0 -227
  572. package/clis/1688/store.test.js +0 -62
  573. package/clis/1point3acres/auth.js +0 -52
  574. package/clis/1point3acres/digest.js +0 -35
  575. package/clis/1point3acres/forum.js +0 -51
  576. package/clis/1point3acres/forums.js +0 -44
  577. package/clis/1point3acres/hot.js +0 -35
  578. package/clis/1point3acres/latest.js +0 -35
  579. package/clis/1point3acres/notifications.js +0 -64
  580. package/clis/1point3acres/search.js +0 -71
  581. package/clis/1point3acres/thread.js +0 -117
  582. package/clis/1point3acres/user.js +0 -77
  583. package/clis/1point3acres/utils.js +0 -247
  584. package/clis/36kr/article.js +0 -66
  585. package/clis/36kr/article.test.js +0 -46
  586. package/clis/36kr/hot.js +0 -87
  587. package/clis/36kr/hot.test.js +0 -15
  588. package/clis/36kr/news.js +0 -52
  589. package/clis/36kr/news.test.js +0 -85
  590. package/clis/36kr/search.js +0 -79
  591. package/clis/51job/company.js +0 -126
  592. package/clis/51job/detail.js +0 -109
  593. package/clis/51job/hot.js +0 -56
  594. package/clis/51job/search.js +0 -80
  595. package/clis/51job/utils.js +0 -302
  596. package/clis/51job/utils.test.js +0 -69
  597. package/clis/aibase/news.js +0 -110
  598. package/clis/aibase/news.test.js +0 -59
  599. package/clis/autohome/__fixtures__/catalog.html +0 -11
  600. package/clis/autohome/__fixtures__/koubei.json +0 -116
  601. package/clis/autohome/autohome.test.js +0 -115
  602. package/clis/autohome/brand.js +0 -108
  603. package/clis/autohome/score.js +0 -103
  604. package/clis/autohome/utils.js +0 -157
  605. package/clis/baidu-scholar/search.js +0 -87
  606. package/clis/baidu-scholar/search.test.js +0 -23
  607. package/clis/bilibili/auth.js +0 -36
  608. package/clis/bilibili/comment.js +0 -107
  609. package/clis/bilibili/comment.test.js +0 -153
  610. package/clis/bilibili/comments.js +0 -136
  611. package/clis/bilibili/comments.test.js +0 -142
  612. package/clis/bilibili/download.js +0 -178
  613. package/clis/bilibili/download.test.js +0 -173
  614. package/clis/bilibili/dynamic.js +0 -34
  615. package/clis/bilibili/dynamic.test.js +0 -68
  616. package/clis/bilibili/favorite.js +0 -47
  617. package/clis/bilibili/feed.js +0 -220
  618. package/clis/bilibili/follow.js +0 -140
  619. package/clis/bilibili/follow.test.js +0 -203
  620. package/clis/bilibili/following.js +0 -44
  621. package/clis/bilibili/history.js +0 -45
  622. package/clis/bilibili/hot.js +0 -40
  623. package/clis/bilibili/hot.test.js +0 -17
  624. package/clis/bilibili/me.js +0 -13
  625. package/clis/bilibili/ranking.js +0 -25
  626. package/clis/bilibili/search.js +0 -24
  627. package/clis/bilibili/subtitle.js +0 -141
  628. package/clis/bilibili/subtitle.test.js +0 -240
  629. package/clis/bilibili/summary.js +0 -167
  630. package/clis/bilibili/summary.test.js +0 -210
  631. package/clis/bilibili/unfollow.js +0 -121
  632. package/clis/bilibili/user-videos.js +0 -39
  633. package/clis/bilibili/utils.js +0 -273
  634. package/clis/bilibili/utils.test.js +0 -97
  635. package/clis/bilibili/video.js +0 -155
  636. package/clis/bilibili/video.test.js +0 -308
  637. package/clis/boss/auth.js +0 -47
  638. package/clis/boss/batchgreet.js +0 -61
  639. package/clis/boss/chatlist.js +0 -116
  640. package/clis/boss/chatlist.test.js +0 -211
  641. package/clis/boss/chatmsg.js +0 -117
  642. package/clis/boss/chatmsg.test.js +0 -230
  643. package/clis/boss/detail.js +0 -63
  644. package/clis/boss/exchange.js +0 -46
  645. package/clis/boss/greet.js +0 -49
  646. package/clis/boss/invite.js +0 -64
  647. package/clis/boss/joblist.js +0 -31
  648. package/clis/boss/mark.js +0 -70
  649. package/clis/boss/recommend.js +0 -45
  650. package/clis/boss/resume.js +0 -150
  651. package/clis/boss/search.js +0 -197
  652. package/clis/boss/search.test.js +0 -78
  653. package/clis/boss/send.js +0 -44
  654. package/clis/boss/stats.js +0 -66
  655. package/clis/boss/utils.js +0 -468
  656. package/clis/boss/utils.test.js +0 -34
  657. package/clis/chaoxing/assignments.js +0 -76
  658. package/clis/chaoxing/auth.js +0 -54
  659. package/clis/chaoxing/exams.js +0 -75
  660. package/clis/chaoxing/utils.js +0 -223
  661. package/clis/chaoxing/utils.test.js +0 -45
  662. package/clis/cnki/search.js +0 -61
  663. package/clis/cnki/search.test.js +0 -18
  664. package/clis/ctrip/auth.js +0 -50
  665. package/clis/ctrip/ctrip.test.js +0 -719
  666. package/clis/ctrip/flight.js +0 -136
  667. package/clis/ctrip/hotel-search.js +0 -132
  668. package/clis/ctrip/hotel-suggest.js +0 -45
  669. package/clis/ctrip/search.js +0 -41
  670. package/clis/ctrip/utils.js +0 -473
  671. package/clis/deepseek/ask.js +0 -158
  672. package/clis/deepseek/ask.test.js +0 -399
  673. package/clis/deepseek/auth.js +0 -54
  674. package/clis/deepseek/detail.js +0 -46
  675. package/clis/deepseek/detail.test.js +0 -81
  676. package/clis/deepseek/history.js +0 -27
  677. package/clis/deepseek/new.js +0 -33
  678. package/clis/deepseek/read.js +0 -25
  679. package/clis/deepseek/send.js +0 -140
  680. package/clis/deepseek/send.test.js +0 -107
  681. package/clis/deepseek/status.js +0 -26
  682. package/clis/deepseek/utils.js +0 -487
  683. package/clis/deepseek/utils.test.js +0 -370
  684. package/clis/dianping/__fixtures__/search.html +0 -168
  685. package/clis/dianping/__fixtures__/shop.html +0 -6
  686. package/clis/dianping/auth.js +0 -49
  687. package/clis/dianping/cityResolver.js +0 -185
  688. package/clis/dianping/dianping.test.js +0 -578
  689. package/clis/dianping/search.js +0 -157
  690. package/clis/dianping/shop.js +0 -173
  691. package/clis/dianping/utils.js +0 -157
  692. package/clis/dongchedi/__fixtures__/search.json +0 -60
  693. package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
  694. package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
  695. package/clis/dongchedi/dongchedi.test.js +0 -191
  696. package/clis/dongchedi/koubei.js +0 -85
  697. package/clis/dongchedi/models.js +0 -91
  698. package/clis/dongchedi/score.js +0 -83
  699. package/clis/dongchedi/search.js +0 -83
  700. package/clis/dongchedi/series.js +0 -87
  701. package/clis/dongchedi/specs.js +0 -115
  702. package/clis/dongchedi/utils.js +0 -180
  703. package/clis/douban/auth.js +0 -50
  704. package/clis/douban/book-hot.js +0 -15
  705. package/clis/douban/download.js +0 -68
  706. package/clis/douban/download.test.js +0 -170
  707. package/clis/douban/marks.js +0 -116
  708. package/clis/douban/movie-hot.js +0 -15
  709. package/clis/douban/movie-hot.test.js +0 -14
  710. package/clis/douban/photos.js +0 -35
  711. package/clis/douban/reviews.js +0 -107
  712. package/clis/douban/search.js +0 -18
  713. package/clis/douban/search.test.js +0 -11
  714. package/clis/douban/subject.js +0 -46
  715. package/clis/douban/subject.test.js +0 -11
  716. package/clis/douban/top250.js +0 -68
  717. package/clis/douban/utils.js +0 -657
  718. package/clis/douban/utils.test.js +0 -488
  719. package/clis/doubao/ask.js +0 -40
  720. package/clis/doubao/auth.js +0 -66
  721. package/clis/doubao/detail.js +0 -35
  722. package/clis/doubao/detail.test.js +0 -42
  723. package/clis/doubao/history.js +0 -30
  724. package/clis/doubao/history.test.js +0 -37
  725. package/clis/doubao/meeting-summary.js +0 -41
  726. package/clis/doubao/meeting-transcript.js +0 -38
  727. package/clis/doubao/new.js +0 -22
  728. package/clis/doubao/read.js +0 -21
  729. package/clis/doubao/send.js +0 -24
  730. package/clis/doubao/status.js +0 -26
  731. package/clis/doubao/utils.js +0 -1156
  732. package/clis/doubao/utils.test.js +0 -396
  733. package/clis/doubao-app/ask.js +0 -54
  734. package/clis/doubao-app/dump.js +0 -25
  735. package/clis/doubao-app/new.js +0 -21
  736. package/clis/doubao-app/read.js +0 -19
  737. package/clis/doubao-app/screenshot.js +0 -19
  738. package/clis/doubao-app/send.js +0 -28
  739. package/clis/doubao-app/status.js +0 -17
  740. package/clis/doubao-app/utils.js +0 -110
  741. package/clis/douyin/_shared/browser-fetch.js +0 -66
  742. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  743. package/clis/douyin/_shared/creation-id.js +0 -5
  744. package/clis/douyin/_shared/creation-id.test.js +0 -22
  745. package/clis/douyin/_shared/evaluate-result.js +0 -16
  746. package/clis/douyin/_shared/imagex-upload.js +0 -53
  747. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  748. package/clis/douyin/_shared/public-api.js +0 -29
  749. package/clis/douyin/_shared/sts2.js +0 -21
  750. package/clis/douyin/_shared/sts2.test.js +0 -27
  751. package/clis/douyin/_shared/text-extra.js +0 -15
  752. package/clis/douyin/_shared/text-extra.test.js +0 -37
  753. package/clis/douyin/_shared/timing.js +0 -22
  754. package/clis/douyin/_shared/timing.test.js +0 -28
  755. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  756. package/clis/douyin/_shared/tos-upload.js +0 -331
  757. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  758. package/clis/douyin/_shared/transcode.js +0 -45
  759. package/clis/douyin/_shared/transcode.test.js +0 -91
  760. package/clis/douyin/_shared/vod-upload.js +0 -212
  761. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  762. package/clis/douyin/activities.js +0 -23
  763. package/clis/douyin/activities.test.js +0 -55
  764. package/clis/douyin/auth.js +0 -39
  765. package/clis/douyin/collections.js +0 -23
  766. package/clis/douyin/collections.test.js +0 -45
  767. package/clis/douyin/delete.js +0 -152
  768. package/clis/douyin/delete.test.js +0 -100
  769. package/clis/douyin/draft.js +0 -355
  770. package/clis/douyin/draft.test.js +0 -335
  771. package/clis/douyin/drafts.js +0 -24
  772. package/clis/douyin/drafts.test.js +0 -11
  773. package/clis/douyin/hashtag.js +0 -114
  774. package/clis/douyin/hashtag.test.js +0 -171
  775. package/clis/douyin/location.js +0 -25
  776. package/clis/douyin/location.test.js +0 -23
  777. package/clis/douyin/profile.js +0 -29
  778. package/clis/douyin/profile.test.js +0 -46
  779. package/clis/douyin/publish-upload-id.test.js +0 -206
  780. package/clis/douyin/publish.js +0 -341
  781. package/clis/douyin/publish.test.js +0 -38
  782. package/clis/douyin/search.js +0 -308
  783. package/clis/douyin/search.test.js +0 -307
  784. package/clis/douyin/stats.js +0 -28
  785. package/clis/douyin/stats.test.js +0 -22
  786. package/clis/douyin/update.js +0 -32
  787. package/clis/douyin/update.test.js +0 -11
  788. package/clis/douyin/user-videos.js +0 -82
  789. package/clis/douyin/user-videos.test.js +0 -151
  790. package/clis/douyin/videos.js +0 -52
  791. package/clis/douyin/videos.test.js +0 -54
  792. package/clis/eastmoney/_secid.js +0 -78
  793. package/clis/eastmoney/announcement.js +0 -53
  794. package/clis/eastmoney/convertible.js +0 -74
  795. package/clis/eastmoney/etf.js +0 -66
  796. package/clis/eastmoney/holders.js +0 -79
  797. package/clis/eastmoney/hot-rank.js +0 -51
  798. package/clis/eastmoney/hot-rank.test.js +0 -59
  799. package/clis/eastmoney/index-board.js +0 -97
  800. package/clis/eastmoney/kline.js +0 -88
  801. package/clis/eastmoney/kuaixun.js +0 -55
  802. package/clis/eastmoney/longhu.js +0 -68
  803. package/clis/eastmoney/money-flow.js +0 -79
  804. package/clis/eastmoney/northbound.js +0 -58
  805. package/clis/eastmoney/quote.js +0 -108
  806. package/clis/eastmoney/rank.js +0 -95
  807. package/clis/eastmoney/sectors.js +0 -77
  808. package/clis/flomo/auth.js +0 -55
  809. package/clis/flomo/memos.js +0 -228
  810. package/clis/flomo/memos.test.js +0 -144
  811. package/clis/gitee/auth.js +0 -41
  812. package/clis/gitee/index.js +0 -3
  813. package/clis/gitee/search.js +0 -137
  814. package/clis/gitee/search.test.js +0 -65
  815. package/clis/gitee/trending.js +0 -568
  816. package/clis/gitee/user.js +0 -200
  817. package/clis/gitee/user.test.js +0 -63
  818. package/clis/gov-law/commands.test.js +0 -39
  819. package/clis/gov-law/recent.js +0 -22
  820. package/clis/gov-law/search.js +0 -41
  821. package/clis/gov-law/shared.js +0 -51
  822. package/clis/gov-policy/__fixtures__/recent.html +0 -16
  823. package/clis/gov-policy/__fixtures__/search.html +0 -41
  824. package/clis/gov-policy/gov-policy.test.js +0 -224
  825. package/clis/gov-policy/recent.js +0 -90
  826. package/clis/gov-policy/search.js +0 -91
  827. package/clis/gov-policy/utils.js +0 -54
  828. package/clis/guazi/__fixtures__/detail.html +0 -7
  829. package/clis/guazi/__fixtures__/list.html +0 -5
  830. package/clis/guazi/browse.js +0 -95
  831. package/clis/guazi/car.js +0 -110
  832. package/clis/guazi/guazi.test.js +0 -126
  833. package/clis/guazi/utils.js +0 -133
  834. package/clis/huodongxing/events.js +0 -322
  835. package/clis/huodongxing/events.test.js +0 -296
  836. package/clis/hupu/__fixtures__/hot-home.html +0 -64
  837. package/clis/hupu/auth.js +0 -47
  838. package/clis/hupu/detail.js +0 -72
  839. package/clis/hupu/hot.js +0 -163
  840. package/clis/hupu/hot.test.js +0 -224
  841. package/clis/hupu/like.js +0 -76
  842. package/clis/hupu/mentions.js +0 -160
  843. package/clis/hupu/reply.js +0 -72
  844. package/clis/hupu/search.js +0 -60
  845. package/clis/hupu/unlike.js +0 -76
  846. package/clis/hupu/utils.js +0 -319
  847. package/clis/jd/add-cart.js +0 -72
  848. package/clis/jd/auth.js +0 -46
  849. package/clis/jd/cart.js +0 -80
  850. package/clis/jd/commands.test.js +0 -41
  851. package/clis/jd/detail.js +0 -63
  852. package/clis/jd/item.js +0 -730
  853. package/clis/jd/item.test.js +0 -354
  854. package/clis/jd/item.test.ts +0 -517
  855. package/clis/jd/reviews.js +0 -55
  856. package/clis/jd/search.js +0 -66
  857. package/clis/jianyu/auth.js +0 -62
  858. package/clis/jianyu/detail.js +0 -21
  859. package/clis/jianyu/search.js +0 -634
  860. package/clis/jianyu/search.test.js +0 -153
  861. package/clis/jianyu/shared/china-bid-search.js +0 -165
  862. package/clis/jianyu/shared/procurement-contract.js +0 -324
  863. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  864. package/clis/jianyu/shared/procurement-detail.js +0 -107
  865. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  866. package/clis/jike/auth.js +0 -48
  867. package/clis/jike/comment.js +0 -107
  868. package/clis/jike/create.js +0 -106
  869. package/clis/jike/feed.js +0 -68
  870. package/clis/jike/like.js +0 -61
  871. package/clis/jike/notifications.js +0 -169
  872. package/clis/jike/post.js +0 -72
  873. package/clis/jike/read.test.js +0 -86
  874. package/clis/jike/repost.js +0 -103
  875. package/clis/jike/search.js +0 -68
  876. package/clis/jike/topic.js +0 -65
  877. package/clis/jike/user.js +0 -65
  878. package/clis/jike/utils.js +0 -25
  879. package/clis/jimeng/auth.js +0 -46
  880. package/clis/jimeng/generate.js +0 -84
  881. package/clis/jimeng/history.js +0 -48
  882. package/clis/jimeng/new.js +0 -44
  883. package/clis/jimeng/workspaces.js +0 -42
  884. package/clis/juejin/hot.js +0 -37
  885. package/clis/juejin/juejin.test.js +0 -241
  886. package/clis/juejin/recommend.js +0 -61
  887. package/clis/juejin/utils.js +0 -199
  888. package/clis/ke/auth.js +0 -46
  889. package/clis/ke/chengjiao.js +0 -78
  890. package/clis/ke/ershoufang.js +0 -101
  891. package/clis/ke/utils.js +0 -104
  892. package/clis/ke/xiaoqu.js +0 -78
  893. package/clis/ke/zufang.js +0 -95
  894. package/clis/kimi/_utils.js +0 -110
  895. package/clis/kimi/audit-extras.js +0 -268
  896. package/clis/kimi/auth.js +0 -57
  897. package/clis/kimi/chat.js +0 -470
  898. package/clis/kimi/kimi.test.js +0 -187
  899. package/clis/kimi/storage.js +0 -169
  900. package/clis/kimi/ui.js +0 -314
  901. package/clis/kimi/usage.js +0 -144
  902. package/clis/linux-do/auth.js +0 -55
  903. package/clis/linux-do/categories.js +0 -50
  904. package/clis/linux-do/feed.js +0 -395
  905. package/clis/linux-do/feed.test.js +0 -153
  906. package/clis/linux-do/search.js +0 -29
  907. package/clis/linux-do/tags.js +0 -28
  908. package/clis/linux-do/topic-content.js +0 -155
  909. package/clis/linux-do/topic-content.test.js +0 -59
  910. package/clis/linux-do/topic.js +0 -53
  911. package/clis/linux-do/user-posts.js +0 -57
  912. package/clis/linux-do/user-topics.js +0 -37
  913. package/clis/maimai/auth.js +0 -47
  914. package/clis/maimai/search-talents.js +0 -192
  915. package/clis/maimai/search-talents.test.js +0 -29
  916. package/clis/mubu/doc.js +0 -41
  917. package/clis/mubu/docs.js +0 -44
  918. package/clis/mubu/notes.js +0 -245
  919. package/clis/mubu/recent.js +0 -28
  920. package/clis/mubu/search.js +0 -63
  921. package/clis/mubu/utils.js +0 -304
  922. package/clis/nowcoder/auth.js +0 -65
  923. package/clis/nowcoder/companies.js +0 -24
  924. package/clis/nowcoder/creators.js +0 -28
  925. package/clis/nowcoder/detail.js +0 -62
  926. package/clis/nowcoder/experience.js +0 -37
  927. package/clis/nowcoder/hot.js +0 -25
  928. package/clis/nowcoder/jobs.js +0 -22
  929. package/clis/nowcoder/notifications.js +0 -30
  930. package/clis/nowcoder/papers.js +0 -41
  931. package/clis/nowcoder/practice.js +0 -38
  932. package/clis/nowcoder/recommend.js +0 -31
  933. package/clis/nowcoder/referral.js +0 -40
  934. package/clis/nowcoder/salary.js +0 -41
  935. package/clis/nowcoder/search.js +0 -50
  936. package/clis/nowcoder/suggest.js +0 -34
  937. package/clis/nowcoder/topics.js +0 -28
  938. package/clis/nowcoder/trending.js +0 -26
  939. package/clis/ones/common.js +0 -144
  940. package/clis/ones/enrich-tasks.js +0 -37
  941. package/clis/ones/login.js +0 -81
  942. package/clis/ones/logout.js +0 -18
  943. package/clis/ones/me.js +0 -31
  944. package/clis/ones/my-tasks.js +0 -121
  945. package/clis/ones/resolve-labels.js +0 -64
  946. package/clis/ones/task-helpers.js +0 -212
  947. package/clis/ones/task-helpers.test.js +0 -12
  948. package/clis/ones/task.js +0 -67
  949. package/clis/ones/tasks.js +0 -80
  950. package/clis/ones/token-info.js +0 -43
  951. package/clis/ones/worklog.js +0 -268
  952. package/clis/ones/worklog.test.js +0 -20
  953. package/clis/powerchina/auth.js +0 -52
  954. package/clis/powerchina/search.js +0 -251
  955. package/clis/powerchina/search.test.js +0 -93
  956. package/clis/quark/auth.js +0 -47
  957. package/clis/quark/ls.js +0 -64
  958. package/clis/quark/mkdir.js +0 -37
  959. package/clis/quark/mv.js +0 -54
  960. package/clis/quark/rename.js +0 -27
  961. package/clis/quark/rm.js +0 -25
  962. package/clis/quark/save.js +0 -81
  963. package/clis/quark/share-tree.js +0 -46
  964. package/clis/quark/utils.js +0 -146
  965. package/clis/quark/utils.test.js +0 -58
  966. package/clis/qwen/ask.js +0 -104
  967. package/clis/qwen/ask.test.js +0 -36
  968. package/clis/qwen/auth.js +0 -56
  969. package/clis/qwen/detail.js +0 -62
  970. package/clis/qwen/history.js +0 -61
  971. package/clis/qwen/image.js +0 -179
  972. package/clis/qwen/new.js +0 -23
  973. package/clis/qwen/read.js +0 -41
  974. package/clis/qwen/send.js +0 -55
  975. package/clis/qwen/status.js +0 -37
  976. package/clis/qwen/utils.js +0 -461
  977. package/clis/qwen/utils.test.js +0 -128
  978. package/clis/rednote/auth.js +0 -52
  979. package/clis/rednote/comments.js +0 -85
  980. package/clis/rednote/download.js +0 -59
  981. package/clis/rednote/feed.js +0 -27
  982. package/clis/rednote/navigation.test.js +0 -26
  983. package/clis/rednote/note.js +0 -68
  984. package/clis/rednote/notifications.js +0 -139
  985. package/clis/rednote/rednote.test.js +0 -240
  986. package/clis/rednote/search.js +0 -107
  987. package/clis/rednote/user.js +0 -55
  988. package/clis/sinablog/article.js +0 -15
  989. package/clis/sinablog/hot.js +0 -15
  990. package/clis/sinablog/search.js +0 -52
  991. package/clis/sinablog/user.js +0 -16
  992. package/clis/sinablog/utils.js +0 -186
  993. package/clis/sinafinance/news.js +0 -62
  994. package/clis/sinafinance/rolling-news.js +0 -41
  995. package/clis/sinafinance/stock-rank.js +0 -66
  996. package/clis/sinafinance/stock.js +0 -121
  997. package/clis/sinafinance/stock.test.js +0 -59
  998. package/clis/smzdm/search.js +0 -149
  999. package/clis/smzdm/search.test.js +0 -114
  1000. package/clis/taobao/add-cart.js +0 -150
  1001. package/clis/taobao/auth.js +0 -58
  1002. package/clis/taobao/cart.js +0 -96
  1003. package/clis/taobao/commands.test.js +0 -41
  1004. package/clis/taobao/detail.js +0 -71
  1005. package/clis/taobao/reviews.js +0 -77
  1006. package/clis/taobao/search.js +0 -97
  1007. package/clis/tdx/hot-rank.js +0 -48
  1008. package/clis/tdx/hot-rank.test.js +0 -59
  1009. package/clis/ths/hot-rank.js +0 -50
  1010. package/clis/ths/hot-rank.test.js +0 -64
  1011. package/clis/tieba/commands.test.js +0 -79
  1012. package/clis/tieba/hot.js +0 -48
  1013. package/clis/tieba/posts.js +0 -86
  1014. package/clis/tieba/read.js +0 -141
  1015. package/clis/tieba/search.js +0 -109
  1016. package/clis/tieba/utils.js +0 -240
  1017. package/clis/tieba/utils.test.js +0 -290
  1018. package/clis/toutiao/articles.js +0 -55
  1019. package/clis/toutiao/auth.js +0 -70
  1020. package/clis/toutiao/hot.js +0 -63
  1021. package/clis/toutiao/toutiao.test.js +0 -378
  1022. package/clis/toutiao/utils.js +0 -161
  1023. package/clis/trae-cn/activity.js +0 -22
  1024. package/clis/trae-cn/approve.js +0 -52
  1025. package/clis/trae-cn/ask.js +0 -99
  1026. package/clis/trae-cn/dump.js +0 -5
  1027. package/clis/trae-cn/export.js +0 -40
  1028. package/clis/trae-cn/model.js +0 -22
  1029. package/clis/trae-cn/new.js +0 -63
  1030. package/clis/trae-cn/read.js +0 -23
  1031. package/clis/trae-cn/screenshot.js +0 -5
  1032. package/clis/trae-cn/select-model.js +0 -25
  1033. package/clis/trae-cn/send.js +0 -23
  1034. package/clis/trae-cn/setup.js +0 -75
  1035. package/clis/trae-cn/status.js +0 -27
  1036. package/clis/trae-cn/targets.js +0 -96
  1037. package/clis/trae-cn/trae-cn.test.js +0 -412
  1038. package/clis/trae-cn/utils.js +0 -750
  1039. package/clis/trae-cn/watch.js +0 -119
  1040. package/clis/uisdc/news.js +0 -105
  1041. package/clis/uisdc/news.test.js +0 -66
  1042. package/clis/v2ex/auth.js +0 -44
  1043. package/clis/v2ex/daily.js +0 -99
  1044. package/clis/v2ex/hot.js +0 -26
  1045. package/clis/v2ex/latest.js +0 -26
  1046. package/clis/v2ex/me.js +0 -100
  1047. package/clis/v2ex/member.js +0 -28
  1048. package/clis/v2ex/node.js +0 -39
  1049. package/clis/v2ex/nodes.js +0 -26
  1050. package/clis/v2ex/notifications.js +0 -72
  1051. package/clis/v2ex/replies.js +0 -27
  1052. package/clis/v2ex/topic.js +0 -31
  1053. package/clis/v2ex/user.js +0 -34
  1054. package/clis/wanfang/search.js +0 -66
  1055. package/clis/wanfang/search.test.js +0 -23
  1056. package/clis/wechat-channels/auth.js +0 -62
  1057. package/clis/wechat-channels/publish.js +0 -732
  1058. package/clis/wechat-channels/publish.test.js +0 -144
  1059. package/clis/weibo/auth.js +0 -53
  1060. package/clis/weibo/comments.js +0 -53
  1061. package/clis/weibo/delete.js +0 -172
  1062. package/clis/weibo/delete.test.js +0 -94
  1063. package/clis/weibo/envelope.test.js +0 -85
  1064. package/clis/weibo/favorites.js +0 -170
  1065. package/clis/weibo/favorites.test.js +0 -114
  1066. package/clis/weibo/feed.js +0 -69
  1067. package/clis/weibo/hot.js +0 -39
  1068. package/clis/weibo/me.js +0 -75
  1069. package/clis/weibo/post.js +0 -75
  1070. package/clis/weibo/publish.js +0 -306
  1071. package/clis/weibo/publish.test.js +0 -192
  1072. package/clis/weibo/search.js +0 -80
  1073. package/clis/weibo/user-posts.js +0 -234
  1074. package/clis/weibo/user-posts.test.js +0 -92
  1075. package/clis/weibo/user.js +0 -63
  1076. package/clis/weibo/utils.js +0 -59
  1077. package/clis/weibo/utils.test.js +0 -36
  1078. package/clis/weixin/create-draft.js +0 -226
  1079. package/clis/weixin/download.js +0 -371
  1080. package/clis/weixin/download.test.js +0 -106
  1081. package/clis/weixin/drafts.js +0 -66
  1082. package/clis/weixin/drafts.test.js +0 -69
  1083. package/clis/weixin/search.js +0 -157
  1084. package/clis/weixin/search.test.js +0 -227
  1085. package/clis/weread/ai-outline.js +0 -171
  1086. package/clis/weread/ai-outline.test.js +0 -83
  1087. package/clis/weread/auth.js +0 -59
  1088. package/clis/weread/book-search.js +0 -438
  1089. package/clis/weread/book-search.test.js +0 -242
  1090. package/clis/weread/book.js +0 -233
  1091. package/clis/weread/commands.test.js +0 -398
  1092. package/clis/weread/highlights.js +0 -24
  1093. package/clis/weread/notebooks.js +0 -22
  1094. package/clis/weread/notes.js +0 -30
  1095. package/clis/weread/private-api-regression.test.js +0 -369
  1096. package/clis/weread/ranking.js +0 -29
  1097. package/clis/weread/search-regression.test.js +0 -494
  1098. package/clis/weread/search.js +0 -186
  1099. package/clis/weread/shelf.js +0 -66
  1100. package/clis/weread/utils.js +0 -321
  1101. package/clis/weread/utils.test.js +0 -128
  1102. package/clis/weread-official/book.js +0 -135
  1103. package/clis/weread-official/commands.test.js +0 -385
  1104. package/clis/weread-official/discover.js +0 -107
  1105. package/clis/weread-official/list-apis.js +0 -95
  1106. package/clis/weread-official/notes.js +0 -171
  1107. package/clis/weread-official/readdata.js +0 -158
  1108. package/clis/weread-official/review.js +0 -93
  1109. package/clis/weread-official/search.js +0 -106
  1110. package/clis/weread-official/shelf.js +0 -97
  1111. package/clis/weread-official/utils.js +0 -293
  1112. package/clis/weread-official/utils.test.js +0 -242
  1113. package/clis/xianyu/auth.js +0 -68
  1114. package/clis/xianyu/chat.js +0 -74
  1115. package/clis/xianyu/chat.test.js +0 -84
  1116. package/clis/xianyu/im.js +0 -322
  1117. package/clis/xianyu/im.test.js +0 -253
  1118. package/clis/xianyu/inbox.js +0 -96
  1119. package/clis/xianyu/item.js +0 -153
  1120. package/clis/xianyu/item.test.js +0 -56
  1121. package/clis/xianyu/messages.js +0 -91
  1122. package/clis/xianyu/publish.js +0 -485
  1123. package/clis/xianyu/publish.test.js +0 -220
  1124. package/clis/xianyu/reply.js +0 -82
  1125. package/clis/xianyu/search.js +0 -262
  1126. package/clis/xianyu/search.test.js +0 -104
  1127. package/clis/xianyu/utils.js +0 -8
  1128. package/clis/xiaoe/auth.js +0 -55
  1129. package/clis/xiaoe/catalog.js +0 -227
  1130. package/clis/xiaoe/content.js +0 -175
  1131. package/clis/xiaoe/courses.js +0 -127
  1132. package/clis/xiaoe/detail.js +0 -36
  1133. package/clis/xiaoe/play-url.js +0 -121
  1134. package/clis/xiaoe/xiaoe.test.js +0 -486
  1135. package/clis/xiaohongshu/ask.js +0 -426
  1136. package/clis/xiaohongshu/ask.test.js +0 -271
  1137. package/clis/xiaohongshu/auth.js +0 -53
  1138. package/clis/xiaohongshu/collection-helpers.js +0 -283
  1139. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  1140. package/clis/xiaohongshu/comments.js +0 -228
  1141. package/clis/xiaohongshu/comments.test.js +0 -320
  1142. package/clis/xiaohongshu/creator-note-detail.js +0 -482
  1143. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  1144. package/clis/xiaohongshu/creator-notes-summary.js +0 -98
  1145. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  1146. package/clis/xiaohongshu/creator-notes.js +0 -479
  1147. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  1148. package/clis/xiaohongshu/creator-profile.js +0 -55
  1149. package/clis/xiaohongshu/creator-stats.js +0 -76
  1150. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  1151. package/clis/xiaohongshu/delete-note.js +0 -260
  1152. package/clis/xiaohongshu/delete-note.test.js +0 -172
  1153. package/clis/xiaohongshu/download.js +0 -249
  1154. package/clis/xiaohongshu/download.test.js +0 -339
  1155. package/clis/xiaohongshu/draft-clear.js +0 -91
  1156. package/clis/xiaohongshu/draft-delete.js +0 -103
  1157. package/clis/xiaohongshu/draft-open.js +0 -43
  1158. package/clis/xiaohongshu/draft-utils.js +0 -142
  1159. package/clis/xiaohongshu/drafts.js +0 -28
  1160. package/clis/xiaohongshu/drafts.test.js +0 -172
  1161. package/clis/xiaohongshu/feed.js +0 -163
  1162. package/clis/xiaohongshu/feed.test.js +0 -126
  1163. package/clis/xiaohongshu/follow.js +0 -226
  1164. package/clis/xiaohongshu/follow.test.js +0 -211
  1165. package/clis/xiaohongshu/liked.js +0 -29
  1166. package/clis/xiaohongshu/liked.test.js +0 -82
  1167. package/clis/xiaohongshu/navigation.test.js +0 -38
  1168. package/clis/xiaohongshu/note-helpers.js +0 -69
  1169. package/clis/xiaohongshu/note.js +0 -104
  1170. package/clis/xiaohongshu/note.test.js +0 -249
  1171. package/clis/xiaohongshu/notifications.js +0 -46
  1172. package/clis/xiaohongshu/publish.js +0 -1423
  1173. package/clis/xiaohongshu/publish.test.js +0 -1141
  1174. package/clis/xiaohongshu/saved.js +0 -29
  1175. package/clis/xiaohongshu/saved.test.js +0 -143
  1176. package/clis/xiaohongshu/search.js +0 -330
  1177. package/clis/xiaohongshu/search.test.js +0 -325
  1178. package/clis/xiaohongshu/unfollow.js +0 -285
  1179. package/clis/xiaohongshu/user-helpers.js +0 -78
  1180. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  1181. package/clis/xiaohongshu/user.js +0 -140
  1182. package/clis/xiaohongshu/user.test.js +0 -141
  1183. package/clis/xiaoyuzhou/auth.js +0 -303
  1184. package/clis/xiaoyuzhou/auth.test.js +0 -124
  1185. package/clis/xiaoyuzhou/download.js +0 -54
  1186. package/clis/xiaoyuzhou/download.test.js +0 -135
  1187. package/clis/xiaoyuzhou/episode.js +0 -34
  1188. package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
  1189. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  1190. package/clis/xiaoyuzhou/podcast.js +0 -33
  1191. package/clis/xiaoyuzhou/transcript.js +0 -77
  1192. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  1193. package/clis/xiaoyuzhou/utils.js +0 -15
  1194. package/clis/xiaoyuzhou/utils.test.js +0 -39
  1195. package/clis/xueqiu/auth.js +0 -63
  1196. package/clis/xueqiu/comments.js +0 -355
  1197. package/clis/xueqiu/comments.test.js +0 -696
  1198. package/clis/xueqiu/danjuan-utils.js +0 -126
  1199. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  1200. package/clis/xueqiu/earnings-date.js +0 -45
  1201. package/clis/xueqiu/feed.js +0 -39
  1202. package/clis/xueqiu/fund-holdings.js +0 -29
  1203. package/clis/xueqiu/fund-snapshot.js +0 -26
  1204. package/clis/xueqiu/groups.js +0 -23
  1205. package/clis/xueqiu/hot-stock.js +0 -32
  1206. package/clis/xueqiu/hot.js +0 -37
  1207. package/clis/xueqiu/kline.js +0 -44
  1208. package/clis/xueqiu/search.js +0 -37
  1209. package/clis/xueqiu/stock.js +0 -65
  1210. package/clis/xueqiu/utils.js +0 -48
  1211. package/clis/xueqiu/utils.test.js +0 -26
  1212. package/clis/xueqiu/watchlist.js +0 -37
  1213. package/clis/youdao/note.js +0 -258
  1214. package/clis/youdao/note.test.js +0 -99
  1215. package/clis/yuanbao/ask.js +0 -362
  1216. package/clis/yuanbao/ask.test.js +0 -124
  1217. package/clis/yuanbao/auth.js +0 -59
  1218. package/clis/yuanbao/detail.js +0 -65
  1219. package/clis/yuanbao/history.js +0 -51
  1220. package/clis/yuanbao/new.js +0 -72
  1221. package/clis/yuanbao/new.test.js +0 -30
  1222. package/clis/yuanbao/read.js +0 -38
  1223. package/clis/yuanbao/send.js +0 -57
  1224. package/clis/yuanbao/shared.js +0 -341
  1225. package/clis/yuanbao/shared.test.js +0 -80
  1226. package/clis/yuanbao/status.js +0 -44
  1227. package/clis/zhihu/answer-comments.js +0 -280
  1228. package/clis/zhihu/answer-comments.test.js +0 -287
  1229. package/clis/zhihu/answer-detail.js +0 -216
  1230. package/clis/zhihu/answer-detail.test.js +0 -338
  1231. package/clis/zhihu/answer.js +0 -54
  1232. package/clis/zhihu/answer.test.js +0 -54
  1233. package/clis/zhihu/auth.js +0 -59
  1234. package/clis/zhihu/collection.js +0 -199
  1235. package/clis/zhihu/collection.test.js +0 -337
  1236. package/clis/zhihu/collections.js +0 -128
  1237. package/clis/zhihu/collections.test.js +0 -182
  1238. package/clis/zhihu/comment.js +0 -55
  1239. package/clis/zhihu/comment.test.js +0 -50
  1240. package/clis/zhihu/download.js +0 -80
  1241. package/clis/zhihu/download.test.js +0 -12
  1242. package/clis/zhihu/favorite.js +0 -87
  1243. package/clis/zhihu/favorite.test.js +0 -59
  1244. package/clis/zhihu/follow.js +0 -50
  1245. package/clis/zhihu/follow.test.js +0 -42
  1246. package/clis/zhihu/followers.js +0 -40
  1247. package/clis/zhihu/followers.test.js +0 -42
  1248. package/clis/zhihu/following.js +0 -40
  1249. package/clis/zhihu/following.test.js +0 -44
  1250. package/clis/zhihu/hot.js +0 -44
  1251. package/clis/zhihu/like.js +0 -47
  1252. package/clis/zhihu/like.test.js +0 -41
  1253. package/clis/zhihu/paginate.js +0 -128
  1254. package/clis/zhihu/pins.js +0 -41
  1255. package/clis/zhihu/pins.test.js +0 -44
  1256. package/clis/zhihu/question.js +0 -113
  1257. package/clis/zhihu/question.test.js +0 -251
  1258. package/clis/zhihu/recommend.js +0 -103
  1259. package/clis/zhihu/recommend.test.js +0 -143
  1260. package/clis/zhihu/search.js +0 -206
  1261. package/clis/zhihu/search.test.js +0 -198
  1262. package/clis/zhihu/target.js +0 -91
  1263. package/clis/zhihu/target.test.js +0 -77
  1264. package/clis/zhihu/text.js +0 -29
  1265. package/clis/zhihu/text.test.js +0 -24
  1266. package/clis/zhihu/user-answers.js +0 -41
  1267. package/clis/zhihu/user-answers.test.js +0 -69
  1268. package/clis/zhihu/user-arg.js +0 -34
  1269. package/clis/zhihu/user-articles.js +0 -40
  1270. package/clis/zhihu/user-articles.test.js +0 -44
  1271. package/clis/zhihu/user.js +0 -59
  1272. package/clis/zhihu/user.test.js +0 -73
  1273. package/clis/zhihu/write-shared.js +0 -228
  1274. package/clis/zhihu/write-shared.test.js +0 -176
  1275. package/clis/zsxq/auth.js +0 -68
  1276. package/clis/zsxq/dynamics.js +0 -48
  1277. package/clis/zsxq/groups.js +0 -33
  1278. package/clis/zsxq/search.js +0 -44
  1279. package/clis/zsxq/search.test.js +0 -24
  1280. package/clis/zsxq/topic.js +0 -50
  1281. package/clis/zsxq/topic.test.js +0 -30
  1282. package/clis/zsxq/topics.js +0 -26
  1283. package/clis/zsxq/topics.test.js +0 -24
  1284. package/clis/zsxq/utils.js +0 -233
  1285. package/clis/zsxq/utils.test.js +0 -31
  1286. package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
  1287. package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
  1288. package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
  1289. package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
  1290. /package/{clis/douyin/_shared/types.js → dist/src/adapter-shadow.test.d.ts} +0 -0
@@ -1,1156 +0,0 @@
1
- import { CommandExecutionError } from '@agentrhq/webcmd/errors';
2
-
3
- export const DOUBAO_DOMAIN = 'www.doubao.com';
4
- export const DOUBAO_CHAT_URL = 'https://www.doubao.com/chat';
5
- export const DOUBAO_NEW_CHAT_URL = 'https://www.doubao.com/chat/new-thread/create-by-msg';
6
- const DOUBAO_COMPOSER_SELECTORS = [
7
- 'textarea[data-testid="chat_input_input"]',
8
- '[data-testid="chat_input"] textarea',
9
- '.chat-input textarea',
10
- '.chat-input [contenteditable="true"]',
11
- '.chat-editor textarea',
12
- '.chat-editor [contenteditable="true"]',
13
- 'textarea[placeholder*="发消息"]',
14
- 'textarea[placeholder*="Message"]',
15
- '[contenteditable="true"][placeholder*="发消息"]',
16
- '[contenteditable="true"][placeholder*="Message"]',
17
- '[contenteditable="true"][aria-label*="发消息"]',
18
- '[contenteditable="true"][aria-label*="Message"]',
19
- 'textarea',
20
- '[contenteditable="true"]',
21
- ];
22
- function buildDoubaoComposerLocatorScript() {
23
- return `
24
- const isVisible = (el) => {
25
- if (!(el instanceof HTMLElement)) return false;
26
- const style = window.getComputedStyle(el);
27
- if (style.display === 'none' || style.visibility === 'hidden') return false;
28
- const rect = el.getBoundingClientRect();
29
- return rect.width > 0 && rect.height > 0;
30
- };
31
-
32
- const composerSelectors = ${JSON.stringify(DOUBAO_COMPOSER_SELECTORS)};
33
- const findComposer = () => {
34
- for (const selector of composerSelectors) {
35
- const node = Array.from(document.querySelectorAll(selector)).find(isVisible);
36
- if (node) return node;
37
- }
38
- return null;
39
- };
40
- `;
41
- }
42
- function getTranscriptLinesScript() {
43
- return `
44
- (() => {
45
- const clean = (value) => (value || '')
46
- .replace(/\\u00a0/g, ' ')
47
- .replace(/\\n{3,}/g, '\\n\\n')
48
- .trim();
49
-
50
- const root = document.body.cloneNode(true);
51
- const removableSelectors = [
52
- '[data-testid="flow_chat_sidebar"]',
53
- '[data-testid="chat_input"]',
54
- '[data-testid="flow_chat_guidance_page"]',
55
- ];
56
-
57
- for (const selector of removableSelectors) {
58
- root.querySelectorAll(selector).forEach((node) => node.remove());
59
- }
60
-
61
- root.querySelectorAll('script, style, noscript').forEach((node) => node.remove());
62
-
63
- const stopLines = new Set([
64
- '豆包',
65
- '新对话',
66
- '内容由豆包 AI 生成,请仔细甄别',
67
- 'AI 创作',
68
- '云盘',
69
- '更多',
70
- '历史对话',
71
- '手机版对话',
72
- '快速',
73
- '超能模式',
74
- 'Beta',
75
- 'PPT 生成',
76
- '图像生成',
77
- '帮我写作',
78
- '请仔细甄别',
79
- '下载电脑版',
80
- ]);
81
-
82
- const noisyPatterns = [
83
- /^window\\._SSR_DATA/,
84
- /^window\\._ROUTER_DATA/,
85
- /^\{"namedChunks"/,
86
- /^在此处拖放文件/,
87
- /^文件数量:/,
88
- /^文件类型:/,
89
- ];
90
-
91
- const transcriptText = clean(root.innerText || root.textContent || '')
92
- .replace(/新对话/g, '\\n')
93
- .replace(/内容由豆包 AI 生成,请仔细甄别/g, '\\n')
94
- .replace(/在此处拖放文件/g, '\\n')
95
- .replace(/文件数量:[^\\n]*/g, '')
96
- .replace(/文件类型:[^\\n]*/g, '');
97
-
98
- return clean(transcriptText)
99
- .split('\\n')
100
- .map((line) => clean(line))
101
- .filter((line) => line
102
- && line.length <= 400
103
- && !stopLines.has(line)
104
- && !noisyPatterns.some((pattern) => pattern.test(line)));
105
- })()
106
- `;
107
- }
108
- function getStateScript() {
109
- return `
110
- (() => {
111
- const routerData = window._ROUTER_DATA?.loaderData?.chat_layout;
112
- const placeholderNode = document.querySelector(
113
- 'textarea[data-testid="chat_input_input"], textarea[placeholder], [contenteditable="true"][placeholder], [aria-label*="发消息"], [aria-label*="Message"]'
114
- );
115
- return {
116
- url: window.location.href,
117
- title: document.title || '',
118
- isLogin: typeof routerData?.userSetting?.data?.is_login === 'boolean'
119
- ? routerData.userSetting.data.is_login
120
- : null,
121
- accountDescription: routerData?.accountInfo?.data?.description || '',
122
- placeholder: placeholderNode?.getAttribute('placeholder')
123
- || placeholderNode?.getAttribute('aria-label')
124
- || '',
125
- };
126
- })()
127
- `;
128
- }
129
- function getTurnsScript() {
130
- return `
131
- (() => {
132
- const clean = (value) => (value || '')
133
- .replace(/\\u00a0/g, ' ')
134
- .replace(/\\n{3,}/g, '\\n\\n')
135
- .trim();
136
-
137
- const isVisible = (el) => {
138
- if (!(el instanceof HTMLElement)) return false;
139
- const style = window.getComputedStyle(el);
140
- if (style.display === 'none' || style.visibility === 'hidden') return false;
141
- const rect = el.getBoundingClientRect();
142
- return rect.width > 0 && rect.height > 0;
143
- };
144
-
145
- const getRole = (root) => {
146
- if (
147
- root.matches('[data-testid="send_message"], [class*="send-message"]')
148
- || root.querySelector('[data-testid="send_message"], [class*="send-message"]')
149
- || root.matches('[class*="bg-g-send-msg-bubble"]')
150
- ||
151
- root.querySelector('[class*="bg-g-send-msg-bubble"]')
152
- || root.querySelector('[data-foundation-type="send-message-action-bar"]')
153
- ) {
154
- return 'User';
155
- }
156
- if (
157
- root.matches('[data-testid="receive_message"], [data-testid*="receive_message"], [class*="receive-message"]')
158
- || root.querySelector('[data-testid="receive_message"], [data-testid*="receive_message"], [class*="receive-message"]')
159
- || root.matches('[class*="bg-g-receive-msg-bubble"]')
160
- ||
161
- root.querySelector('[class*="bg-g-receive-msg-bubble"]')
162
- || root.querySelector('[data-foundation-type="receive-message-action-bar"]')
163
- ) {
164
- return 'Assistant';
165
- }
166
- // 2026-05 Doubao DOM refactor: no more receive-message / bg-g-receive-msg-bubble
167
- // markers on assistant turns. Wrappers are now [class*="inner-item-"] /
168
- // [class*="top-item-"] and the only reliable assistant signal is the
169
- // .flow-markdown-body / .md-box-root content container WITHOUT any
170
- // send-bubble marker.
171
- if (
172
- (root.matches('[class*="inner-item-"], [class*="top-item-"]')
173
- || root.closest('[class*="inner-item-"], [class*="top-item-"]'))
174
- && (root.matches('.flow-markdown-body, .md-box-root, [class*="md-box-root"]')
175
- || root.querySelector('.flow-markdown-body, .md-box-root, [class*="md-box-root"]'))
176
- && !root.matches('[class*="bg-g-send-msg-bubble"]')
177
- && !root.querySelector('[class*="bg-g-send-msg-bubble"]')
178
- ) {
179
- return 'Assistant';
180
- }
181
- return '';
182
- };
183
-
184
- const messageTextSelectors = [
185
- '[data-testid="message_text_content"]',
186
- '[data-testid="message_content"]',
187
- '[data-testid*="message_text"]',
188
- '[data-testid*="message_content"]',
189
- '[class*="message-text"]',
190
- '[class*="message-content"]',
191
- '[class*="bg-g-send-msg-bubble"]',
192
- '[class*="bg-g-receive-msg-bubble"]',
193
- '.flow-markdown-body',
194
- '.md-box-root',
195
- '[class*="md-box-root"]',
196
- '[class*="bubble"]',
197
- ];
198
- const messageImageSelector = messageTextSelectors.map((s) => s + ' img').join(', ');
199
-
200
- const extractTextChunks = (root) => {
201
- const chunks = [];
202
- const seen = new Set();
203
- for (const selector of messageTextSelectors) {
204
- const nodes = Array.from(root.querySelectorAll(selector))
205
- .filter((el) => isVisible(el))
206
- .map((el) => clean(el.innerText || el.textContent || ''))
207
- .filter(Boolean);
208
-
209
- for (const nodeText of nodes) {
210
- if (seen.has(nodeText)) continue;
211
- seen.add(nodeText);
212
- chunks.push(nodeText);
213
- }
214
-
215
- if (chunks.length > 0) break;
216
- }
217
- return chunks;
218
- };
219
-
220
- const extractImageLines = (root) => Array.from(root.querySelectorAll(messageImageSelector))
221
- .filter((el) => el instanceof HTMLImageElement && isVisible(el))
222
- .map((el) => {
223
- const width = el.naturalWidth || el.width || 0;
224
- const height = el.naturalHeight || el.height || 0;
225
- if (width > 0 && height > 0 && width <= 48 && height <= 48) return '';
226
- const url = clean(el.currentSrc || el.src || '');
227
- return /^https?:\\/\\//i.test(url) ? 'Image: ' + url : '';
228
- })
229
- .filter((line, index, items) => Boolean(line) && items.indexOf(line) === index);
230
-
231
- const extractText = (root) => {
232
- const chunks = extractTextChunks(root);
233
- const text = chunks.length > 0 ? clean(chunks.join('\\n')) : clean(root.innerText || root.textContent || '');
234
- const imageLines = extractImageLines(root);
235
- if (imageLines.length === 0) return text;
236
- return text ? text + '\\n' + imageLines.join('\\n') : imageLines.join('\\n');
237
- };
238
-
239
- const itemSelectors = [
240
- // 2026-05 Doubao DOM refactor wrappers (prepended; outer ones win via
241
- // ancestor-keep dedup below).
242
- '[class*="inner-item-"]',
243
- '[class*="top-item-"]',
244
- '[class*="item-kDun2N"]',
245
- '[data-testid="union_message"]',
246
- '[data-testid="message-block-container"]',
247
- '[data-message-id]',
248
- '[class*="bg-g-send-msg-bubble"]',
249
- '[class*="bg-g-receive-msg-bubble"]',
250
- ];
251
-
252
- const messageLists = Array.from(document.querySelectorAll('[class*="message-list-"], .container-PvPoAn, .scroll-view-OEiNXD, [data-testid="message-list"]'))
253
- .filter((el) => isVisible(el));
254
- if (messageLists.length === 0) return [];
255
-
256
- const allRoots = [];
257
- const seen = new Set();
258
- for (const messageList of messageLists) {
259
- for (const sel of itemSelectors) {
260
- messageList.querySelectorAll(sel).forEach((el) => {
261
- if (!seen.has(el)) {
262
- seen.add(el);
263
- allRoots.push(el);
264
- }
265
- });
266
- }
267
- }
268
- const roots = allRoots
269
- .filter((el) => isVisible(el) && !el.closest('script, style, noscript'))
270
- .filter((el, index, items) => !items.some((other, otherIndex) => otherIndex !== index && other.contains(el)));
271
-
272
- const turns = roots
273
- .map((el) => {
274
- const role = getRole(el);
275
- const text = extractText(el);
276
- return { el, role, text };
277
- })
278
- .filter((item) => (item.role === 'User' || item.role === 'Assistant') && item.text);
279
-
280
- turns.sort((a, b) => {
281
- if (a.el === b.el) return 0;
282
- const pos = a.el.compareDocumentPosition(b.el);
283
- return pos & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;
284
- });
285
-
286
- const deduped = [];
287
- const dedupedSeen = new Set();
288
- for (const turn of turns) {
289
- const key = turn.role + '::' + turn.text;
290
- if (dedupedSeen.has(key)) continue;
291
- dedupedSeen.add(key);
292
- deduped.push({ Role: turn.role, Text: turn.text });
293
- }
294
-
295
- if (deduped.length > 0) return deduped;
296
- return [];
297
- })()
298
- `;
299
- }
300
- function prepareDoubaoComposerScript() {
301
- return `
302
- (() => {
303
- ${buildDoubaoComposerLocatorScript()}
304
- const composer = findComposer();
305
-
306
- if (
307
- !(composer instanceof HTMLTextAreaElement)
308
- && !(composer instanceof HTMLInputElement)
309
- && !(composer instanceof HTMLElement)
310
- ) {
311
- return { ok: false, reason: 'Could not find Doubao input element' };
312
- }
313
-
314
- try {
315
- composer.focus();
316
-
317
- if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
318
- const length = composer.value.length;
319
- composer.setSelectionRange(0, length);
320
- } else {
321
- const selection = window.getSelection();
322
- const range = document.createRange();
323
- range.selectNodeContents(composer);
324
- selection?.removeAllRanges();
325
- selection?.addRange(range);
326
- }
327
- } catch (error) {
328
- return {
329
- ok: false,
330
- reason: error instanceof Error ? error.message : String(error),
331
- };
332
- }
333
-
334
- return { ok: true };
335
- })()
336
- `;
337
- }
338
- function composerStateScript() {
339
- return `
340
- (() => {
341
- ${buildDoubaoComposerLocatorScript()}
342
- const composer = findComposer();
343
-
344
- if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
345
- return { hasText: !!composer.value.trim(), text: composer.value };
346
- }
347
-
348
- if (composer instanceof HTMLElement) {
349
- const text = (composer.innerText || '').trim() || (composer.textContent || '').trim();
350
- return {
351
- hasText: !!text,
352
- text,
353
- };
354
- }
355
-
356
- return { hasText: false, text: '' };
357
- })()
358
- `;
359
- }
360
- function syncComposerAfterNativeTypeScript() {
361
- return `
362
- (() => {
363
- ${buildDoubaoComposerLocatorScript()}
364
- const composer = findComposer();
365
-
366
- if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
367
- const value = composer.value;
368
- composer.dispatchEvent(new InputEvent('beforeinput', { bubbles: true, data: value, inputType: 'insertText' }));
369
- composer.dispatchEvent(new InputEvent('input', { bubbles: true, data: value, inputType: 'insertText' }));
370
- composer.dispatchEvent(new Event('change', { bubbles: true }));
371
- return { hasText: !!value.trim(), text: value };
372
- }
373
-
374
- if (composer instanceof HTMLElement) {
375
- const text = (composer.innerText || '').trim() || (composer.textContent || '').trim();
376
- composer.dispatchEvent(new InputEvent('beforeinput', { bubbles: true, data: text, inputType: 'insertText' }));
377
- composer.dispatchEvent(new InputEvent('input', { bubbles: true, data: text, inputType: 'insertText' }));
378
- composer.dispatchEvent(new Event('change', { bubbles: true }));
379
- return { hasText: !!text, text };
380
- }
381
-
382
- return { hasText: false, text: '' };
383
- })()
384
- `;
385
- }
386
- function fillComposerScript(text) {
387
- return `
388
- ((inputText) => {
389
- ${buildDoubaoComposerLocatorScript()}
390
- const composer = findComposer();
391
-
392
- if (!composer) throw new Error('Could not find Doubao input element');
393
-
394
- composer.focus();
395
-
396
- if (composer instanceof HTMLTextAreaElement || composer instanceof HTMLInputElement) {
397
- const proto = composer instanceof HTMLTextAreaElement
398
- ? window.HTMLTextAreaElement.prototype
399
- : window.HTMLInputElement.prototype;
400
- const setter = Object.getOwnPropertyDescriptor(proto, 'value')?.set;
401
- setter?.call(composer, inputText);
402
- composer.dispatchEvent(new InputEvent('beforeinput', { bubbles: true, data: inputText, inputType: 'insertText' }));
403
- composer.dispatchEvent(new InputEvent('input', { bubbles: true, data: inputText, inputType: 'insertText' }));
404
- composer.dispatchEvent(new Event('change', { bubbles: true }));
405
- return { hasText: !!composer.value.trim(), mode: 'text-input', text: composer.value };
406
- }
407
-
408
- if (composer instanceof HTMLElement) {
409
- composer.textContent = '';
410
- const selection = window.getSelection();
411
- const range = document.createRange();
412
- range.selectNodeContents(composer);
413
- range.collapse(false);
414
- selection?.removeAllRanges();
415
- selection?.addRange(range);
416
- document.execCommand('insertText', false, inputText);
417
- composer.dispatchEvent(new InputEvent('beforeinput', { bubbles: true, data: inputText, inputType: 'insertText' }));
418
- composer.dispatchEvent(new InputEvent('input', { bubbles: true, data: inputText, inputType: 'insertText' }));
419
- composer.dispatchEvent(new Event('change', { bubbles: true }));
420
- return {
421
- hasText: !!((composer.innerText || '').trim() || (composer.textContent || '').trim()),
422
- mode: 'contenteditable',
423
- text: (composer.innerText || '').trim() || (composer.textContent || '').trim(),
424
- };
425
- }
426
-
427
- throw new Error('Unsupported Doubao input element');
428
- })(${JSON.stringify(text)})
429
- `;
430
- }
431
- function detectDoubaoVerificationScript() {
432
- return `
433
- (() => {
434
- const isVisible = (el) => {
435
- if (!(el instanceof HTMLElement)) return false;
436
- const style = window.getComputedStyle(el);
437
- if (style.display === 'none' || style.visibility === 'hidden') return false;
438
- const rect = el.getBoundingClientRect();
439
- return rect.width > 0 && rect.height > 0;
440
- };
441
-
442
- const challengeSelectors = [
443
- 'iframe[src*="captcha"]',
444
- 'iframe[src*="verify"]',
445
- 'input[placeholder*="验证码"]',
446
- 'input[aria-label*="验证码"]',
447
- ];
448
- const selectorMatch = challengeSelectors.find((selector) => {
449
- return Array.from(document.querySelectorAll(selector)).some((node) => isVisible(node));
450
- });
451
- if (selectorMatch) {
452
- return { detected: true, reason: selectorMatch };
453
- }
454
-
455
- const phrasePattern = /人机验证|完成安全验证|异常访问|滑动验证|拖动滑块/i;
456
- const candidateRoots = Array.from(
457
- document.querySelectorAll('[role="dialog"], [aria-modal="true"], .semi-modal, .modal')
458
- );
459
- const match = candidateRoots.find((node) => {
460
- if (!(node instanceof HTMLElement)) return false;
461
- if (!isVisible(node)) return false;
462
- const text = (node.innerText || node.textContent || '').trim();
463
- if (!text || text.length > 400) return false;
464
- return phrasePattern.test(text);
465
- });
466
-
467
- return {
468
- detected: !!match,
469
- reason: match ? ((match.innerText || match.textContent || '').trim().slice(0, 80) || 'challenge-ui') : '',
470
- };
471
- })()
472
- `;
473
- }
474
- function clickSendButtonScript() {
475
- return `
476
- (() => {
477
- ${buildDoubaoComposerLocatorScript()}
478
- const directSendButton = document.querySelector('button#flow-end-msg-send');
479
- if (directSendButton instanceof HTMLElement && isVisible(directSendButton)) {
480
- const disabled = directSendButton.getAttribute('disabled') !== null
481
- || directSendButton.getAttribute('aria-disabled') === 'true';
482
- if (!disabled) {
483
- directSendButton.click();
484
- return true;
485
- }
486
- }
487
-
488
- const composer = findComposer();
489
- if (!(composer instanceof HTMLElement)) return false;
490
-
491
- const composerRect = composer.getBoundingClientRect();
492
- const rootCandidates = [
493
- composer.closest('form'),
494
- composer.closest('[role="form"]'),
495
- composer.closest('[data-testid="chat_input"]'),
496
- composer.closest('.chat-input'),
497
- composer.parentElement,
498
- composer.parentElement?.parentElement,
499
- ].filter(Boolean);
500
-
501
- const seen = new Set();
502
- const buttons = [];
503
- for (const root of rootCandidates) {
504
- root.querySelectorAll('button, [role="button"]').forEach((node) => {
505
- if (!(node instanceof HTMLElement)) return;
506
- if (seen.has(node)) return;
507
- seen.add(node);
508
- buttons.push(node);
509
- });
510
- }
511
-
512
- const submitPattern = /send|发送|提交|发消息/i;
513
- const excludedPattern = /新对话|new chat|快速|视频生成|深入研究|图像生成|帮我写作|音乐生成|更多|上传|upload|麦克风|microphone|模式|mode|工具|tools|设置|settings|云盘|history|历史/i;
514
- let bestButton = null;
515
- let bestScore = -Infinity;
516
-
517
- for (const button of buttons) {
518
- if (!isVisible(button)) continue;
519
- const disabled = button.getAttribute('disabled') !== null
520
- || button.getAttribute('aria-disabled') === 'true';
521
- if (disabled) continue;
522
-
523
- const text = (button.innerText || button.textContent || '').trim();
524
- const aria = (button.getAttribute('aria-label') || '').trim();
525
- const title = (button.getAttribute('title') || '').trim();
526
- const className = String(button.className || '');
527
- const haystack = [text, aria, title].join(' ').trim();
528
- if (excludedPattern.test(haystack)) continue;
529
-
530
- const rect = button.getBoundingClientRect();
531
- const dx = rect.left - composerRect.right;
532
- const dy = Math.abs((rect.top + rect.height / 2) - (composerRect.top + composerRect.height / 2));
533
- const distancePenalty = Math.abs(dx) + dy;
534
- const isSubmitLike = submitPattern.test(haystack)
535
- || button.getAttribute('type') === 'submit'
536
- || className.includes('bg-dbx-text-highlight')
537
- || className.includes('bg-dbx-fill-highlight')
538
- || className.includes('text-dbx-text-static-white-primary');
539
- if (!isSubmitLike) continue;
540
- if (dx < -80 || dx > 280) continue;
541
- if (dy > 140) continue;
542
-
543
- let score = -distancePenalty;
544
- if (submitPattern.test(haystack)) score += 5000;
545
- if (button.getAttribute('type') === 'submit') score += 1200;
546
- if (button.closest('.chat-input-button')) score += 1200;
547
- if (className.includes('bg-dbx-text-highlight')) score += 600;
548
- if (className.includes('bg-dbx-fill-highlight')) score += 600;
549
- if (className.includes('text-dbx-text-static-white-primary')) score += 400;
550
- if (dx >= -40 && dx <= 240) score += 120;
551
- if (rect.left >= composerRect.left - 40) score += 40;
552
-
553
- if (score > bestScore) {
554
- bestScore = score;
555
- bestButton = button;
556
- }
557
- }
558
-
559
- if (bestButton && bestScore >= 200) {
560
- bestButton.click();
561
- return true;
562
- }
563
-
564
- return false;
565
- })()
566
- `;
567
- }
568
- function clickNewChatScript() {
569
- return `
570
- (() => {
571
- const isVisible = (el) => {
572
- if (!(el instanceof HTMLElement)) return false;
573
- const style = window.getComputedStyle(el);
574
- if (style.display === 'none' || style.visibility === 'hidden') return false;
575
- const rect = el.getBoundingClientRect();
576
- return rect.width > 0 && rect.height > 0;
577
- };
578
-
579
- const labels = ['新对话', 'New Chat', '创建新对话'];
580
- const buttons = Array.from(document.querySelectorAll('button, a, [role="button"]'));
581
-
582
- for (const button of buttons) {
583
- if (!isVisible(button)) continue;
584
- const text = (button.innerText || button.textContent || '').trim();
585
- const aria = (button.getAttribute('aria-label') || '').trim();
586
- const title = (button.getAttribute('title') || '').trim();
587
- const haystacks = [text, aria, title];
588
- if (haystacks.some((value) => labels.some((label) => value.includes(label)))) {
589
- button.click();
590
- return text || aria || title || 'new-chat';
591
- }
592
- }
593
-
594
- return '';
595
- })()
596
- `;
597
- }
598
- function normalizeDoubaoTabs(rawTabs) {
599
- return rawTabs
600
- .map((tab, index) => {
601
- const record = (tab || {});
602
- return {
603
- index: typeof record.index === 'number' ? record.index : index,
604
- url: typeof record.url === 'string' ? record.url : '',
605
- title: typeof record.title === 'string' ? record.title : '',
606
- active: record.active === true,
607
- };
608
- })
609
- .filter((tab) => tab.url.includes('doubao.com/chat'));
610
- }
611
- async function selectPreferredDoubaoTab(page) {
612
- const rawTabs = await page.tabs().catch(() => []);
613
- if (!Array.isArray(rawTabs) || rawTabs.length === 0)
614
- return false;
615
- const tabs = normalizeDoubaoTabs(rawTabs);
616
- if (tabs.length === 0)
617
- return false;
618
- const preferred = [...tabs].sort((left, right) => {
619
- const score = (tab) => {
620
- let value = tab.index;
621
- if (/https:\/\/www\.doubao\.com\/chat\/[A-Za-z0-9_-]+/.test(tab.url))
622
- value += 1000;
623
- else if (tab.url.startsWith(DOUBAO_CHAT_URL))
624
- value += 100;
625
- if (tab.active)
626
- value += 25;
627
- return value;
628
- };
629
- return score(right) - score(left);
630
- })[0];
631
- if (!preferred)
632
- return false;
633
- await page.selectTab(preferred.index);
634
- await page.wait(0.8);
635
- return true;
636
- }
637
- export async function ensureDoubaoChatPage(page) {
638
- let currentUrl = await page.evaluate('window.location.href').catch(() => '');
639
- if (typeof currentUrl === 'string' && currentUrl.includes('doubao.com/chat')) {
640
- await page.wait(1);
641
- return;
642
- }
643
- const reusedTab = await selectPreferredDoubaoTab(page);
644
- if (reusedTab) {
645
- currentUrl = await page.evaluate('window.location.href').catch(() => '');
646
- if (typeof currentUrl === 'string' && currentUrl.includes('doubao.com/chat')) {
647
- await page.wait(1);
648
- return;
649
- }
650
- }
651
- await page.goto(DOUBAO_CHAT_URL, { waitUntil: 'load', settleMs: 2500 });
652
- await page.wait(1.5);
653
- }
654
- export async function getDoubaoPageState(page) {
655
- await ensureDoubaoChatPage(page);
656
- return await page.evaluate(getStateScript());
657
- }
658
- export async function getDoubaoTurns(page) {
659
- await ensureDoubaoChatPage(page);
660
- const turns = await page.evaluate(getTurnsScript());
661
- if (turns.length > 0)
662
- return turns;
663
- const lines = await page.evaluate(getTranscriptLinesScript());
664
- return lines.map((line) => ({ Role: 'System', Text: line }));
665
- }
666
- export async function getDoubaoVisibleTurns(page) {
667
- await ensureDoubaoChatPage(page);
668
- return await page.evaluate(getTurnsScript());
669
- }
670
- export async function getDoubaoTranscriptLines(page) {
671
- await ensureDoubaoChatPage(page);
672
- return await page.evaluate(getTranscriptLinesScript());
673
- }
674
- export async function sendDoubaoMessage(page, text) {
675
- await ensureDoubaoChatPage(page);
676
- const normalizeComposerText = (value) => value.replace(/\r\n/g, '\n').trim();
677
- const expectedText = normalizeComposerText(text);
678
- const prepared = await page.evaluate(prepareDoubaoComposerScript());
679
- if (!prepared?.ok) {
680
- throw new CommandExecutionError(prepared?.reason || 'Could not find Doubao input element');
681
- }
682
- let hasText = false;
683
- if (page.nativeType) {
684
- try {
685
- await page.nativeType(text);
686
- await page.wait(0.2);
687
- await page.evaluate(syncComposerAfterNativeTypeScript());
688
- const nativeState = await page.evaluate(composerStateScript());
689
- hasText = !!nativeState?.hasText && normalizeComposerText(nativeState?.text || '') === expectedText;
690
- }
691
- catch { }
692
- }
693
- if (!hasText) {
694
- const fallbackState = await page.evaluate(fillComposerScript(text));
695
- hasText = !!fallbackState?.hasText && normalizeComposerText(fallbackState?.text || '') === expectedText;
696
- }
697
- if (!hasText) {
698
- throw new CommandExecutionError('Failed to insert text into Doubao composer');
699
- }
700
- let submittedBy = 'enter';
701
- const clicked = await page.evaluate(clickSendButtonScript());
702
- if (clicked) {
703
- submittedBy = 'button';
704
- }
705
- else if (page.nativeKeyPress) {
706
- try {
707
- await page.nativeKeyPress('Enter');
708
- }
709
- catch {
710
- await page.pressKey('Enter');
711
- }
712
- }
713
- else {
714
- await page.pressKey('Enter');
715
- }
716
- await page.wait(0.8);
717
- const verification = await page.evaluate(detectDoubaoVerificationScript());
718
- if (verification?.detected) {
719
- throw new CommandExecutionError('Doubao blocked the request with a verification challenge', verification.reason
720
- ? `Detected challenge signal: ${verification.reason}`
721
- : 'Please complete the challenge in the browser and try again.');
722
- }
723
- return submittedBy;
724
- }
725
- export async function waitForDoubaoResponse(page, beforeLines, beforeTurns, promptText, timeoutSeconds) {
726
- const beforeTurnSet = new Set(beforeTurns
727
- .filter((turn) => turn.Role === 'Assistant')
728
- .map((turn) => `${turn.Role}::${turn.Text}`));
729
- const sanitizeCandidate = (value) => value
730
- .replace(promptText, '')
731
- .replace(/内容由豆包 AI 生成/g, '')
732
- .replace(/在此处拖放文件/g, '')
733
- .replace(/文件数量:.*$/g, '')
734
- .replace(/\{"namedChunks".*$/g, '')
735
- .replace(/window\\._SSR_DATA.*$/g, '')
736
- .trim();
737
- const getCandidate = async () => {
738
- const verification = await page.evaluate(detectDoubaoVerificationScript());
739
- if (verification?.detected) {
740
- throw new CommandExecutionError('Doubao blocked the request with a verification challenge', verification.reason
741
- ? `Detected challenge signal: ${verification.reason}`
742
- : 'Please complete the challenge in the browser and try again.');
743
- }
744
- const turns = await getDoubaoVisibleTurns(page);
745
- const assistantCandidate = [...turns]
746
- .reverse()
747
- .find((turn) => turn.Role === 'Assistant' && !beforeTurnSet.has(`${turn.Role}::${turn.Text}`));
748
- const visibleCandidate = assistantCandidate ? sanitizeCandidate(assistantCandidate.Text) : '';
749
- if (visibleCandidate)
750
- return visibleCandidate;
751
- const lines = await getDoubaoTranscriptLines(page);
752
- const additions = collectDoubaoTranscriptAdditions(beforeLines, lines, promptText, sanitizeCandidate)
753
- .split('\n')
754
- .filter(Boolean);
755
- const shortCandidate = additions.find((line) => line.length <= 120);
756
- return shortCandidate || additions[additions.length - 1] || '';
757
- };
758
- const pollIntervalSeconds = 2;
759
- const maxPolls = Math.max(1, Math.ceil(timeoutSeconds / pollIntervalSeconds));
760
- let lastCandidate = '';
761
- let stableCount = 0;
762
- for (let index = 0; index < maxPolls; index += 1) {
763
- await page.wait(index === 0 ? 1.5 : pollIntervalSeconds);
764
- const candidate = await getCandidate();
765
- if (!candidate)
766
- continue;
767
- if (candidate === lastCandidate) {
768
- stableCount += 1;
769
- }
770
- else {
771
- lastCandidate = candidate;
772
- stableCount = 1;
773
- }
774
- if (stableCount >= 2 || index === maxPolls - 1) {
775
- return candidate;
776
- }
777
- }
778
- return lastCandidate;
779
- }
780
- export function isLikelyDoubaoUiNoise(value) {
781
- const text = value.replace(/\s+/g, '');
782
- if (!text)
783
- return false;
784
- const exactNoise = new Set([
785
- '快速视频生成深入研究图像生成帮我写作音乐生成更多',
786
- ]);
787
- return exactNoise.has(text);
788
- }
789
- function isAlwaysTranscriptUiNoise(value) {
790
- const text = value.replace(/\s+/g, '');
791
- if (!text)
792
- return false;
793
- const exactNoise = new Set([
794
- 'AI创作云盘更多历史对话',
795
- ]);
796
- return exactNoise.has(text);
797
- }
798
- function isLikelyTranscriptUiNoise(rawValue, sanitizedValue, promptText) {
799
- const normalizeWhitespace = (value) => value.replace(/\s+/g, ' ').trim();
800
- const normalizedRaw = normalizeWhitespace(rawValue);
801
- const normalizedPrompt = normalizeWhitespace(promptText);
802
- if (!normalizedPrompt || !normalizedRaw.startsWith(normalizedPrompt))
803
- return false;
804
- const remainder = normalizedRaw.slice(normalizedPrompt.length).trim();
805
- if (!remainder)
806
- return true;
807
- return isLikelyDoubaoUiNoise(remainder) || isLikelyDoubaoUiNoise(sanitizedValue);
808
- }
809
- export function collectDoubaoTranscriptAdditions(beforeLines, currentLines, promptText, sanitize = (value) => value.trim()) {
810
- const normalizedBefore = new Set(beforeLines.map((line) => sanitize(line)).filter(Boolean));
811
- return currentLines
812
- .filter((line) => !beforeLines.includes(line))
813
- .map((line) => ({ raw: line, sanitized: sanitize(line) }))
814
- .filter(({ raw, sanitized }) => sanitized
815
- && sanitized !== promptText
816
- && !normalizedBefore.has(sanitized)
817
- && !isAlwaysTranscriptUiNoise(sanitized)
818
- && !isLikelyTranscriptUiNoise(raw, sanitized, promptText))
819
- .map(({ sanitized }) => sanitized)
820
- .join('\n');
821
- }
822
- function getConversationListScript() {
823
- return `
824
- (() => {
825
- const sidebar = document.querySelector('[data-testid="flow_chat_sidebar"]');
826
- if (!sidebar) return [];
827
-
828
- const items = Array.from(
829
- sidebar.querySelectorAll('a[data-testid="chat_list_thread_item"]')
830
- );
831
-
832
- return items
833
- .map(a => {
834
- const href = a.getAttribute('href') || '';
835
- const match = href.match(/\\/chat\\/(\\d{10,})/);
836
- if (!match) return null;
837
- const id = match[1];
838
- const textContent = (a.textContent || a.innerText || '').trim();
839
- const title = textContent
840
- .replace(/\\s+/g, ' ')
841
- .substring(0, 200);
842
- return { id, title, href };
843
- })
844
- .filter(Boolean);
845
- })()
846
- `;
847
- }
848
- export async function getDoubaoConversationList(page) {
849
- await ensureDoubaoChatPage(page);
850
- const raw = await page.evaluate(getConversationListScript());
851
- if (!Array.isArray(raw))
852
- return [];
853
- return raw.map((item) => ({
854
- Id: item.id,
855
- Title: item.title,
856
- Url: `${DOUBAO_CHAT_URL}/${item.id}`,
857
- }));
858
- }
859
- export function parseDoubaoConversationId(input) {
860
- const match = input.match(/(\d{10,})/);
861
- return match ? match[1] : input;
862
- }
863
- function getConversationDetailScript() {
864
- return `
865
- (() => {
866
- const clean = (v) => (v || '').replace(/\\u00a0/g, ' ').replace(/\\n{3,}/g, '\\n\\n').trim();
867
-
868
- const messageList = document.querySelector('[data-testid="message-list"]');
869
- if (!messageList) return { messages: [], meeting: null };
870
-
871
- const meetingCard = messageList.querySelector('[data-testid="meeting-minutes-card"]');
872
- let meeting = null;
873
- if (meetingCard) {
874
- const raw = clean(meetingCard.textContent || '');
875
- const match = raw.match(/^(.+?)(?:会议时间:|\\s*$)(.*)/);
876
- meeting = {
877
- title: match ? match[1].trim() : raw,
878
- time: match && match[2] ? match[2].trim() : '',
879
- };
880
- }
881
-
882
- const unions = Array.from(messageList.querySelectorAll('[data-testid="union_message"]'));
883
- const messages = unions.map(u => {
884
- const isSend = !!u.querySelector('[data-testid="send_message"]');
885
- const isReceive = !!u.querySelector('[data-testid="receive_message"]');
886
- const textEl = u.querySelector('[data-testid="message_text_content"]');
887
- const text = textEl ? clean(textEl.innerText || textEl.textContent || '') : '';
888
- return {
889
- role: isSend ? 'User' : isReceive ? 'Assistant' : 'System',
890
- text,
891
- hasMeetingCard: !!u.querySelector('[data-testid="meeting-minutes-card"]'),
892
- };
893
- }).filter(m => m.text);
894
-
895
- return { messages, meeting };
896
- })()
897
- `;
898
- }
899
- export async function navigateToConversation(page, conversationId) {
900
- const url = `${DOUBAO_CHAT_URL}/${conversationId}`;
901
- const currentUrl = await page.evaluate('window.location.href').catch(() => '');
902
- if (typeof currentUrl === 'string' && currentUrl.includes(`/chat/${conversationId}`)) {
903
- await page.wait(1);
904
- return;
905
- }
906
- await page.goto(url, { waitUntil: 'load', settleMs: 3000 });
907
- await page.wait(2);
908
- }
909
- export async function getConversationDetail(page, conversationId) {
910
- await navigateToConversation(page, conversationId);
911
- const raw = await page.evaluate(getConversationDetailScript());
912
- const messages = (raw.messages || []).map((m) => ({
913
- Role: m.role,
914
- Text: m.text,
915
- HasMeetingCard: m.hasMeetingCard,
916
- }));
917
- return { messages, meeting: raw.meeting };
918
- }
919
- // ---------------------------------------------------------------------------
920
- // Meeting minutes panel helpers
921
- // ---------------------------------------------------------------------------
922
- function clickMeetingCardScript() {
923
- return `
924
- (() => {
925
- const card = document.querySelector('[data-testid="meeting-minutes-card"]');
926
- if (!card) return false;
927
- card.click();
928
- return true;
929
- })()
930
- `;
931
- }
932
- function readMeetingSummaryScript() {
933
- return `
934
- (() => {
935
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
936
- if (!panel) return { error: 'no panel' };
937
-
938
- const summary = panel.querySelector('[data-testid="meeting-summary-todos"]');
939
- const summaryText = summary
940
- ? (summary.innerText || summary.textContent || '').trim()
941
- : '';
942
-
943
- return { summary: summaryText };
944
- })()
945
- `;
946
- }
947
- function clickTextNotesTabScript() {
948
- return `
949
- (() => {
950
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
951
- if (!panel) return false;
952
- const tabs = panel.querySelectorAll('[role="tab"], .semi-tabs-tab');
953
- for (const tab of tabs) {
954
- if ((tab.textContent || '').trim().includes('文字')) {
955
- tab.click();
956
- return true;
957
- }
958
- }
959
- return false;
960
- })()
961
- `;
962
- }
963
- function readTextNotesScript() {
964
- return `
965
- (() => {
966
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
967
- if (!panel) return '';
968
- const textNotes = panel.querySelector('[data-testid="meeting-text-notes"]');
969
- if (!textNotes) return '';
970
- return (textNotes.innerText || textNotes.textContent || '').trim();
971
- })()
972
- `;
973
- }
974
- function normalizeTranscriptLines(text) {
975
- return text
976
- .split('\n')
977
- .map(line => line.trim())
978
- .filter(Boolean);
979
- }
980
- function containsLineSequence(haystack, needle) {
981
- if (needle.length === 0)
982
- return true;
983
- if (needle.length > haystack.length)
984
- return false;
985
- for (let start = 0; start <= haystack.length - needle.length; start += 1) {
986
- let matched = true;
987
- for (let offset = 0; offset < needle.length; offset += 1) {
988
- if (haystack[start + offset] !== needle[offset]) {
989
- matched = false;
990
- break;
991
- }
992
- }
993
- if (matched)
994
- return true;
995
- }
996
- return false;
997
- }
998
- export function mergeTranscriptSnapshots(existing, incoming) {
999
- const currentLines = normalizeTranscriptLines(existing);
1000
- const nextLines = normalizeTranscriptLines(incoming);
1001
- if (nextLines.length === 0)
1002
- return currentLines.join('\n');
1003
- if (currentLines.length === 0)
1004
- return nextLines.join('\n');
1005
- if (containsLineSequence(currentLines, nextLines))
1006
- return currentLines.join('\n');
1007
- const maxOverlap = Math.min(currentLines.length, nextLines.length);
1008
- for (let overlap = maxOverlap; overlap > 0; overlap -= 1) {
1009
- let matched = true;
1010
- for (let index = 0; index < overlap; index += 1) {
1011
- if (currentLines[currentLines.length - overlap + index] !== nextLines[index]) {
1012
- matched = false;
1013
- break;
1014
- }
1015
- }
1016
- if (matched) {
1017
- return [...currentLines, ...nextLines.slice(overlap)].join('\n');
1018
- }
1019
- }
1020
- return [...currentLines, ...nextLines].join('\n');
1021
- }
1022
- function clickChapterTabScript() {
1023
- return `
1024
- (() => {
1025
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
1026
- if (!panel) return false;
1027
- const tabs = panel.querySelectorAll('[role="tab"], .semi-tabs-tab');
1028
- for (const tab of tabs) {
1029
- if ((tab.textContent || '').trim().includes('章节')) {
1030
- tab.click();
1031
- return true;
1032
- }
1033
- }
1034
- return false;
1035
- })()
1036
- `;
1037
- }
1038
- function readChapterScript() {
1039
- return `
1040
- (() => {
1041
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
1042
- if (!panel) return '';
1043
- const chapter = panel.querySelector('[data-testid="meeting-ai-chapter"]');
1044
- if (!chapter) return '';
1045
- return (chapter.innerText || chapter.textContent || '').trim();
1046
- })()
1047
- `;
1048
- }
1049
- function triggerTranscriptDownloadScript() {
1050
- return `
1051
- (() => {
1052
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
1053
- if (!panel) return { error: 'no panel' };
1054
-
1055
- const downloadIcon = panel.querySelector('[class*="DownloadMeetingAudio"] span[role="img"]');
1056
- if (!downloadIcon) return { error: 'no download icon' };
1057
-
1058
- downloadIcon.click();
1059
- return { clicked: 'icon' };
1060
- })()
1061
- `;
1062
- }
1063
- function clickTranscriptDownloadBtnScript() {
1064
- return `
1065
- (() => {
1066
- const btn = document.querySelector('[data-testid="minutes-download-text-btn"]');
1067
- if (!btn) return { error: 'no download text btn' };
1068
- btn.click();
1069
- return { clicked: 'transcript' };
1070
- })()
1071
- `;
1072
- }
1073
- export async function openMeetingPanel(page, conversationId) {
1074
- await navigateToConversation(page, conversationId);
1075
- const clicked = await page.evaluate(clickMeetingCardScript());
1076
- if (!clicked)
1077
- return false;
1078
- await page.wait(2);
1079
- return true;
1080
- }
1081
- export async function getMeetingSummary(page) {
1082
- const result = await page.evaluate(readMeetingSummaryScript());
1083
- return result.summary || '';
1084
- }
1085
- export async function getMeetingChapters(page) {
1086
- await page.evaluate(clickChapterTabScript());
1087
- await page.wait(1.5);
1088
- return await page.evaluate(readChapterScript());
1089
- }
1090
- function scrollTextNotesPanelScript() {
1091
- return `
1092
- (() => {
1093
- const panel = document.querySelector('[data-testid="canvas_panel_container"]');
1094
- if (!panel) return 0;
1095
- const textNotes = panel.querySelector('[data-testid="meeting-text-notes"]');
1096
- if (!textNotes) return 0;
1097
-
1098
- const scrollable = textNotes.closest('[class*="overflow"]')
1099
- || textNotes.parentElement
1100
- || textNotes;
1101
- const maxScroll = scrollable.scrollHeight - scrollable.clientHeight;
1102
- if (maxScroll > 0) {
1103
- scrollable.scrollTop = scrollable.scrollHeight;
1104
- }
1105
- return maxScroll;
1106
- })()
1107
- `;
1108
- }
1109
- export async function getMeetingTranscript(page) {
1110
- await page.evaluate(clickTextNotesTabScript());
1111
- await page.wait(2);
1112
- let merged = '';
1113
- let stableRounds = 0;
1114
- for (let i = 0; i < 10; i++) {
1115
- await page.evaluate(scrollTextNotesPanelScript());
1116
- await page.wait(1);
1117
- const snapshot = await page.evaluate(readTextNotesScript());
1118
- const nextMerged = mergeTranscriptSnapshots(merged, snapshot);
1119
- if (nextMerged === merged && snapshot.length > 0) {
1120
- stableRounds += 1;
1121
- if (stableRounds >= 2)
1122
- break;
1123
- }
1124
- else {
1125
- stableRounds = 0;
1126
- merged = nextMerged;
1127
- }
1128
- }
1129
- return merged;
1130
- }
1131
- export async function triggerTranscriptDownload(page) {
1132
- const iconResult = await page.evaluate(triggerTranscriptDownloadScript());
1133
- if (iconResult.error)
1134
- return false;
1135
- await page.wait(1);
1136
- const btnResult = await page.evaluate(clickTranscriptDownloadBtnScript());
1137
- return !btnResult.error;
1138
- }
1139
- export const __test__ = {
1140
- clickSendButtonScript,
1141
- composerStateScript,
1142
- detectDoubaoVerificationScript,
1143
- getTurnsScript,
1144
- getTranscriptLinesScript,
1145
- };
1146
- export async function startNewDoubaoChat(page) {
1147
- await ensureDoubaoChatPage(page);
1148
- const clickedLabel = await page.evaluate(clickNewChatScript());
1149
- if (clickedLabel) {
1150
- await page.wait(1.5);
1151
- return clickedLabel;
1152
- }
1153
- await page.goto(DOUBAO_NEW_CHAT_URL, { waitUntil: 'load', settleMs: 2000 });
1154
- await page.wait(1.5);
1155
- return 'navigate';
1156
- }