@agentrhq/webcmd 0.1.2 → 0.2.1

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 (956) hide show
  1. package/README.md +196 -219
  2. package/cli-manifest.json +16205 -34869
  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/delete.js +14 -6
  94. package/clis/twitter/delete.test.js +74 -1
  95. package/clis/twitter/followers.js +1 -1
  96. package/clis/twitter/list-remove-core.js +2 -2
  97. package/clis/twitter/list-tweets.test.js +3 -3
  98. package/clis/twitter/lists.js +6 -6
  99. package/clis/twitter/lists.test.js +2 -2
  100. package/clis/twitter/reply-dm.js +1 -1
  101. package/clis/twitter/shared.test.js +4 -5
  102. package/clis/twitter/timeline.js +3 -1
  103. package/clis/twitter/timeline.test.js +4 -0
  104. package/clis/twitter/trending.js +1 -1
  105. package/clis/twitter/utils.js +1 -1
  106. package/clis/web/read.js +1 -1
  107. package/clis/web/read.test.js +2 -2
  108. package/clis/yahoo-finance/quote.js +1 -1
  109. package/clis/youtube/history.js +4 -4
  110. package/clis/youtube/transcript-group.js +1 -1
  111. package/clis/youtube/transcript-group.test.js +5 -5
  112. package/clis/youtube/transcript.js +5 -5
  113. package/clis/youtube/video.js +4 -4
  114. package/clis/youtube/video.test.js +6 -6
  115. package/dist/src/browser/analyze.test.js +13 -13
  116. package/dist/src/browser/bridge-readiness.d.ts +1 -1
  117. package/dist/src/browser/bridge-readiness.test.js +1 -1
  118. package/dist/src/browser/bridge.d.ts +1 -0
  119. package/dist/src/browser/bridge.js +6 -4
  120. package/dist/src/browser/cdp.d.ts +1 -0
  121. package/dist/src/browser/daemon-client.d.ts +2 -0
  122. package/dist/src/browser/daemon-client.js +108 -51
  123. package/dist/src/browser/daemon-client.test.js +135 -47
  124. package/dist/src/browser/daemon-transport.js +3 -19
  125. package/dist/src/browser/errors.js +11 -0
  126. package/dist/src/browser/page.d.ts +2 -1
  127. package/dist/src/browser/page.js +5 -1
  128. package/dist/src/browser/profile.d.ts +9 -0
  129. package/dist/src/browser/profile.js +18 -7
  130. package/dist/src/browser/profile.test.js +44 -0
  131. package/dist/src/browser/protocol.d.ts +3 -0
  132. package/dist/src/browser/runtime/local-cloak/actions.js +24 -10
  133. package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +1 -0
  134. package/dist/src/browser/runtime/local-cloak/session-manager.js +3 -0
  135. package/dist/src/browser/runtime/local-cloak/session-manager.test.js +87 -0
  136. package/dist/src/browser.test.js +2 -2
  137. package/dist/src/cli-argv-preprocess.d.ts +2 -2
  138. package/dist/src/cli-argv-preprocess.js +2 -2
  139. package/dist/src/cli-argv-preprocess.test.js +35 -35
  140. package/dist/src/cli.js +24 -19
  141. package/dist/src/cli.test.js +59 -59
  142. package/dist/src/commanderAdapter.test.js +19 -19
  143. package/dist/src/commands/daemon.test.js +13 -13
  144. package/dist/src/constants.d.ts +2 -3
  145. package/dist/src/constants.js +3 -10
  146. package/dist/src/convention-audit.js +1 -1
  147. package/dist/src/daemon/server.js +28 -23
  148. package/dist/src/daemon/server.test.js +52 -0
  149. package/dist/src/daemon-utils.d.ts +1 -0
  150. package/dist/src/daemon-utils.js +9 -0
  151. package/dist/src/daemon.js +1 -5
  152. package/dist/src/daemon.test.js +10 -1
  153. package/dist/src/doctor.js +19 -1
  154. package/dist/src/doctor.test.js +38 -4
  155. package/dist/src/download/article-download.d.ts +3 -3
  156. package/dist/src/download/article-download.js +7 -7
  157. package/dist/src/download/article-download.test.js +6 -6
  158. package/dist/src/download/index.js +1 -1
  159. package/dist/src/download/index.test.js +1 -2
  160. package/dist/src/download/media-download.d.ts +1 -1
  161. package/dist/src/download/media-download.js +1 -1
  162. package/dist/src/electron-apps.js +0 -8
  163. package/dist/src/electron-apps.test.js +2 -11
  164. package/dist/src/errors.test.js +9 -9
  165. package/dist/src/execution.js +7 -3
  166. package/dist/src/execution.test.js +12 -0
  167. package/dist/src/external-clis.yaml +0 -37
  168. package/dist/src/external.d.ts +1 -1
  169. package/dist/src/external.js +19 -1
  170. package/dist/src/external.test.js +39 -18
  171. package/dist/src/generate-release-notes-cli.test.js +140 -0
  172. package/dist/src/help.d.ts +3 -3
  173. package/dist/src/help.test.js +8 -8
  174. package/dist/src/main.js +1 -6
  175. package/dist/src/manifest-types.d.ts +1 -1
  176. package/dist/src/node-network.test.js +5 -5
  177. package/dist/src/output.js +1 -1
  178. package/dist/src/pipeline/steps/download.test.js +3 -3
  179. package/dist/src/registry.test.js +2 -2
  180. package/dist/src/release-notes.d.ts +38 -0
  181. package/dist/src/release-notes.js +99 -0
  182. package/dist/src/release-notes.test.d.ts +1 -0
  183. package/dist/src/release-notes.test.js +61 -0
  184. package/dist/src/runtime-identity.test.js +0 -8
  185. package/dist/src/runtime.d.ts +2 -0
  186. package/dist/src/runtime.js +1 -0
  187. package/dist/src/serialization.test.js +7 -7
  188. package/dist/src/snapshotFormatter.js +3 -5
  189. package/dist/src/snapshotFormatter.test.d.ts +1 -1
  190. package/dist/src/snapshotFormatter.test.js +50 -50
  191. package/dist/src/tui.js +1 -1
  192. package/package.json +5 -2
  193. package/scripts/generate-release-notes.ts +234 -0
  194. package/scripts/postinstall.js +1 -1
  195. package/scripts/silent-column-drop-baseline.json +0 -498
  196. package/scripts/typed-error-lint-baseline.json +0 -464
  197. package/skills/webcmd-adapter-author/SKILL.md +216 -213
  198. package/skills/webcmd-adapter-author/references/adapter-template.md +206 -399
  199. package/skills/webcmd-adapter-author/references/api-discovery.md +111 -220
  200. package/skills/webcmd-adapter-author/references/coverage-matrix.md +34 -68
  201. package/skills/webcmd-adapter-author/references/field-conventions.md +84 -167
  202. package/skills/webcmd-adapter-author/references/field-decode-playbook.md +60 -146
  203. package/skills/webcmd-adapter-author/references/jsdom-fixture-pattern.md +111 -178
  204. package/skills/webcmd-adapter-author/references/output-design.md +47 -125
  205. package/skills/webcmd-adapter-author/references/site-memory.md +116 -166
  206. package/skills/webcmd-adapter-author/references/site-recon.md +74 -78
  207. package/skills/webcmd-adapter-author/references/strategy-selection.md +80 -124
  208. package/skills/webcmd-adapter-author/references/success-rate-pitfalls.md +80 -105
  209. package/skills/webcmd-adapter-author/references/typed-errors.md +87 -178
  210. package/skills/webcmd-autofix/SKILL.md +136 -143
  211. package/skills/webcmd-sitemap-author/SKILL.md +58 -67
  212. package/skills/webcmd-sitemap-author/references/sitemap-schema.md +354 -494
  213. package/skills/webcmd-usage/SKILL.md +106 -97
  214. package/clis/12306/auth.js +0 -59
  215. package/clis/12306/me.js +0 -73
  216. package/clis/12306/orders.js +0 -96
  217. package/clis/12306/passengers.js +0 -90
  218. package/clis/12306/price.js +0 -166
  219. package/clis/12306/stations.js +0 -66
  220. package/clis/12306/train.js +0 -91
  221. package/clis/12306/trains.js +0 -166
  222. package/clis/12306/utils.js +0 -272
  223. package/clis/12306/utils.test.js +0 -424
  224. package/clis/1688/assets.js +0 -205
  225. package/clis/1688/assets.test.js +0 -39
  226. package/clis/1688/auth.js +0 -46
  227. package/clis/1688/download.js +0 -77
  228. package/clis/1688/download.test.js +0 -31
  229. package/clis/1688/item.js +0 -188
  230. package/clis/1688/item.test.js +0 -67
  231. package/clis/1688/search.js +0 -310
  232. package/clis/1688/search.test.js +0 -75
  233. package/clis/1688/shared.js +0 -557
  234. package/clis/1688/shared.test.js +0 -57
  235. package/clis/1688/store.js +0 -227
  236. package/clis/1688/store.test.js +0 -62
  237. package/clis/1point3acres/auth.js +0 -52
  238. package/clis/1point3acres/digest.js +0 -35
  239. package/clis/1point3acres/forum.js +0 -51
  240. package/clis/1point3acres/forums.js +0 -44
  241. package/clis/1point3acres/hot.js +0 -35
  242. package/clis/1point3acres/latest.js +0 -35
  243. package/clis/1point3acres/notifications.js +0 -64
  244. package/clis/1point3acres/search.js +0 -71
  245. package/clis/1point3acres/thread.js +0 -117
  246. package/clis/1point3acres/user.js +0 -77
  247. package/clis/1point3acres/utils.js +0 -247
  248. package/clis/36kr/article.js +0 -66
  249. package/clis/36kr/article.test.js +0 -46
  250. package/clis/36kr/hot.js +0 -87
  251. package/clis/36kr/hot.test.js +0 -15
  252. package/clis/36kr/news.js +0 -52
  253. package/clis/36kr/news.test.js +0 -85
  254. package/clis/36kr/search.js +0 -79
  255. package/clis/51job/company.js +0 -126
  256. package/clis/51job/detail.js +0 -109
  257. package/clis/51job/hot.js +0 -56
  258. package/clis/51job/search.js +0 -80
  259. package/clis/51job/utils.js +0 -302
  260. package/clis/51job/utils.test.js +0 -69
  261. package/clis/aibase/news.js +0 -110
  262. package/clis/aibase/news.test.js +0 -59
  263. package/clis/autohome/__fixtures__/catalog.html +0 -11
  264. package/clis/autohome/__fixtures__/koubei.json +0 -116
  265. package/clis/autohome/autohome.test.js +0 -115
  266. package/clis/autohome/brand.js +0 -108
  267. package/clis/autohome/score.js +0 -103
  268. package/clis/autohome/utils.js +0 -157
  269. package/clis/baidu-scholar/search.js +0 -87
  270. package/clis/baidu-scholar/search.test.js +0 -23
  271. package/clis/bilibili/auth.js +0 -36
  272. package/clis/bilibili/comment.js +0 -107
  273. package/clis/bilibili/comment.test.js +0 -153
  274. package/clis/bilibili/comments.js +0 -136
  275. package/clis/bilibili/comments.test.js +0 -142
  276. package/clis/bilibili/download.js +0 -178
  277. package/clis/bilibili/download.test.js +0 -173
  278. package/clis/bilibili/dynamic.js +0 -34
  279. package/clis/bilibili/dynamic.test.js +0 -68
  280. package/clis/bilibili/favorite.js +0 -47
  281. package/clis/bilibili/feed.js +0 -220
  282. package/clis/bilibili/follow.js +0 -140
  283. package/clis/bilibili/follow.test.js +0 -203
  284. package/clis/bilibili/following.js +0 -44
  285. package/clis/bilibili/history.js +0 -45
  286. package/clis/bilibili/hot.js +0 -40
  287. package/clis/bilibili/hot.test.js +0 -17
  288. package/clis/bilibili/me.js +0 -13
  289. package/clis/bilibili/ranking.js +0 -25
  290. package/clis/bilibili/search.js +0 -24
  291. package/clis/bilibili/subtitle.js +0 -141
  292. package/clis/bilibili/subtitle.test.js +0 -240
  293. package/clis/bilibili/summary.js +0 -167
  294. package/clis/bilibili/summary.test.js +0 -210
  295. package/clis/bilibili/unfollow.js +0 -121
  296. package/clis/bilibili/user-videos.js +0 -39
  297. package/clis/bilibili/utils.js +0 -273
  298. package/clis/bilibili/utils.test.js +0 -97
  299. package/clis/bilibili/video.js +0 -155
  300. package/clis/bilibili/video.test.js +0 -308
  301. package/clis/boss/auth.js +0 -47
  302. package/clis/boss/batchgreet.js +0 -61
  303. package/clis/boss/chatlist.js +0 -116
  304. package/clis/boss/chatlist.test.js +0 -211
  305. package/clis/boss/chatmsg.js +0 -117
  306. package/clis/boss/chatmsg.test.js +0 -230
  307. package/clis/boss/detail.js +0 -63
  308. package/clis/boss/exchange.js +0 -46
  309. package/clis/boss/greet.js +0 -49
  310. package/clis/boss/invite.js +0 -64
  311. package/clis/boss/joblist.js +0 -31
  312. package/clis/boss/mark.js +0 -70
  313. package/clis/boss/recommend.js +0 -45
  314. package/clis/boss/resume.js +0 -150
  315. package/clis/boss/search.js +0 -197
  316. package/clis/boss/search.test.js +0 -78
  317. package/clis/boss/send.js +0 -44
  318. package/clis/boss/stats.js +0 -66
  319. package/clis/boss/utils.js +0 -468
  320. package/clis/boss/utils.test.js +0 -34
  321. package/clis/chaoxing/assignments.js +0 -76
  322. package/clis/chaoxing/auth.js +0 -54
  323. package/clis/chaoxing/exams.js +0 -75
  324. package/clis/chaoxing/utils.js +0 -223
  325. package/clis/chaoxing/utils.test.js +0 -45
  326. package/clis/cnki/search.js +0 -61
  327. package/clis/cnki/search.test.js +0 -18
  328. package/clis/ctrip/auth.js +0 -50
  329. package/clis/ctrip/ctrip.test.js +0 -719
  330. package/clis/ctrip/flight.js +0 -136
  331. package/clis/ctrip/hotel-search.js +0 -132
  332. package/clis/ctrip/hotel-suggest.js +0 -45
  333. package/clis/ctrip/search.js +0 -41
  334. package/clis/ctrip/utils.js +0 -473
  335. package/clis/deepseek/ask.js +0 -158
  336. package/clis/deepseek/ask.test.js +0 -399
  337. package/clis/deepseek/auth.js +0 -54
  338. package/clis/deepseek/detail.js +0 -46
  339. package/clis/deepseek/detail.test.js +0 -81
  340. package/clis/deepseek/history.js +0 -27
  341. package/clis/deepseek/new.js +0 -33
  342. package/clis/deepseek/read.js +0 -25
  343. package/clis/deepseek/send.js +0 -140
  344. package/clis/deepseek/send.test.js +0 -107
  345. package/clis/deepseek/status.js +0 -26
  346. package/clis/deepseek/utils.js +0 -487
  347. package/clis/deepseek/utils.test.js +0 -370
  348. package/clis/dianping/__fixtures__/search.html +0 -168
  349. package/clis/dianping/__fixtures__/shop.html +0 -6
  350. package/clis/dianping/auth.js +0 -49
  351. package/clis/dianping/cityResolver.js +0 -185
  352. package/clis/dianping/dianping.test.js +0 -578
  353. package/clis/dianping/search.js +0 -157
  354. package/clis/dianping/shop.js +0 -173
  355. package/clis/dianping/utils.js +0 -157
  356. package/clis/dongchedi/__fixtures__/search.json +0 -60
  357. package/clis/dongchedi/__fixtures__/series-detail.json +0 -911
  358. package/clis/dongchedi/__fixtures__/series-score.json +0 -1396
  359. package/clis/dongchedi/dongchedi.test.js +0 -191
  360. package/clis/dongchedi/koubei.js +0 -85
  361. package/clis/dongchedi/models.js +0 -91
  362. package/clis/dongchedi/score.js +0 -83
  363. package/clis/dongchedi/search.js +0 -83
  364. package/clis/dongchedi/series.js +0 -87
  365. package/clis/dongchedi/specs.js +0 -115
  366. package/clis/dongchedi/utils.js +0 -180
  367. package/clis/douban/auth.js +0 -50
  368. package/clis/douban/book-hot.js +0 -15
  369. package/clis/douban/download.js +0 -68
  370. package/clis/douban/download.test.js +0 -170
  371. package/clis/douban/marks.js +0 -116
  372. package/clis/douban/movie-hot.js +0 -15
  373. package/clis/douban/movie-hot.test.js +0 -14
  374. package/clis/douban/photos.js +0 -35
  375. package/clis/douban/reviews.js +0 -107
  376. package/clis/douban/search.js +0 -18
  377. package/clis/douban/search.test.js +0 -11
  378. package/clis/douban/subject.js +0 -46
  379. package/clis/douban/subject.test.js +0 -11
  380. package/clis/douban/top250.js +0 -68
  381. package/clis/douban/utils.js +0 -657
  382. package/clis/douban/utils.test.js +0 -488
  383. package/clis/doubao/ask.js +0 -40
  384. package/clis/doubao/auth.js +0 -66
  385. package/clis/doubao/detail.js +0 -35
  386. package/clis/doubao/detail.test.js +0 -42
  387. package/clis/doubao/history.js +0 -30
  388. package/clis/doubao/history.test.js +0 -37
  389. package/clis/doubao/meeting-summary.js +0 -41
  390. package/clis/doubao/meeting-transcript.js +0 -38
  391. package/clis/doubao/new.js +0 -22
  392. package/clis/doubao/read.js +0 -21
  393. package/clis/doubao/send.js +0 -24
  394. package/clis/doubao/status.js +0 -26
  395. package/clis/doubao/utils.js +0 -1156
  396. package/clis/doubao/utils.test.js +0 -396
  397. package/clis/doubao-app/ask.js +0 -54
  398. package/clis/doubao-app/dump.js +0 -25
  399. package/clis/doubao-app/new.js +0 -21
  400. package/clis/doubao-app/read.js +0 -19
  401. package/clis/doubao-app/screenshot.js +0 -19
  402. package/clis/doubao-app/send.js +0 -28
  403. package/clis/doubao-app/status.js +0 -17
  404. package/clis/doubao-app/utils.js +0 -110
  405. package/clis/douyin/_shared/browser-fetch.js +0 -66
  406. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  407. package/clis/douyin/_shared/creation-id.js +0 -5
  408. package/clis/douyin/_shared/creation-id.test.js +0 -22
  409. package/clis/douyin/_shared/evaluate-result.js +0 -16
  410. package/clis/douyin/_shared/imagex-upload.js +0 -53
  411. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  412. package/clis/douyin/_shared/public-api.js +0 -29
  413. package/clis/douyin/_shared/sts2.js +0 -21
  414. package/clis/douyin/_shared/sts2.test.js +0 -27
  415. package/clis/douyin/_shared/text-extra.js +0 -15
  416. package/clis/douyin/_shared/text-extra.test.js +0 -37
  417. package/clis/douyin/_shared/timing.js +0 -22
  418. package/clis/douyin/_shared/timing.test.js +0 -28
  419. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  420. package/clis/douyin/_shared/tos-upload.js +0 -331
  421. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  422. package/clis/douyin/_shared/transcode.js +0 -45
  423. package/clis/douyin/_shared/transcode.test.js +0 -91
  424. package/clis/douyin/_shared/vod-upload.js +0 -212
  425. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  426. package/clis/douyin/activities.js +0 -23
  427. package/clis/douyin/activities.test.js +0 -55
  428. package/clis/douyin/auth.js +0 -39
  429. package/clis/douyin/collections.js +0 -23
  430. package/clis/douyin/collections.test.js +0 -45
  431. package/clis/douyin/delete.js +0 -152
  432. package/clis/douyin/delete.test.js +0 -100
  433. package/clis/douyin/draft.js +0 -355
  434. package/clis/douyin/draft.test.js +0 -335
  435. package/clis/douyin/drafts.js +0 -24
  436. package/clis/douyin/drafts.test.js +0 -11
  437. package/clis/douyin/hashtag.js +0 -114
  438. package/clis/douyin/hashtag.test.js +0 -171
  439. package/clis/douyin/location.js +0 -25
  440. package/clis/douyin/location.test.js +0 -23
  441. package/clis/douyin/profile.js +0 -29
  442. package/clis/douyin/profile.test.js +0 -46
  443. package/clis/douyin/publish-upload-id.test.js +0 -206
  444. package/clis/douyin/publish.js +0 -341
  445. package/clis/douyin/publish.test.js +0 -38
  446. package/clis/douyin/search.js +0 -308
  447. package/clis/douyin/search.test.js +0 -307
  448. package/clis/douyin/stats.js +0 -28
  449. package/clis/douyin/stats.test.js +0 -22
  450. package/clis/douyin/update.js +0 -32
  451. package/clis/douyin/update.test.js +0 -11
  452. package/clis/douyin/user-videos.js +0 -82
  453. package/clis/douyin/user-videos.test.js +0 -151
  454. package/clis/douyin/videos.js +0 -52
  455. package/clis/douyin/videos.test.js +0 -54
  456. package/clis/eastmoney/_secid.js +0 -78
  457. package/clis/eastmoney/announcement.js +0 -53
  458. package/clis/eastmoney/convertible.js +0 -74
  459. package/clis/eastmoney/etf.js +0 -66
  460. package/clis/eastmoney/holders.js +0 -79
  461. package/clis/eastmoney/hot-rank.js +0 -51
  462. package/clis/eastmoney/hot-rank.test.js +0 -59
  463. package/clis/eastmoney/index-board.js +0 -97
  464. package/clis/eastmoney/kline.js +0 -88
  465. package/clis/eastmoney/kuaixun.js +0 -55
  466. package/clis/eastmoney/longhu.js +0 -68
  467. package/clis/eastmoney/money-flow.js +0 -79
  468. package/clis/eastmoney/northbound.js +0 -58
  469. package/clis/eastmoney/quote.js +0 -108
  470. package/clis/eastmoney/rank.js +0 -95
  471. package/clis/eastmoney/sectors.js +0 -77
  472. package/clis/flomo/auth.js +0 -55
  473. package/clis/flomo/memos.js +0 -228
  474. package/clis/flomo/memos.test.js +0 -144
  475. package/clis/gitee/auth.js +0 -41
  476. package/clis/gitee/index.js +0 -3
  477. package/clis/gitee/search.js +0 -137
  478. package/clis/gitee/search.test.js +0 -65
  479. package/clis/gitee/trending.js +0 -568
  480. package/clis/gitee/user.js +0 -200
  481. package/clis/gitee/user.test.js +0 -63
  482. package/clis/gov-law/commands.test.js +0 -39
  483. package/clis/gov-law/recent.js +0 -22
  484. package/clis/gov-law/search.js +0 -41
  485. package/clis/gov-law/shared.js +0 -51
  486. package/clis/gov-policy/__fixtures__/recent.html +0 -16
  487. package/clis/gov-policy/__fixtures__/search.html +0 -41
  488. package/clis/gov-policy/gov-policy.test.js +0 -224
  489. package/clis/gov-policy/recent.js +0 -90
  490. package/clis/gov-policy/search.js +0 -91
  491. package/clis/gov-policy/utils.js +0 -54
  492. package/clis/guazi/__fixtures__/detail.html +0 -7
  493. package/clis/guazi/__fixtures__/list.html +0 -5
  494. package/clis/guazi/browse.js +0 -95
  495. package/clis/guazi/car.js +0 -110
  496. package/clis/guazi/guazi.test.js +0 -126
  497. package/clis/guazi/utils.js +0 -133
  498. package/clis/huodongxing/events.js +0 -322
  499. package/clis/huodongxing/events.test.js +0 -296
  500. package/clis/hupu/__fixtures__/hot-home.html +0 -64
  501. package/clis/hupu/auth.js +0 -47
  502. package/clis/hupu/detail.js +0 -72
  503. package/clis/hupu/hot.js +0 -163
  504. package/clis/hupu/hot.test.js +0 -224
  505. package/clis/hupu/like.js +0 -76
  506. package/clis/hupu/mentions.js +0 -160
  507. package/clis/hupu/reply.js +0 -72
  508. package/clis/hupu/search.js +0 -60
  509. package/clis/hupu/unlike.js +0 -76
  510. package/clis/hupu/utils.js +0 -319
  511. package/clis/jd/add-cart.js +0 -72
  512. package/clis/jd/auth.js +0 -46
  513. package/clis/jd/cart.js +0 -80
  514. package/clis/jd/commands.test.js +0 -41
  515. package/clis/jd/detail.js +0 -63
  516. package/clis/jd/item.js +0 -730
  517. package/clis/jd/item.test.js +0 -354
  518. package/clis/jd/item.test.ts +0 -517
  519. package/clis/jd/reviews.js +0 -55
  520. package/clis/jd/search.js +0 -66
  521. package/clis/jianyu/auth.js +0 -62
  522. package/clis/jianyu/detail.js +0 -21
  523. package/clis/jianyu/search.js +0 -634
  524. package/clis/jianyu/search.test.js +0 -153
  525. package/clis/jianyu/shared/china-bid-search.js +0 -165
  526. package/clis/jianyu/shared/procurement-contract.js +0 -324
  527. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  528. package/clis/jianyu/shared/procurement-detail.js +0 -107
  529. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  530. package/clis/jike/auth.js +0 -48
  531. package/clis/jike/comment.js +0 -107
  532. package/clis/jike/create.js +0 -106
  533. package/clis/jike/feed.js +0 -68
  534. package/clis/jike/like.js +0 -61
  535. package/clis/jike/notifications.js +0 -169
  536. package/clis/jike/post.js +0 -72
  537. package/clis/jike/read.test.js +0 -86
  538. package/clis/jike/repost.js +0 -103
  539. package/clis/jike/search.js +0 -68
  540. package/clis/jike/topic.js +0 -65
  541. package/clis/jike/user.js +0 -65
  542. package/clis/jike/utils.js +0 -25
  543. package/clis/jimeng/auth.js +0 -46
  544. package/clis/jimeng/generate.js +0 -84
  545. package/clis/jimeng/history.js +0 -48
  546. package/clis/jimeng/new.js +0 -44
  547. package/clis/jimeng/workspaces.js +0 -42
  548. package/clis/juejin/hot.js +0 -37
  549. package/clis/juejin/juejin.test.js +0 -241
  550. package/clis/juejin/recommend.js +0 -61
  551. package/clis/juejin/utils.js +0 -199
  552. package/clis/ke/auth.js +0 -46
  553. package/clis/ke/chengjiao.js +0 -78
  554. package/clis/ke/ershoufang.js +0 -101
  555. package/clis/ke/utils.js +0 -104
  556. package/clis/ke/xiaoqu.js +0 -78
  557. package/clis/ke/zufang.js +0 -95
  558. package/clis/kimi/_utils.js +0 -110
  559. package/clis/kimi/audit-extras.js +0 -268
  560. package/clis/kimi/auth.js +0 -57
  561. package/clis/kimi/chat.js +0 -470
  562. package/clis/kimi/kimi.test.js +0 -187
  563. package/clis/kimi/storage.js +0 -169
  564. package/clis/kimi/ui.js +0 -314
  565. package/clis/kimi/usage.js +0 -144
  566. package/clis/linux-do/auth.js +0 -55
  567. package/clis/linux-do/categories.js +0 -50
  568. package/clis/linux-do/feed.js +0 -395
  569. package/clis/linux-do/feed.test.js +0 -153
  570. package/clis/linux-do/search.js +0 -29
  571. package/clis/linux-do/tags.js +0 -28
  572. package/clis/linux-do/topic-content.js +0 -155
  573. package/clis/linux-do/topic-content.test.js +0 -59
  574. package/clis/linux-do/topic.js +0 -53
  575. package/clis/linux-do/user-posts.js +0 -57
  576. package/clis/linux-do/user-topics.js +0 -37
  577. package/clis/maimai/auth.js +0 -47
  578. package/clis/maimai/search-talents.js +0 -192
  579. package/clis/maimai/search-talents.test.js +0 -29
  580. package/clis/mubu/doc.js +0 -41
  581. package/clis/mubu/docs.js +0 -44
  582. package/clis/mubu/notes.js +0 -245
  583. package/clis/mubu/recent.js +0 -28
  584. package/clis/mubu/search.js +0 -63
  585. package/clis/mubu/utils.js +0 -304
  586. package/clis/nowcoder/auth.js +0 -65
  587. package/clis/nowcoder/companies.js +0 -24
  588. package/clis/nowcoder/creators.js +0 -28
  589. package/clis/nowcoder/detail.js +0 -62
  590. package/clis/nowcoder/experience.js +0 -37
  591. package/clis/nowcoder/hot.js +0 -25
  592. package/clis/nowcoder/jobs.js +0 -22
  593. package/clis/nowcoder/notifications.js +0 -30
  594. package/clis/nowcoder/papers.js +0 -41
  595. package/clis/nowcoder/practice.js +0 -38
  596. package/clis/nowcoder/recommend.js +0 -31
  597. package/clis/nowcoder/referral.js +0 -40
  598. package/clis/nowcoder/salary.js +0 -41
  599. package/clis/nowcoder/search.js +0 -50
  600. package/clis/nowcoder/suggest.js +0 -34
  601. package/clis/nowcoder/topics.js +0 -28
  602. package/clis/nowcoder/trending.js +0 -26
  603. package/clis/ones/common.js +0 -144
  604. package/clis/ones/enrich-tasks.js +0 -37
  605. package/clis/ones/login.js +0 -81
  606. package/clis/ones/logout.js +0 -18
  607. package/clis/ones/me.js +0 -31
  608. package/clis/ones/my-tasks.js +0 -121
  609. package/clis/ones/resolve-labels.js +0 -64
  610. package/clis/ones/task-helpers.js +0 -212
  611. package/clis/ones/task-helpers.test.js +0 -12
  612. package/clis/ones/task.js +0 -67
  613. package/clis/ones/tasks.js +0 -80
  614. package/clis/ones/token-info.js +0 -43
  615. package/clis/ones/worklog.js +0 -268
  616. package/clis/ones/worklog.test.js +0 -20
  617. package/clis/powerchina/auth.js +0 -52
  618. package/clis/powerchina/search.js +0 -251
  619. package/clis/powerchina/search.test.js +0 -93
  620. package/clis/quark/auth.js +0 -47
  621. package/clis/quark/ls.js +0 -64
  622. package/clis/quark/mkdir.js +0 -37
  623. package/clis/quark/mv.js +0 -54
  624. package/clis/quark/rename.js +0 -27
  625. package/clis/quark/rm.js +0 -25
  626. package/clis/quark/save.js +0 -81
  627. package/clis/quark/share-tree.js +0 -46
  628. package/clis/quark/utils.js +0 -146
  629. package/clis/quark/utils.test.js +0 -58
  630. package/clis/qwen/ask.js +0 -104
  631. package/clis/qwen/ask.test.js +0 -36
  632. package/clis/qwen/auth.js +0 -56
  633. package/clis/qwen/detail.js +0 -62
  634. package/clis/qwen/history.js +0 -61
  635. package/clis/qwen/image.js +0 -179
  636. package/clis/qwen/new.js +0 -23
  637. package/clis/qwen/read.js +0 -41
  638. package/clis/qwen/send.js +0 -55
  639. package/clis/qwen/status.js +0 -37
  640. package/clis/qwen/utils.js +0 -461
  641. package/clis/qwen/utils.test.js +0 -128
  642. package/clis/rednote/auth.js +0 -52
  643. package/clis/rednote/comments.js +0 -85
  644. package/clis/rednote/download.js +0 -59
  645. package/clis/rednote/feed.js +0 -27
  646. package/clis/rednote/navigation.test.js +0 -26
  647. package/clis/rednote/note.js +0 -68
  648. package/clis/rednote/notifications.js +0 -139
  649. package/clis/rednote/rednote.test.js +0 -240
  650. package/clis/rednote/search.js +0 -107
  651. package/clis/rednote/user.js +0 -55
  652. package/clis/sinablog/article.js +0 -15
  653. package/clis/sinablog/hot.js +0 -15
  654. package/clis/sinablog/search.js +0 -52
  655. package/clis/sinablog/user.js +0 -16
  656. package/clis/sinablog/utils.js +0 -186
  657. package/clis/sinafinance/news.js +0 -62
  658. package/clis/sinafinance/rolling-news.js +0 -41
  659. package/clis/sinafinance/stock-rank.js +0 -66
  660. package/clis/sinafinance/stock.js +0 -121
  661. package/clis/sinafinance/stock.test.js +0 -59
  662. package/clis/smzdm/search.js +0 -149
  663. package/clis/smzdm/search.test.js +0 -114
  664. package/clis/taobao/add-cart.js +0 -150
  665. package/clis/taobao/auth.js +0 -58
  666. package/clis/taobao/cart.js +0 -96
  667. package/clis/taobao/commands.test.js +0 -41
  668. package/clis/taobao/detail.js +0 -71
  669. package/clis/taobao/reviews.js +0 -77
  670. package/clis/taobao/search.js +0 -97
  671. package/clis/tdx/hot-rank.js +0 -48
  672. package/clis/tdx/hot-rank.test.js +0 -59
  673. package/clis/ths/hot-rank.js +0 -50
  674. package/clis/ths/hot-rank.test.js +0 -64
  675. package/clis/tieba/commands.test.js +0 -79
  676. package/clis/tieba/hot.js +0 -48
  677. package/clis/tieba/posts.js +0 -86
  678. package/clis/tieba/read.js +0 -141
  679. package/clis/tieba/search.js +0 -109
  680. package/clis/tieba/utils.js +0 -240
  681. package/clis/tieba/utils.test.js +0 -290
  682. package/clis/toutiao/articles.js +0 -55
  683. package/clis/toutiao/auth.js +0 -70
  684. package/clis/toutiao/hot.js +0 -63
  685. package/clis/toutiao/toutiao.test.js +0 -378
  686. package/clis/toutiao/utils.js +0 -161
  687. package/clis/trae-cn/activity.js +0 -22
  688. package/clis/trae-cn/approve.js +0 -52
  689. package/clis/trae-cn/ask.js +0 -99
  690. package/clis/trae-cn/dump.js +0 -5
  691. package/clis/trae-cn/export.js +0 -40
  692. package/clis/trae-cn/model.js +0 -22
  693. package/clis/trae-cn/new.js +0 -63
  694. package/clis/trae-cn/read.js +0 -23
  695. package/clis/trae-cn/screenshot.js +0 -5
  696. package/clis/trae-cn/select-model.js +0 -25
  697. package/clis/trae-cn/send.js +0 -23
  698. package/clis/trae-cn/setup.js +0 -75
  699. package/clis/trae-cn/status.js +0 -27
  700. package/clis/trae-cn/targets.js +0 -96
  701. package/clis/trae-cn/trae-cn.test.js +0 -412
  702. package/clis/trae-cn/utils.js +0 -750
  703. package/clis/trae-cn/watch.js +0 -119
  704. package/clis/uisdc/news.js +0 -105
  705. package/clis/uisdc/news.test.js +0 -66
  706. package/clis/v2ex/auth.js +0 -44
  707. package/clis/v2ex/daily.js +0 -99
  708. package/clis/v2ex/hot.js +0 -26
  709. package/clis/v2ex/latest.js +0 -26
  710. package/clis/v2ex/me.js +0 -100
  711. package/clis/v2ex/member.js +0 -28
  712. package/clis/v2ex/node.js +0 -39
  713. package/clis/v2ex/nodes.js +0 -26
  714. package/clis/v2ex/notifications.js +0 -72
  715. package/clis/v2ex/replies.js +0 -27
  716. package/clis/v2ex/topic.js +0 -31
  717. package/clis/v2ex/user.js +0 -34
  718. package/clis/wanfang/search.js +0 -66
  719. package/clis/wanfang/search.test.js +0 -23
  720. package/clis/wechat-channels/auth.js +0 -62
  721. package/clis/wechat-channels/publish.js +0 -732
  722. package/clis/wechat-channels/publish.test.js +0 -144
  723. package/clis/weibo/auth.js +0 -53
  724. package/clis/weibo/comments.js +0 -53
  725. package/clis/weibo/delete.js +0 -172
  726. package/clis/weibo/delete.test.js +0 -94
  727. package/clis/weibo/envelope.test.js +0 -85
  728. package/clis/weibo/favorites.js +0 -170
  729. package/clis/weibo/favorites.test.js +0 -114
  730. package/clis/weibo/feed.js +0 -69
  731. package/clis/weibo/hot.js +0 -39
  732. package/clis/weibo/me.js +0 -75
  733. package/clis/weibo/post.js +0 -75
  734. package/clis/weibo/publish.js +0 -306
  735. package/clis/weibo/publish.test.js +0 -192
  736. package/clis/weibo/search.js +0 -80
  737. package/clis/weibo/user-posts.js +0 -234
  738. package/clis/weibo/user-posts.test.js +0 -92
  739. package/clis/weibo/user.js +0 -63
  740. package/clis/weibo/utils.js +0 -59
  741. package/clis/weibo/utils.test.js +0 -36
  742. package/clis/weixin/create-draft.js +0 -226
  743. package/clis/weixin/download.js +0 -371
  744. package/clis/weixin/download.test.js +0 -106
  745. package/clis/weixin/drafts.js +0 -66
  746. package/clis/weixin/drafts.test.js +0 -69
  747. package/clis/weixin/search.js +0 -157
  748. package/clis/weixin/search.test.js +0 -227
  749. package/clis/weread/ai-outline.js +0 -171
  750. package/clis/weread/ai-outline.test.js +0 -83
  751. package/clis/weread/auth.js +0 -59
  752. package/clis/weread/book-search.js +0 -438
  753. package/clis/weread/book-search.test.js +0 -242
  754. package/clis/weread/book.js +0 -233
  755. package/clis/weread/commands.test.js +0 -398
  756. package/clis/weread/highlights.js +0 -24
  757. package/clis/weread/notebooks.js +0 -22
  758. package/clis/weread/notes.js +0 -30
  759. package/clis/weread/private-api-regression.test.js +0 -369
  760. package/clis/weread/ranking.js +0 -29
  761. package/clis/weread/search-regression.test.js +0 -494
  762. package/clis/weread/search.js +0 -186
  763. package/clis/weread/shelf.js +0 -66
  764. package/clis/weread/utils.js +0 -321
  765. package/clis/weread/utils.test.js +0 -128
  766. package/clis/weread-official/book.js +0 -135
  767. package/clis/weread-official/commands.test.js +0 -385
  768. package/clis/weread-official/discover.js +0 -107
  769. package/clis/weread-official/list-apis.js +0 -95
  770. package/clis/weread-official/notes.js +0 -171
  771. package/clis/weread-official/readdata.js +0 -158
  772. package/clis/weread-official/review.js +0 -93
  773. package/clis/weread-official/search.js +0 -106
  774. package/clis/weread-official/shelf.js +0 -97
  775. package/clis/weread-official/utils.js +0 -293
  776. package/clis/weread-official/utils.test.js +0 -242
  777. package/clis/xianyu/auth.js +0 -68
  778. package/clis/xianyu/chat.js +0 -74
  779. package/clis/xianyu/chat.test.js +0 -84
  780. package/clis/xianyu/im.js +0 -322
  781. package/clis/xianyu/im.test.js +0 -253
  782. package/clis/xianyu/inbox.js +0 -96
  783. package/clis/xianyu/item.js +0 -153
  784. package/clis/xianyu/item.test.js +0 -56
  785. package/clis/xianyu/messages.js +0 -91
  786. package/clis/xianyu/publish.js +0 -485
  787. package/clis/xianyu/publish.test.js +0 -220
  788. package/clis/xianyu/reply.js +0 -82
  789. package/clis/xianyu/search.js +0 -262
  790. package/clis/xianyu/search.test.js +0 -104
  791. package/clis/xianyu/utils.js +0 -8
  792. package/clis/xiaoe/auth.js +0 -55
  793. package/clis/xiaoe/catalog.js +0 -227
  794. package/clis/xiaoe/content.js +0 -175
  795. package/clis/xiaoe/courses.js +0 -127
  796. package/clis/xiaoe/detail.js +0 -36
  797. package/clis/xiaoe/play-url.js +0 -121
  798. package/clis/xiaoe/xiaoe.test.js +0 -486
  799. package/clis/xiaohongshu/ask.js +0 -426
  800. package/clis/xiaohongshu/ask.test.js +0 -271
  801. package/clis/xiaohongshu/auth.js +0 -53
  802. package/clis/xiaohongshu/collection-helpers.js +0 -283
  803. package/clis/xiaohongshu/collection-helpers.test.js +0 -125
  804. package/clis/xiaohongshu/comments.js +0 -228
  805. package/clis/xiaohongshu/comments.test.js +0 -320
  806. package/clis/xiaohongshu/creator-note-detail.js +0 -482
  807. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  808. package/clis/xiaohongshu/creator-notes-summary.js +0 -98
  809. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  810. package/clis/xiaohongshu/creator-notes.js +0 -479
  811. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  812. package/clis/xiaohongshu/creator-profile.js +0 -55
  813. package/clis/xiaohongshu/creator-stats.js +0 -76
  814. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  815. package/clis/xiaohongshu/delete-note.js +0 -260
  816. package/clis/xiaohongshu/delete-note.test.js +0 -172
  817. package/clis/xiaohongshu/download.js +0 -249
  818. package/clis/xiaohongshu/download.test.js +0 -339
  819. package/clis/xiaohongshu/draft-clear.js +0 -91
  820. package/clis/xiaohongshu/draft-delete.js +0 -103
  821. package/clis/xiaohongshu/draft-open.js +0 -43
  822. package/clis/xiaohongshu/draft-utils.js +0 -142
  823. package/clis/xiaohongshu/drafts.js +0 -28
  824. package/clis/xiaohongshu/drafts.test.js +0 -172
  825. package/clis/xiaohongshu/feed.js +0 -163
  826. package/clis/xiaohongshu/feed.test.js +0 -126
  827. package/clis/xiaohongshu/follow.js +0 -226
  828. package/clis/xiaohongshu/follow.test.js +0 -211
  829. package/clis/xiaohongshu/liked.js +0 -29
  830. package/clis/xiaohongshu/liked.test.js +0 -82
  831. package/clis/xiaohongshu/navigation.test.js +0 -38
  832. package/clis/xiaohongshu/note-helpers.js +0 -69
  833. package/clis/xiaohongshu/note.js +0 -104
  834. package/clis/xiaohongshu/note.test.js +0 -249
  835. package/clis/xiaohongshu/notifications.js +0 -46
  836. package/clis/xiaohongshu/publish.js +0 -1423
  837. package/clis/xiaohongshu/publish.test.js +0 -1141
  838. package/clis/xiaohongshu/saved.js +0 -29
  839. package/clis/xiaohongshu/saved.test.js +0 -143
  840. package/clis/xiaohongshu/search.js +0 -330
  841. package/clis/xiaohongshu/search.test.js +0 -325
  842. package/clis/xiaohongshu/unfollow.js +0 -285
  843. package/clis/xiaohongshu/user-helpers.js +0 -78
  844. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  845. package/clis/xiaohongshu/user.js +0 -140
  846. package/clis/xiaohongshu/user.test.js +0 -141
  847. package/clis/xiaoyuzhou/auth.js +0 -303
  848. package/clis/xiaoyuzhou/auth.test.js +0 -124
  849. package/clis/xiaoyuzhou/download.js +0 -54
  850. package/clis/xiaoyuzhou/download.test.js +0 -135
  851. package/clis/xiaoyuzhou/episode.js +0 -34
  852. package/clis/xiaoyuzhou/podcast-episodes.js +0 -41
  853. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  854. package/clis/xiaoyuzhou/podcast.js +0 -33
  855. package/clis/xiaoyuzhou/transcript.js +0 -77
  856. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  857. package/clis/xiaoyuzhou/utils.js +0 -15
  858. package/clis/xiaoyuzhou/utils.test.js +0 -39
  859. package/clis/xueqiu/auth.js +0 -63
  860. package/clis/xueqiu/comments.js +0 -355
  861. package/clis/xueqiu/comments.test.js +0 -696
  862. package/clis/xueqiu/danjuan-utils.js +0 -126
  863. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  864. package/clis/xueqiu/earnings-date.js +0 -45
  865. package/clis/xueqiu/feed.js +0 -39
  866. package/clis/xueqiu/fund-holdings.js +0 -29
  867. package/clis/xueqiu/fund-snapshot.js +0 -26
  868. package/clis/xueqiu/groups.js +0 -23
  869. package/clis/xueqiu/hot-stock.js +0 -32
  870. package/clis/xueqiu/hot.js +0 -37
  871. package/clis/xueqiu/kline.js +0 -44
  872. package/clis/xueqiu/search.js +0 -37
  873. package/clis/xueqiu/stock.js +0 -65
  874. package/clis/xueqiu/utils.js +0 -48
  875. package/clis/xueqiu/utils.test.js +0 -26
  876. package/clis/xueqiu/watchlist.js +0 -37
  877. package/clis/youdao/note.js +0 -258
  878. package/clis/youdao/note.test.js +0 -99
  879. package/clis/yuanbao/ask.js +0 -362
  880. package/clis/yuanbao/ask.test.js +0 -124
  881. package/clis/yuanbao/auth.js +0 -59
  882. package/clis/yuanbao/detail.js +0 -65
  883. package/clis/yuanbao/history.js +0 -51
  884. package/clis/yuanbao/new.js +0 -72
  885. package/clis/yuanbao/new.test.js +0 -30
  886. package/clis/yuanbao/read.js +0 -38
  887. package/clis/yuanbao/send.js +0 -57
  888. package/clis/yuanbao/shared.js +0 -341
  889. package/clis/yuanbao/shared.test.js +0 -80
  890. package/clis/yuanbao/status.js +0 -44
  891. package/clis/zhihu/answer-comments.js +0 -280
  892. package/clis/zhihu/answer-comments.test.js +0 -287
  893. package/clis/zhihu/answer-detail.js +0 -216
  894. package/clis/zhihu/answer-detail.test.js +0 -338
  895. package/clis/zhihu/answer.js +0 -54
  896. package/clis/zhihu/answer.test.js +0 -54
  897. package/clis/zhihu/auth.js +0 -59
  898. package/clis/zhihu/collection.js +0 -199
  899. package/clis/zhihu/collection.test.js +0 -337
  900. package/clis/zhihu/collections.js +0 -128
  901. package/clis/zhihu/collections.test.js +0 -182
  902. package/clis/zhihu/comment.js +0 -55
  903. package/clis/zhihu/comment.test.js +0 -50
  904. package/clis/zhihu/download.js +0 -80
  905. package/clis/zhihu/download.test.js +0 -12
  906. package/clis/zhihu/favorite.js +0 -87
  907. package/clis/zhihu/favorite.test.js +0 -59
  908. package/clis/zhihu/follow.js +0 -50
  909. package/clis/zhihu/follow.test.js +0 -42
  910. package/clis/zhihu/followers.js +0 -40
  911. package/clis/zhihu/followers.test.js +0 -42
  912. package/clis/zhihu/following.js +0 -40
  913. package/clis/zhihu/following.test.js +0 -44
  914. package/clis/zhihu/hot.js +0 -44
  915. package/clis/zhihu/like.js +0 -47
  916. package/clis/zhihu/like.test.js +0 -41
  917. package/clis/zhihu/paginate.js +0 -128
  918. package/clis/zhihu/pins.js +0 -41
  919. package/clis/zhihu/pins.test.js +0 -44
  920. package/clis/zhihu/question.js +0 -113
  921. package/clis/zhihu/question.test.js +0 -251
  922. package/clis/zhihu/recommend.js +0 -103
  923. package/clis/zhihu/recommend.test.js +0 -143
  924. package/clis/zhihu/search.js +0 -206
  925. package/clis/zhihu/search.test.js +0 -198
  926. package/clis/zhihu/target.js +0 -91
  927. package/clis/zhihu/target.test.js +0 -77
  928. package/clis/zhihu/text.js +0 -29
  929. package/clis/zhihu/text.test.js +0 -24
  930. package/clis/zhihu/user-answers.js +0 -41
  931. package/clis/zhihu/user-answers.test.js +0 -69
  932. package/clis/zhihu/user-arg.js +0 -34
  933. package/clis/zhihu/user-articles.js +0 -40
  934. package/clis/zhihu/user-articles.test.js +0 -44
  935. package/clis/zhihu/user.js +0 -59
  936. package/clis/zhihu/user.test.js +0 -73
  937. package/clis/zhihu/write-shared.js +0 -228
  938. package/clis/zhihu/write-shared.test.js +0 -176
  939. package/clis/zsxq/auth.js +0 -68
  940. package/clis/zsxq/dynamics.js +0 -48
  941. package/clis/zsxq/groups.js +0 -33
  942. package/clis/zsxq/search.js +0 -44
  943. package/clis/zsxq/search.test.js +0 -24
  944. package/clis/zsxq/topic.js +0 -50
  945. package/clis/zsxq/topic.test.js +0 -30
  946. package/clis/zsxq/topics.js +0 -26
  947. package/clis/zsxq/topics.test.js +0 -24
  948. package/clis/zsxq/utils.js +0 -233
  949. package/clis/zsxq/utils.test.js +0 -31
  950. package/dist/src/weixin-download.test.js +0 -45
  951. package/skills/webcmd-adapter-author/references/site-memory/bilibili.md +0 -70
  952. package/skills/webcmd-adapter-author/references/site-memory/eastmoney.md +0 -70
  953. package/skills/webcmd-adapter-author/references/site-memory/tonghuashun.md +0 -51
  954. package/skills/webcmd-adapter-author/references/site-memory/xueqiu.md +0 -58
  955. /package/{clis/douyin/_shared/types.js → dist/src/browser/profile.test.d.ts} +0 -0
  956. /package/dist/src/{weixin-download.test.d.ts → generate-release-notes-cli.test.d.ts} +0 -0
