@agentrhq/webcmd 0.1.2 → 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 (929) hide show
  1. package/README.md +183 -218
  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/browser/analyze.test.js +13 -13
  112. package/dist/src/browser/bridge-readiness.d.ts +1 -1
  113. package/dist/src/browser/daemon-client.d.ts +1 -0
  114. package/dist/src/browser/daemon-client.js +102 -50
  115. package/dist/src/browser/daemon-client.test.js +104 -19
  116. package/dist/src/browser/errors.js +11 -0
  117. package/dist/src/browser/protocol.d.ts +2 -0
  118. package/dist/src/browser.test.js +2 -2
  119. package/dist/src/cli-argv-preprocess.d.ts +2 -2
  120. package/dist/src/cli-argv-preprocess.js +2 -2
  121. package/dist/src/cli-argv-preprocess.test.js +35 -35
  122. package/dist/src/cli.js +2 -2
  123. package/dist/src/cli.test.js +57 -57
  124. package/dist/src/commanderAdapter.test.js +19 -19
  125. package/dist/src/convention-audit.js +1 -1
  126. package/dist/src/daemon/server.js +28 -23
  127. package/dist/src/daemon/server.test.js +52 -0
  128. package/dist/src/daemon-utils.d.ts +1 -0
  129. package/dist/src/daemon-utils.js +9 -0
  130. package/dist/src/daemon.test.js +10 -1
  131. package/dist/src/doctor.js +7 -1
  132. package/dist/src/doctor.test.js +8 -1
  133. package/dist/src/download/article-download.d.ts +3 -3
  134. package/dist/src/download/article-download.js +7 -7
  135. package/dist/src/download/article-download.test.js +6 -6
  136. package/dist/src/download/index.js +1 -1
  137. package/dist/src/download/index.test.js +1 -2
  138. package/dist/src/download/media-download.d.ts +1 -1
  139. package/dist/src/download/media-download.js +1 -1
  140. package/dist/src/electron-apps.js +0 -8
  141. package/dist/src/electron-apps.test.js +2 -11
  142. package/dist/src/errors.test.js +9 -9
  143. package/dist/src/execution.js +2 -0
  144. package/dist/src/execution.test.js +12 -0
  145. package/dist/src/external-clis.yaml +0 -37
  146. package/dist/src/external.d.ts +1 -1
  147. package/dist/src/external.test.js +2 -17
  148. package/dist/src/generate-release-notes-cli.test.js +140 -0
  149. package/dist/src/help.d.ts +3 -3
  150. package/dist/src/help.test.js +8 -8
  151. package/dist/src/main.js +1 -1
  152. package/dist/src/manifest-types.d.ts +1 -1
  153. package/dist/src/node-network.test.js +2 -2
  154. package/dist/src/output.js +1 -1
  155. package/dist/src/pipeline/steps/download.test.js +3 -3
  156. package/dist/src/registry.test.js +2 -2
  157. package/dist/src/release-notes.d.ts +38 -0
  158. package/dist/src/release-notes.js +99 -0
  159. package/dist/src/release-notes.test.js +61 -0
  160. package/dist/src/serialization.test.js +7 -7
  161. package/dist/src/snapshotFormatter.js +3 -5
  162. package/dist/src/snapshotFormatter.test.d.ts +1 -1
  163. package/dist/src/snapshotFormatter.test.js +50 -50
  164. package/dist/src/tui.js +1 -1
  165. package/package.json +4 -1
  166. package/scripts/generate-release-notes.ts +234 -0
  167. package/scripts/postinstall.js +1 -1
  168. package/scripts/silent-column-drop-baseline.json +0 -498
  169. package/scripts/typed-error-lint-baseline.json +0 -464
  170. package/skills/webcmd-adapter-author/SKILL.md +216 -213
  171. package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
  172. package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
  173. package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
  174. package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
  175. package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
  176. package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
  177. package/skills/webcmd-adapter-author/references/output-design.md +47 -125
  178. package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
  179. package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
  180. package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
  181. package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
  182. package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
  183. package/skills/webcmd-autofix/SKILL.md +136 -143
  184. package/skills/webcmd-sitemap-author/SKILL.md +58 -67
  185. package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
  186. package/skills/webcmd-usage/SKILL.md +106 -97
  187. package/clis/12306/auth.js +0 -59
  188. package/clis/12306/me.js +0 -73
  189. package/clis/12306/orders.js +0 -96
  190. package/clis/12306/passengers.js +0 -90
  191. package/clis/12306/price.js +0 -166
  192. package/clis/12306/stations.js +0 -66
  193. package/clis/12306/train.js +0 -91
  194. package/clis/12306/trains.js +0 -166
  195. package/clis/12306/utils.js +0 -272
  196. package/clis/12306/utils.test.js +0 -424
  197. package/clis/1688/assets.js +0 -205
  198. package/clis/1688/assets.test.js +0 -39
  199. package/clis/1688/auth.js +0 -46
  200. package/clis/1688/download.js +0 -77
  201. package/clis/1688/download.test.js +0 -31
  202. package/clis/1688/item.js +0 -188
  203. package/clis/1688/item.test.js +0 -67
  204. package/clis/1688/search.js +0 -310
  205. package/clis/1688/search.test.js +0 -75
  206. package/clis/1688/shared.js +0 -557
  207. package/clis/1688/shared.test.js +0 -57
  208. package/clis/1688/store.js +0 -227
  209. package/clis/1688/store.test.js +0 -62
  210. package/clis/1point3acres/auth.js +0 -52
  211. package/clis/1point3acres/digest.js +0 -35
  212. package/clis/1point3acres/forum.js +0 -51
  213. package/clis/1point3acres/forums.js +0 -44
  214. package/clis/1point3acres/hot.js +0 -35
  215. package/clis/1point3acres/latest.js +0 -35
  216. package/clis/1point3acres/notifications.js +0 -64
  217. package/clis/1point3acres/search.js +0 -71
  218. package/clis/1point3acres/thread.js +0 -117
  219. package/clis/1point3acres/user.js +0 -77
  220. package/clis/1point3acres/utils.js +0 -247
  221. package/clis/36kr/article.js +0 -66
  222. package/clis/36kr/article.test.js +0 -46
  223. package/clis/36kr/hot.js +0 -87
  224. package/clis/36kr/hot.test.js +0 -15
  225. package/clis/36kr/news.js +0 -52
  226. package/clis/36kr/news.test.js +0 -85
  227. package/clis/36kr/search.js +0 -79
  228. package/clis/51job/company.js +0 -126
  229. package/clis/51job/detail.js +0 -109
  230. package/clis/51job/hot.js +0 -56
  231. package/clis/51job/search.js +0 -80
  232. package/clis/51job/utils.js +0 -302
  233. package/clis/51job/utils.test.js +0 -69
  234. package/clis/aibase/news.js +0 -110
  235. package/clis/aibase/news.test.js +0 -59
  236. package/clis/autohome/__fixtures__/catalog.html +0 -11
  237. package/clis/autohome/__fixtures__/koubei.json +0 -116
  238. package/clis/autohome/autohome.test.js +0 -115
  239. package/clis/autohome/brand.js +0 -108
  240. package/clis/autohome/score.js +0 -103
  241. package/clis/autohome/utils.js +0 -157
  242. package/clis/baidu-scholar/search.js +0 -87
  243. package/clis/baidu-scholar/search.test.js +0 -23
  244. package/clis/bilibili/auth.js +0 -36
  245. package/clis/bilibili/comment.js +0 -107
  246. package/clis/bilibili/comment.test.js +0 -153
  247. package/clis/bilibili/comments.js +0 -136
  248. package/clis/bilibili/comments.test.js +0 -142
  249. package/clis/bilibili/download.js +0 -178
  250. package/clis/bilibili/download.test.js +0 -173
  251. package/clis/bilibili/dynamic.js +0 -34
  252. package/clis/bilibili/dynamic.test.js +0 -68
  253. package/clis/bilibili/favorite.js +0 -47
  254. package/clis/bilibili/feed.js +0 -220
  255. package/clis/bilibili/follow.js +0 -140
  256. package/clis/bilibili/follow.test.js +0 -203
  257. package/clis/bilibili/following.js +0 -44
  258. package/clis/bilibili/history.js +0 -45
  259. package/clis/bilibili/hot.js +0 -40
  260. package/clis/bilibili/hot.test.js +0 -17
  261. package/clis/bilibili/me.js +0 -13
  262. package/clis/bilibili/ranking.js +0 -25
  263. package/clis/bilibili/search.js +0 -24
  264. package/clis/bilibili/subtitle.js +0 -141
  265. package/clis/bilibili/subtitle.test.js +0 -240
  266. package/clis/bilibili/summary.js +0 -167
  267. package/clis/bilibili/summary.test.js +0 -210
  268. package/clis/bilibili/unfollow.js +0 -121
  269. package/clis/bilibili/user-videos.js +0 -39
  270. package/clis/bilibili/utils.js +0 -273
  271. package/clis/bilibili/utils.test.js +0 -97
  272. package/clis/bilibili/video.js +0 -155
  273. package/clis/bilibili/video.test.js +0 -308
  274. package/clis/boss/auth.js +0 -47
  275. package/clis/boss/batchgreet.js +0 -61
  276. package/clis/boss/chatlist.js +0 -116
  277. package/clis/boss/chatlist.test.js +0 -211
  278. package/clis/boss/chatmsg.js +0 -117
  279. package/clis/boss/chatmsg.test.js +0 -230
  280. package/clis/boss/detail.js +0 -63
  281. package/clis/boss/exchange.js +0 -46
  282. package/clis/boss/greet.js +0 -49
  283. package/clis/boss/invite.js +0 -64
  284. package/clis/boss/joblist.js +0 -31
  285. package/clis/boss/mark.js +0 -70
  286. package/clis/boss/recommend.js +0 -45
  287. package/clis/boss/resume.js +0 -150
  288. package/clis/boss/search.js +0 -197
  289. package/clis/boss/search.test.js +0 -78
  290. package/clis/boss/send.js +0 -44
  291. package/clis/boss/stats.js +0 -66
  292. package/clis/boss/utils.js +0 -468
  293. package/clis/boss/utils.test.js +0 -34
  294. package/clis/chaoxing/assignments.js +0 -76
  295. package/clis/chaoxing/auth.js +0 -54
  296. package/clis/chaoxing/exams.js +0 -75
  297. package/clis/chaoxing/utils.js +0 -223
  298. package/clis/chaoxing/utils.test.js +0 -45
  299. package/clis/cnki/search.js +0 -61
  300. package/clis/cnki/search.test.js +0 -18
  301. package/clis/ctrip/auth.js +0 -50
  302. package/clis/ctrip/ctrip.test.js +0 -719
  303. package/clis/ctrip/flight.js +0 -136
  304. package/clis/ctrip/hotel-search.js +0 -132
  305. package/clis/ctrip/hotel-suggest.js +0 -45
  306. package/clis/ctrip/search.js +0 -41
  307. package/clis/ctrip/utils.js +0 -473
  308. package/clis/deepseek/ask.js +0 -158
  309. package/clis/deepseek/ask.test.js +0 -399
  310. package/clis/deepseek/auth.js +0 -54
  311. package/clis/deepseek/detail.js +0 -46
  312. package/clis/deepseek/detail.test.js +0 -81
  313. package/clis/deepseek/history.js +0 -27
  314. package/clis/deepseek/new.js +0 -33
  315. package/clis/deepseek/read.js +0 -25
  316. package/clis/deepseek/send.js +0 -140
  317. package/clis/deepseek/send.test.js +0 -107
  318. package/clis/deepseek/status.js +0 -26
  319. package/clis/deepseek/utils.js +0 -487
  320. package/clis/deepseek/utils.test.js +0 -370
  321. package/clis/dianping/__fixtures__/search.html +0 -168
  322. package/clis/dianping/__fixtures__/shop.html +0 -6
  323. package/clis/dianping/auth.js +0 -49
  324. package/clis/dianping/cityResolver.js +0 -185
  325. package/clis/dianping/dianping.test.js +0 -578
  326. package/clis/dianping/search.js +0 -157
  327. package/clis/dianping/shop.js +0 -173
  328. package/clis/dianping/utils.js +0 -157
  329. package/clis/dongchedi/__fixtures__/search.json +0 -60
  330. package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
  331. package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
  332. package/clis/dongchedi/dongchedi.test.js +0 -191
  333. package/clis/dongchedi/koubei.js +0 -85
  334. package/clis/dongchedi/models.js +0 -91
  335. package/clis/dongchedi/score.js +0 -83
  336. package/clis/dongchedi/search.js +0 -83
  337. package/clis/dongchedi/series.js +0 -87
  338. package/clis/dongchedi/specs.js +0 -115
  339. package/clis/dongchedi/utils.js +0 -180
  340. package/clis/douban/auth.js +0 -50
  341. package/clis/douban/book-hot.js +0 -15
  342. package/clis/douban/download.js +0 -68
  343. package/clis/douban/download.test.js +0 -170
  344. package/clis/douban/marks.js +0 -116
  345. package/clis/douban/movie-hot.js +0 -15
  346. package/clis/douban/movie-hot.test.js +0 -14
  347. package/clis/douban/photos.js +0 -35
  348. package/clis/douban/reviews.js +0 -107
  349. package/clis/douban/search.js +0 -18
  350. package/clis/douban/search.test.js +0 -11
  351. package/clis/douban/subject.js +0 -46
  352. package/clis/douban/subject.test.js +0 -11
  353. package/clis/douban/top250.js +0 -68
  354. package/clis/douban/utils.js +0 -657
  355. package/clis/douban/utils.test.js +0 -488
  356. package/clis/doubao/ask.js +0 -40
  357. package/clis/doubao/auth.js +0 -66
  358. package/clis/doubao/detail.js +0 -35
  359. package/clis/doubao/detail.test.js +0 -42
  360. package/clis/doubao/history.js +0 -30
  361. package/clis/doubao/history.test.js +0 -37
  362. package/clis/doubao/meeting-summary.js +0 -41
  363. package/clis/doubao/meeting-transcript.js +0 -38
  364. package/clis/doubao/new.js +0 -22
  365. package/clis/doubao/read.js +0 -21
  366. package/clis/doubao/send.js +0 -24
  367. package/clis/doubao/status.js +0 -26
  368. package/clis/doubao/utils.js +0 -1156
  369. package/clis/doubao/utils.test.js +0 -396
  370. package/clis/doubao-app/ask.js +0 -54
  371. package/clis/doubao-app/dump.js +0 -25
  372. package/clis/doubao-app/new.js +0 -21
  373. package/clis/doubao-app/read.js +0 -19
  374. package/clis/doubao-app/screenshot.js +0 -19
  375. package/clis/doubao-app/send.js +0 -28
  376. package/clis/doubao-app/status.js +0 -17
  377. package/clis/doubao-app/utils.js +0 -110
  378. package/clis/douyin/_shared/browser-fetch.js +0 -66
  379. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  380. package/clis/douyin/_shared/creation-id.js +0 -5
  381. package/clis/douyin/_shared/creation-id.test.js +0 -22
  382. package/clis/douyin/_shared/evaluate-result.js +0 -16
  383. package/clis/douyin/_shared/imagex-upload.js +0 -53
  384. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  385. package/clis/douyin/_shared/public-api.js +0 -29
  386. package/clis/douyin/_shared/sts2.js +0 -21
  387. package/clis/douyin/_shared/sts2.test.js +0 -27
  388. package/clis/douyin/_shared/text-extra.js +0 -15
  389. package/clis/douyin/_shared/text-extra.test.js +0 -37
  390. package/clis/douyin/_shared/timing.js +0 -22
  391. package/clis/douyin/_shared/timing.test.js +0 -28
  392. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  393. package/clis/douyin/_shared/tos-upload.js +0 -331
  394. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  395. package/clis/douyin/_shared/transcode.js +0 -45
  396. package/clis/douyin/_shared/transcode.test.js +0 -91
  397. package/clis/douyin/_shared/vod-upload.js +0 -212
  398. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  399. package/clis/douyin/activities.js +0 -23
  400. package/clis/douyin/activities.test.js +0 -55
  401. package/clis/douyin/auth.js +0 -39
  402. package/clis/douyin/collections.js +0 -23
  403. package/clis/douyin/collections.test.js +0 -45
  404. package/clis/douyin/delete.js +0 -152
  405. package/clis/douyin/delete.test.js +0 -100
  406. package/clis/douyin/draft.js +0 -355
  407. package/clis/douyin/draft.test.js +0 -335
  408. package/clis/douyin/drafts.js +0 -24
  409. package/clis/douyin/drafts.test.js +0 -11
  410. package/clis/douyin/hashtag.js +0 -114
  411. package/clis/douyin/hashtag.test.js +0 -171
  412. package/clis/douyin/location.js +0 -25
  413. package/clis/douyin/location.test.js +0 -23
  414. package/clis/douyin/profile.js +0 -29
  415. package/clis/douyin/profile.test.js +0 -46
  416. package/clis/douyin/publish-upload-id.test.js +0 -206
  417. package/clis/douyin/publish.js +0 -341
  418. package/clis/douyin/publish.test.js +0 -38
  419. package/clis/douyin/search.js +0 -308
  420. package/clis/douyin/search.test.js +0 -307
  421. package/clis/douyin/stats.js +0 -28
  422. package/clis/douyin/stats.test.js +0 -22
  423. package/clis/douyin/update.js +0 -32
  424. package/clis/douyin/update.test.js +0 -11
  425. package/clis/douyin/user-videos.js +0 -82
  426. package/clis/douyin/user-videos.test.js +0 -151
  427. package/clis/douyin/videos.js +0 -52
  428. package/clis/douyin/videos.test.js +0 -54
  429. package/clis/eastmoney/_secid.js +0 -78
  430. package/clis/eastmoney/announcement.js +0 -53
  431. package/clis/eastmoney/convertible.js +0 -74
  432. package/clis/eastmoney/etf.js +0 -66
  433. package/clis/eastmoney/holders.js +0 -79
  434. package/clis/eastmoney/hot-rank.js +0 -51
  435. package/clis/eastmoney/hot-rank.test.js +0 -59
  436. package/clis/eastmoney/index-board.js +0 -97
  437. package/clis/eastmoney/kline.js +0 -88
  438. package/clis/eastmoney/kuaixun.js +0 -55
  439. package/clis/eastmoney/longhu.js +0 -68
  440. package/clis/eastmoney/money-flow.js +0 -79
  441. package/clis/eastmoney/northbound.js +0 -58
  442. package/clis/eastmoney/quote.js +0 -108
  443. package/clis/eastmoney/rank.js +0 -95
  444. package/clis/eastmoney/sectors.js +0 -77
  445. package/clis/flomo/auth.js +0 -55
  446. package/clis/flomo/memos.js +0 -228
  447. package/clis/flomo/memos.test.js +0 -144
  448. package/clis/gitee/auth.js +0 -41
  449. package/clis/gitee/index.js +0 -3
  450. package/clis/gitee/search.js +0 -137
  451. package/clis/gitee/search.test.js +0 -65
  452. package/clis/gitee/trending.js +0 -568
  453. package/clis/gitee/user.js +0 -200
  454. package/clis/gitee/user.test.js +0 -63
  455. package/clis/gov-law/commands.test.js +0 -39
  456. package/clis/gov-law/recent.js +0 -22
  457. package/clis/gov-law/search.js +0 -41
  458. package/clis/gov-law/shared.js +0 -51
  459. package/clis/gov-policy/__fixtures__/recent.html +0 -16
  460. package/clis/gov-policy/__fixtures__/search.html +0 -41
  461. package/clis/gov-policy/gov-policy.test.js +0 -224
  462. package/clis/gov-policy/recent.js +0 -90
  463. package/clis/gov-policy/search.js +0 -91
  464. package/clis/gov-policy/utils.js +0 -54
  465. package/clis/guazi/__fixtures__/detail.html +0 -7
  466. package/clis/guazi/__fixtures__/list.html +0 -5
  467. package/clis/guazi/browse.js +0 -95
  468. package/clis/guazi/car.js +0 -110
  469. package/clis/guazi/guazi.test.js +0 -126
  470. package/clis/guazi/utils.js +0 -133
  471. package/clis/huodongxing/events.js +0 -322
  472. package/clis/huodongxing/events.test.js +0 -296
  473. package/clis/hupu/__fixtures__/hot-home.html +0 -64
  474. package/clis/hupu/auth.js +0 -47
  475. package/clis/hupu/detail.js +0 -72
  476. package/clis/hupu/hot.js +0 -163
  477. package/clis/hupu/hot.test.js +0 -224
  478. package/clis/hupu/like.js +0 -76
  479. package/clis/hupu/mentions.js +0 -160
  480. package/clis/hupu/reply.js +0 -72
  481. package/clis/hupu/search.js +0 -60
  482. package/clis/hupu/unlike.js +0 -76
  483. package/clis/hupu/utils.js +0 -319
  484. package/clis/jd/add-cart.js +0 -72
  485. package/clis/jd/auth.js +0 -46
  486. package/clis/jd/cart.js +0 -80
  487. package/clis/jd/commands.test.js +0 -41
  488. package/clis/jd/detail.js +0 -63
  489. package/clis/jd/item.js +0 -730
  490. package/clis/jd/item.test.js +0 -354
  491. package/clis/jd/item.test.ts +0 -517
  492. package/clis/jd/reviews.js +0 -55
  493. package/clis/jd/search.js +0 -66
  494. package/clis/jianyu/auth.js +0 -62
  495. package/clis/jianyu/detail.js +0 -21
  496. package/clis/jianyu/search.js +0 -634
  497. package/clis/jianyu/search.test.js +0 -153
  498. package/clis/jianyu/shared/china-bid-search.js +0 -165
  499. package/clis/jianyu/shared/procurement-contract.js +0 -324
  500. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  501. package/clis/jianyu/shared/procurement-detail.js +0 -107
  502. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  503. package/clis/jike/auth.js +0 -48
  504. package/clis/jike/comment.js +0 -107
  505. package/clis/jike/create.js +0 -106
  506. package/clis/jike/feed.js +0 -68
  507. package/clis/jike/like.js +0 -61
  508. package/clis/jike/notifications.js +0 -169
  509. package/clis/jike/post.js +0 -72
  510. package/clis/jike/read.test.js +0 -86
  511. package/clis/jike/repost.js +0 -103
  512. package/clis/jike/search.js +0 -68
  513. package/clis/jike/topic.js +0 -65
  514. package/clis/jike/user.js +0 -65
  515. package/clis/jike/utils.js +0 -25
  516. package/clis/jimeng/auth.js +0 -46
  517. package/clis/jimeng/generate.js +0 -84
  518. package/clis/jimeng/history.js +0 -48
  519. package/clis/jimeng/new.js +0 -44
  520. package/clis/jimeng/workspaces.js +0 -42
  521. package/clis/juejin/hot.js +0 -37
  522. package/clis/juejin/juejin.test.js +0 -241
  523. package/clis/juejin/recommend.js +0 -61
  524. package/clis/juejin/utils.js +0 -199
  525. package/clis/ke/auth.js +0 -46
  526. package/clis/ke/chengjiao.js +0 -78
  527. package/clis/ke/ershoufang.js +0 -101
  528. package/clis/ke/utils.js +0 -104
  529. package/clis/ke/xiaoqu.js +0 -78
  530. package/clis/ke/zufang.js +0 -95
  531. package/clis/kimi/_utils.js +0 -110
  532. package/clis/kimi/audit-extras.js +0 -268
  533. package/clis/kimi/auth.js +0 -57
  534. package/clis/kimi/chat.js +0 -470
  535. package/clis/kimi/kimi.test.js +0 -187
  536. package/clis/kimi/storage.js +0 -169
  537. package/clis/kimi/ui.js +0 -314
  538. package/clis/kimi/usage.js +0 -144
  539. package/clis/linux-do/auth.js +0 -55
  540. package/clis/linux-do/categories.js +0 -50
  541. package/clis/linux-do/feed.js +0 -395
  542. package/clis/linux-do/feed.test.js +0 -153
  543. package/clis/linux-do/search.js +0 -29
  544. package/clis/linux-do/tags.js +0 -28
  545. package/clis/linux-do/topic-content.js +0 -155
  546. package/clis/linux-do/topic-content.test.js +0 -59
  547. package/clis/linux-do/topic.js +0 -53
  548. package/clis/linux-do/user-posts.js +0 -57
  549. package/clis/linux-do/user-topics.js +0 -37
  550. package/clis/maimai/auth.js +0 -47
  551. package/clis/maimai/search-talents.js +0 -192
  552. package/clis/maimai/search-talents.test.js +0 -29
  553. package/clis/mubu/doc.js +0 -41
  554. package/clis/mubu/docs.js +0 -44
  555. package/clis/mubu/notes.js +0 -245
  556. package/clis/mubu/recent.js +0 -28
  557. package/clis/mubu/search.js +0 -63
  558. package/clis/mubu/utils.js +0 -304
  559. package/clis/nowcoder/auth.js +0 -65
  560. package/clis/nowcoder/companies.js +0 -24
  561. package/clis/nowcoder/creators.js +0 -28
  562. package/clis/nowcoder/detail.js +0 -62
  563. package/clis/nowcoder/experience.js +0 -37
  564. package/clis/nowcoder/hot.js +0 -25
  565. package/clis/nowcoder/jobs.js +0 -22
  566. package/clis/nowcoder/notifications.js +0 -30
  567. package/clis/nowcoder/papers.js +0 -41
  568. package/clis/nowcoder/practice.js +0 -38
  569. package/clis/nowcoder/recommend.js +0 -31
  570. package/clis/nowcoder/referral.js +0 -40
  571. package/clis/nowcoder/salary.js +0 -41
  572. package/clis/nowcoder/search.js +0 -50
  573. package/clis/nowcoder/suggest.js +0 -34
  574. package/clis/nowcoder/topics.js +0 -28
  575. package/clis/nowcoder/trending.js +0 -26
  576. package/clis/ones/common.js +0 -144
  577. package/clis/ones/enrich-tasks.js +0 -37
  578. package/clis/ones/login.js +0 -81
  579. package/clis/ones/logout.js +0 -18
  580. package/clis/ones/me.js +0 -31
  581. package/clis/ones/my-tasks.js +0 -121
  582. package/clis/ones/resolve-labels.js +0 -64
  583. package/clis/ones/task-helpers.js +0 -212
  584. package/clis/ones/task-helpers.test.js +0 -12
  585. package/clis/ones/task.js +0 -67
  586. package/clis/ones/tasks.js +0 -80
  587. package/clis/ones/token-info.js +0 -43
  588. package/clis/ones/worklog.js +0 -268
  589. package/clis/ones/worklog.test.js +0 -20
  590. package/clis/powerchina/auth.js +0 -52
  591. package/clis/powerchina/search.js +0 -251
  592. package/clis/powerchina/search.test.js +0 -93
  593. package/clis/quark/auth.js +0 -47
  594. package/clis/quark/ls.js +0 -64
  595. package/clis/quark/mkdir.js +0 -37
  596. package/clis/quark/mv.js +0 -54
  597. package/clis/quark/rename.js +0 -27
  598. package/clis/quark/rm.js +0 -25
  599. package/clis/quark/save.js +0 -81
  600. package/clis/quark/share-tree.js +0 -46
  601. package/clis/quark/utils.js +0 -146
  602. package/clis/quark/utils.test.js +0 -58
  603. package/clis/qwen/ask.js +0 -104
  604. package/clis/qwen/ask.test.js +0 -36
  605. package/clis/qwen/auth.js +0 -56
  606. package/clis/qwen/detail.js +0 -62
  607. package/clis/qwen/history.js +0 -61
  608. package/clis/qwen/image.js +0 -179
  609. package/clis/qwen/new.js +0 -23
  610. package/clis/qwen/read.js +0 -41
  611. package/clis/qwen/send.js +0 -55
  612. package/clis/qwen/status.js +0 -37
  613. package/clis/qwen/utils.js +0 -461
  614. package/clis/qwen/utils.test.js +0 -128
  615. package/clis/rednote/auth.js +0 -52
  616. package/clis/rednote/comments.js +0 -85
  617. package/clis/rednote/download.js +0 -59
  618. package/clis/rednote/feed.js +0 -27
  619. package/clis/rednote/navigation.test.js +0 -26
  620. package/clis/rednote/note.js +0 -68
  621. package/clis/rednote/notifications.js +0 -139
  622. package/clis/rednote/rednote.test.js +0 -240
  623. package/clis/rednote/search.js +0 -107
  624. package/clis/rednote/user.js +0 -55
  625. package/clis/sinablog/article.js +0 -15
  626. package/clis/sinablog/hot.js +0 -15
  627. package/clis/sinablog/search.js +0 -52
  628. package/clis/sinablog/user.js +0 -16
  629. package/clis/sinablog/utils.js +0 -186
  630. package/clis/sinafinance/news.js +0 -62
  631. package/clis/sinafinance/rolling-news.js +0 -41
  632. package/clis/sinafinance/stock-rank.js +0 -66
  633. package/clis/sinafinance/stock.js +0 -121
  634. package/clis/sinafinance/stock.test.js +0 -59
  635. package/clis/smzdm/search.js +0 -149
  636. package/clis/smzdm/search.test.js +0 -114
  637. package/clis/taobao/add-cart.js +0 -150
  638. package/clis/taobao/auth.js +0 -58
  639. package/clis/taobao/cart.js +0 -96
  640. package/clis/taobao/commands.test.js +0 -41
  641. package/clis/taobao/detail.js +0 -71
  642. package/clis/taobao/reviews.js +0 -77
  643. package/clis/taobao/search.js +0 -97
  644. package/clis/tdx/hot-rank.js +0 -48
  645. package/clis/tdx/hot-rank.test.js +0 -59
  646. package/clis/ths/hot-rank.js +0 -50
  647. package/clis/ths/hot-rank.test.js +0 -64
  648. package/clis/tieba/commands.test.js +0 -79
  649. package/clis/tieba/hot.js +0 -48
  650. package/clis/tieba/posts.js +0 -86
  651. package/clis/tieba/read.js +0 -141
  652. package/clis/tieba/search.js +0 -109
  653. package/clis/tieba/utils.js +0 -240
  654. package/clis/tieba/utils.test.js +0 -290
  655. package/clis/toutiao/articles.js +0 -55
  656. package/clis/toutiao/auth.js +0 -70
  657. package/clis/toutiao/hot.js +0 -63
  658. package/clis/toutiao/toutiao.test.js +0 -378
  659. package/clis/toutiao/utils.js +0 -161
  660. package/clis/trae-cn/activity.js +0 -22
  661. package/clis/trae-cn/approve.js +0 -52
  662. package/clis/trae-cn/ask.js +0 -99
  663. package/clis/trae-cn/dump.js +0 -5
  664. package/clis/trae-cn/export.js +0 -40
  665. package/clis/trae-cn/model.js +0 -22
  666. package/clis/trae-cn/new.js +0 -63
  667. package/clis/trae-cn/read.js +0 -23
  668. package/clis/trae-cn/screenshot.js +0 -5
  669. package/clis/trae-cn/select-model.js +0 -25
  670. package/clis/trae-cn/send.js +0 -23
  671. package/clis/trae-cn/setup.js +0 -75
  672. package/clis/trae-cn/status.js +0 -27
  673. package/clis/trae-cn/targets.js +0 -96
  674. package/clis/trae-cn/trae-cn.test.js +0 -412
  675. package/clis/trae-cn/utils.js +0 -750
  676. package/clis/trae-cn/watch.js +0 -119
  677. package/clis/uisdc/news.js +0 -105
  678. package/clis/uisdc/news.test.js +0 -66
  679. package/clis/v2ex/auth.js +0 -44
  680. package/clis/v2ex/daily.js +0 -99
  681. package/clis/v2ex/hot.js +0 -26
  682. package/clis/v2ex/latest.js +0 -26
  683. package/clis/v2ex/me.js +0 -100
  684. package/clis/v2ex/member.js +0 -28
  685. package/clis/v2ex/node.js +0 -39
  686. package/clis/v2ex/nodes.js +0 -26
  687. package/clis/v2ex/notifications.js +0 -72
  688. package/clis/v2ex/replies.js +0 -27
  689. package/clis/v2ex/topic.js +0 -31
  690. package/clis/v2ex/user.js +0 -34
  691. package/clis/wanfang/search.js +0 -66
  692. package/clis/wanfang/search.test.js +0 -23
  693. package/clis/wechat-channels/auth.js +0 -62
  694. package/clis/wechat-channels/publish.js +0 -732
  695. package/clis/wechat-channels/publish.test.js +0 -144
  696. package/clis/weibo/auth.js +0 -53
  697. package/clis/weibo/comments.js +0 -53
  698. package/clis/weibo/delete.js +0 -172
  699. package/clis/weibo/delete.test.js +0 -94
  700. package/clis/weibo/envelope.test.js +0 -85
  701. package/clis/weibo/favorites.js +0 -170
  702. package/clis/weibo/favorites.test.js +0 -114
  703. package/clis/weibo/feed.js +0 -69
  704. package/clis/weibo/hot.js +0 -39
  705. package/clis/weibo/me.js +0 -75
  706. package/clis/weibo/post.js +0 -75
  707. package/clis/weibo/publish.js +0 -306
  708. package/clis/weibo/publish.test.js +0 -192
  709. package/clis/weibo/search.js +0 -80
  710. package/clis/weibo/user-posts.js +0 -234
  711. package/clis/weibo/user-posts.test.js +0 -92
  712. package/clis/weibo/user.js +0 -63
  713. package/clis/weibo/utils.js +0 -59
  714. package/clis/weibo/utils.test.js +0 -36
  715. package/clis/weixin/create-draft.js +0 -226
  716. package/clis/weixin/download.js +0 -371
  717. package/clis/weixin/download.test.js +0 -106
  718. package/clis/weixin/drafts.js +0 -66
  719. package/clis/weixin/drafts.test.js +0 -69
  720. package/clis/weixin/search.js +0 -157
  721. package/clis/weixin/search.test.js +0 -227
  722. package/clis/weread/ai-outline.js +0 -171
  723. package/clis/weread/ai-outline.test.js +0 -83
  724. package/clis/weread/auth.js +0 -59
  725. package/clis/weread/book-search.js +0 -438
  726. package/clis/weread/book-search.test.js +0 -242
  727. package/clis/weread/book.js +0 -233
  728. package/clis/weread/commands.test.js +0 -398
  729. package/clis/weread/highlights.js +0 -24
  730. package/clis/weread/notebooks.js +0 -22
  731. package/clis/weread/notes.js +0 -30
  732. package/clis/weread/private-api-regression.test.js +0 -369
  733. package/clis/weread/ranking.js +0 -29
  734. package/clis/weread/search-regression.test.js +0 -494
  735. package/clis/weread/search.js +0 -186
  736. package/clis/weread/shelf.js +0 -66
  737. package/clis/weread/utils.js +0 -321
  738. package/clis/weread/utils.test.js +0 -128
  739. package/clis/weread-official/book.js +0 -135
  740. package/clis/weread-official/commands.test.js +0 -385
  741. package/clis/weread-official/discover.js +0 -107
  742. package/clis/weread-official/list-apis.js +0 -95
  743. package/clis/weread-official/notes.js +0 -171
  744. package/clis/weread-official/readdata.js +0 -158
  745. package/clis/weread-official/review.js +0 -93
  746. package/clis/weread-official/search.js +0 -106
  747. package/clis/weread-official/shelf.js +0 -97
  748. package/clis/weread-official/utils.js +0 -293
  749. package/clis/weread-official/utils.test.js +0 -242
  750. package/clis/xianyu/auth.js +0 -68
  751. package/clis/xianyu/chat.js +0 -74
  752. package/clis/xianyu/chat.test.js +0 -84
  753. package/clis/xianyu/im.js +0 -322
  754. package/clis/xianyu/im.test.js +0 -253
  755. package/clis/xianyu/inbox.js +0 -96
  756. package/clis/xianyu/item.js +0 -153
  757. package/clis/xianyu/item.test.js +0 -56
  758. package/clis/xianyu/messages.js +0 -91
  759. package/clis/xianyu/publish.js +0 -485
  760. package/clis/xianyu/publish.test.js +0 -220
  761. package/clis/xianyu/reply.js +0 -82
  762. package/clis/xianyu/search.js +0 -262
  763. package/clis/xianyu/search.test.js +0 -104
  764. package/clis/xianyu/utils.js +0 -8
  765. package/clis/xiaoe/auth.js +0 -55
  766. package/clis/xiaoe/catalog.js +0 -227
  767. package/clis/xiaoe/content.js +0 -175
  768. package/clis/xiaoe/courses.js +0 -127
  769. package/clis/xiaoe/detail.js +0 -36
  770. package/clis/xiaoe/play-url.js +0 -121
  771. package/clis/xiaoe/xiaoe.test.js +0 -486
  772. package/clis/xiaohongshu/ask.js +0 -426
  773. package/clis/xiaohongshu/ask.test.js +0 -271
  774. package/clis/xiaohongshu/auth.js +0 -53
  775. package/clis/xiaohongshu/collection-helpers.js +0 -283
  776. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  777. package/clis/xiaohongshu/comments.js +0 -228
  778. package/clis/xiaohongshu/comments.test.js +0 -320
  779. package/clis/xiaohongshu/creator-note-detail.js +0 -482
  780. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  781. package/clis/xiaohongshu/creator-notes-summary.js +0 -98
  782. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  783. package/clis/xiaohongshu/creator-notes.js +0 -479
  784. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  785. package/clis/xiaohongshu/creator-profile.js +0 -55
  786. package/clis/xiaohongshu/creator-stats.js +0 -76
  787. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  788. package/clis/xiaohongshu/delete-note.js +0 -260
  789. package/clis/xiaohongshu/delete-note.test.js +0 -172
  790. package/clis/xiaohongshu/download.js +0 -249
  791. package/clis/xiaohongshu/download.test.js +0 -339
  792. package/clis/xiaohongshu/draft-clear.js +0 -91
  793. package/clis/xiaohongshu/draft-delete.js +0 -103
  794. package/clis/xiaohongshu/draft-open.js +0 -43
  795. package/clis/xiaohongshu/draft-utils.js +0 -142
  796. package/clis/xiaohongshu/drafts.js +0 -28
  797. package/clis/xiaohongshu/drafts.test.js +0 -172
  798. package/clis/xiaohongshu/feed.js +0 -163
  799. package/clis/xiaohongshu/feed.test.js +0 -126
  800. package/clis/xiaohongshu/follow.js +0 -226
  801. package/clis/xiaohongshu/follow.test.js +0 -211
  802. package/clis/xiaohongshu/liked.js +0 -29
  803. package/clis/xiaohongshu/liked.test.js +0 -82
  804. package/clis/xiaohongshu/navigation.test.js +0 -38
  805. package/clis/xiaohongshu/note-helpers.js +0 -69
  806. package/clis/xiaohongshu/note.js +0 -104
  807. package/clis/xiaohongshu/note.test.js +0 -249
  808. package/clis/xiaohongshu/notifications.js +0 -46
  809. package/clis/xiaohongshu/publish.js +0 -1423
  810. package/clis/xiaohongshu/publish.test.js +0 -1141
  811. package/clis/xiaohongshu/saved.js +0 -29
  812. package/clis/xiaohongshu/saved.test.js +0 -143
  813. package/clis/xiaohongshu/search.js +0 -330
  814. package/clis/xiaohongshu/search.test.js +0 -325
  815. package/clis/xiaohongshu/unfollow.js +0 -285
  816. package/clis/xiaohongshu/user-helpers.js +0 -78
  817. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  818. package/clis/xiaohongshu/user.js +0 -140
  819. package/clis/xiaohongshu/user.test.js +0 -141
  820. package/clis/xiaoyuzhou/auth.js +0 -303
  821. package/clis/xiaoyuzhou/auth.test.js +0 -124
  822. package/clis/xiaoyuzhou/download.js +0 -54
  823. package/clis/xiaoyuzhou/download.test.js +0 -135
  824. package/clis/xiaoyuzhou/episode.js +0 -34
  825. package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
  826. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  827. package/clis/xiaoyuzhou/podcast.js +0 -33
  828. package/clis/xiaoyuzhou/transcript.js +0 -77
  829. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  830. package/clis/xiaoyuzhou/utils.js +0 -15
  831. package/clis/xiaoyuzhou/utils.test.js +0 -39
  832. package/clis/xueqiu/auth.js +0 -63
  833. package/clis/xueqiu/comments.js +0 -355
  834. package/clis/xueqiu/comments.test.js +0 -696
  835. package/clis/xueqiu/danjuan-utils.js +0 -126
  836. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  837. package/clis/xueqiu/earnings-date.js +0 -45
  838. package/clis/xueqiu/feed.js +0 -39
  839. package/clis/xueqiu/fund-holdings.js +0 -29
  840. package/clis/xueqiu/fund-snapshot.js +0 -26
  841. package/clis/xueqiu/groups.js +0 -23
  842. package/clis/xueqiu/hot-stock.js +0 -32
  843. package/clis/xueqiu/hot.js +0 -37
  844. package/clis/xueqiu/kline.js +0 -44
  845. package/clis/xueqiu/search.js +0 -37
  846. package/clis/xueqiu/stock.js +0 -65
  847. package/clis/xueqiu/utils.js +0 -48
  848. package/clis/xueqiu/utils.test.js +0 -26
  849. package/clis/xueqiu/watchlist.js +0 -37
  850. package/clis/youdao/note.js +0 -258
  851. package/clis/youdao/note.test.js +0 -99
  852. package/clis/yuanbao/ask.js +0 -362
  853. package/clis/yuanbao/ask.test.js +0 -124
  854. package/clis/yuanbao/auth.js +0 -59
  855. package/clis/yuanbao/detail.js +0 -65
  856. package/clis/yuanbao/history.js +0 -51
  857. package/clis/yuanbao/new.js +0 -72
  858. package/clis/yuanbao/new.test.js +0 -30
  859. package/clis/yuanbao/read.js +0 -38
  860. package/clis/yuanbao/send.js +0 -57
  861. package/clis/yuanbao/shared.js +0 -341
  862. package/clis/yuanbao/shared.test.js +0 -80
  863. package/clis/yuanbao/status.js +0 -44
  864. package/clis/zhihu/answer-comments.js +0 -280
  865. package/clis/zhihu/answer-comments.test.js +0 -287
  866. package/clis/zhihu/answer-detail.js +0 -216
  867. package/clis/zhihu/answer-detail.test.js +0 -338
  868. package/clis/zhihu/answer.js +0 -54
  869. package/clis/zhihu/answer.test.js +0 -54
  870. package/clis/zhihu/auth.js +0 -59
  871. package/clis/zhihu/collection.js +0 -199
  872. package/clis/zhihu/collection.test.js +0 -337
  873. package/clis/zhihu/collections.js +0 -128
  874. package/clis/zhihu/collections.test.js +0 -182
  875. package/clis/zhihu/comment.js +0 -55
  876. package/clis/zhihu/comment.test.js +0 -50
  877. package/clis/zhihu/download.js +0 -80
  878. package/clis/zhihu/download.test.js +0 -12
  879. package/clis/zhihu/favorite.js +0 -87
  880. package/clis/zhihu/favorite.test.js +0 -59
  881. package/clis/zhihu/follow.js +0 -50
  882. package/clis/zhihu/follow.test.js +0 -42
  883. package/clis/zhihu/followers.js +0 -40
  884. package/clis/zhihu/followers.test.js +0 -42
  885. package/clis/zhihu/following.js +0 -40
  886. package/clis/zhihu/following.test.js +0 -44
  887. package/clis/zhihu/hot.js +0 -44
  888. package/clis/zhihu/like.js +0 -47
  889. package/clis/zhihu/like.test.js +0 -41
  890. package/clis/zhihu/paginate.js +0 -128
  891. package/clis/zhihu/pins.js +0 -41
  892. package/clis/zhihu/pins.test.js +0 -44
  893. package/clis/zhihu/question.js +0 -113
  894. package/clis/zhihu/question.test.js +0 -251
  895. package/clis/zhihu/recommend.js +0 -103
  896. package/clis/zhihu/recommend.test.js +0 -143
  897. package/clis/zhihu/search.js +0 -206
  898. package/clis/zhihu/search.test.js +0 -198
  899. package/clis/zhihu/target.js +0 -91
  900. package/clis/zhihu/target.test.js +0 -77
  901. package/clis/zhihu/text.js +0 -29
  902. package/clis/zhihu/text.test.js +0 -24
  903. package/clis/zhihu/user-answers.js +0 -41
  904. package/clis/zhihu/user-answers.test.js +0 -69
  905. package/clis/zhihu/user-arg.js +0 -34
  906. package/clis/zhihu/user-articles.js +0 -40
  907. package/clis/zhihu/user-articles.test.js +0 -44
  908. package/clis/zhihu/user.js +0 -59
  909. package/clis/zhihu/user.test.js +0 -73
  910. package/clis/zhihu/write-shared.js +0 -228
  911. package/clis/zhihu/write-shared.test.js +0 -176
  912. package/clis/zsxq/auth.js +0 -68
  913. package/clis/zsxq/dynamics.js +0 -48
  914. package/clis/zsxq/groups.js +0 -33
  915. package/clis/zsxq/search.js +0 -44
  916. package/clis/zsxq/search.test.js +0 -24
  917. package/clis/zsxq/topic.js +0 -50
  918. package/clis/zsxq/topic.test.js +0 -30
  919. package/clis/zsxq/topics.js +0 -26
  920. package/clis/zsxq/topics.test.js +0 -24
  921. package/clis/zsxq/utils.js +0 -233
  922. package/clis/zsxq/utils.test.js +0 -31
  923. package/dist/src/weixin-download.test.js +0 -45
  924. package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
  925. package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
  926. package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
  927. package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
  928. /package/{clis/douyin/_shared/types.js → dist/src/generate-release-notes-cli.test.d.ts} +0 -0
  929. /package/dist/src/{weixin-download.test.d.ts → release-notes.test.d.ts} +0 -0
