@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
@@ -0,0 +1,894 @@
1
+ /**
2
+ * DOM Snapshot Engine — Advanced DOM pruning for LLM consumption.
3
+ *
4
+ * Inspired by browser-use's multi-layer pruning pipeline, adapted for webcmd's
5
+ * Chrome Extension + CDP architecture. Runs entirely in-page via Runtime.evaluate.
6
+ *
7
+ * Pipeline:
8
+ * 1. Walk DOM tree, collect visibility + layout + interactivity signals
9
+ * 2. Prune invisible, zero-area, non-content elements
10
+ * 3. SVG & decoration collapse
11
+ * 4. Shadow DOM traversal
12
+ * 5. Same-origin iframe content extraction
13
+ * 6. Bounding-box parent-child dedup (link/button wrapping children)
14
+ * 7. Paint-order occlusion detection (overlay/modal coverage)
15
+ * 8. Attribute whitelist filtering
16
+ * 9. Table-aware serialization (markdown tables)
17
+ * 10. Token-efficient serialization with interactive indices
18
+ * 11. data-ref annotation for click/type targeting
19
+ * 12. Hidden interactive element hints (scroll-to-reveal)
20
+ * 13. Incremental diff (mark new elements with *)
21
+ *
22
+ * Additional tools:
23
+ * - scrollToRefJs(ref) — scroll to a data-webcmd-ref element
24
+ * - getFormStateJs() — extract all form fields as structured JSON
25
+ *
26
+ * Compound sidecar:
27
+ * After the tree, a `compounds:` section lists rich JSON for every
28
+ * date/select/file ref — format, full option list (up to cap) with
29
+ * `options_total` reflecting the true count, file `accept` + `multiple`.
30
+ * This is what the snapshot's inline attr dump cannot express and what
31
+ * agents kept blowing turns on.
32
+ */
33
+ import { COMPOUND_INFO_JS } from './compound.js';
34
+ // ─── Utility JS Generators ───────────────────────────────────────────
35
+ /**
36
+ * Generate JS to scroll to an element identified by data-webcmd-ref.
37
+ * Completes the snapshot→action loop: snapshot identifies `[3]<button>`,
38
+ * caller can then `scrollToRef('3')` to bring it into view.
39
+ */
40
+ export function scrollToRefJs(ref) {
41
+ const safeRef = JSON.stringify(ref);
42
+ return `
43
+ (() => {
44
+ const ref = ${safeRef};
45
+ const el = document.querySelector('[data-webcmd-ref="' + ref + '"]')
46
+ || document.querySelector('[data-ref="' + ref + '"]');
47
+ if (!el) throw new Error('Element not found: ref=' + ref);
48
+ el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });
49
+ return { scrolled: true, tag: el.tagName.toLowerCase(), text: (el.textContent || '').trim().slice(0, 80) };
50
+ })()
51
+ `.trim();
52
+ }
53
+ /**
54
+ * Generate JS to extract all form field values from the page.
55
+ * Returns structured JSON: { forms: [{ id, action, fields: [{ tag, type, name, value, ... }] }] }
56
+ */
57
+ export function getFormStateJs() {
58
+ return `
59
+ (() => {
60
+ const result = { forms: [], orphanFields: [] };
61
+
62
+ // Collect all forms
63
+ for (const form of document.forms) {
64
+ const formData = {
65
+ id: form.id || null,
66
+ name: form.name || null,
67
+ action: form.action || null,
68
+ method: (form.method || 'get').toUpperCase(),
69
+ fields: [],
70
+ };
71
+ for (const el of form.elements) {
72
+ const field = extractField(el);
73
+ if (field) formData.fields.push(field);
74
+ }
75
+ if (formData.fields.length > 0) result.forms.push(formData);
76
+ }
77
+
78
+ // Collect orphan fields (not inside a form)
79
+ const allInputs = document.querySelectorAll('input, textarea, select, [contenteditable="true"]');
80
+ for (const el of allInputs) {
81
+ if (el.form) continue; // already in a form
82
+ const field = extractField(el);
83
+ if (field) result.orphanFields.push(field);
84
+ }
85
+
86
+ function extractField(el) {
87
+ const tag = el.tagName.toLowerCase();
88
+ const type = (el.getAttribute('type') || (tag === 'textarea' ? 'textarea' : tag === 'select' ? 'select' : 'text')).toLowerCase();
89
+ if (type === 'hidden' || type === 'submit' || type === 'button' || type === 'reset') return null;
90
+ const name = el.name || el.id || null;
91
+ const ref = el.getAttribute('data-webcmd-ref') || null;
92
+ const label = findLabel(el);
93
+ let value;
94
+ if (tag === 'select') {
95
+ const opt = el.options?.[el.selectedIndex];
96
+ value = opt ? opt.textContent.trim() : '';
97
+ } else if (type === 'checkbox' || type === 'radio') {
98
+ value = el.checked;
99
+ } else if (type === 'password') {
100
+ value = el.value ? '••••' : '';
101
+ } else if (el.isContentEditable) {
102
+ value = (el.textContent || '').trim().slice(0, 200);
103
+ } else {
104
+ value = (el.value || '').slice(0, 200);
105
+ }
106
+ return { tag, type, name, ref, label, value, required: el.required || false, disabled: el.disabled || false };
107
+ }
108
+
109
+ function findLabel(el) {
110
+ // 1. aria-label
111
+ if (el.getAttribute('aria-label')) return el.getAttribute('aria-label');
112
+ // 2. associated <label>
113
+ if (el.id) {
114
+ const label = document.querySelector('label[for="' + el.id + '"]');
115
+ if (label) return label.textContent.trim().slice(0, 80);
116
+ }
117
+ // 3. parent label
118
+ const parentLabel = el.closest('label');
119
+ if (parentLabel) return parentLabel.textContent.trim().slice(0, 80);
120
+ // 4. placeholder
121
+ return el.placeholder || null;
122
+ }
123
+
124
+ return result;
125
+ })()
126
+ `.trim();
127
+ }
128
+ // ─── Main Snapshot JS Generator ──────────────────────────────────────
129
+ /**
130
+ * Generate JavaScript code that, when evaluated in a page context via CDP
131
+ * Runtime.evaluate, returns a pruned DOM snapshot string optimised for LLMs.
132
+ *
133
+ * The snapshot output format:
134
+ * [42]<button type=submit>Search</button>
135
+ * |scroll|<div> (0.5↑ 3.2↓)
136
+ * *[58]<a href=/r/1>Result 1</a>
137
+ * [59]<a href=/r/2>Result 2</a>
138
+ *
139
+ * - `[id]` — interactive element with backend index for targeting
140
+ * - `*` prefix — newly appeared element (incremental diff)
141
+ * - `|scroll|` — scrollable container with page counts
142
+ * - `|shadow|` — Shadow DOM boundary
143
+ * - `|iframe|` — iframe content
144
+ * - `|table|` — markdown table rendering
145
+ */
146
+ export function generateSnapshotJs(opts = {}) {
147
+ const viewportExpand = opts.viewportExpand ?? 800;
148
+ const maxDepth = Math.max(1, Math.min(opts.maxDepth ?? 50, 200));
149
+ const interactiveOnly = opts.interactiveOnly ?? false;
150
+ const maxTextLength = opts.maxTextLength ?? 120;
151
+ const includeScrollInfo = opts.includeScrollInfo ?? true;
152
+ const bboxDedup = opts.bboxDedup ?? true;
153
+ const includeShadowDom = opts.includeShadowDom ?? true;
154
+ const includeIframes = opts.includeIframes ?? true;
155
+ const maxIframes = opts.maxIframes ?? 5;
156
+ const paintOrderCheck = opts.paintOrderCheck ?? true;
157
+ const annotateRefs = opts.annotateRefs ?? true;
158
+ const reportHidden = opts.reportHidden ?? true;
159
+ const filterAds = opts.filterAds ?? true;
160
+ const markdownTables = opts.markdownTables ?? true;
161
+ const previousHashes = opts.previousHashes ?? null;
162
+ return `
163
+ (() => {
164
+ 'use strict';
165
+
166
+ ${COMPOUND_INFO_JS}
167
+
168
+ // ── Config ─────────────────────────────────────────────────────────
169
+ const VIEWPORT_EXPAND = ${viewportExpand};
170
+ const MAX_DEPTH = ${maxDepth};
171
+ const INTERACTIVE_ONLY = ${interactiveOnly};
172
+ const MAX_TEXT_LEN = ${maxTextLength};
173
+ const INCLUDE_SCROLL_INFO = ${includeScrollInfo};
174
+ const BBOX_DEDUP = ${bboxDedup};
175
+ const INCLUDE_SHADOW_DOM = ${includeShadowDom};
176
+ const INCLUDE_IFRAMES = ${includeIframes};
177
+ const MAX_IFRAMES = ${maxIframes};
178
+ const PAINT_ORDER_CHECK = ${paintOrderCheck};
179
+ const ANNOTATE_REFS = ${annotateRefs};
180
+ const REPORT_HIDDEN = ${reportHidden};
181
+ const FILTER_ADS = ${filterAds};
182
+ const MARKDOWN_TABLES = ${markdownTables};
183
+ const PREV_HASHES = ${previousHashes ? `new Set(${previousHashes})` : 'null'};
184
+
185
+ // ── Constants ──────────────────────────────────────────────────────
186
+
187
+ const SKIP_TAGS = new Set([
188
+ 'script', 'style', 'noscript', 'link', 'meta', 'head',
189
+ 'template', 'br', 'wbr', 'col', 'colgroup',
190
+ ]);
191
+
192
+ const SVG_CHILDREN = new Set([
193
+ 'path', 'rect', 'g', 'circle', 'ellipse', 'line', 'polyline',
194
+ 'polygon', 'use', 'defs', 'clippath', 'mask', 'pattern',
195
+ 'text', 'tspan', 'lineargradient', 'radialgradient', 'stop',
196
+ 'filter', 'fegaussianblur', 'fecolormatrix', 'feblend',
197
+ 'symbol', 'marker', 'foreignobject', 'desc', 'title',
198
+ ]);
199
+
200
+ const INTERACTIVE_TAGS = new Set([
201
+ 'a', 'button', 'input', 'select', 'textarea', 'details',
202
+ 'summary', 'option', 'optgroup',
203
+ ]);
204
+
205
+ const INTERACTIVE_ROLES = new Set([
206
+ 'button', 'link', 'menuitem', 'option', 'radio', 'checkbox',
207
+ 'tab', 'textbox', 'combobox', 'slider', 'spinbutton',
208
+ 'searchbox', 'switch', 'menuitemcheckbox', 'menuitemradio',
209
+ 'treeitem', 'gridcell', 'row',
210
+ ]);
211
+
212
+ const LANDMARK_ROLES = new Set([
213
+ 'main', 'navigation', 'banner', 'search', 'region',
214
+ 'complementary', 'contentinfo', 'form', 'dialog',
215
+ ]);
216
+
217
+ const LANDMARK_TAGS = new Set([
218
+ 'nav', 'main', 'header', 'footer', 'aside', 'form',
219
+ 'search', 'dialog', 'section', 'article',
220
+ ]);
221
+
222
+ const ATTR_WHITELIST = new Set([
223
+ 'id', 'name', 'type', 'value', 'placeholder', 'title', 'alt',
224
+ 'role', 'aria-label', 'aria-expanded', 'aria-checked', 'aria-selected',
225
+ 'aria-disabled', 'aria-valuemin', 'aria-valuemax', 'aria-valuenow',
226
+ 'aria-haspopup', 'aria-live', 'aria-required',
227
+ 'href', 'src', 'action', 'method', 'for', 'checked', 'selected',
228
+ 'disabled', 'required', 'multiple', 'accept', 'min', 'max',
229
+ 'pattern', 'maxlength', 'minlength', 'data-testid', 'data-test',
230
+ 'contenteditable', 'tabindex', 'autocomplete',
231
+ ]);
232
+
233
+ const PROPAGATING_TAGS = new Set(['a', 'button']);
234
+
235
+ // Roles whose element wraps its own interactive descendants (icon spans
236
+ // inside a role=button, chevron inside role=link). When we see one of these,
237
+ // we propagate its bbox to children so we can suppress duplicate refs on
238
+ // undistinctive descendants that are ≥99% contained.
239
+ const PROPAGATING_ROLES = new Set(['button', 'link', 'menuitem', 'tab', 'option']);
240
+
241
+ function isBboxPropagator(el, tag) {
242
+ if (PROPAGATING_TAGS.has(tag)) return true;
243
+ const role = el.getAttribute('role');
244
+ return !!(role && PROPAGATING_ROLES.has(role));
245
+ }
246
+
247
+ // True when an interactive element still deserves its own [N] ref even
248
+ // though it's visually subsumed by a propagating ancestor. Anything with
249
+ // an aria-label, aria-labelledby, id, test id, name, or its own form
250
+ // semantics is treated as distinctive — everything else (naked spans /
251
+ // divs / svgs that merely inherit click from the parent button) gets
252
+ // folded into the parent so the snapshot doesn't ship [1]<button>[2]<svg>.
253
+ function isDistinctivelyInteractive(el) {
254
+ if (el.hasAttribute('aria-label')) return true;
255
+ if (el.hasAttribute('aria-labelledby')) return true;
256
+ if (el.id) return true;
257
+ if (el.getAttribute('data-testid') || el.getAttribute('data-test')) return true;
258
+ if (el.hasAttribute('name')) return true;
259
+ const tag = el.tagName.toLowerCase();
260
+ // Real form controls always stand on their own, even when nested in a label/button
261
+ if (tag === 'input' || tag === 'select' || tag === 'textarea') return true;
262
+ // Anchors with their own href are distinct targets
263
+ if (tag === 'a' && el.hasAttribute('href')) return true;
264
+ return false;
265
+ }
266
+
267
+ const AD_PATTERNS = [
268
+ 'googleadservices.com', 'doubleclick.net', 'googlesyndication.com',
269
+ 'facebook.com/tr', 'analytics.google.com', 'connect.facebook.net',
270
+ 'ad.doubleclick', 'pagead', 'adsense',
271
+ ];
272
+
273
+ const AD_SELECTOR_RE = /\\b(ad[_-]?(?:banner|container|wrapper|slot|unit|block|frame|leaderboard|sidebar)|google[_-]?ad|sponsored|adsbygoogle|banner[_-]?ad)\\b/i;
274
+
275
+ // Search element indicators for heuristic detection
276
+ const SEARCH_INDICATORS = new Set([
277
+ 'search', 'magnify', 'glass', 'lookup', 'find', 'query',
278
+ 'search-icon', 'search-btn', 'search-button', 'searchbox',
279
+ 'fa-search', 'icon-search', 'btn-search',
280
+ ]);
281
+
282
+ // ── Viewport & Layout Helpers ──────────────────────────────────────
283
+
284
+ const vw = window.innerWidth;
285
+ const vh = window.innerHeight;
286
+
287
+ function isInExpandedViewport(rect) {
288
+ if (!rect || (rect.width === 0 && rect.height === 0)) return false;
289
+ return rect.bottom > -VIEWPORT_EXPAND && rect.top < vh + VIEWPORT_EXPAND &&
290
+ rect.right > -VIEWPORT_EXPAND && rect.left < vw + VIEWPORT_EXPAND;
291
+ }
292
+
293
+ function isVisibleByCSS(el) {
294
+ const style = el.style;
295
+ if (style.display === 'none') return false;
296
+ if (style.visibility === 'hidden' || style.visibility === 'collapse') return false;
297
+ if (style.opacity === '0') return false;
298
+ try {
299
+ const cs = window.getComputedStyle(el);
300
+ if (cs.display === 'none') return false;
301
+ if (cs.visibility === 'hidden') return false;
302
+ if (parseFloat(cs.opacity) <= 0) return false;
303
+ if (cs.clip === 'rect(0px, 0px, 0px, 0px)' && cs.position === 'absolute') return false;
304
+ if (cs.overflow === 'hidden' && el.offsetWidth === 0 && el.offsetHeight === 0) return false;
305
+ } catch {}
306
+ return true;
307
+ }
308
+
309
+ // ── Paint Order Occlusion ──────────────────────────────────────────
310
+
311
+ function isOccludedByOverlay(el) {
312
+ if (!PAINT_ORDER_CHECK) return false;
313
+ try {
314
+ const rect = el.getBoundingClientRect();
315
+ if (rect.width === 0 || rect.height === 0) return false;
316
+ const cx = rect.left + rect.width / 2;
317
+ const cy = rect.top + rect.height / 2;
318
+ if (cx < 0 || cy < 0 || cx > vw || cy > vh) return false;
319
+ const topEl = document.elementFromPoint(cx, cy);
320
+ if (!topEl || topEl === el || el.contains(topEl) || topEl.contains(el)) return false;
321
+ const cs = window.getComputedStyle(topEl);
322
+ if (parseFloat(cs.opacity) < 0.5) return false;
323
+ const bg = cs.backgroundColor;
324
+ if (bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') return false;
325
+ return true;
326
+ } catch { return false; }
327
+ }
328
+
329
+ // ── Ad/Noise Detection ─────────────────────────────────────────────
330
+
331
+ function isAdElement(el) {
332
+ if (!FILTER_ADS) return false;
333
+ try {
334
+ const id = el.id || '';
335
+ const cls = el.className || '';
336
+ const testStr = id + ' ' + (typeof cls === 'string' ? cls : '');
337
+ if (AD_SELECTOR_RE.test(testStr)) return true;
338
+ if (el.tagName === 'IFRAME') {
339
+ const src = el.src || '';
340
+ for (const p of AD_PATTERNS) { if (src.includes(p)) return true; }
341
+ }
342
+ if (el.hasAttribute('data-ad') || el.hasAttribute('data-ad-slot') ||
343
+ el.hasAttribute('data-adunit') || el.hasAttribute('data-google-query-id')) return true;
344
+ } catch {}
345
+ return false;
346
+ }
347
+
348
+ // ── Interactivity Detection ────────────────────────────────────────
349
+
350
+ // Check if element contains a form control within limited depth (handles label/span wrappers)
351
+ function hasFormControlDescendant(el, maxDepth = 2) {
352
+ if (maxDepth <= 0) return false;
353
+ for (const child of el.children || []) {
354
+ const tag = child.tagName?.toLowerCase();
355
+ if (tag === 'input' || tag === 'select' || tag === 'textarea') return true;
356
+ if (hasFormControlDescendant(child, maxDepth - 1)) return true;
357
+ }
358
+ return false;
359
+ }
360
+
361
+ function isInteractive(el) {
362
+ const tag = el.tagName.toLowerCase();
363
+ if (INTERACTIVE_TAGS.has(tag)) {
364
+ // Skip labels that proxy via "for" to avoid double-activating external inputs
365
+ if (tag === 'label') {
366
+ if (el.hasAttribute('for')) return false;
367
+ // Detect labels that wrap form controls up to two levels deep (label > span > input)
368
+ if (hasFormControlDescendant(el, 2)) return true;
369
+ }
370
+ if (el.disabled && (tag === 'button' || tag === 'input')) return false;
371
+ return true;
372
+ }
373
+ // Span wrappers for UI components - check if they contain form controls
374
+ if (tag === 'span') {
375
+ if (hasFormControlDescendant(el, 2)) return true;
376
+ }
377
+ const role = el.getAttribute('role');
378
+ if (role && INTERACTIVE_ROLES.has(role)) return true;
379
+ if (el.hasAttribute('onclick') || el.hasAttribute('onmousedown') || el.hasAttribute('ontouchstart')) return true;
380
+ if (el.hasAttribute('tabindex') && el.getAttribute('tabindex') !== '-1') return true;
381
+ // Framework event listener detection (React/Vue/Angular onClick)
382
+ if (hasFrameworkListener(el)) return true;
383
+ try { if (window.getComputedStyle(el).cursor === 'pointer') return true; } catch {}
384
+ if (el.isContentEditable && el.getAttribute('contenteditable') !== 'false') return true;
385
+ // Search element heuristic detection
386
+ if (isSearchElement(el)) return true;
387
+ return false;
388
+ }
389
+
390
+ function hasFrameworkListener(el) {
391
+ try {
392
+ // React: __reactProps$xxx / __reactEvents$xxx with onClick/onMouseDown
393
+ for (const key of Object.keys(el)) {
394
+ if (key.startsWith('__reactProps$') || key.startsWith('__reactEvents$')) {
395
+ const props = el[key];
396
+ if (props && (props.onClick || props.onMouseDown || props.onPointerDown)) return true;
397
+ }
398
+ }
399
+ // Vue 3: _vei (Vue Event Invoker) with onClick
400
+ if (el._vei && (el._vei.onClick || el._vei.click || el._vei.onMousedown)) return true;
401
+ // Vue 2: __vue__ instance with $listeners
402
+ if (el.__vue__?.$listeners?.click) return true;
403
+ // Angular: ng-reflect-click binding
404
+ if (el.hasAttribute('ng-reflect-click')) return true;
405
+ } catch { /* ignore errors from cross-origin or frozen objects */ }
406
+ return false;
407
+ }
408
+
409
+ function isSearchElement(el) {
410
+ // Check class names for search indicators
411
+ // Note: SVG elements have className as SVGAnimatedString (not a string), use baseVal
412
+ const className = (typeof el.className === 'string' ? el.className : el.className?.baseVal || '').toLowerCase();
413
+ const classes = className.split(/\\s+/).filter(Boolean);
414
+ for (const cls of classes) {
415
+ const cleaned = cls.replace(/[^a-z0-9-]/g, '');
416
+ if (SEARCH_INDICATORS.has(cleaned)) return true;
417
+ }
418
+ // Check id for search indicators
419
+ const id = el.id?.toLowerCase() || '';
420
+ const cleanedId = id.replace(/[^a-z0-9-]/g, '');
421
+ if (SEARCH_INDICATORS.has(cleanedId)) return true;
422
+ // Check data-* attributes for search functionality
423
+ for (const attr of el.attributes || []) {
424
+ if (attr.name.startsWith('data-')) {
425
+ const value = attr.value.toLowerCase();
426
+ for (const kw of SEARCH_INDICATORS) {
427
+ if (value.includes(kw)) return true;
428
+ }
429
+ }
430
+ }
431
+ return false;
432
+ }
433
+
434
+ function isLandmark(el) {
435
+ const role = el.getAttribute('role');
436
+ if (role && LANDMARK_ROLES.has(role)) return true;
437
+ return LANDMARK_TAGS.has(el.tagName.toLowerCase());
438
+ }
439
+
440
+ // ── Scrollability Detection ────────────────────────────────────────
441
+
442
+ function getScrollInfo(el) {
443
+ if (!INCLUDE_SCROLL_INFO) return null;
444
+ const sh = el.scrollHeight, ch = el.clientHeight;
445
+ const sw = el.scrollWidth, cw = el.clientWidth;
446
+ const isV = sh > ch + 5, isH = sw > cw + 5;
447
+ if (!isV && !isH) return null;
448
+ try {
449
+ const cs = window.getComputedStyle(el);
450
+ const scrollable = ['auto', 'scroll', 'overlay'];
451
+ const tag = el.tagName.toLowerCase();
452
+ const isBody = tag === 'body' || tag === 'html';
453
+ if (isV && !isBody && !scrollable.includes(cs.overflowY)) return null;
454
+ const info = {};
455
+ if (isV) {
456
+ const above = ch > 0 ? +(el.scrollTop / ch).toFixed(1) : 0;
457
+ const below = ch > 0 ? +((sh - ch - el.scrollTop) / ch).toFixed(1) : 0;
458
+ if (above > 0 || below > 0) info.v = { above, below };
459
+ }
460
+ if (isH && scrollable.includes(cs.overflowX)) {
461
+ info.h = { pct: cw > 0 ? Math.round(el.scrollLeft / (sw - cw) * 100) : 0 };
462
+ }
463
+ return Object.keys(info).length > 0 ? info : null;
464
+ } catch { return null; }
465
+ }
466
+
467
+ // ── BBox Containment Check ─────────────────────────────────────────
468
+
469
+ function isContainedBy(childRect, parentRect, threshold) {
470
+ if (!childRect || !parentRect) return false;
471
+ const cArea = childRect.width * childRect.height;
472
+ if (cArea === 0) return false;
473
+ const xO = Math.max(0, Math.min(childRect.right, parentRect.right) - Math.max(childRect.left, parentRect.left));
474
+ const yO = Math.max(0, Math.min(childRect.bottom, parentRect.bottom) - Math.max(childRect.top, parentRect.top));
475
+ return (xO * yO) / cArea >= threshold;
476
+ }
477
+
478
+ // ── Text Helpers ───────────────────────────────────────────────────
479
+
480
+ function getDirectText(el) {
481
+ let text = '';
482
+ for (const child of el.childNodes) {
483
+ if (child.nodeType === 3) {
484
+ const t = child.textContent.trim();
485
+ if (t) text += (text ? ' ' : '') + t;
486
+ }
487
+ }
488
+ return text;
489
+ }
490
+
491
+ function capText(s) {
492
+ if (!s) return '';
493
+ const t = s.replace(/\\s+/g, ' ').trim();
494
+ return t.length > MAX_TEXT_LEN ? t.slice(0, MAX_TEXT_LEN) + '…' : t;
495
+ }
496
+
497
+ // ── Element Hashing (for incremental diff) ─────────────────────────
498
+
499
+ function hashElement(el) {
500
+ // Simple hash: tag + id + className + textContent prefix
501
+ const tag = el.tagName || '';
502
+ const id = el.id || '';
503
+ const cls = (typeof el.className === 'string' ? el.className : '').slice(0, 50);
504
+ const text = (el.textContent || '').trim().slice(0, 40);
505
+ const s = tag + '|' + id + '|' + cls + '|' + text;
506
+ let h = 0;
507
+ for (let i = 0; i < s.length; i++) {
508
+ h = ((h << 5) - h + s.charCodeAt(i)) | 0;
509
+ }
510
+ return '' + (h >>> 0); // unsigned
511
+ }
512
+
513
+ // ── Attribute Serialization ────────────────────────────────────────
514
+
515
+ function serializeAttrs(el) {
516
+ const parts = [];
517
+ for (const attr of el.attributes) {
518
+ if (!ATTR_WHITELIST.has(attr.name)) continue;
519
+ let val = attr.value.trim();
520
+ if (!val) continue;
521
+ if (val.length > 120) val = val.slice(0, 100) + '…';
522
+ if (attr.name === 'type' && val.toLowerCase() === el.tagName.toLowerCase()) continue;
523
+ if (attr.name === 'value' && el.getAttribute('type') === 'password') { parts.push('value=••••'); continue; }
524
+ if (attr.name === 'href') {
525
+ if (val.startsWith('javascript:')) continue;
526
+ try {
527
+ const u = new URL(val, location.origin);
528
+ if (u.origin === location.origin) val = u.pathname + u.search + u.hash;
529
+ } catch {}
530
+ }
531
+ parts.push(attr.name + '=' + val);
532
+ }
533
+ // Synthetic attributes
534
+ const tag = el.tagName;
535
+ if (tag === 'INPUT') {
536
+ const type = (el.getAttribute('type') || 'text').toLowerCase();
537
+ const fmts = { 'date':'YYYY-MM-DD', 'time':'HH:MM', 'datetime-local':'YYYY-MM-DDTHH:MM', 'month':'YYYY-MM', 'week':'YYYY-W##' };
538
+ if (fmts[type]) parts.push('format=' + fmts[type]);
539
+ if (['text','email','tel','url','search','number','date','time','datetime-local','month','week'].includes(type)) {
540
+ if (el.value && !parts.some(p => p.startsWith('value='))) parts.push('value=' + capText(el.value));
541
+ }
542
+ if (type === 'password' && el.value && !parts.some(p => p.startsWith('value='))) parts.push('value=••••');
543
+ if ((type === 'checkbox' || type === 'radio') && el.checked && !parts.some(p => p.startsWith('checked'))) parts.push('checked');
544
+ if (type === 'file' && el.files && el.files.length > 0) parts.push('files=' + Array.from(el.files).map(f => f.name).join(','));
545
+ }
546
+ if (tag === 'TEXTAREA' && el.value && !parts.some(p => p.startsWith('value='))) parts.push('value=' + capText(el.value));
547
+ if (tag === 'SELECT') {
548
+ const sel = el.options?.[el.selectedIndex];
549
+ if (sel && !parts.some(p => p.startsWith('value='))) parts.push('value=' + capText(sel.textContent));
550
+ const optEls = Array.from(el.options || []).slice(0, 6);
551
+ if (optEls.length > 0) {
552
+ const ot = optEls.map(o => capText(o.textContent).slice(0, 30));
553
+ if (el.options.length > 6) ot.push('…' + (el.options.length - 6) + ' more');
554
+ parts.push('options=[' + ot.join('|') + ']');
555
+ }
556
+ }
557
+ return parts.join(' ');
558
+ }
559
+
560
+ // ── Table → Markdown Serialization ─────────────────────────────────
561
+
562
+ function serializeTable(table, depth) {
563
+ if (!MARKDOWN_TABLES) return false;
564
+ try {
565
+ const rows = table.querySelectorAll('tr');
566
+ if (rows.length === 0 || rows.length > 50) return false; // skip huge tables
567
+ const grid = [];
568
+ let maxCols = 0;
569
+ for (const row of rows) {
570
+ const cells = [];
571
+ for (const cell of row.querySelectorAll('th, td')) {
572
+ let text = capText(cell.textContent || '');
573
+ // Include interactive elements in cells
574
+ const links = cell.querySelectorAll('a[href]');
575
+ if (links.length === 1 && text) {
576
+ const href = links[0].getAttribute('href');
577
+ if (href && !href.startsWith('javascript:')) {
578
+ try {
579
+ const u = new URL(href, location.origin);
580
+ text = '[' + text + '](' + (u.origin === location.origin ? u.pathname + u.search : href) + ')';
581
+ } catch { text = '[' + text + '](' + href + ')'; }
582
+ }
583
+ }
584
+ cells.push(text || '');
585
+ }
586
+ if (cells.length > 0) {
587
+ grid.push(cells);
588
+ if (cells.length > maxCols) maxCols = cells.length;
589
+ }
590
+ }
591
+ if (grid.length < 2 || maxCols === 0) return false; // need at least header + 1 row
592
+ // Pad rows to maxCols
593
+ for (const row of grid) { while (row.length < maxCols) row.push(''); }
594
+ // Compute column widths
595
+ const widths = [];
596
+ for (let c = 0; c < maxCols; c++) {
597
+ let w = 3;
598
+ for (const row of grid) { if (row[c].length > w) w = Math.min(row[c].length, 40); }
599
+ widths.push(w);
600
+ }
601
+ const indent = ' '.repeat(depth);
602
+ const tableLines = [];
603
+ // Header
604
+ tableLines.push(indent + '| ' + grid[0].map((c, i) => c.padEnd(widths[i])).join(' | ') + ' |');
605
+ tableLines.push(indent + '| ' + widths.map(w => '-'.repeat(w)).join(' | ') + ' |');
606
+ // Body
607
+ for (let r = 1; r < grid.length; r++) {
608
+ tableLines.push(indent + '| ' + grid[r].map((c, i) => c.padEnd(widths[i])).join(' | ') + ' |');
609
+ }
610
+ return tableLines;
611
+ } catch { return false; }
612
+ }
613
+
614
+ // ── Main Tree Walk ─────────────────────────────────────────────────
615
+
616
+ let interactiveIndex = 0;
617
+ const lines = [];
618
+ const hiddenInteractives = [];
619
+ const currentHashes = [];
620
+ const refIdentity = {};
621
+ const compoundInfos = {};
622
+ let iframeCount = 0;
623
+ let crossOriginIndex = 0;
624
+
625
+ function walk(el, depth, parentPropagatingRect) {
626
+ if (depth > MAX_DEPTH) return false;
627
+ if (el.nodeType !== 1) return false;
628
+
629
+ const tag = el.tagName.toLowerCase();
630
+ if (SKIP_TAGS.has(tag)) return false;
631
+ if (isAdElement(el)) return false;
632
+
633
+ // SVG: emit tag, collapse children
634
+ if (tag === 'svg') {
635
+ const attrs = serializeAttrs(el);
636
+ const interactive = isInteractive(el);
637
+ let prefix = '';
638
+ if (interactive) {
639
+ interactiveIndex++;
640
+ if (ANNOTATE_REFS) el.setAttribute('data-webcmd-ref', '' + interactiveIndex);
641
+ prefix = '[' + interactiveIndex + ']';
642
+ }
643
+ lines.push(' '.repeat(depth) + prefix + '<svg' + (attrs ? ' ' + attrs : '') + ' />');
644
+ return interactive;
645
+ }
646
+ if (SVG_CHILDREN.has(tag)) return false;
647
+
648
+ // Table: try markdown serialization before generic walk
649
+ if (tag === 'table' && MARKDOWN_TABLES) {
650
+ const tableLines = serializeTable(el, depth);
651
+ if (tableLines) {
652
+ const indent = ' '.repeat(depth);
653
+ lines.push(indent + '|table|');
654
+ for (const tl of tableLines) lines.push(tl);
655
+ return false; // tables usually non-interactive
656
+ }
657
+ // Fall through to generic walk if markdown failed
658
+ }
659
+
660
+ // iframe handling
661
+ if (tag === 'iframe' && INCLUDE_IFRAMES && iframeCount < MAX_IFRAMES) {
662
+ return walkIframe(el, depth);
663
+ }
664
+
665
+ // Visibility check
666
+ let rect;
667
+ try { rect = el.getBoundingClientRect(); } catch { return false; }
668
+ const hasArea = rect.width > 0 && rect.height > 0;
669
+ if (hasArea && !isVisibleByCSS(el)) {
670
+ if (!(tag === 'input' && el.type === 'file')) return false;
671
+ }
672
+
673
+ // \`interactive\` gets demoted below if bbox containment folds this node
674
+ // into a propagating ancestor — using \`let\` so the dedup pass can mutate it.
675
+ let interactive = isInteractive(el);
676
+
677
+ // Viewport threshold pruning
678
+ if (hasArea && !isInExpandedViewport(rect)) {
679
+ if (interactive && REPORT_HIDDEN) {
680
+ const scrollDist = rect.top > vh ? rect.top - vh : -rect.bottom;
681
+ const pagesAway = Math.abs(scrollDist / vh).toFixed(1);
682
+ const direction = rect.top > vh ? 'below' : 'above';
683
+ const text = capText(getDirectText(el) || el.getAttribute('aria-label') || el.getAttribute('title') || '');
684
+ hiddenInteractives.push({ tag, text, direction, pagesAway });
685
+ }
686
+ return false;
687
+ }
688
+
689
+ // Paint order occlusion
690
+ if (interactive && hasArea && isOccludedByOverlay(el)) return false;
691
+
692
+ const landmark = isLandmark(el);
693
+ const scrollInfo = getScrollInfo(el);
694
+ const isScrollable = scrollInfo !== null;
695
+
696
+ // BBox dedup — tier 1 (non-interactive descendants, 0.95 threshold)
697
+ let excludedByParent = false;
698
+ if (BBOX_DEDUP && parentPropagatingRect && !interactive) {
699
+ if (hasArea && isContainedBy(rect, parentPropagatingRect, 0.95)) {
700
+ const hasSemantic = el.hasAttribute('aria-label') ||
701
+ (el.getAttribute('role') && INTERACTIVE_ROLES.has(el.getAttribute('role')));
702
+ if (!hasSemantic && !['input','select','textarea','label'].includes(tag)) {
703
+ excludedByParent = true;
704
+ }
705
+ }
706
+ }
707
+
708
+ // BBox dedup — tier 2 (interactive descendants, 0.99 threshold, browser-use style).
709
+ // This kills the "[1]<button> [2]<svg> [3]<span>" noise on icon-buttons by
710
+ // folding the icon / chevron into the button's ref. The 0.99 threshold + the
711
+ // isDistinctivelyInteractive gate together ensure we only drop nodes that
712
+ // add no new actionable surface — a nested <input> or <a href> stays.
713
+ if (BBOX_DEDUP && parentPropagatingRect && interactive && hasArea) {
714
+ if (isContainedBy(rect, parentPropagatingRect, 0.99) && !isDistinctivelyInteractive(el)) {
715
+ interactive = false;
716
+ }
717
+ }
718
+
719
+ let propagateRect = parentPropagatingRect;
720
+ if (BBOX_DEDUP && hasArea && isBboxPropagator(el, tag)) propagateRect = rect;
721
+
722
+ // Process children
723
+ const origLen = lines.length;
724
+ let hasInteractiveDescendant = false;
725
+
726
+ for (const child of el.children) {
727
+ const r = walk(child, depth + 1, propagateRect);
728
+ if (r) hasInteractiveDescendant = true;
729
+ }
730
+
731
+ // Shadow DOM
732
+ if (INCLUDE_SHADOW_DOM && el.shadowRoot) {
733
+ const shadowOrigLen = lines.length;
734
+ for (const child of el.shadowRoot.children) {
735
+ const r = walk(child, depth + 1, propagateRect);
736
+ if (r) hasInteractiveDescendant = true;
737
+ }
738
+ if (lines.length > shadowOrigLen) {
739
+ lines.splice(shadowOrigLen, 0, ' '.repeat(depth + 1) + '|shadow|');
740
+ }
741
+ }
742
+
743
+ const childLinesCount = lines.length - origLen;
744
+ const text = capText(getDirectText(el));
745
+
746
+ // Decide whether to emit
747
+ if (INTERACTIVE_ONLY && !interactive && !landmark && !hasInteractiveDescendant && !text) {
748
+ lines.length = origLen;
749
+ return false;
750
+ }
751
+ if (excludedByParent && !interactive && !isScrollable) return hasInteractiveDescendant;
752
+ if (!interactive && !isScrollable && !text && childLinesCount === 0 && !landmark) return false;
753
+
754
+ // ── Emit node ────────────────────────────────────────────────────
755
+ const indent = ' '.repeat(depth);
756
+ let line = indent;
757
+
758
+ // Incremental diff: mark new elements with *
759
+ if (PREV_HASHES) {
760
+ const h = hashElement(el);
761
+ currentHashes.push(h);
762
+ if (!PREV_HASHES.has(h)) line += '*';
763
+ } else {
764
+ currentHashes.push(hashElement(el));
765
+ }
766
+
767
+ // Scroll marker
768
+ if (isScrollable && !interactive) line += '|scroll|';
769
+
770
+ // Interactive index + data-ref + fingerprint
771
+ if (interactive) {
772
+ interactiveIndex++;
773
+ if (ANNOTATE_REFS) el.setAttribute('data-webcmd-ref', '' + interactiveIndex);
774
+ line += isScrollable ? '|scroll[' + interactiveIndex + ']|' : '[' + interactiveIndex + ']';
775
+ // Store fingerprint for stale-ref detection
776
+ refIdentity['' + interactiveIndex] = {
777
+ tag: tag,
778
+ role: el.getAttribute('role') || '',
779
+ text: (el.textContent || '').trim().slice(0, 30),
780
+ ariaLabel: el.getAttribute('aria-label') || '',
781
+ id: el.id || '',
782
+ testId: el.getAttribute('data-testid') || el.getAttribute('data-test') || '',
783
+ };
784
+ // Compound contract for date/select/file — captured per-ref so the
785
+ // sidecar maps one-to-one with the [N] tokens in the tree.
786
+ const compound = compoundInfoOf(el);
787
+ if (compound) compoundInfos['' + interactiveIndex] = compound;
788
+ }
789
+
790
+ // Tag + attributes
791
+ const attrs = serializeAttrs(el);
792
+ line += '<' + tag;
793
+ if (attrs) line += ' ' + attrs;
794
+
795
+ // Scroll info suffix, inline text, or self-close
796
+ if (isScrollable && scrollInfo) {
797
+ const parts = [];
798
+ if (scrollInfo.v) parts.push(scrollInfo.v.above + '↑ ' + scrollInfo.v.below + '↓');
799
+ if (scrollInfo.h) parts.push('h:' + scrollInfo.h.pct + '%');
800
+ line += ' /> (' + parts.join(', ') + ')';
801
+ } else if (text && childLinesCount === 0) {
802
+ line += '>' + text + '</' + tag + '>';
803
+ } else {
804
+ line += ' />';
805
+ }
806
+
807
+ lines.splice(origLen, 0, line);
808
+ if (text && childLinesCount > 0) lines.splice(origLen + 1, 0, indent + ' ' + text);
809
+
810
+ return interactive || hasInteractiveDescendant;
811
+ }
812
+
813
+ // ── iframe Processing ──────────────────────────────────────────────
814
+
815
+ function walkIframe(el, depth) {
816
+ const indent = ' '.repeat(depth);
817
+ try {
818
+ const doc = el.contentDocument;
819
+ if (!doc || !doc.body) {
820
+ const attrs = serializeAttrs(el);
821
+ const frameLabel = '[F' + crossOriginIndex + ']';
822
+ lines.push(indent + '|iframe|' + frameLabel + '<iframe' + (attrs ? ' ' + attrs : '') + ' /> (cross-origin, use: webcmd browser frames + browser eval --frame <index>)');
823
+ crossOriginIndex++;
824
+ return false;
825
+ }
826
+ iframeCount++;
827
+ const attrs = serializeAttrs(el);
828
+ lines.push(indent + '|iframe|<iframe' + (attrs ? ' ' + attrs : '') + ' />');
829
+ let has = false;
830
+ for (const child of doc.body.children) {
831
+ if (walk(child, depth + 1, null)) has = true;
832
+ }
833
+ return has;
834
+ } catch {
835
+ const attrs = serializeAttrs(el);
836
+ const frameLabel = '[F' + crossOriginIndex + ']';
837
+ lines.push(indent + '|iframe|' + frameLabel + '<iframe' + (attrs ? ' ' + attrs : '') + ' /> (blocked, use: webcmd browser frames + browser eval --frame <index>)');
838
+ crossOriginIndex++;
839
+ return false;
840
+ }
841
+ }
842
+
843
+ // ── Entry Point ────────────────────────────────────────────────────
844
+
845
+ lines.push('url: ' + location.href);
846
+ lines.push('title: ' + document.title);
847
+ lines.push('viewport: ' + vw + 'x' + vh);
848
+ const pageScrollInfo = getScrollInfo(document.documentElement) || getScrollInfo(document.body);
849
+ if (pageScrollInfo && pageScrollInfo.v) {
850
+ lines.push('page_scroll: ' + pageScrollInfo.v.above + '↑ ' + pageScrollInfo.v.below + '↓');
851
+ }
852
+ lines.push('---');
853
+
854
+ const root = document.body || document.documentElement;
855
+ if (root) walk(root, 0, null);
856
+
857
+ // Hidden interactive elements hint
858
+ if (REPORT_HIDDEN && hiddenInteractives.length > 0) {
859
+ lines.push('---');
860
+ lines.push('hidden_interactive (' + hiddenInteractives.length + '):');
861
+ const shown = hiddenInteractives.slice(0, 10);
862
+ for (const h of shown) {
863
+ const label = h.text ? ' "' + h.text + '"' : '';
864
+ lines.push(' <' + h.tag + '>' + label + ' ~' + h.pagesAway + ' pages ' + h.direction);
865
+ }
866
+ if (hiddenInteractives.length > 10) lines.push(' …' + (hiddenInteractives.length - 10) + ' more');
867
+ }
868
+
869
+ // Compound sidecar — rich JSON for date/select/file refs. Keys align with [N] tokens in the tree.
870
+ const compoundRefs = Object.keys(compoundInfos);
871
+ if (compoundRefs.length > 0) {
872
+ lines.push('---');
873
+ lines.push('compounds (' + compoundRefs.length + '):');
874
+ compoundRefs.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });
875
+ for (const ref of compoundRefs) {
876
+ try {
877
+ lines.push(' [' + ref + '] ' + JSON.stringify(compoundInfos[ref]));
878
+ } catch {}
879
+ }
880
+ }
881
+
882
+ // Footer
883
+ lines.push('---');
884
+ lines.push('interactive: ' + interactiveIndex + ' | iframes: ' + iframeCount);
885
+
886
+ // Store hashes on window for next diff snapshot
887
+ try { window.__webcmd_prev_hashes = JSON.stringify(currentHashes); } catch {}
888
+ // Store ref identity map for stale-ref detection by target resolver
889
+ try { window.__webcmd_ref_identity = refIdentity; } catch {}
890
+
891
+ return lines.join('\\n');
892
+ })()
893
+ `.trim();
894
+ }