@@ -1,256 +1,259 @@
1
1
  ---
2
2
  name: webcmd-adapter-author
3
- description: Use when writing a Webcmd adapter for a new site or adding a new command to an existing site. Guides end-to-end from first recon through field decoding, adapter coding, and verify. Replaces webcmd-oneshot / webcmd-explorer. For ad-hoc browser driving (no adapter), see webcmd-browser instead; for a top-level orientation to webcmd, see webcmd-usage.
3
+ description: Use when writing a Webcmd adapter for a new site or adding a new command to an existing site. Guides end-to-end from first recon through field decoding, adapter coding, and verify. Replaces webcmd-oneshot / webcmd-explorer. For ad-hoc browser driving without an adapter, use webcmd-browser instead; for top-level orientation, use webcmd-usage.
4
4
  allowed-tools: Bash(webcmd:*), Read, Edit, Write, Grep
5
5
  ---
6
6
 
7
- # webcmd-adapter-author
7
+ # Webcmd Adapter Authoring
8
8
 
9
- 你是要给一个站点写 adapter agent。这份 skill 目标:**从零到通过 `webcmd browser verify` 的 30 分钟内闭环**。
9
+ You are an agent writing an adapter for a site. The goal of this skill is a 30-minute loop from zero context to a passing `webcmd browser verify`.
10
10
 