@@ -1,127 +1,109 @@
1
1
  # Site Memory
2
2
 
3
- 站点记忆分两层:**in-repo 种子**(skill 自带的已知站点公共知识)+ **本地工作目录**(每台机器跑过的站点累积产物)。
3
+ Site memory prevents every adapter run from starting cold. It has two layers:
4
4
 
5
- ---
5
+ 1. In-repo public seeds under `references/site-memory/<site>.md`, when a seed exists.
6
+ 2. Local working memory under `~/.webcmd/sites/<site>/`.
6
7
 
7
- ## 两层结构
8
+ Local memory is the main write target. Do not write private cookies, tokens, or user data into the repo.
8
9
 
9
- ```
10
- skills/webcmd-adapter-author/references/site-memory/<site>.md
11
- — 公共种子。手写 + PR 审核进入。多 agent 共享的第一批起点。
12
- — 已铺:eastmoney / xueqiu / bilibili / tonghuashun
13
-
14
- ~/.webcmd/sites/<site>/
15
- — 本地累积。agent 跑 adapter 过程里自动写入,跨 session 复用。
16
- — 不进 git,不进 PR。
17
- ```
18
-
19
- 用法:开头先读本地,命中 **不跳写 adapter**,仍要跑 Step 5 endpoint 验证 + Step 7 字段抽查(memory 可能过期或站点换版);没命中读 in-repo;都没有走完整 recon。
20
-
21
- ---
22
-
23
- ## Layer 1 — In-repo 种子(`references/site-memory/<site>.md`)
24
-
25
- 每个覆盖站点一个 `.md`,结构固定:
26
-
27
- ```markdown
28
- # <site>
29
-
30
- ## 域名
31
- 主 API / 备 API / 登录 / 静态资源
32
-
33
- ## 默认鉴权
34
- `Strategy.XXX` + 必需 cookie/header + 获取方式
10
+ ## Directory Layout
35
11
 
36
- ## 已知 endpoint(选最常用的 5-10 条)
37
- - `GET <url>` — 返回 X,分页参数 Y
38
- - ...
39
-
40
- ## 字段(指向 `field-conventions.md` 的某一节)
41
-
42
- ## 坑 / 陷阱
43
- - fltt=2 必传
44
- - 单位是"万"不是"元"
45
- - ...
46
-
47
- ## 可参考的 adapter
48
- `clis/<site>/<name>.js` × N
49
- ```
50
-
51
- 审核门槛高,里面写的东西必须是"多数人都会踩到"的共识。一次性试错、站点局部怪癖放 Layer 2。
52
-
53
- ---
54
-
55
- ## Layer 2 — 本地工作目录(`~/.webcmd/sites/<site>/`)
56
-
57
- agent 每跑一次相关 adapter 就可以自动写/读:
58
-
59
- ```
12
+ ```text
60
13
  ~/.webcmd/sites/<site>/