11
- 全程用现有工具:`webcmd browser *` / `webcmd doctor` / `webcmd browser init` / `webcmd browser verify`。没有新命令。
11
+ Use the existing tools throughout: `webcmd browser *`, `webcmd doctor`, `webcmd browser init`, and `webcmd browser verify`. This skill does not introduce new commands.
12
12
 
13
- 调试浏览器型 adapter 时,优先直接带上 `--trace on --keep-tab true --window foreground`。`--trace on` 每轮都落 trace artifact,`summary.md` 是失败/成功复盘入口;`--keep-tab true --window foreground` tab lease 保留且浏览器窗口在前台,方便核对最终页面状态。
13
+ When debugging browser-backed adapters, start with `--trace on --keep-tab true --window foreground`. `--trace on` writes a trace artifact every round, and `summary.md` is the entry point for reviewing both failures and successes. `--keep-tab true --window foreground` keeps the tab lease alive and puts the browser window in front so you can inspect the final page state.
14
14
 
15
15
  ---
16
16
 
17
- ## 前置:看你落在哪
17
+ ## Precheck: Know Your Lane
18
18
 
19
- 先拿 `coverage-matrix.md` 快速自测。三个问题:
19
+ Use `coverage-matrix.md` for a quick self-test before implementation. Ask three questions:
20
20
 
21
- 1. 数据在浏览器里看得到吗?(否 先解决鉴权)
22
- 2. 数据是 HTTP/JSON/HTML 吗?(否 不在 skill 范围)
23
- 3. 需要实时推送吗?(是 找同数据 HTTP 接口;没有就放弃)
21
+ 1. Can the data be seen in the browser? If no, solve authentication first.
22
+ 2. Is the data HTTP, JSON, or HTML? If no, this skill is out of scope.
23
+ 3. Does the command require real-time push? If yes, look for an HTTP endpoint with the same data; if none exists, stop.
24
24
 
25
- 三个都 yes 继续。
25
+ Continue only when all three answers are yes.
26
26
 
27
27
  ---
28
28
 
29
- ## 顶层决策树
29
+ ## Top-Level Decision Tree
30
30
 
31
- **先定 strategy,再写 adapter。** 每次进入 Step 3/4 后、写代码前,必须产出一段 strategy note。没有这段 note,不要开始写 `clis/<site>/<name>.js`。
31
+ **Choose the strategy before writing the adapter.** Every time you reach Step 3 or Step 4, and before writing code, produce a strategy note. Without that note, do not start `clis/<site>/<name>.js`.
32
32
 
33
- 核心判断不是 "API DOM 高级",而是 **数据源有没有外部契约**。实测维护成本显示:公开/官方接口最稳;UI/DOM 语义通常也有用户可见契约;站内未文档化 XHR/GraphQL/signature endpoint 最容易漂。不要为了 "API-first" 把稳定的 UI/DOM 实现盲目迁到无契约内部接口。
33
+ The core question is not whether an API is more elegant than DOM work. The core question is whether the data source has an external contract. Public or official interfaces are usually the most stable. UI/DOM semantics often have a user-visible contract too. Undocumented in-site XHR, GraphQL, or signature endpoints drift the most. Do not move a stable UI/DOM implementation to an uncontracted internal endpoint just to be "API-first."
34
+
35
+ Strategy note template:
34
36
 