61
- notes.md — 累积笔记(时间戳 + 写入人 + 发现)
62
- endpoints.json — 已验证的 endpoint 目录
63
- field-map.json — 字段代号 → 含义(key 为字段代号,value 为 {meaning, verified_at, source})
64
- verify/ — `webcmd browser verify` 期望值(值级校验锚点,每个 adapter 一份)
14
+ endpoints.json
15
+ field-map.json
16
+ notes.md
17
+ verify/
65
18
  <cmd>.json
66
- fixtures/ — 完整响应样本(给字段对比 / 离线 replay;**调试时的原始 dump 也只能落在这里或 /tmp/**)
67
- <cmd>-<ts>.json
68
- last-probe.log — 最近一次侦察输出(下次接着用)
19
+ fixtures/
20
+ <cmd>-<YYYYMMDDHHMM>.json
69
21
  ```
70
22
 
71
- `verify/` vs `fixtures/` 别混:
72
- - `verify/<cmd>.json` 是**结构期望**(rowCount / columns / types / patterns / notEmpty),每 adapter 一份、会被 verify 读。
73
- - `fixtures/<cmd>-<ts>.json` 是**原始响应样本**,给人 / 下一个 agent 做字段比对用,verify 不会读。
23
+ ## `endpoints.json`
74
24
 
75
- ### `endpoints.json` 格式(schema 锁死)
76
-
77
- key = endpoint 的短名(`clist` / `kline` / `search` 等),不要用全 URL 当 key。
25
+ Short endpoint name as key:
78
26
 
79
27
  ```json
80
28
  {
81
- "clist": {
82
- "url": "https://push2.eastmoney.com/api/qt/clist/get",
29
+ "search": {
30
+ "url": "https://example.com/api/search",
83
31
  "method": "GET",
84
32
  "params": {
85
- "required": ["fs", "fields"],
86
- "optional": ["pn", "pz", "fid", "po", "fltt"]
33
+ "required": ["q"],
34
+ "optional": ["page", "sort"]
35
+ },
36
+ "response": {
37
+ "rowsPath": "data.items",
38
+ "sampleFields": ["title", "url", "score"]
87
39
  },
88
- "response": "data.diff[] 数组",
89
- "verified_at": "2026-04-20",
90
- "notes": "fltt=2 必传"
40
+ "verified_at": "YYYY-MM-DD",
41
+ "notes": "What was checked and what can drift."
91
42
  }
92
43
  }
93
44
  ```
94
45
 
95
- 字段说明:
46
+ Rules:
96
47
 
97
- - `url` / `method`:原样存,query string 不入 `url`,都归 `params`
98
- - `params.required` / `params.optional`:参数名列表。**不存具体值**(值会变,记例子放 `notes`)
99
- - `response`:一句话写清响应形状入口(`data.diff[] 数组` / `result.data.items` / `纯数组`),而不是把整个响应贴进来
100
- - `verified_at`:`YYYY-MM-DD`。超过 30 天下次读到当作过期重验
101
- - `notes`:一两句关键坑(`fltt=2 必传` / `ms 单位 begin` 之类),不要写长文
48
+ - Re-verify memory hits before using them.
49
+ - Treat entries older than 30 days as stale.
50
+ - Mark changed endpoints stale instead of deleting evidence silently.
51
+ - Never store cookies, bearer tokens, CSRF tokens, or private user data.
102
52
 
103
- ### `field-map.json` 格式(schema 锁死)
53
+ ## `field-map.json`
104
54
 
105
- key = 字段代号(`f237` / `f152`),value 三件套:
55
+ Map source codes or unclear keys to meanings:
106
56
 
107
57
  ```json
108
58
  {
109
- "f237": {
110
- "meaning": "convertible premium rate (%)",
111
- "verified_at": "2026-04-20",
112
- "source": "field-decode-playbook sort-key comparison vs page"
59
+ "num_comments": {
60
+ "meaning": "commentCount",
61
+ "verified_at": "YYYY-MM-DD",
62
+ "source": "visible page comparison"
113
63
  }
114
64
  }
115
65
  ```
116
66
 
117
- - `meaning`:人话 + 单位/精度(`%` / `元` / `万元` / `× 10^f152` 等)
118
- - `verified_at`:`YYYY-MM-DD`
119
- - `source`:怎么推出来的,让下次能复查(`field-decode-playbook sort-key` / `网页标签对照` / `bundle 搜索 var pricePct =`)
120
- - **已存在的 key 不要默默覆盖**。有冲突时先用 `fixtures/` 里的真实样本 + 网页肉眼值再确认一遍
67
+ Rules:
68
+
69
+ - Append new mappings.
70
+ - Do not overwrite existing keys without visible-page proof.
71
+ - If a conflict appears, compare against the visible page and record the decision in `notes.md`.
72
+
73
+ ## `notes.md`
74
+
75
+ Prepend a dated note for each run:
76
+
77
+ ```md
78
+ ## YYYY-MM-DD by <agent/user>
79
+
80
+ - What changed:
81
+ - New endpoint evidence:
82
+ - Field decoding evidence:
83
+ - Pitfalls:
84
+ - Follow-up:
85
+ ```
86
+
87
+ Notes should capture decisions that future agents would otherwise rediscover.
88
+
89
+ ## `verify/<cmd>.json`
90
+
91
+ This is the `webcmd browser verify` fixture.
121
92
 
122
- ### `verify/<cmd>.json` 格式(schema 锁死)
93
+ It should include:
123
94
 
124
- 每个 adapter 一份,`webcmd browser verify <site>/<cmd>` 会自动读。**没有这份 = verify 只能证"能跑",证不出数据对**——所以是必填产物。
95
+ - args
96
+ - rowCount
97
+ - columns
98
+ - types
99
+ - patterns
100
+ - notEmpty
101
+ - mustNotContain
102
+ - mustBeTruthy
103
+
104
+ Write it after the first passing run, then tighten it manually and verify again.
105
+
106
+ Example:
125
107
 
126
108
  ```json
127
109
  {
@@ -136,96 +118,64 @@ key = 字段代号(`f237` / `f152`),value 三件套:
136
118
  "url": "string"
137
119
  },
138
120
  "patterns": {
139
- "url": "^https://www\\.1point3acres\\.com/bbs/thread-"
121
+ "url": "^https://www\\.example\\.com/thread-"
122
+ },
123
+ "notEmpty": ["title", "url"],
124
+ "mustNotContain": {
125
+ "title": ["breadcrumb:", "category:"]
140
126
  },
141
- "notEmpty": ["title", "url"]
127
+ "mustBeTruthy": ["rank"]
142
128
  }
143
129
  }
144
130
  ```
145
131
 
146
- 字段说明:
147
-
148
- - `args`:verify 调 adapter 时要带的参数。支持两种形态:
149
- - **对象**:`{ "limit": 3 }` → 展开成 `--limit 3`,用于标准 named flag 适配器
150
- - **数组**:`["123", "--limit", "3"]` → **原样**追加到命令后,用于 positional 主语型适配器(`<tid>` / `<url>` / `<query>`)。repo 约定"主语优先 positional",所以这类适配器只能用数组形态
151
- - `expect.rowCount.{min,max}`:包含边界。稳定列表接口收紧到 `[min, max]`,动态接口给一个宽区间
152
- - `expect.columns`:每行必须都有这些 key(严格要求——漏了就 fail)
153
- - `expect.types`:支持 `|` union(`string|null`)和 `any` 通配。写多少列类型看列的稳定性;波动大的列直接 `any` 比频繁改 fixture 好
154
- - `expect.patterns`:正则表达式 **字符串**(注意 `\\` 转义)。`null` / `undefined` 会被跳过,不要用正则校验可空字段
155
- - `expect.notEmpty`:trim 后不能为空的列。这是"adapter 没吃掉核心业务字段"的最后一道保险
156
- - `expect.mustNotContain`:`Record<col, string[]>`。列值里不允许出现这些子串。用来挡"字段内容污染"——比如 `description` 里混进了 `address:` / `category:` 的邻居节点文字、`title` 前面粘了面包屑前缀。`notEmpty` 挡不住这种软污染
157
- - `expect.mustBeTruthy`:列数组。列值必须是 JS truthy。用来挡"silent `|| 0` / `|| false` 兜底"——数值列返回 0 / 空字符串 / false 都会被 `notEmpty` 放过,但业务上通常是"没抓到"
158
-
159
- ### 什么时候手写 vs `--write-fixture` 自动生成
160
-
161
- - `--write-fixture` 只是种子:生成 `rowCount.min=1` / `columns` / `types`,**没有** `patterns` / `notEmpty` / `mustNotContain` / `mustBeTruthy`——纯类型 fixture 挡不住数值错位 / 字段污染 / silent fallback。
162
- - 拿到种子后**必须手改**,四件套一起上:
163
- - `patterns`:URL / 日期 / ID 等格式列
164
- - `notEmpty`:核心业务字段
165
- - `mustNotContain`:描述类文本列容易被兄弟节点污染时,把禁词(`address:` / `category:` 等)列出来
166
- - `mustBeTruthy`:数值 / 布尔业务列,挡 `|| 0` / `|| false`
167
- - adapter 是 positional 主语型(`<tid>` / `<url>` / `<query>`)时,`--write-fixture` 的 `args` 要手写成数组形态。工具不会替你决定形态。
168
- - 站点换版导致 fixture 过时:`--update-fixture` 覆盖。改之前**先用肉眼核对一次网页值**,别闭着眼把错的响应固化下来。
169
- - **规避反模式:不要为了让 verify 通过去放松 pattern**。失败的 pattern 说明 adapter 输出有问题,要收紧 adapter,不是收紧 fixture。放松 fixture 等于默认把错数据接受下来。
170
-
171
- ### `notes.md` 格式
172
-
173
- ```markdown
174
- ## 2026-04-20 by webcmd-user
175
- 写 `convertible.js` 时遇到:
176
- - f237 推断是溢价率(排序对比法,页面对照)
177
- - `fltt=2` 不加的话价格是整数 × 10^f152
178
- - `fs=b:MK0354` 过滤可转债
179
- ```
180
-
181
- 顶部追加新段落,老的不删。每段有日期 + 写入人。
132
+ Field rules:
182
133
 
183
- ### `fixtures/<cmd>-<YYYYMMDDHHMM>.json` 格式
134
+ - `args` controls how verify invokes the adapter. Use an object such as `{ "limit": 3 }` for named flags; verify expands it to `--limit 3`.
135
+ - Use an array such as `["1234567", "--limit", "3"]` for positional-subject adapters (`<tid>`, `<url>`, `<query>`). The array is appended exactly as written. Do not encode a positional subject as `{ "tid": "1234567", "limit": 3 }`, because that becomes `--tid 1234567 --limit 3`.
136
+ - `expect.rowCount.{min,max}` is inclusive. Stable list APIs should use a tight range; dynamic feeds can use a wider range.
137
+ - `expect.columns` is strict. Each row must contain every listed key.
138
+ - `expect.types` supports `|` unions such as `string|null` and the `any` wildcard for intentionally variable fields.
139
+ - `expect.patterns` uses regular expression strings. Remember to escape backslashes as `\\`.
140
+ - `expect.notEmpty` trims string values and fails when core business fields are empty.
141
+ - `expect.mustNotContain` is `Record<column, string[]>`. It blocks soft contamination such as a `description` that accidentally includes neighboring `address:` or `category:` text.
142
+ - `expect.mustBeTruthy` lists columns whose values must be JavaScript truthy. Use it to catch silent `|| 0`, `|| false`, or empty-string fallbacks that `notEmpty` can miss on numeric or boolean business fields.
184
143
 
185
- 一份该 endpoint 的**完整**响应样本。用途:
144
+ Fixture workflow:
186
145
 
187
- - 未来字段代号再变时,拿样本和 `field-map.json` regression 对比
188
- - 站点换版时,新响应和旧 fixture diff 看哪个字段结构变了
146
+ - `--write-fixture` is only a seed. It usually writes `rowCount.min=1`, `columns`, and `types`; it does not know the business-specific `patterns`, `notEmpty`, `mustNotContain`, or `mustBeTruthy` checks.
147
+ - After generating the seed, tighten it manually with URL/date/ID patterns, core-field `notEmpty`, contamination guards in `mustNotContain`, truthiness guards in `mustBeTruthy`, and a realistic `rowCount`.
148
+ - For positional-subject adapters, handwrite or correct `args` as an array because the seed cannot infer the subject shape.
149
+ - If a site change makes the fixture stale, compare at least one visible page value before running `--update-fixture`.
150
+ - Do not loosen fixtures just to make verify pass. A failed pattern or guard is evidence to check the adapter output first; accepting wrong data by weakening the fixture defeats the fixture.
189
151
 
190
- **存之前脱敏**:去掉 cookie / token / 登录态相关 header、去掉用户自己的 uid / 用户名 / 手机号 / 邮箱。
191
-
192
- ---
193
-
194
- ## runbook 里的读/写时机
195
-
196
- ```
197
- Step 2 开始前 → 读 ~/.webcmd/sites/<site>/
198
- → 读 references/site-memory/<site>.md
199
- 命中后 → 不跳写 adapter,仍要跑 Step 5 (endpoint 验证) + Step 7 (字段抽查)
200
- verified_at 超 30 天 → 当作过期,按冷启动走 Step 3 → 4
201
-
202
- Step 10 verify 首轮通过后 → 写 ~/.webcmd/sites/<site>/verify/<cmd>.json
203
- - 先 `--write-fixture` 拿种子,再手改 patterns / notEmpty / rowCount
204
- - 没这份后续 verify 挡不住数据错位,**必填**
205
-
206
- Step 11 肉眼对比通过后 → 写 ~/.webcmd/sites/<site>/
207
- - endpoints.json:按 schema 追加或更新 verified_at
208
- - field-map.json:只追加新 key,已有的不默默覆盖
209
- - notes.md:顶部追加一段
210
- - fixtures/:脱敏后存一份完整响应样本(区别于 verify/)
211
- ```
152
+ ## `fixtures/<cmd>-<YYYYMMDDHHMM>.json`
212
153
 
213
- **回写是 commit,不是 stash**:不过 Step 10 verify + Step 11 肉眼对比不写,防止把错的映射喂给下一轮。
154
+ Store a sanitized response sample for field decoding and offline replay.
214
155
 
215
- ---
156
+ Rules:
216
157
 
217
- ## 不要写进 `~/.webcmd/sites/` 的东西
158
+ - Remove cookies, tokens, account identifiers, private messages, emails, and private user data.
159
+ - Keep enough response shape to decode fields later.
160
+ - Prefer local memory for raw samples; commit repo fixtures only when they are intentional tests.
218
161
 
219
- - 真实账户 cookie / token — 不要保存任何鉴权凭据
220
- - 用户私有数据(返回体里有个人敏感字段的 → 脱敏再存 fixtures)
221
- - 过期超过 30 天的 last-probe.log(自动清)
162
+ ## In-Repo Seeds
222
163
 
223
- ## 不要写进 **repo / adapter 目录** 的东西
164
+ In-repo seeds are public knowledge only. They may contain:
224
165
 
225
- 调试过程里的临时 dump(`.dbg-*.html` / `raw-*.json` / `sample-*` / `trace-*.txt`)**只能**落在 `~/.webcmd/sites/<site>/fixtures/` 或系统 `/tmp/`。PR diff 会把 repo 根目录和 `clis/<site>/` 下的文件一起带走——别人 review 时看到一堆调试副产物会很烦。
166
+ - public domains
167
+ - known endpoint shapes
168
+ - non-secret header requirements
169
+ - field-code conventions
170
+ - adapter references
171
+ - pitfalls that apply to any user
226
172
 
227
- ---
173
+ They must not contain:
228
174
 
229
- ## 没有 site-memory 时
175
+ - private credentials
176
+ - tokens
177
+ - cookies
178
+ - user-specific IDs
179
+ - scraped private content
230
180
 
231
- 新站点没对应 `.md`,也没本地目录 完整走 recon + discovery,跑完直接写 `~/.webcmd/sites/<site>/`,后面就有了。
181
+ If `references/site-memory/<site>.md` is absent, proceed with local memory only.
@@ -1,134 +1,130 @@
1
1
  # Site Recon
2
2
 
3
- **Layer 1:这是哪种站?** 分类完直接进 `api-discovery.md` endpoint
3
+ **Layer 1: what kind of site is this?** Classify the site, then go directly to `api-discovery.md` to find the endpoint.
4
4
 
5
- 本文件**只做分类**,不讲 endpoint 怎么找。
5
+ This file only classifies sites. It does not explain how to discover endpoints.
6
6
 
7
- ---
7
+ ## One-Step Diagnosis
8
8
 
9
- ## 一步诊断(推荐)
9
+ Preferred command:
10
10
 
11
11
  ```bash
12
12
  webcmd browser analyze <url>
13
13
  ```
14
14
 
15
- 返回一份 JSON
15
+ The command returns JSON with:
16
16
 
17
17
  ```json
18
18
  {
19
- "pattern": { "pattern": "A", "reason": "3 JSON XHR responses observed", "json_responses": 3, "auth_failures": 0 },
20
- "anti_bot": { "detected": false, "vendor": null, "evidence": [], "implication": "No known anti-bot signatures. Node-side fetch may work; try COOKIE first, fall back to browser-context fetch if blocked." },
21
- "initial_state": { "__INITIAL_STATE__": false, "__NUXT__": false, "__NEXT_DATA__": false, "__APOLLO_STATE__": false },
22
- "nearest_adapter": { "site": "xueqiu", "example_commands": ["xueqiu search", "xueqiu hot"], "reason": "2 existing adapters target this site — reuse strategy/cookie config" },
23
- "recommended_next_step": "Pick the most specific JSON endpoint from `webcmd browser network` and try a bare Node fetch with cookies; escalate to browser-context fetch only if blocked."
19
+ "pattern": "A|B|C|D|E",
20
+ "anti_bot": [],
21
+ "api_candidates": [],
22
+ "nearest_adapters": [],
23
+ "recommended_next_step": "..."
24
24
  }
25
25
  ```
26
26
 
27
- `analyze` 一步把 Pattern 分类 / 反爬厂商识别 / 最近 adapter 匹配 / 下一步建议给完。直接按 `recommended_next_step` 走,多数情况不用手跑三步诊断。
27
+ `analyze` gives Pattern classification, anti-bot signals, nearest-adapter matches, and the next step in one pass. Follow `recommended_next_step` directly in most cases.
28
+
29
+ ## Manual Three-Step Diagnosis
28
30
 
29
- ## 手动三步诊断(analyze 给不出明确结论时)
31
+ Use this only when `analyze` is ambiguous:
30
32
 
31
33
  ```bash
32
- webcmd browser open <url>
34
+ webcmd browser open <url> --trace on --keep-tab true --window foreground
33
35
  webcmd browser wait time 2
34
- webcmd browser network
36
+ webcmd browser network --format json
35
37
  ```
36
38
 
37
- `network` 输出判:
38
-
39
- | `network` 看到什么 | 站点类型 | 特征 |
40
- |------------------|---------|------|
41
- | 大量 `/api/...` JSON 请求,包含目标数据 | **A. SPA / JSON XHR** | React/Vue,数据走 fetch |
42
- | 有请求但都是广告 / 埋点,无目标数据 | **B. SSR / inline data** | 首屏在 HTML 里,深层再走 API |
43
- | 完全空 / 只有静态资源 | **C. JSONP / `<script src>` 驱动** | 老金融行情站常见 |
44
- | 有 API 但 401/403/签名错 | **D. Token / CSRF 鉴权型** | 在 A 基础上加鉴权 |
45
- | `Content-Type: text/event-stream` / WebSocket 握手 | **E. 流式** | 行情 tick / chat |
39
+ Read `network` output this way:
46
40
 
47
- 分不清时参考下面五节的其他信号。
41
+ | `network` shows | Site type | Signals |
42
+ | --- | --- | --- |
43
+ | Many `/api/...` JSON requests containing target data | **A. SPA / JSON XHR** | React/Vue style app, data loaded through fetch/XHR |
44
+ | Requests exist but are ads, analytics, or no target data | **B. SSR / inline data** | First screen data is in HTML, deeper pages may use API |
45
+ | Empty except static resources | **C. JSONP / `<script src>` driven** | Data may arrive through script tags or callback-wrapped payloads |
46
+ | API exists but returns 401/403 or signature errors | **D. Token / CSRF auth** | Pattern A plus auth headers or page-sourced tokens |
47
+ | `Content-Type: text/event-stream` or WebSocket handshake | **E. Streaming** | Live feed, chat, or tick data |
48
48
 
49
- **数据是 SPA / 异步加载时,`wait time 2` 可能不够**。改用 `webcmd browser wait xhr '/api/path-fragment'` 直接等具体接口到场,比盲 `wait time 5` 更稳。
49
+ If data is loaded asynchronously, `wait time 2` may not be enough. Prefer `webcmd browser wait xhr '/api/path-fragment'` for a specific interface over blind `wait time 5`.
50
50
 
51
51
  ---
52
52
 
53
- ## Pattern A SPA / JSON XHR
53
+ ## Pattern A - SPA / JSON XHR
54
54
 
55
- **代表**:xueqiu、linear、notion、大多数现代 SaaS
55
+ **Examples:** GitHub, Linear, Notion, many modern SaaS apps.
56
56
 
57
- **信号**:
58
- - URL 一访问就是 `/`,后续数据都在 network tab
59
- - `document.querySelector('main').childElementCount` 一开始为 0,后被 JS 填充
60
- - `window.React / window.Vue / window.__REACT_DEVTOOLS_GLOBAL_HOOK__` 存在
57
+ **Signals:**
61
58
 
62
- **下一步**:`api-discovery.md` §1(network 精读)
59
+ - The initial URL loads shell HTML, then target data appears in network.
60
+ - `document.querySelector('main').childElementCount` starts low and is later populated by JavaScript.
61
+ - `window.React`, `window.Vue`, or `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` exists.
63
62
 
64
- **注意 Pattern A 命中不等于 strategy `PAGE_FETCH`**:
65
- - 先看 `webcmd browser analyze` 输出的 `api_candidates[]`:`verdict=likely_data` 的条目才是真候选;`verdict=noise`(analytics / beacon / personalization)不能算 API 信号
66
- - booking #1680 反例:17 个 JSON XHR 看起来像 Pattern A,但全是 analytics side-channel,最终走 `DOM_STATE` / `UI_SELECTOR`
67
- - replay 候选 endpoint 后,按 `strategy-selection.md` 的契约模型选 strategy;`PUBLIC_API` / `COOKIE_API` 都不通才考虑 `PAGE_FETCH`
63
+ **Next step:** `api-discovery.md` section 1, network deep read.
68
64
 
69
- ---
65
+ **Important:** Pattern A does not automatically mean `PAGE_FETCH`.
70
66
 
71
- ## Pattern B SSR / inline data
67
+ - First inspect `api_candidates[]` from `webcmd browser analyze`: only `verdict=likely_data` entries are real candidates. `verdict=noise` entries such as analytics, beacons, or personalization do not count as API signals.
68
+ - The booking #1680 counterexample had many JSON XHRs that looked like Pattern A, but they were analytics side-channels; the final strategy was `DOM_STATE` / `UI_SELECTOR`.
69
+ - After replaying a candidate endpoint, choose strategy through `strategy-selection.md`. Consider `PAGE_FETCH` only after `PUBLIC_API` and `COOKIE_API` fail.
72
70
 
73
- **代表**:bilibili 个人主页、小红书、微博、部分 Next.js / Nuxt
71
+ ## Pattern B - SSR / Inline Data
74
72
 
75
- **信号**:
76
- - 第一个请求(`document`)返回的 HTML 里已经含目标数据(`curl <url> | grep <某数字>`)
77
- - `window.__INITIAL_STATE__` / `window.__NEXT_DATA__` / `window.__NUXT__` 存在
78
- - 关 JS 仍能看到首屏数据
73
+ **Examples:** Reddit post pages, YouTube watch pages, many Next.js / Nuxt pages.
79
74
 
80
- **下一步**:`api-discovery.md` §2(state 抽取) + §1(深层数据回到 network)
75
+ **Signals:**
81
76
 
82
- ---
77
+ - The first `document` response already contains target data (`curl <url> | grep <known-value>`).
78
+ - `window.__INITIAL_STATE__`, `window.__NEXT_DATA__`, or `window.__NUXT__` exists.
79
+ - The first screen is still visible with JavaScript disabled.
83
80
 
84
- ## Pattern C JSONP / `<script src>` 驱动
81
+ **Next step:** `api-discovery.md` section 2 for state extraction, plus section 1 when deeper data returns to network.
85
82
 
86
- **代表**:eastmoney、tonghuashun、老一代金融站
83
+ ## Pattern C - JSONP / `<script src>` Driven
87
84
 
88
- **信号**:
89
- - `network` 空或只有 css/font
90
- - 页面上肯定有数据(价格、成交量等)
91
- - `document.querySelectorAll('script[src]')` 里有指向 `push / api / data` 域名的 src
92
- - 响应是 `jQuery123({...})` 这种回调包裹(JSONP)
85
+ **Examples:** older quote pages, legacy directory pages, callback-wrapped data feeds.
93
86
 
94
- **下一步**:`api-discovery.md` §3(bundle / script src 搜索)
87
+ **Signals:**
95
88
 
96
- ---
89
+ - `network` is empty or mostly CSS/fonts.
90
+ - The page clearly displays data such as price, count, or volume.
91
+ - `document.querySelectorAll('script[src]')` includes URLs under `push`, `api`, or `data` style domains.
92
+ - Response is callback-wrapped, such as `callback123({...})`.
97
93
 
98
- ## Pattern D Token / CSRF / Bearer
94
+ **Next step:** `api-discovery.md` section 3, bundle / script src search.
99
95
 
100
- **代表**:Twitter/X、部分企业 SaaS
96
+ ## Pattern D - Token / CSRF Auth
101
97
 
102
- **信号**:
103
- - 已经是 Pattern A,但 `fetch(url, {credentials:'include'})` 返回 401/403
104
- - network 里请求头有 `X-Csrf-Token / Authorization: Bearer / X-Client-Id / X-Workspace-Id` 等自定义字段
105
- - 401 响应体带 `{"code":"AUTH_REQUIRED","csrf":"..."}` 类提示
98
+ **Examples:** Twitter/X and some enterprise SaaS apps.
106
99
 
107
- **下一步**:`api-discovery.md` §4(token 来源排查) + §5(store action / intercept 降级)
100
+ **Signals:**
108
101
 
109
- ---
102
+ - It is otherwise Pattern A, but `fetch(url, { credentials: 'include' })` returns 401/403.
103
+ - Network requests contain custom headers such as `X-Csrf-Token`, `Authorization: Bearer`, `X-Client-Id`, or `X-Workspace-Id`.
104
+ - 401 responses include hints like `{"code":"AUTH_REQUIRED","csrf":"..."}`.
110
105
 
111
- ## Pattern E 流式
106
+ **Next step:** `api-discovery.md` section 4 token-source investigation, then section 5 store-action / intercept fallback if needed.
112
107
 
113
- **代表**:行情 tick、LLM chat
108
+ ## Pattern E - Streaming
114
109
 
115
- **信号**:
116
- - `network` 里有 `101 Switching Protocols`(WebSocket 握手)
117
- - Response headers 含 `Content-Type: text/event-stream`
118
- - 请求一直 pending 不结束
110
+ **Examples:** LLM chat streams, live feeds, real-time dashboards.
119
111
 
120
- **下一步**:先找**同数据的 HTTP 轮询接口**(90% 概率有)。真没有再走 intercept 收 N 条。
112
+ **Signals:**
121
113
 
122
- ---
114
+ - `network` contains `101 Switching Protocols`.
115
+ - Response headers include `Content-Type: text/event-stream`.
116
+ - The request stays pending.
117
+
118
+ **Next step:** first find an HTTP polling endpoint with the same data. Most sites have one. Use intercept only when no polling endpoint exists.
123
119
 
124
- ## 识别失败怎么办
120
+ ## If Classification Fails
125
121
 
126
- 诊断信号互相矛盾(比如 network 非空但目标数据不在里面),按优先级硬走:
122
+ When diagnostic signals conflict, such as non-empty network with no target data, use this priority order:
127
123
 
128
- 1. 先当 A,试 `api-discovery.md` §1
129
- 2. 不行当 B,试 §2
130
- 3. 还不行当 C,试 §3
131
- 4. 401 出现了切 D,试 §4
132
- 5. 所有手段都试过,启动 intercept(§5
124
+ 1. Treat as A and try `api-discovery.md` section 1.
125
+ 2. If that fails, treat as B and try section 2.
126
+ 3. If that fails, treat as C and try section 3.
127
+ 4. If 401/403 appears, switch to D and try section 4.
128
+ 5. After all other paths fail, use intercept from section 5.
133
129
 
134
- 不要纠结分类。分类是帮忙定第一步,没命中就按顺序降级。
130
+ Do not get stuck debating classification. Classification chooses the first move; fallback order handles misses.