35
37
  ```md
36
- Strategy: PUBLIC_API | COOKIE_API | PAGE_FETCH | INTERCEPT | DOM_STATE | UI_SELECTOR
38
+ Strategy: PUBLIC_API | COOKIE_API | UI_SELECTOR | DOM_STATE | PAGE_FETCH | INTERCEPT
37
39
  Contract: stable | visible-ui | internal-unstable
38
40
  Evidence:
39
- - observed request/state: <endpoint / state global / UI-only signal>
40
- - auth source: <none / browser cookie / csrf from meta / localStorage / page runtime>
41
- - replay result: <status + content-type + non-empty sample shape>
42
-
43
- If Strategy is PAGE_FETCH or INTERCEPT:
44
- - why PUBLIC_API / COOKIE_API are unavailable:
45
- - why UI_SELECTOR / DOM_STATE are not safer:
46
- - why the maintenance cost is acceptable:
41
+ - observed request/state:
42
+ - auth source:
43
+ - replay result:
44
+ Why not simpler:
45
+ - PUBLIC_API:
46
+ - COOKIE_API:
47
+ - UI_SELECTOR/DOM_STATE:
47
48
  ```
48
49
 
49
- Strategy classes:
50
-
51
- | Strategy | 契约级别 | 用在什么时候 | 证据要求 |
52
- |---|---|---|---|
53
- | `PUBLIC_API` | stable | 不需要登录,Node-side `fetch` 直接拿到目标数据 | 200 + JSON/HTML 含目标数据,不是埋点/广告 |
54
- | `COOKIE_API` | stable | Node-side `fetch` + `page.getCookies()` / header helper 能拿数据 | cookie/CSRF 来源清楚,replay 非空 |
55
- | `UI_SELECTOR` | visible-ui | publish/upload/click/表单,或页面语义比内部接口更稳 | selector 有语义锚点;错误路径是 typed error |
56
- | `DOM_STATE` | visible-ui | 数据在 hydration state / bootstrap JSON / SSR HTML | state key / script JSON / HTML 结构明确 |
57
- | `PAGE_FETCH` | internal-unstable | 只能在页面上下文 `fetch` 才能复用 same-origin/session/runtime | `webcmd browser eval fetch(...)` 非空;必须解释为什么避不开内部接口 |
58
- | `INTERCEPT` | internal-unstable | 请求签名复杂,但页面自己能自然发出请求 | 触发 UI 后能截到目标 response;必须解释为什么 UI/DOM 不够 |
59
-
60
- 选择规则:优先 `PUBLIC_API` / `COOKIE_API`。如果 UI/DOM 语义稳定,不要强行升级到 `PAGE_FETCH` / `INTERCEPT`。只有公开/官方接口不可用、UI/DOM 无法表达目标数据或操作时,才承担无契约内部接口的维护成本。
61
-
62
- 实测:`PAGE_FETCH` / `INTERCEPT` fix 频率约为 `PUBLIC_API` 7-8 倍,`UI_SELECTOR` `COOKIE_API` 同档。详细 ladder 推导、`api_candidates` 证据怎么填、booking #1680 等反例见 [`references/strategy-selection.md`](./references/strategy-selection.md)。
63
-
64
- 边界:只复用页面自己已经合法获得的数据/能力。不教破解签名、不绕验证码/风控/访问控制;遇到不可复用签名(如必须由页面 runtime 生成且不能安全抽象)就降级到 `UI_SELECTOR` / `DOM_STATE` / `INTERCEPT`。
65
-
66
- ```
67
- START
68
-
69
-
70
- ┌──────────────────────────┐
71
- webcmd doctor 通? │── no ──→ 修桥接(doctor 输出里的提示)
72
- └──────────────────────────┘
73
- yes
74
-
75
- ┌────────────────────────────────────────────────────┐
76
- 读站点记忆: │
77
- │ 1. ~/.webcmd/sites/<site>/endpoints.json │
78
- │ 2. ~/.webcmd/sites/<site>/notes.md │
79
- │ 3. references/site-memory/<site>.md │
80
- └────────────────────────────────────────────────────┘
81
- │ 命中 endpoint + 字段 → 直接跳到【endpoint 验证】(不跳写 adapter!memory 可能过期)
82
- │ 没命中 → 继续
83
-
84
- ┌──────────────────────────┐
85
- │ 站点侦察(site-recon) │ Pattern A/B/C/D/E
86
- └──────────────────────────┘
87
-
88
-
89
- ┌──────────────────────────┐
90
- │ API 发现(api-discovery)│ §1 network → §2 state → §3 bundle → §4 token → §5 intercept
91
- └──────────────────────────┘
92
- 拿到候选 endpoint
93
-
94
- ┌────────────────────────────────────────────┐
95
- │ 直接 fetch 验证 endpoint(memory 命中也要跑)│── 401/403 ──→ 回到 §4 排 token
96
- │ 数据非空 + 200 │── 空/HTML ──→ 回到 site-recon 换 Pattern
97
- memory 里的值还活着吗? │── 站点换版 ──→ 标记旧 endpoint,回 api-discovery
98
- └────────────────────────────────────────────┘
99
- OK
100
-
101
- ┌───────────────────────────────────────┐
102
- │ 字段解码(memory 里的 field-map 也要抽查)│ 自解释 → 直接 / 已知代号 → field-conventions / 未知 → decode-playbook
103
- │ 比一条已知字段和网页肉眼值,确认没错位 │
104
- └───────────────────────────────────────┘
105
-
106
-
107
- ┌──────────────────────────┐
108
- │ 设计 columns (output) │ 对照 output-design.md 的命名 / 类型 / 顺序
109
- └──────────────────────────┘
110
-
111
-
112
- ┌──────────────────────────┐
113
- webcmd browser init │ 生成 ~/.webcmd/clis/<site>/<name>.js 骨架
114
- │ 复制最像的邻居 adapter │
115
- │ 改 name / URL / 映射三处
116
- └──────────────────────────┘
117
-
118
-
119
- ┌──────────────────────────┐
120
- webcmd browser verify │── 失败 ──→ autofix skill,用 --trace retain-on-failure 回对应步骤
121
- └──────────────────────────┘
122
- 成功
123
-
124
- ┌──────────────────────────┐
125
- 字段 vs 网页肉眼对一遍 │── 数值不对 ──→ 回字段解码
126
- └──────────────────────────┘
127
- │ 对得上
128
-
129
- ┌──────────────────────────┐
130
- │ 回写 ~/.webcmd/sites/ │ endpoints / field-map / notes / fixtures
131
- └──────────────────────────┘
132
-
133
-
134
- DONE
50
+ | Strategy | Contract level | Use when | Evidence required |
51
+ | --- | --- | --- | --- |
52
+ | `PUBLIC_API` | stable | Node-side `fetch` can get target data without login | 200 + JSON/HTML contains target data, not analytics or ads |
53
+ | `COOKIE_API` | stable | Node-side `fetch` plus `page.getCookies()` / header helper can get the data | cookie/CSRF source is clear and replay is non-empty |
54
+ | `UI_SELECTOR` | visible-ui | publish/upload/click/form flows, or page semantics are more stable than internal APIs | selector has a semantic anchor; failure path is a typed error |
55
+ | `DOM_STATE` | visible-ui | data is in hydration state, bootstrap JSON, or SSR HTML | state key, script JSON, or HTML structure is clear |
56
+ | `PAGE_FETCH` | internal-unstable | only page-context `fetch` can reuse same-origin/session/runtime state | `webcmd browser eval fetch(...)` is non-empty; explain why the internal endpoint is unavoidable |
57
+ | `INTERCEPT` | internal-unstable | request signing is complex but the page can naturally issue the request | target response is captured after triggering UI; explain why UI/DOM is insufficient |
58
+
59
+ Selection rule: prefer `PUBLIC_API` / `COOKIE_API`. If UI/DOM semantics are stable, do not force an upgrade to `PAGE_FETCH` / `INTERCEPT`. Pay the maintenance cost of uncontracted internal endpoints only when public/official APIs are unavailable and UI/DOM cannot express the target data or operation.
60
+
61
+ Observed maintenance pattern: `PAGE_FETCH` / `INTERCEPT` fixes are roughly 7-8x as frequent as `PUBLIC_API` fixes, while `UI_SELECTOR` is in the same rough band as `COOKIE_API`. See [`references/strategy-selection.md`](./references/strategy-selection.md) for the ladder, `api_candidates` evidence guidance, and counterexamples such as the booking #1680 case.
62
+
63
+ Boundary: reuse only data and capabilities the page has already obtained legitimately. Do not teach signature cracking, CAPTCHA bypass, risk-control bypass, or access-control bypass. If a signature cannot be reused safely, such as a runtime-generated page signature that cannot be abstracted, fall back to `UI_SELECTOR`, `DOM_STATE`, or `INTERCEPT`.
64
+
65
+ ```text
66
+ Start
67
+ |
68
+ v
69
+ webcmd doctor passes?
70
+ | no -> fix the bridge using doctor output
71
+ v yes
72
+ Read site memory:
73
+ - ~/.webcmd/sites/<site>/endpoints.json
74
+ - ~/.webcmd/sites/<site>/field-map.json
75
+ - references/site-memory/<site>.md, if present
76
+ |
77
+ | hit endpoint + fields -> jump to endpoint verification
78
+ | (do not jump straight to adapter code; memory may be stale)
79
+ | no hit -> continue
80
+ v
81
+ Site recon (site-recon.md) -> Pattern A/B/C/D/E
82
+ |
83
+ v
84
+ API discovery (api-discovery.md)
85
+ section 1 network -> section 2 state -> section 3 bundle ->
86
+ section 4 token -> section 5 intercept
87
+ |
88
+ v
89
+ Candidate endpoint found
90
+ |
91
+ v
92
+ Direct fetch verification, even for memory hits
93
+ - 401/403 -> return to section 4 token investigation
94
+ - empty/HTML -> return to site-recon and choose another Pattern
95
+ - site changed -> mark old endpoint stale and return to api-discovery
96
+ |
97
+ v
98
+ Field decoding
99
+ - self-explanatory -> use directly
100
+ - known code -> field-conventions.md
101
+ - unknown -> field-decode-playbook.md
102
+ Compare one known field against the visible web page to catch misalignment.
103
+ |
104
+ v
105
+ Design columns (output-design.md)
106
+ - names
107
+ - types
108
+ - order
109
+ |
110
+ v
111
+ webcmd browser init
112
+ - generate ~/.webcmd/clis/<site>/<name>.js skeleton
113
+ - copy the closest neighboring adapter
114
+ - edit name, URL, and field mapping
115
+ |
116
+ v
117
+ webcmd browser verify
118
+ | fail -> use the autofix skill with --trace retain-on-failure
119
+ v pass
120
+ Compare field values against the visible page
121
+ | mismatch -> return to field decoding
122
+ v match
123
+ Write back ~/.webcmd/sites/
124
+ - endpoints
125
+ - field-map
126
+ - notes
127
+ - fixtures
135
128
  ```
136
129
 
137
130
  ---
138
131
 
139
- ## Runbook(一步一步勾选)
140
-
141
- ```
142
- [ ] 1. webcmd doctor 返回 "Everything looks good"
143
- [ ] 2. 读站点记忆:
144
- [ ] ~/.webcmd/sites/<site>/endpoints.json 存在?里面有想要的 endpoint?
145
- [ ] references/site-memory/<site>.md 存在?看"已知 endpoint"节
146
- [ ] 命中后:**跳到第 5(endpoint 验证) + 7(字段核对)**,不能直接跳第 9 adapter
147
- [ ] memory 写入超过 30 天(看 `verified_at`)→ 当作过期,按冷启动走 Step 3 → 4
148
- [ ] 3. 侦察(site-recon.md):
149
- [ ] **首选**:`webcmd browser analyze <url>` 一步拿 pattern + 反爬 + 最近 adapter + next step
150
- [ ] `analyze` 结论模糊时再手跑:`open` → `wait time 2` (或 `wait xhr <regex>`) → `network`
151
- [ ] Pattern(A / B / C / D / E)
152
- [ ] 4. API 发现(api-discovery.md)按 Pattern §:
153
- [ ] Pattern A §1 network 精读
154
- [ ] Pattern B §2 state 抽取 + §1 深层数据
155
- [ ] Pattern C → §3 bundle / script src 搜索
156
- [ ] Pattern D → §4 token 来源 + 降级 §5
157
- [ ] Pattern E HTTP 轮询接口;找不到才 §5
158
- [ ] 5. 直接 fetch 候选 endpoint 验证:
159
- [ ] 返回 200
160
- [ ] 响应含目标数据(不是 HTML / 广告)
161
- [ ] 6. strategy note(写代码前的强制产物):
162
- [ ] 从 `PUBLIC_API / COOKIE_API / PAGE_FETCH / INTERCEPT / DOM_STATE / UI_SELECTOR` 选一个
163
- [ ] Contract:`stable / visible-ui / internal-unstable`
164
- [ ] Evidence:observed request/state、auth source、replay result
165
- [ ] 如果选 `PAGE_FETCH` / `INTERCEPT`,必须解释为什么 `PUBLIC_API` / `COOKIE_API` / `UI_SELECTOR` / `DOM_STATE` 都不适合
166
- [ ] 如果选 `UI_SELECTOR` / `DOM_STATE`,不需要为 "为什么不是 API" 过度辩护;只要说明语义锚点和 typed error 路径
167
- [ ] 7. 字段解码:
168
- [ ] 自解释 直接用 key
169
- [ ] 已知代号 field-conventions.md 查表
170
- [ ] 未知代号 field-decode-playbook.md(排序键对比 / 结构差分 / 常量排查)
171
- [ ] 8. 设计 columns(output-design.md):
172
- [ ] 命名 camelCase 且对齐邻居 adapter
173
- [ ] 类型 / 单位 / 百分比格式清楚
174
- [ ] 顺序:识别列 业务数字 → metadata
175
- [ ] 9. adapter(adapter-template.md):
176
- [ ] webcmd browser init <site>/<name>
177
- [ ] 找同站点或同类型最像的 adapter,cp 过来
178
- [ ] 改 name / URL / 字段映射
179
- [ ] 10. webcmd browser verify <site>/<name>
180
- [ ] 首轮通过后立刻 `--write-fixture` 生成 `~/.webcmd/sites/<site>/verify/<cmd>.json` 种子
181
- [ ] 手改种子:加 `patterns`(URL / 日期 / ID 格式)+ `notEmpty`(核心字段)+ 收紧 `rowCount`
182
- [ ] 再跑一次 `webcmd browser verify <site>/<name>`,确认 matches fixture
183
- [ ] 11. 字段值 vs 网页肉眼比对(别只看 "Adapter works!")
184
- [ ] 12. 回写站点记忆(**verify 通过 + 肉眼比对对得上之后**,schema 见 `references/site-memory.md`):
185
- [ ] `endpoints.json`:以 endpoint 的短名为 key,value = `{url, method, params.{required,optional}, response, verified_at: YYYY-MM-DD, notes}`
186
- [ ] `field-map.json`:只追加新代号。key = 字段代号,value = `{meaning, verified_at: YYYY-MM-DD, source}`;**已存在的 key 不要覆盖**,有冲突先和网页肉眼值对齐再写
187
- [ ] `notes.md`:顶部追加一段 `## YYYY-MM-DD by <agent/user>`,写本次写 adapter 时遇到的新坑 / 新结论
188
- [ ] `verify/<cmd>.json`:**必填。** `webcmd browser verify` 的期望值(args / rowCount / columns / types / patterns / notEmpty),Step 10 已经让你生成了,这里只是 checklist
189
- [ ] `fixtures/<cmd>-<YYYYMMDDHHMM>.json`:存一份该 endpoint 的完整响应样本(去掉 cookie / token / 用户私有字段再存),给后续字段对比 / 离线 replay 用
190
- [ ] 调试过程中如果在 repo / adapter 目录 dump 过临时文件(`.dbg-*.html` / `raw-*.json` / 等),**在 commit 前清干净**——这些本来就该落在 `~/.webcmd/sites/<site>/fixtures/` 或 `/tmp/`
191
- ```
132
+ ## Runbook
133
+
134
+ Check these off step by step:
135
+
136
+ [ ] 1. `webcmd doctor` returns "Everything looks good"
137
+
138
+ [ ] 2. Read site memory:
139
+ [ ] Does `~/.webcmd/sites/<site>/endpoints.json` exist, and does it contain the desired endpoint?
140
+ [ ] Does `references/site-memory/<site>.md` exist? If yes, read its "Known endpoints" section.
141
+ [ ] On a hit: **jump to Step 5 endpoint verification + Step 7 field check**, not directly to Step 9 adapter code.
142
+ [ ] If memory is older than 30 days according to `verified_at`, treat it as stale and use the cold-start path through Steps 3 and 4.
143
+
144
+ [ ] 3. Recon (`site-recon.md`):
145
+ [ ] **Preferred:** `webcmd browser analyze <url>` to get pattern, anti-bot signals, nearest adapter, and next step in one pass.
146
+ [ ] If `analyze` is ambiguous, run manual checks: `open` -> `wait time 2` (or `wait xhr <regex>`) -> `network`.
147
+ [ ] Choose Pattern A / B / C / D / E.
148
+
149
+ [ ] 4. API discovery (`api-discovery.md`) by Pattern:
150
+ [ ] Pattern A -> section 1 network deep read.
151
+ [ ] Pattern B -> section 2 state extraction + section 1 for deeper data.
152
+ [ ] Pattern C -> section 3 bundle / script src search.
153
+ [ ] Pattern D -> section 4 token source + section 5 fallback.
154
+ [ ] Pattern E -> find an HTTP polling endpoint; use section 5 only if none exists.
155
+
156
+ [ ] 5. Directly verify the candidate endpoint:
157
+ [ ] Response is 200.
158
+ [ ] Response contains target data, not HTML, ads, or analytics.
159
+
160
+ [ ] 6. Write the strategy note before code:
161
+ [ ] Choose one of `PUBLIC_API / COOKIE_API / PAGE_FETCH / INTERCEPT / DOM_STATE / UI_SELECTOR`.
162
+ [ ] Fill Contract: `stable / visible-ui / internal-unstable`.
163
+ [ ] Fill Evidence: observed request/state, auth source, replay result.
164
+ [ ] If choosing `PAGE_FETCH` / `INTERCEPT`, explain why `PUBLIC_API`, `COOKIE_API`, `UI_SELECTOR`, and `DOM_STATE` are not suitable.
165
+ [ ] If choosing `UI_SELECTOR` / `DOM_STATE`, do not over-defend why it is not an API; state the semantic anchor and typed-error path.
166
+
167
+ [ ] 7. Field decoding:
168
+ [ ] Self-explanatory key -> use it directly.
169
+ [ ] Known code -> look it up in `field-conventions.md`.
170
+ [ ] Unknown code -> use `field-decode-playbook.md` (sort-key comparison, structural diff, constant checks).
171
+
172
+ [ ] 8. Design columns (`output-design.md`):
173
+ [ ] Use camelCase names aligned with neighboring adapters.
174
+ [ ] Make types, units, and percentage format clear.
175
+ [ ] Order: identifier columns -> business numbers -> metadata.
176
+
177
+ [ ] 9. Write the adapter (`adapter-template.md`):
178
+ [ ] `webcmd browser init <site>/<name> --strategy <strategy>`
179
+ [ ] Find the closest same-site or same-type adapter and copy it.
180
+ [ ] Edit name, URL, and field mapping.
181
+
182
+ [ ] 10. Verification fixtures:
183
+ [ ] After the first passing run, immediately use `--write-fixture` to seed `~/.webcmd/sites/<site>/verify/<cmd>.json`.
184
+ [ ] Tighten the seed by adding `patterns` (URL/date/ID formats), `notEmpty` (core fields), and stricter `rowCount`.
185
+ [ ] Run `webcmd browser verify <site>/<name>` again and confirm it matches the fixture.
186
+
187
+ [ ] 11. Compare field values against the visible page. Do not stop at "Adapter works!"
188
+
189
+ [ ] 12. Write site memory after **verify passes and visible-page comparison matches**. See `references/site-memory.md` for schema:
190
+ [ ] `endpoints.json`: short endpoint name as key; value = `{url, method, params.{required,optional}, response, verified_at: YYYY-MM-DD, notes}`.
191
+ [ ] `field-map.json`: append only new codes. key = field code; value = `{meaning, verified_at: YYYY-MM-DD, source}`. **Do not overwrite existing keys.** If there is a conflict, align with the visible page before writing.
192
+ [ ] `notes.md`: prepend `## YYYY-MM-DD by <agent/user>` with new pitfalls or conclusions from this adapter work.
193
+ [ ] `verify/<cmd>.json`: **required.** Expected values for `webcmd browser verify`: args, rowCount, columns, types, patterns, notEmpty. Step 10 generated this; this item is the checklist gate.
194
+ [ ] `fixtures/<cmd>-<YYYYMMDDHHMM>.json`: save one complete endpoint response sample after removing cookies, tokens, and private user fields. Use it for later field comparison and offline replay.
195
+ [ ] If debugging dumped temporary files in the repo or adapter directory, such as `.dbg-*.html`, `raw-*.json`, or similar, **delete them before commit**. Those belong in `~/.webcmd/sites/<site>/fixtures/` or `/tmp/`.
192
196
 
193
197
  ---
194
198
 
195
- ## 降级路径(某步卡住跳到哪)
196
-
197
- | 卡在 | 现象 | 跳去 |
198
- |------|------|-----|
199
- | Step 4 API 发现 | `network` 空,`__INITIAL_STATE__` 也空 | §3 bundle baseURL |
200
- | | bundle 搜不到 baseURL | §5 intercept |
201
- | Step 5 endpoint 验证 | 401 / 403 | §4 token 排查 |
202
- | | 200 但响应是 HTML | Step 3 Pattern 判断 |
203
- | | 200 `data: []` | 参数传错 / 接口换版,回 §1 network 里真实请求头 |
204
- | Step 7 字段解码 | 排序键对比推不出 | field-decode-playbook.md §3 结构差分 |
205
- | | 还推不出 | 先输出 rawadapter 跑起来再迭代 |
206
- | Step 10 verify 失败 | `fltt` 漏了 / 字段映射错 | autofix skill;复现命令加 `--trace retain-on-failure` |
207
- | | 某列永远是 `null` | 字段路径错了,回 Step 7 |
208
- | Step 10 verify fixture mismatch | `[pattern]` row[i] 报错 | 先肉眼比对网页值;值对 fixture pattern 太严,放宽;值不对 字段映射错 |
209
- | | `[column] missing column "X"` | 实际 response 没这列(站点改版 or args 影响);重新 `--update-fixture` 或修 adapter |
210
- | | `[type]` actual null / undefined | 字段提取失败,回 Step 7 重抽;临时 fallback union type `string\|null` 只有在语义真的可空时用 |
211
- | Step 11 数值不对 | 10000 | 单位不统一("万" vs "元") |
212
- | | 百分比小 100 | 响应已是 `0.025`,不要 × 100 |
199
+ ## Fallback Paths
200
+
201
+ | Stuck at | Symptom | Go to |
202
+ | --- | --- | --- |
203
+ | Step 4 API discovery | `network` is empty and `__INITIAL_STATE__` is empty | section 3 bundle search for baseURL |
204
+ | | bundle search cannot find baseURL | section 5 intercept |
205
+ | Step 5 endpoint verification | 401 / 403 | section 4 token investigation |
206
+ | | 200 but response is HTML | return to Step 3 and reassess Pattern |
207
+ | | 200 but `data: []` is empty | wrong params or endpoint version changed; return to section 1 and inspect real network headers |
208
+ | Step 7 field decoding | sort-key comparison is inconclusive | field-decode-playbook.md section 3 structural diff |
209
+ | | still inconclusive | output raw values first, get the adapter running, then iterate |
210
+ | Step 10 verify fails | missing filter / wrong field mapping | autofix skill; rerun with `--trace retain-on-failure` |
211
+ | | a column is always `null` | field path is wrong; return to Step 7 |
212
+ | Step 10 verify fixture mismatch | `[pattern]` row[i] failure | compare visible page value first. If value is right, loosen fixture pattern; if value is wrong, fix mapping |
213
+ | | `[column] missing column "X"` | actual response lacks this column due to site change or args; rerun `--update-fixture` or fix adapter |
214
+ | | `[type]` actual null / undefined | extraction failed; return to Step 7. Use a `string|null` union only when the value is truly nullable |
215
+ | Step 11 values mismatch | value differs by 10,000x | unit mismatch |
216
+ | | percentage is 100x too small | response already uses `0.025`; do not multiply by 100 |
213
217
 
214
218
  ---
215
219
 
216
- ## 参考文件
217
-
218
- | 文件 | 什么时候翻 |
219
- |------|----------|
220
- | `references/coverage-matrix.md` | 动手前做"是否在范围内"自测 |
221
- | `references/site-recon.md` | Step 3 定站点类型 |
222
- | `references/api-discovery.md` | Step 4 endpoint |
223
- | `references/strategy-selection.md` | Step 6 strategy note 之前:契约模型 + 实测 fix 频率 + `api_candidates` 证据用法 + 反例 |
224
- | `references/field-conventions.md` | Step 7 查已知字段代号 |
225
- | `references/field-decode-playbook.md` | Step 7 字段不在词典时 |
226
- | `references/output-design.md` | Step 8 命名 / 类型 / 顺序 |
227
- | `references/adapter-template.md` | Step 9 文件结构 + 活例子 `convertible.js` |
228
- | `references/site-memory.md` | 总览:in-repo 种子 + 本地 `~/.webcmd/sites/` 的两层结构 |
229
- | `references/site-memory/<site>.md` | Step 2 读站点公共知识(eastmoney / xueqiu / bilibili / tonghuashun 已铺) |
230
- | `references/success-rate-pitfalls.md` | Step 7 / 11 踩坑前翻:11 种"verify 能过但数据是错的"静默失败(含 aria-label locale-dependence |
231
- | `references/jsdom-fixture-pattern.md` | adapter `page.evaluate` DOM 抽取、且 mocked-evaluate 单测漏 silent bug 时——把 HTML 冻进 `clis/<site>/__fixtures__/` JSDOM 跑(含 fixture 创建 mandatory `awk 'NF>0'` 收紧 + reverse-validate 纪律) |
232
- | `references/typed-errors.md` | `func` 主体之前必读:5 typed error 落点表(ArgumentError / EmptyResultError / CommandExecutionError / AuthRequiredError / TimeoutError)+ 三大 silent anti-pattern(silent-clamp / sentinel-row / generic CliError)的反例修法 |
220
+ ## Reference Files
221
+
222
+ | File | When to open |
223
+ | --- | --- |
224
+ | `references/coverage-matrix.md` | Before implementation: scope self-test |
225
+ | `references/site-recon.md` | Step 3: classify site type |
226
+ | `references/api-discovery.md` | Step 4: find endpoint |
227
+ | `references/strategy-selection.md` | Before Step 6 strategy note: contract model, observed fix frequency, `api_candidates` evidence, counterexamples |
228
+ | `references/field-conventions.md` | Step 7: known field-code lookup |
229
+ | `references/field-decode-playbook.md` | Step 7: field not in dictionary |
230
+ | `references/output-design.md` | Step 8: naming, types, order |
231
+ | `references/adapter-template.md` | Step 9: file structure and live example `convertible.js` |
232
+ | `references/site-memory.md` | Overview: in-repo seeds plus local `~/.webcmd/sites/` two-layer structure |
233
+ | `references/site-memory/<site>.md` | Step 2: public site knowledge when a seed file exists |
234
+ | `references/success-rate-pitfalls.md` | Step 7 / 11: eleven silent failure modes where verify can pass with wrong data, including aria-label locale dependence |
235
+ | `references/jsdom-fixture-pattern.md` | When adapter uses DOM extraction inside `page.evaluate` and mocked-evaluate unit tests miss silent bugs; freeze HTML into `clis/<site>/__fixtures__/` and run JSDOM with the mandatory `awk 'NF>0'` tightening plus reverse-validation discipline |
236
+ | `references/typed-errors.md` | Read before writing `func`: five typed error classes (`ArgumentError`, `EmptyResultError`, `CommandExecutionError`, `AuthRequiredError`, `TimeoutError`) plus fixes for silent anti-patterns (`silent-clamp`, `sentinel-row`, `generic CliError`) |
233
237
 
234
238
  ---
235
239
 
236
- ## 关键约定
240
+ ## Key Conventions
237
241
 
238
- - adapter 只引 `@agentrhq/webcmd/registry` + `@agentrhq/webcmd/errors`,不用第三方
239
- - `columns` 数组和 `func` 返回对象 keys 完全对齐(含顺序)
240
- - **中间解析对象 key 不能跟 `columns` 任一项重叠**(否则 silent-column-drop audit 误判,PR #1329 R1 真踩过;改成专属命名 + push row destructure aliasing)
241
- - **`browser:` field 决定 func 签名**:`browser:false (args)`,`browser:true (page, args)`。搞反时 `args` 实际是 debug flag,所有外部参数 silent fallback default(PR #1329 upstream 之前 8 non-browser adapter 全踩过这个)
242
- - 已知失败按 [`references/typed-errors.md`](./references/typed-errors.md) 5-classification 抛对应 typed error;**不要** silent `return []`,**不要** silent `return [{sentinel}]`,**不要** `Math.max/min` silent clamp 外部参数
243
- - 写私人 adapter `~/.webcmd/clis/<site>/<name>.js`(免 build);要提 PR copy `clis/<site>/<name>.js`
244
- - 站点记忆每轮回写:没记忆 skill 产生记忆 下次变 5 分钟
245
- - **调试过程中的原始 dump / 抓包 / HTML 样本只能落在 `~/.webcmd/sites/<site>/fixtures/` `/tmp/`。严禁在 repo 根目录、`clis/<site>/` 或当前工作目录留 `.dbg-*.html / raw-*.json / sample.*` 这类临时文件**(PR diff 会带上去,别人 review 时很烦)。
246
- - **JSDOM unit-test fixture(`clis/<site>/__fixtures__/<command>.html`)是上面那条的例外**——它是有意 commit repo review artifact,不是临时 dump。但因此 quality bar 要更高:必须按 `references/jsdom-fixture-pattern.md` 5 步做完(含 mandatory `awk 'NF>0'` 空白行收紧),并 reverse-validate 一道证明 regression guard 真能挂。
242
+ - Adapters import only `@agentrhq/webcmd/registry` and `@agentrhq/webcmd/errors`; do not add third-party dependencies.
243
+ - The `columns` array and `func` return object keys must match exactly, including order.
244
+ - **Intermediate parsing object keys must not overlap any `columns` entry.** Otherwise silent-column-drop audits can misread the adapter. Use dedicated internal names and destructure with aliases when pushing rows.
245
+ - **The `browser:` field determines the `func` signature:** `browser:false -> (args)`, `browser:true -> (page, args)`. If this is reversed, `args` may actually be a debug flag and all external parameters can silently fall back to defaults.
246
+ - Throw the correct typed error for known failures according to [`references/typed-errors.md`](./references/typed-errors.md). **Do not** silently `return []`, **do not** silently `return [{sentinel}]`, and **do not** silently clamp external parameters with `Math.max/min`.
247
+ - For private adapters, write `~/.webcmd/clis/<site>/<name>.js` to avoid a build. Copy to `clis/<site>/<name>.js` only when preparing a PR.
248
+ - Write site memory every round: no memory -> use skill -> produce memory -> next time becomes a five-minute task.
249
+ - **Raw dumps, packet captures, and HTML samples from debugging may only be written to `~/.webcmd/sites/<site>/fixtures/` or `/tmp/`. Never leave `.dbg-*.html`, `raw-*.json`, `sample.*`, or similar temporary files in the repo root, `clis/<site>/`, or the current working directory.**
250
+ - **JSDOM unit-test fixtures (`clis/<site>/__fixtures__/<command>.html`) are the exception.** They are intentional review artifacts committed to the repo, not temporary dumps. Because of that, the quality bar is higher: complete the five steps in `references/jsdom-fixture-pattern.md`, including the mandatory `awk 'NF>0'` blank-line tightening, and reverse-validate once to prove the regression guard can fail.
247
251
 
248
252
  ---
249
253
 
250
- ## 卡住了
251
-
252
- - 诊断类:`webcmd doctor` → 看 `notes.md` → 搜 autofix skill
253
- - 字段解码类:`field-decode-playbook.md` 全三节走完 → 先输出 raw 迭代
254
- - endpoint 找不到:api-discovery §5 intercept 兜底
254
+ ## If You Are Stuck
255
255
 
256
- 不要猜。猜错了 verify 能通过但数据是错的,用户看到乱码才发现。
256
+ - Diagnostic path: `webcmd doctor` -> inspect `notes.md` -> rerun with `--trace retain-on-failure`.
257
+ - Endpoint path: return to `site-recon` and reclassify Pattern. Do not stay attached to the first API guess.
258
+ - Field path: compare one visible page value, then use sort-key comparison, structural diff, and constants.
259
+ - Verification path: if `webcmd browser verify` fails, switch to the autofix skill instead of improvising.