@zenalexa/unicli 0.220.1 → 0.221.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 (471) hide show
  1. package/AGENTS.md +28 -6
  2. package/README.md +8 -8
  3. package/README.zh-CN.md +8 -8
  4. package/dist/adapters/bilibili/comments.js +66 -4
  5. package/dist/adapters/bilibili/comments.js.map +1 -1
  6. package/dist/adapters/bilibili/compat.js +2 -2
  7. package/dist/adapters/bilibili/compat.js.map +1 -1
  8. package/dist/adapters/bilibili/download.js +4 -4
  9. package/dist/adapters/bilibili/download.js.map +1 -1
  10. package/dist/adapters/bilibili/wbi.d.ts.map +1 -1
  11. package/dist/adapters/bilibili/wbi.js +3 -3
  12. package/dist/adapters/bilibili/wbi.js.map +1 -1
  13. package/dist/adapters/cipo/_shared.d.ts +21 -0
  14. package/dist/adapters/cipo/_shared.d.ts.map +1 -0
  15. package/dist/adapters/cipo/_shared.js +67 -0
  16. package/dist/adapters/cipo/_shared.js.map +1 -0
  17. package/dist/adapters/cipo/get.d.ts +19 -0
  18. package/dist/adapters/cipo/get.d.ts.map +1 -0
  19. package/dist/adapters/cipo/get.js +140 -0
  20. package/dist/adapters/cipo/get.js.map +1 -0
  21. package/dist/adapters/cipo/legal-status.d.ts +19 -0
  22. package/dist/adapters/cipo/legal-status.d.ts.map +1 -0
  23. package/dist/adapters/cipo/legal-status.js +111 -0
  24. package/dist/adapters/cipo/legal-status.js.map +1 -0
  25. package/dist/adapters/cipo/search.d.ts +20 -0
  26. package/dist/adapters/cipo/search.d.ts.map +1 -0
  27. package/dist/adapters/cipo/search.js +148 -0
  28. package/dist/adapters/cipo/search.js.map +1 -0
  29. package/dist/adapters/cnipa/_shared.d.ts +47 -0
  30. package/dist/adapters/cnipa/_shared.d.ts.map +1 -0
  31. package/dist/adapters/cnipa/_shared.js +97 -0
  32. package/dist/adapters/cnipa/_shared.js.map +1 -0
  33. package/dist/adapters/cnipa/get.d.ts +19 -0
  34. package/dist/adapters/cnipa/get.d.ts.map +1 -0
  35. package/dist/adapters/cnipa/get.js +149 -0
  36. package/dist/adapters/cnipa/get.js.map +1 -0
  37. package/dist/adapters/cnipa/legal-status.d.ts +19 -0
  38. package/dist/adapters/cnipa/legal-status.d.ts.map +1 -0
  39. package/dist/adapters/cnipa/legal-status.js +119 -0
  40. package/dist/adapters/cnipa/legal-status.js.map +1 -0
  41. package/dist/adapters/cnipa/search.d.ts +21 -0
  42. package/dist/adapters/cnipa/search.d.ts.map +1 -0
  43. package/dist/adapters/cnipa/search.js +170 -0
  44. package/dist/adapters/cnipa/search.js.map +1 -0
  45. package/dist/adapters/espacenet/_shared.d.ts +21 -0
  46. package/dist/adapters/espacenet/_shared.d.ts.map +1 -0
  47. package/dist/adapters/espacenet/_shared.js +67 -0
  48. package/dist/adapters/espacenet/_shared.js.map +1 -0
  49. package/dist/adapters/espacenet/family.d.ts +19 -0
  50. package/dist/adapters/espacenet/family.d.ts.map +1 -0
  51. package/dist/adapters/espacenet/family.js +118 -0
  52. package/dist/adapters/espacenet/family.js.map +1 -0
  53. package/dist/adapters/espacenet/get.d.ts +19 -0
  54. package/dist/adapters/espacenet/get.d.ts.map +1 -0
  55. package/dist/adapters/espacenet/get.js +130 -0
  56. package/dist/adapters/espacenet/get.js.map +1 -0
  57. package/dist/adapters/espacenet/legal-status.d.ts +19 -0
  58. package/dist/adapters/espacenet/legal-status.d.ts.map +1 -0
  59. package/dist/adapters/espacenet/legal-status.js +110 -0
  60. package/dist/adapters/espacenet/legal-status.js.map +1 -0
  61. package/dist/adapters/espacenet/search.d.ts +20 -0
  62. package/dist/adapters/espacenet/search.d.ts.map +1 -0
  63. package/dist/adapters/espacenet/search.js +165 -0
  64. package/dist/adapters/espacenet/search.js.map +1 -0
  65. package/dist/adapters/facebook/subtitles.d.ts +9 -0
  66. package/dist/adapters/facebook/subtitles.d.ts.map +1 -0
  67. package/dist/adapters/facebook/subtitles.js +42 -0
  68. package/dist/adapters/facebook/subtitles.js.map +1 -0
  69. package/dist/adapters/fips/_shared.d.ts +21 -0
  70. package/dist/adapters/fips/_shared.d.ts.map +1 -0
  71. package/dist/adapters/fips/_shared.js +77 -0
  72. package/dist/adapters/fips/_shared.js.map +1 -0
  73. package/dist/adapters/fips/get.d.ts +19 -0
  74. package/dist/adapters/fips/get.d.ts.map +1 -0
  75. package/dist/adapters/fips/get.js +139 -0
  76. package/dist/adapters/fips/get.js.map +1 -0
  77. package/dist/adapters/fips/search.d.ts +20 -0
  78. package/dist/adapters/fips/search.d.ts.map +1 -0
  79. package/dist/adapters/fips/search.js +148 -0
  80. package/dist/adapters/fips/search.js.map +1 -0
  81. package/dist/adapters/freepatentsonline-web/_shared.d.ts +72 -0
  82. package/dist/adapters/freepatentsonline-web/_shared.d.ts.map +1 -0
  83. package/dist/adapters/freepatentsonline-web/_shared.js +216 -0
  84. package/dist/adapters/freepatentsonline-web/_shared.js.map +1 -0
  85. package/dist/adapters/freepatentsonline-web/get.d.ts +21 -0
  86. package/dist/adapters/freepatentsonline-web/get.d.ts.map +1 -0
  87. package/dist/adapters/freepatentsonline-web/get.js +127 -0
  88. package/dist/adapters/freepatentsonline-web/get.js.map +1 -0
  89. package/dist/adapters/freepatentsonline-web/search.d.ts +22 -0
  90. package/dist/adapters/freepatentsonline-web/search.d.ts.map +1 -0
  91. package/dist/adapters/freepatentsonline-web/search.js +149 -0
  92. package/dist/adapters/freepatentsonline-web/search.js.map +1 -0
  93. package/dist/adapters/google-patents-web/_shared.d.ts +110 -0
  94. package/dist/adapters/google-patents-web/_shared.d.ts.map +1 -0
  95. package/dist/adapters/google-patents-web/_shared.js +164 -0
  96. package/dist/adapters/google-patents-web/_shared.js.map +1 -0
  97. package/dist/adapters/google-patents-web/get.d.ts +36 -0
  98. package/dist/adapters/google-patents-web/get.d.ts.map +1 -0
  99. package/dist/adapters/google-patents-web/get.js +187 -0
  100. package/dist/adapters/google-patents-web/get.js.map +1 -0
  101. package/dist/adapters/google-patents-web/search.d.ts +23 -0
  102. package/dist/adapters/google-patents-web/search.d.ts.map +1 -0
  103. package/dist/adapters/google-patents-web/search.js +169 -0
  104. package/dist/adapters/google-patents-web/search.js.map +1 -0
  105. package/dist/adapters/inpi-br/_shared.d.ts +21 -0
  106. package/dist/adapters/inpi-br/_shared.d.ts.map +1 -0
  107. package/dist/adapters/inpi-br/_shared.js +67 -0
  108. package/dist/adapters/inpi-br/_shared.js.map +1 -0
  109. package/dist/adapters/inpi-br/get.d.ts +19 -0
  110. package/dist/adapters/inpi-br/get.d.ts.map +1 -0
  111. package/dist/adapters/inpi-br/get.js +142 -0
  112. package/dist/adapters/inpi-br/get.js.map +1 -0
  113. package/dist/adapters/inpi-br/search.d.ts +20 -0
  114. package/dist/adapters/inpi-br/search.d.ts.map +1 -0
  115. package/dist/adapters/inpi-br/search.js +154 -0
  116. package/dist/adapters/inpi-br/search.js.map +1 -0
  117. package/dist/adapters/instagram/subtitles.d.ts +9 -0
  118. package/dist/adapters/instagram/subtitles.d.ts.map +1 -0
  119. package/dist/adapters/instagram/subtitles.js +42 -0
  120. package/dist/adapters/instagram/subtitles.js.map +1 -0
  121. package/dist/adapters/mastodon/statuses.d.ts +40 -0
  122. package/dist/adapters/mastodon/statuses.d.ts.map +1 -0
  123. package/dist/adapters/mastodon/statuses.js +153 -0
  124. package/dist/adapters/mastodon/statuses.js.map +1 -0
  125. package/dist/adapters/reddit/comments.d.ts +9 -0
  126. package/dist/adapters/reddit/comments.d.ts.map +1 -0
  127. package/dist/adapters/reddit/comments.js +124 -0
  128. package/dist/adapters/reddit/comments.js.map +1 -0
  129. package/dist/adapters/threads/post.d.ts +32 -0
  130. package/dist/adapters/threads/post.d.ts.map +1 -0
  131. package/dist/adapters/threads/post.js +287 -0
  132. package/dist/adapters/threads/post.js.map +1 -0
  133. package/dist/adapters/tiktok/subtitles.d.ts +9 -0
  134. package/dist/adapters/tiktok/subtitles.d.ts.map +1 -0
  135. package/dist/adapters/tiktok/subtitles.js +42 -0
  136. package/dist/adapters/tiktok/subtitles.js.map +1 -0
  137. package/dist/adapters/twitter/accept.js +2 -2
  138. package/dist/adapters/twitter/accept.js.map +1 -1
  139. package/dist/adapters/twitter/browser-fallback.d.ts +26 -0
  140. package/dist/adapters/twitter/browser-fallback.d.ts.map +1 -0
  141. package/dist/adapters/twitter/browser-fallback.js +93 -0
  142. package/dist/adapters/twitter/browser-fallback.js.map +1 -0
  143. package/dist/adapters/twitter/browser-state.d.ts +11 -0
  144. package/dist/adapters/twitter/browser-state.d.ts.map +1 -0
  145. package/dist/adapters/twitter/browser-state.js +46 -0
  146. package/dist/adapters/twitter/browser-state.js.map +1 -0
  147. package/dist/adapters/twitter/client.d.ts.map +1 -1
  148. package/dist/adapters/twitter/client.js +36 -13
  149. package/dist/adapters/twitter/client.js.map +1 -1
  150. package/dist/adapters/twitter/reply-dm.js +2 -2
  151. package/dist/adapters/twitter/reply-dm.js.map +1 -1
  152. package/dist/adapters/twitter/reply.js +1 -0
  153. package/dist/adapters/twitter/reply.js.map +1 -1
  154. package/dist/adapters/twitter/search.js +11 -18
  155. package/dist/adapters/twitter/search.js.map +1 -1
  156. package/dist/adapters/twitter/thread.d.ts +14 -0
  157. package/dist/adapters/twitter/thread.d.ts.map +1 -1
  158. package/dist/adapters/twitter/thread.js +28 -2
  159. package/dist/adapters/twitter/thread.js.map +1 -1
  160. package/dist/adapters/twitter/trending.js +13 -59
  161. package/dist/adapters/twitter/trending.js.map +1 -1
  162. package/dist/adapters/xiaohongshu/browser-state.d.ts +19 -0
  163. package/dist/adapters/xiaohongshu/browser-state.d.ts.map +1 -0
  164. package/dist/adapters/xiaohongshu/browser-state.js +67 -0
  165. package/dist/adapters/xiaohongshu/browser-state.js.map +1 -0
  166. package/dist/adapters/xiaohongshu/comments.js +28 -5
  167. package/dist/adapters/xiaohongshu/comments.js.map +1 -1
  168. package/dist/adapters/xiaohongshu/download.js +49 -11
  169. package/dist/adapters/xiaohongshu/download.js.map +1 -1
  170. package/dist/adapters/xiaohongshu/search.d.ts.map +1 -1
  171. package/dist/adapters/xiaohongshu/search.js +11 -5
  172. package/dist/adapters/xiaohongshu/search.js.map +1 -1
  173. package/dist/adapters/xiaohongshu/trending.d.ts +9 -0
  174. package/dist/adapters/xiaohongshu/trending.d.ts.map +1 -0
  175. package/dist/adapters/xiaohongshu/trending.js +94 -0
  176. package/dist/adapters/xiaohongshu/trending.js.map +1 -0
  177. package/dist/adapters/youtube/comments.d.ts +80 -0
  178. package/dist/adapters/youtube/comments.d.ts.map +1 -1
  179. package/dist/adapters/youtube/comments.js +108 -12
  180. package/dist/adapters/youtube/comments.js.map +1 -1
  181. package/dist/adapters/youtube/subtitles.d.ts +9 -0
  182. package/dist/adapters/youtube/subtitles.d.ts.map +1 -0
  183. package/dist/adapters/youtube/subtitles.js +42 -0
  184. package/dist/adapters/youtube/subtitles.js.map +1 -0
  185. package/dist/adapters/yt-dlp/subtitles.d.ts +9 -0
  186. package/dist/adapters/yt-dlp/subtitles.d.ts.map +1 -0
  187. package/dist/adapters/yt-dlp/subtitles.js +41 -0
  188. package/dist/adapters/yt-dlp/subtitles.js.map +1 -0
  189. package/dist/adapters/zhihu/answer-detail.d.ts +39 -0
  190. package/dist/adapters/zhihu/answer-detail.d.ts.map +1 -0
  191. package/dist/adapters/zhihu/answer-detail.js +204 -0
  192. package/dist/adapters/zhihu/answer-detail.js.map +1 -0
  193. package/dist/adapters/zhihu/comment.d.ts +9 -0
  194. package/dist/adapters/zhihu/comment.d.ts.map +1 -0
  195. package/dist/adapters/zhihu/comment.js +149 -0
  196. package/dist/adapters/zhihu/comment.js.map +1 -0
  197. package/dist/adapters/zhihu/recommend.d.ts +36 -0
  198. package/dist/adapters/zhihu/recommend.d.ts.map +1 -0
  199. package/dist/adapters/zhihu/recommend.js +151 -0
  200. package/dist/adapters/zhihu/recommend.js.map +1 -0
  201. package/dist/browser/bridge.d.ts.map +1 -1
  202. package/dist/browser/bridge.js +14 -3
  203. package/dist/browser/bridge.js.map +1 -1
  204. package/dist/browser/daemon-client.d.ts +6 -0
  205. package/dist/browser/daemon-client.d.ts.map +1 -1
  206. package/dist/browser/daemon-client.js +75 -15
  207. package/dist/browser/daemon-client.js.map +1 -1
  208. package/dist/browser/daemon.js +39 -15
  209. package/dist/browser/daemon.js.map +1 -1
  210. package/dist/browser/protocol.d.ts +1 -0
  211. package/dist/browser/protocol.d.ts.map +1 -1
  212. package/dist/browser/protocol.js +1 -0
  213. package/dist/browser/protocol.js.map +1 -1
  214. package/dist/cli.d.ts.map +1 -1
  215. package/dist/cli.js +6 -0
  216. package/dist/cli.js.map +1 -1
  217. package/dist/commands/approvals.d.ts.map +1 -1
  218. package/dist/commands/approvals.js +1 -37
  219. package/dist/commands/approvals.js.map +1 -1
  220. package/dist/commands/browser/index.d.ts.map +1 -1
  221. package/dist/commands/browser/index.js +7 -2
  222. package/dist/commands/browser/index.js.map +1 -1
  223. package/dist/commands/daemon.d.ts.map +1 -1
  224. package/dist/commands/daemon.js +7 -3
  225. package/dist/commands/daemon.js.map +1 -1
  226. package/dist/commands/dispatch.d.ts.map +1 -1
  227. package/dist/commands/dispatch.js +27 -3
  228. package/dist/commands/dispatch.js.map +1 -1
  229. package/dist/commands/patent-doctor.d.ts +48 -0
  230. package/dist/commands/patent-doctor.d.ts.map +1 -0
  231. package/dist/commands/patent-doctor.js +109 -0
  232. package/dist/commands/patent-doctor.js.map +1 -0
  233. package/dist/commands/patent.d.ts +78 -0
  234. package/dist/commands/patent.d.ts.map +1 -0
  235. package/dist/commands/patent.js +919 -0
  236. package/dist/commands/patent.js.map +1 -0
  237. package/dist/commands/social.d.ts +19 -0
  238. package/dist/commands/social.d.ts.map +1 -0
  239. package/dist/commands/social.js +236 -0
  240. package/dist/commands/social.js.map +1 -0
  241. package/dist/core/registry.d.ts +1 -1
  242. package/dist/core/registry.d.ts.map +1 -1
  243. package/dist/core/registry.js +11 -2
  244. package/dist/core/registry.js.map +1 -1
  245. package/dist/discovery/loader.d.ts.map +1 -1
  246. package/dist/discovery/loader.js +4 -0
  247. package/dist/discovery/loader.js.map +1 -1
  248. package/dist/engine/approval-presenter.d.ts +10 -0
  249. package/dist/engine/approval-presenter.d.ts.map +1 -0
  250. package/dist/engine/approval-presenter.js +45 -0
  251. package/dist/engine/approval-presenter.js.map +1 -0
  252. package/dist/engine/approval-store.d.ts +4 -0
  253. package/dist/engine/approval-store.d.ts.map +1 -1
  254. package/dist/engine/approval-store.js +85 -11
  255. package/dist/engine/approval-store.js.map +1 -1
  256. package/dist/engine/auth/oauth2-cc.d.ts +67 -0
  257. package/dist/engine/auth/oauth2-cc.d.ts.map +1 -0
  258. package/dist/engine/auth/oauth2-cc.js +120 -0
  259. package/dist/engine/auth/oauth2-cc.js.map +1 -0
  260. package/dist/engine/cookies.d.ts +10 -0
  261. package/dist/engine/cookies.d.ts.map +1 -1
  262. package/dist/engine/cookies.js +64 -0
  263. package/dist/engine/cookies.js.map +1 -1
  264. package/dist/engine/download.d.ts +5 -0
  265. package/dist/engine/download.d.ts.map +1 -1
  266. package/dist/engine/download.js +11 -4
  267. package/dist/engine/download.js.map +1 -1
  268. package/dist/engine/executor.d.ts +1 -0
  269. package/dist/engine/executor.d.ts.map +1 -1
  270. package/dist/engine/executor.js +25 -0
  271. package/dist/engine/executor.js.map +1 -1
  272. package/dist/engine/framework.d.ts +5 -5
  273. package/dist/engine/framework.js +5 -5
  274. package/dist/engine/harden.d.ts +1 -1
  275. package/dist/engine/harden.js +1 -1
  276. package/dist/engine/kernel/stages.d.ts.map +1 -1
  277. package/dist/engine/kernel/stages.js +2 -1
  278. package/dist/engine/kernel/stages.js.map +1 -1
  279. package/dist/engine/normalizer/patent-envelope.d.ts +61 -0
  280. package/dist/engine/normalizer/patent-envelope.d.ts.map +1 -0
  281. package/dist/engine/normalizer/patent-envelope.js +132 -0
  282. package/dist/engine/normalizer/patent-envelope.js.map +1 -0
  283. package/dist/engine/research.d.ts +5 -7
  284. package/dist/engine/research.d.ts.map +1 -1
  285. package/dist/engine/research.js +6 -9
  286. package/dist/engine/research.js.map +1 -1
  287. package/dist/engine/steps/browser-helpers.d.ts +2 -2
  288. package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
  289. package/dist/engine/steps/browser-helpers.js +39 -16
  290. package/dist/engine/steps/browser-helpers.js.map +1 -1
  291. package/dist/engine/steps/download.d.ts +1 -0
  292. package/dist/engine/steps/download.d.ts.map +1 -1
  293. package/dist/engine/steps/download.js +3 -1
  294. package/dist/engine/steps/download.js.map +1 -1
  295. package/dist/engine/steps/index.d.ts +2 -0
  296. package/dist/engine/steps/index.d.ts.map +1 -1
  297. package/dist/engine/steps/index.js +2 -0
  298. package/dist/engine/steps/index.js.map +1 -1
  299. package/dist/engine/steps/oauth2-token.d.ts +41 -0
  300. package/dist/engine/steps/oauth2-token.d.ts.map +1 -0
  301. package/dist/engine/steps/oauth2-token.js +115 -0
  302. package/dist/engine/steps/oauth2-token.js.map +1 -0
  303. package/dist/engine/steps/select-xml.d.ts +34 -0
  304. package/dist/engine/steps/select-xml.d.ts.map +1 -0
  305. package/dist/engine/steps/select-xml.js +222 -0
  306. package/dist/engine/steps/select-xml.js.map +1 -0
  307. package/dist/engine/template.d.ts.map +1 -1
  308. package/dist/engine/template.js +7 -0
  309. package/dist/engine/template.js.map +1 -1
  310. package/dist/engine/transport/mcp-browser.d.ts +128 -0
  311. package/dist/engine/transport/mcp-browser.d.ts.map +1 -0
  312. package/dist/engine/transport/mcp-browser.js +120 -0
  313. package/dist/engine/transport/mcp-browser.js.map +1 -0
  314. package/dist/fast-path/handlers/approvals.d.ts +11 -0
  315. package/dist/fast-path/handlers/approvals.d.ts.map +1 -0
  316. package/dist/fast-path/handlers/approvals.js +136 -0
  317. package/dist/fast-path/handlers/approvals.js.map +1 -0
  318. package/dist/fast-path/manifest.d.ts +1 -0
  319. package/dist/fast-path/manifest.d.ts.map +1 -1
  320. package/dist/fast-path/manifest.js.map +1 -1
  321. package/dist/fast-path.d.ts.map +1 -1
  322. package/dist/fast-path.js +3 -0
  323. package/dist/fast-path.js.map +1 -1
  324. package/dist/index.d.ts +23 -0
  325. package/dist/index.d.ts.map +1 -0
  326. package/dist/index.js +38 -0
  327. package/dist/index.js.map +1 -0
  328. package/dist/manifest-compact.txt +3 -3
  329. package/dist/manifest-search.json +1 -1
  330. package/dist/manifest.json +2239 -176
  331. package/dist/output/auth-guidance.d.ts +14 -0
  332. package/dist/output/auth-guidance.d.ts.map +1 -0
  333. package/dist/output/auth-guidance.js +50 -0
  334. package/dist/output/auth-guidance.js.map +1 -0
  335. package/dist/output/error-map.d.ts +1 -1
  336. package/dist/output/error-map.d.ts.map +1 -1
  337. package/dist/output/error-map.js +28 -4
  338. package/dist/output/error-map.js.map +1 -1
  339. package/dist/output/next-actions.d.ts.map +1 -1
  340. package/dist/output/next-actions.js +19 -3
  341. package/dist/output/next-actions.js.map +1 -1
  342. package/dist/registry.d.ts +18 -1
  343. package/dist/registry.d.ts.map +1 -1
  344. package/dist/registry.js +5 -0
  345. package/dist/registry.js.map +1 -1
  346. package/dist/social/browser-errors.d.ts +13 -0
  347. package/dist/social/browser-errors.d.ts.map +1 -0
  348. package/dist/social/browser-errors.js +36 -0
  349. package/dist/social/browser-errors.js.map +1 -0
  350. package/dist/social/capabilities.d.ts +29 -0
  351. package/dist/social/capabilities.d.ts.map +1 -0
  352. package/dist/social/capabilities.js +448 -0
  353. package/dist/social/capabilities.js.map +1 -0
  354. package/dist/social/comments.d.ts +26 -0
  355. package/dist/social/comments.d.ts.map +1 -0
  356. package/dist/social/comments.js +97 -0
  357. package/dist/social/comments.js.map +1 -0
  358. package/dist/social/video-text.d.ts +27 -0
  359. package/dist/social/video-text.d.ts.map +1 -0
  360. package/dist/social/video-text.js +140 -0
  361. package/dist/social/video-text.js.map +1 -0
  362. package/dist/types/patent.d.ts +160 -0
  363. package/dist/types/patent.d.ts.map +1 -0
  364. package/dist/types/patent.js +16 -0
  365. package/dist/types/patent.js.map +1 -0
  366. package/dist/types.d.ts +12 -0
  367. package/dist/types.d.ts.map +1 -1
  368. package/dist/types.js.map +1 -1
  369. package/package.json +9 -4
  370. package/server.json +3 -3
  371. package/skills/unicli/SKILL.md +1 -1
  372. package/skills/unicli-claude-code/SKILL.md +1 -1
  373. package/skills/unicli-hermes/SKILL.md +1 -1
  374. package/src/adapters/bilibili/comments-tree.test.ts +41 -0
  375. package/src/adapters/bilibili/comments.ts +78 -4
  376. package/src/adapters/bilibili/compat.ts +5 -2
  377. package/src/adapters/bilibili/download.ts +7 -4
  378. package/src/adapters/bilibili/wbi.ts +6 -3
  379. package/src/adapters/brave/search.yaml +53 -0
  380. package/src/adapters/cipo/_shared.ts +98 -0
  381. package/src/adapters/cipo/get.ts +188 -0
  382. package/src/adapters/cipo/legal-status.ts +148 -0
  383. package/src/adapters/cipo/search.ts +195 -0
  384. package/src/adapters/cnipa/_shared.ts +138 -0
  385. package/src/adapters/cnipa/get.ts +199 -0
  386. package/src/adapters/cnipa/legal-status.ts +162 -0
  387. package/src/adapters/cnipa/search.ts +229 -0
  388. package/src/adapters/dpma/get.yaml +67 -0
  389. package/src/adapters/dpma/search.yaml +77 -0
  390. package/src/adapters/duckduckgo/search.yaml +54 -0
  391. package/src/adapters/duckduckgo/suggest.yaml +52 -0
  392. package/src/adapters/epo/family.yaml +69 -0
  393. package/src/adapters/epo/get.yaml +74 -0
  394. package/src/adapters/epo/legal-status.yaml +63 -0
  395. package/src/adapters/epo/search.yaml +84 -0
  396. package/src/adapters/espacenet/_shared.ts +98 -0
  397. package/src/adapters/espacenet/family.ts +161 -0
  398. package/src/adapters/espacenet/get.ts +185 -0
  399. package/src/adapters/espacenet/legal-status.ts +151 -0
  400. package/src/adapters/espacenet/search.ts +229 -0
  401. package/src/adapters/facebook/subtitles.ts +44 -0
  402. package/src/adapters/fips/_shared.ts +109 -0
  403. package/src/adapters/fips/get.ts +186 -0
  404. package/src/adapters/fips/search.ts +195 -0
  405. package/src/adapters/freepatentsonline-web/_shared.ts +273 -0
  406. package/src/adapters/freepatentsonline-web/get.ts +144 -0
  407. package/src/adapters/freepatentsonline-web/search.ts +170 -0
  408. package/src/adapters/google-patents-bq/prior-art.yaml +80 -0
  409. package/src/adapters/google-patents-bq/search.yaml +97 -0
  410. package/src/adapters/google-patents-web/_shared.ts +242 -0
  411. package/src/adapters/google-patents-web/get.ts +224 -0
  412. package/src/adapters/google-patents-web/search.ts +196 -0
  413. package/src/adapters/inpi-br/_shared.ts +98 -0
  414. package/src/adapters/inpi-br/get.ts +193 -0
  415. package/src/adapters/inpi-br/search.ts +206 -0
  416. package/src/adapters/inpi-fr/get.yaml +62 -0
  417. package/src/adapters/inpi-fr/search.yaml +74 -0
  418. package/src/adapters/instagram/subtitles.ts +44 -0
  419. package/src/adapters/ipaustralia/get.yaml +67 -0
  420. package/src/adapters/ipaustralia/search.yaml +74 -0
  421. package/src/adapters/jpo/get.yaml +63 -0
  422. package/src/adapters/jpo/search.yaml +76 -0
  423. package/src/adapters/kipris/get.yaml +69 -0
  424. package/src/adapters/kipris/legal-status.yaml +58 -0
  425. package/src/adapters/kipris/search.yaml +79 -0
  426. package/src/adapters/lens/get.yaml +64 -0
  427. package/src/adapters/lens/search.yaml +82 -0
  428. package/src/adapters/mastodon/statuses.test.ts +82 -0
  429. package/src/adapters/mastodon/statuses.ts +208 -0
  430. package/src/adapters/patsnap/get.yaml +65 -0
  431. package/src/adapters/patsnap/search.yaml +77 -0
  432. package/src/adapters/pqai/prior-art.yaml +59 -0
  433. package/src/adapters/pqai/search.yaml +60 -0
  434. package/src/adapters/reddit/comments-tree.test.ts +79 -0
  435. package/src/adapters/reddit/comments.ts +159 -0
  436. package/src/adapters/threads/post.test.ts +64 -0
  437. package/src/adapters/threads/post.ts +366 -0
  438. package/src/adapters/threads/user.yaml +73 -0
  439. package/src/adapters/tiktok/subtitles.ts +44 -0
  440. package/src/adapters/twitter/accept.ts +5 -2
  441. package/src/adapters/twitter/browser-fallback.ts +138 -0
  442. package/src/adapters/twitter/browser-state.ts +74 -0
  443. package/src/adapters/twitter/client.ts +51 -21
  444. package/src/adapters/twitter/reply-dm.ts +5 -2
  445. package/src/adapters/twitter/reply.ts +1 -0
  446. package/src/adapters/twitter/search.ts +12 -38
  447. package/src/adapters/twitter/thread.test.ts +43 -0
  448. package/src/adapters/twitter/thread.ts +44 -2
  449. package/src/adapters/twitter/trending.ts +14 -95
  450. package/src/adapters/ukipo/info.yaml +43 -0
  451. package/src/adapters/uspto/get.yaml +67 -0
  452. package/src/adapters/uspto/legal-status.yaml +58 -0
  453. package/src/adapters/uspto/search.yaml +88 -0
  454. package/src/adapters/wipo-patentscope/info.yaml +43 -0
  455. package/src/adapters/xiaohongshu/browser-state.ts +95 -0
  456. package/src/adapters/xiaohongshu/comments.ts +29 -6
  457. package/src/adapters/xiaohongshu/download.ts +60 -11
  458. package/src/adapters/xiaohongshu/search.ts +18 -6
  459. package/src/adapters/xiaohongshu/trending.ts +112 -0
  460. package/src/adapters/yahoo/search.yaml +52 -0
  461. package/src/adapters/youtube/comments-microformat.test.ts +35 -0
  462. package/src/adapters/youtube/comments-tree.test.ts +74 -0
  463. package/src/adapters/youtube/comments.ts +166 -12
  464. package/src/adapters/youtube/subtitles.ts +44 -0
  465. package/src/adapters/yt-dlp/subtitles.ts +43 -0
  466. package/src/adapters/zhihu/answer-detail.test.ts +83 -0
  467. package/src/adapters/zhihu/answer-detail.ts +275 -0
  468. package/src/adapters/zhihu/comment-tree.test.ts +57 -0
  469. package/src/adapters/zhihu/comment.ts +186 -0
  470. package/src/adapters/zhihu/recommend.test.ts +65 -0
  471. package/src/adapters/zhihu/recommend.ts +207 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @owner yt-dlp subtitle adapter.
3
+ * @does Extracts subtitle files from any yt-dlp-supported video URL.
4
+ * @needs Local yt-dlp binary and optional browser cookies for private or rate-limited videos.
5
+ * @feeds Unified social video-text workflows across YouTube, Bilibili, TikTok, Douyin, X, Instagram, and other sites.
6
+ * @breaks Returns an error when yt-dlp cannot produce subtitle files for the requested URL and languages.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=subtitles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtitles.d.ts","sourceRoot":"","sources":["../../../src/adapters/yt-dlp/subtitles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @owner yt-dlp subtitle adapter.
3
+ * @does Extracts subtitle files from any yt-dlp-supported video URL.
4
+ * @needs Local yt-dlp binary and optional browser cookies for private or rate-limited videos.
5
+ * @feeds Unified social video-text workflows across YouTube, Bilibili, TikTok, Douyin, X, Instagram, and other sites.
6
+ * @breaks Returns an error when yt-dlp cannot produce subtitle files for the requested URL and languages.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ import { runVideoSubtitleExtraction } from "../../social/video-text.js";
10
+ cli({
11
+ site: "yt-dlp",
12
+ name: "subtitles",
13
+ description: "Extract subtitles from any yt-dlp-supported video URL with optional browser-cookie reuse",
14
+ strategy: Strategy.PUBLIC,
15
+ args: [
16
+ {
17
+ name: "url",
18
+ type: "str",
19
+ required: true,
20
+ positional: true,
21
+ description: "Video URL",
22
+ format: "uri",
23
+ },
24
+ {
25
+ name: "languages",
26
+ type: "str",
27
+ default: "zh-Hans,zh,en",
28
+ description: "Comma-separated subtitle languages",
29
+ },
30
+ {
31
+ name: "cookies-from-browser",
32
+ type: "str",
33
+ description: "Browser name for yt-dlp --cookies-from-browser",
34
+ },
35
+ ],
36
+ columns: ["language", "text", "path"],
37
+ socialCapabilities: ["read", "media", "subtitles"],
38
+ defaultFormat: "json",
39
+ func: async (_page, kwargs) => runVideoSubtitleExtraction(kwargs),
40
+ });
41
+ //# sourceMappingURL=subtitles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtitles.js","sourceRoot":"","sources":["../../../src/adapters/yt-dlp/subtitles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,GAAG,CAAC;IACF,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,0FAA0F;IAC5F,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,KAAK;SACd;QACD;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,oCAAoC;SAClD;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,gDAAgD;SAC9D;KACF;IACD,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;IACrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;IAClD,aAAa,EAAE,MAAM;IACrB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;CAClE,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @owner src/adapters/zhihu/answer-detail.ts
3
+ * @does Register full-content Zhihu answer detail reader.
4
+ * @needs Logged-in Zhihu browser session, answer API payload, exact answer target parsing.
5
+ * @feeds surface coverage ledger, long-form answer extraction workflows, reference parity checks.
6
+ * @breaks Zhihu answer URL shape or API content field drift can block answer detail extraction.
7
+ */
8
+ interface ZhihuAnswerTarget {
9
+ answerId: string;
10
+ questionId: string;
11
+ }
12
+ interface ZhihuAnswerPayload {
13
+ id?: unknown;
14
+ content?: unknown;
15
+ voteup_count?: unknown;
16
+ comment_count?: unknown;
17
+ created_time?: unknown;
18
+ updated_time?: unknown;
19
+ author?: {
20
+ name?: unknown;
21
+ };
22
+ question?: {
23
+ id?: unknown;
24
+ title?: unknown;
25
+ url?: unknown;
26
+ };
27
+ error?: {
28
+ message?: unknown;
29
+ };
30
+ error_msg?: unknown;
31
+ message?: unknown;
32
+ }
33
+ export declare function stripZhihuAnswerHtml(value: unknown): string;
34
+ export declare function parseZhihuAnswerTarget(input: unknown): ZhihuAnswerTarget;
35
+ export declare function extractQuestionIdFromZhihuUrl(input: unknown): string;
36
+ export declare function parseMaxContent(value: unknown): number;
37
+ export declare function mapZhihuAnswerDetail(payload: ZhihuAnswerPayload, target: ZhihuAnswerTarget, currentQuestionId: string, maxContent: number): Record<string, unknown>;
38
+ export {};
39
+ //# sourceMappingURL=answer-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-detail.d.ts","sourceRoot":"","sources":["../../../src/adapters/zhihu/answer-detail.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5D,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2BD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAa3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAiCxE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD;AAoCD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoCzB"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @owner src/adapters/zhihu/answer-detail.ts
3
+ * @does Register full-content Zhihu answer detail reader.
4
+ * @needs Logged-in Zhihu browser session, answer API payload, exact answer target parsing.
5
+ * @feeds surface coverage ledger, long-form answer extraction workflows, reference parity checks.
6
+ * @breaks Zhihu answer URL shape or API content field drift can block answer detail extraction.
7
+ */
8
+ import { cli, Strategy } from "../../registry.js";
9
+ const ANSWER_ID_RE = /^\d+$/;
10
+ const ANSWER_TYPED_RE = /^answer:(\d+):(\d+)$/;
11
+ const ANSWER_PATH_RE = /^\/question\/(\d+)\/answer\/(\d+)\/?$/;
12
+ const BARE_ANSWER_PATH_RE = /^\/answer\/(\d+)\/?$/;
13
+ const QUESTION_PATH_RE = /^\/question\/(\d+)\/?$/;
14
+ const QUESTION_API_PATH_RE = /^\/api\/v4\/questions\/(\d+)\/?$/;
15
+ function stringField(value) {
16
+ return value === undefined || value === null ? "" : String(value);
17
+ }
18
+ function countField(value) {
19
+ const n = Number(value);
20
+ return Number.isInteger(n) && n >= 0 ? n : 0;
21
+ }
22
+ function isoFromUnixSeconds(value) {
23
+ const n = Number(value);
24
+ return Number.isFinite(n) && n > 0 ? new Date(n * 1000).toISOString() : "";
25
+ }
26
+ function pageOf(page) {
27
+ if (!page)
28
+ throw new Error("Zhihu answer-detail requires a browser page.");
29
+ return page;
30
+ }
31
+ export function stripZhihuAnswerHtml(value) {
32
+ return stringField(value)
33
+ .replace(/<br\s*\/?\s*>/gi, "\n")
34
+ .replace(/<\/(?:p|div|h[1-6]|li|blockquote)>/gi, "\n\n")
35
+ .replace(/<[^>]+>/g, "")
36
+ .replace(/&nbsp;/g, " ")
37
+ .replace(/&lt;/g, "<")
38
+ .replace(/&gt;/g, ">")
39
+ .replace(/&amp;/g, "&")
40
+ .replace(/&quot;/g, '"')
41
+ .replace(/&#39;/g, "'")
42
+ .replace(/\n{3,}/g, "\n\n")
43
+ .trim();
44
+ }
45
+ export function parseZhihuAnswerTarget(input) {
46
+ const value = stringField(input).trim();
47
+ if (!value) {
48
+ throw new Error("Zhihu answer target must be a numeric id, answer URL, or answer:<questionId>:<answerId>.");
49
+ }
50
+ if (ANSWER_ID_RE.test(value))
51
+ return { answerId: value, questionId: "" };
52
+ const typed = value.match(ANSWER_TYPED_RE);
53
+ if (typed)
54
+ return { questionId: typed[1], answerId: typed[2] };
55
+ try {
56
+ const url = new URL(value);
57
+ if (url.protocol !== "https:" ||
58
+ url.username ||
59
+ url.password ||
60
+ url.port ||
61
+ (url.hostname !== "www.zhihu.com" && url.hostname !== "zhihu.com")) {
62
+ throw new Error("invalid host");
63
+ }
64
+ let match = url.pathname.match(ANSWER_PATH_RE);
65
+ if (match)
66
+ return { questionId: match[1], answerId: match[2] };
67
+ match = url.pathname.match(BARE_ANSWER_PATH_RE);
68
+ if (match)
69
+ return { questionId: "", answerId: match[1] };
70
+ }
71
+ catch {
72
+ throw new Error("Zhihu answer target must be a numeric id, answer URL, or answer:<questionId>:<answerId>.");
73
+ }
74
+ throw new Error("Zhihu answer target must be a numeric id, answer URL, or answer:<questionId>:<answerId>.");
75
+ }
76
+ export function extractQuestionIdFromZhihuUrl(input) {
77
+ const value = stringField(input).trim();
78
+ if (!value)
79
+ return "";
80
+ if (!URL.canParse(value))
81
+ return "";
82
+ const url = new URL(value);
83
+ if (url.protocol !== "https:" ||
84
+ (url.hostname !== "www.zhihu.com" && url.hostname !== "zhihu.com")) {
85
+ return "";
86
+ }
87
+ return (url.pathname.match(ANSWER_PATH_RE)?.[1] ??
88
+ url.pathname.match(QUESTION_PATH_RE)?.[1] ??
89
+ url.pathname.match(QUESTION_API_PATH_RE)?.[1] ??
90
+ "");
91
+ }
92
+ export function parseMaxContent(value) {
93
+ const n = value === undefined || value === null ? 0 : Number(value);
94
+ if (!Number.isInteger(n) || n < 0) {
95
+ throw new Error("--max-content must be a non-negative integer.");
96
+ }
97
+ return n;
98
+ }
99
+ async function browserFetchJson(page, url) {
100
+ const raw = await page.evaluate(`(async () => {
101
+ const response = await fetch(${JSON.stringify(url)}, {
102
+ credentials: "include",
103
+ headers: { Accept: "application/json" }
104
+ });
105
+ const text = await response.text();
106
+ return JSON.stringify({ ok: response.ok, status: response.status, text });
107
+ })()`);
108
+ const result = JSON.parse(stringField(raw));
109
+ if (!result.ok) {
110
+ if (result.status === 401 || result.status === 403) {
111
+ throw new Error(`Zhihu answer-detail requires Zhihu cookies (HTTP ${result.status}).`);
112
+ }
113
+ if (result.status === 404) {
114
+ throw new Error("No Zhihu answer was found for the requested id.");
115
+ }
116
+ throw new Error(`Zhihu answer-detail request failed (HTTP ${result.status}).`);
117
+ }
118
+ try {
119
+ return JSON.parse(result.text);
120
+ }
121
+ catch (err) {
122
+ throw new Error(`Zhihu answer-detail returned malformed JSON: ${err instanceof Error ? err.message : String(err)}`);
123
+ }
124
+ }
125
+ export function mapZhihuAnswerDetail(payload, target, currentQuestionId, maxContent) {
126
+ if (payload.error || payload.error_msg || payload.message) {
127
+ throw new Error(`Zhihu answer-detail returned an error payload: ${stringField(payload.error?.message ?? payload.error_msg ?? payload.message)}`);
128
+ }
129
+ if (!Object.prototype.hasOwnProperty.call(payload, "content")) {
130
+ throw new Error("Zhihu answer-detail payload did not include content.");
131
+ }
132
+ const question = payload.question ?? {};
133
+ const questionId = target.questionId ||
134
+ currentQuestionId ||
135
+ extractQuestionIdFromZhihuUrl(question.url) ||
136
+ stringField(question.id);
137
+ const stripped = stripZhihuAnswerHtml(payload.content);
138
+ const content = maxContent > 0 && stripped.length > maxContent
139
+ ? stripped.slice(0, maxContent)
140
+ : stripped;
141
+ return {
142
+ id: target.answerId || stringField(payload.id),
143
+ author: stringField(payload.author?.name) || "anonymous",
144
+ votes: countField(payload.voteup_count),
145
+ comments: countField(payload.comment_count),
146
+ question_id: questionId,
147
+ question_title: stringField(question.title),
148
+ url: questionId
149
+ ? `https://www.zhihu.com/question/${questionId}/answer/${target.answerId}`
150
+ : `https://www.zhihu.com/answer/${target.answerId}`,
151
+ created_at: isoFromUnixSeconds(payload.created_time),
152
+ updated_at: isoFromUnixSeconds(payload.updated_time),
153
+ content,
154
+ };
155
+ }
156
+ cli({
157
+ site: "zhihu",
158
+ name: "answer-detail",
159
+ description: "知乎单个回答完整内容(按 answer ID 获取)",
160
+ domain: "www.zhihu.com",
161
+ strategy: Strategy.COOKIE,
162
+ browser: true,
163
+ args: [
164
+ {
165
+ name: "id",
166
+ type: "str",
167
+ required: true,
168
+ positional: true,
169
+ description: "Answer ID, full Zhihu answer URL, or typed target",
170
+ },
171
+ {
172
+ name: "max-content",
173
+ type: "int",
174
+ default: 0,
175
+ description: "Optional cap on stripped content length; 0 returns full content",
176
+ },
177
+ ],
178
+ columns: [
179
+ "id",
180
+ "author",
181
+ "votes",
182
+ "comments",
183
+ "question_id",
184
+ "question_title",
185
+ "url",
186
+ "created_at",
187
+ "updated_at",
188
+ "content",
189
+ ],
190
+ func: async (page, kwargs) => {
191
+ const browser = pageOf(page);
192
+ const target = parseZhihuAnswerTarget(kwargs.id);
193
+ const maxContent = parseMaxContent(kwargs["max-content"]);
194
+ await browser.goto(`https://www.zhihu.com/answer/${target.answerId}`);
195
+ const currentQuestionId = extractQuestionIdFromZhihuUrl(await browser.url());
196
+ const apiUrl = new URL(`https://www.zhihu.com/api/v4/answers/${target.answerId}`);
197
+ apiUrl.searchParams.set("include", "content,voteup_count,comment_count,author,created_time,updated_time,question");
198
+ const payload = (await browserFetchJson(browser, apiUrl.toString()));
199
+ return [
200
+ mapZhihuAnswerDetail(payload, target, currentQuestionId, maxContent),
201
+ ];
202
+ },
203
+ });
204
+ //# sourceMappingURL=answer-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-detail.js","sourceRoot":"","sources":["../../../src/adapters/zhihu/answer-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @owner Zhihu comment adapter.
3
+ * @does Reads Zhihu answer/article comments and normalizes nested child comments.
4
+ * @needs Zhihu comment_v5 API and z_c0 cookie for authenticated access.
5
+ * @feeds Social comment tree analysis for Zhihu answers and articles.
6
+ * @breaks Zhihu API shape, auth cookie requirements, or anti-bot policy changes.
7
+ */
8
+ export declare function extractZhihuCommentRows(response: unknown): Array<Record<string, unknown>>;
9
+ //# sourceMappingURL=comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../../src/adapters/zhihu/comment.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0DH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,GAChB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAehC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * @owner Zhihu comment adapter.
3
+ * @does Reads Zhihu answer/article comments and normalizes nested child comments.
4
+ * @needs Zhihu comment_v5 API and z_c0 cookie for authenticated access.
5
+ * @feeds Social comment tree analysis for Zhihu answers and articles.
6
+ * @breaks Zhihu API shape, auth cookie requirements, or anti-bot policy changes.
7
+ */
8
+ import { USER_AGENT } from "../../constants.js";
9
+ import { loadCookiesWithCDP, formatCookieHeader, } from "../../engine/cookies.js";
10
+ import { cli, Strategy } from "../../registry.js";
11
+ import { normalizeCommentRows } from "../../social/comments.js";
12
+ function stripHtml(value) {
13
+ return value
14
+ .replace(/<[^>]+>/g, "")
15
+ .replace(/\s+/g, " ")
16
+ .trim();
17
+ }
18
+ function zhihuCreated(value) {
19
+ return value ? new Date(value * 1000).toISOString() : "";
20
+ }
21
+ function zhihuCommentToRow(item, parentId = "") {
22
+ const id = item.id === undefined ? "" : String(item.id);
23
+ return {
24
+ id,
25
+ parent_id: parentId,
26
+ author: item.author?.name ?? "",
27
+ content: stripHtml(item.content ?? ""),
28
+ text: stripHtml(item.content ?? ""),
29
+ likes: item.like_count ?? 0,
30
+ replies: item.child_comment_count ?? item.child_comments?.length ?? 0,
31
+ created: zhihuCreated(item.created_time),
32
+ reply_to: item.reply_to_author?.name ?? "",
33
+ };
34
+ }
35
+ export function extractZhihuCommentRows(response) {
36
+ const data = response.data;
37
+ if (!Array.isArray(data)) {
38
+ throw new Error("Unexpected Zhihu comments response");
39
+ }
40
+ const rows = [];
41
+ for (const root of data) {
42
+ const rootRow = zhihuCommentToRow(root);
43
+ rows.push(rootRow);
44
+ const rootId = String(rootRow.id ?? "");
45
+ for (const child of root.child_comments ?? []) {
46
+ rows.push(zhihuCommentToRow(child, rootId));
47
+ }
48
+ }
49
+ return rows;
50
+ }
51
+ async function zhihuHeaders() {
52
+ const headers = {
53
+ "User-Agent": USER_AGENT,
54
+ Accept: "application/json",
55
+ Referer: "https://www.zhihu.com/",
56
+ };
57
+ const cookies = await loadCookiesWithCDP("zhihu", "www.zhihu.com");
58
+ if (cookies)
59
+ headers.Cookie = formatCookieHeader(cookies);
60
+ return headers;
61
+ }
62
+ async function fetchZhihuJson(url, headers) {
63
+ const response = await fetch(url, { headers });
64
+ if (!response.ok) {
65
+ throw new Error(`Zhihu comments request failed: ${response.status}`);
66
+ }
67
+ return response.json();
68
+ }
69
+ cli({
70
+ site: "zhihu",
71
+ name: "comment",
72
+ description: "Get Zhihu comments with normalized nested reply hierarchy",
73
+ domain: "www.zhihu.com",
74
+ strategy: Strategy.COOKIE,
75
+ args: [
76
+ {
77
+ name: "type",
78
+ required: true,
79
+ positional: true,
80
+ description: "Content type: answer or article",
81
+ choices: ["answer", "article"],
82
+ },
83
+ {
84
+ name: "id",
85
+ required: true,
86
+ positional: true,
87
+ description: "Answer or article ID",
88
+ "x-unicli-kind": "id",
89
+ },
90
+ {
91
+ name: "limit",
92
+ type: "int",
93
+ default: 20,
94
+ description: "Number of root comments",
95
+ },
96
+ {
97
+ name: "with-replies",
98
+ type: "bool",
99
+ default: false,
100
+ description: "Fetch child replies for root comments that omit child_comments",
101
+ },
102
+ ],
103
+ columns: [
104
+ "platform",
105
+ "content_id",
106
+ "comment_id",
107
+ "parent_id",
108
+ "depth",
109
+ "path",
110
+ "author",
111
+ "text",
112
+ "likes",
113
+ "replies",
114
+ "created",
115
+ "content",
116
+ "reply_to",
117
+ ],
118
+ socialCapabilities: ["read", "comments", "comment_replies"],
119
+ func: async (_page, kwargs) => {
120
+ const type = String(kwargs.type);
121
+ const id = String(kwargs.id);
122
+ const limit = Number(kwargs.limit ?? 20);
123
+ const withReplies = Boolean(kwargs["with-replies"]);
124
+ const headers = await zhihuHeaders();
125
+ const rootUrl = `https://www.zhihu.com/api/v4/comment_v5/${encodeURIComponent(type)}s/${encodeURIComponent(id)}/root_comment?limit=${encodeURIComponent(String(limit))}&offset=0&order_by=score`;
126
+ const rootJson = await fetchZhihuJson(rootUrl, headers);
127
+ const rows = extractZhihuCommentRows(rootJson);
128
+ if (withReplies) {
129
+ const roots = rootJson.data ?? [];
130
+ for (const root of roots) {
131
+ const rootId = root.id === undefined ? "" : String(root.id);
132
+ if (!rootId || (root.child_comments?.length ?? 0) > 0)
133
+ continue;
134
+ if ((root.child_comment_count ?? 0) <= 0)
135
+ continue;
136
+ const childUrl = `https://www.zhihu.com/api/v4/comment_v5/comment/${encodeURIComponent(rootId)}/child_comment?limit=20&offset=0&order_by=score`;
137
+ const childJson = await fetchZhihuJson(childUrl, headers);
138
+ for (const child of childJson.data ?? []) {
139
+ rows.push(zhihuCommentToRow(child, rootId));
140
+ }
141
+ }
142
+ }
143
+ return normalizeCommentRows(rows, {
144
+ platform: "zhihu",
145
+ contentId: `${type}:${id}`,
146
+ });
147
+ },
148
+ });
149
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../../src/adapters/zhihu/comment.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAqBhE,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK;SACT,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAkB,EAClB,QAAQ,GAAG,EAAE;IAEb,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO;QACL,EAAE;QACF,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;QAC/B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACtC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;QACrE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QACxC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAiB;IAEjB,MAAM,IAAI,GAAI,QAAiC,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,GAAmC,EAAE,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,OAAO,GAA2B;QACtC,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,wBAAwB;KAClC,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACnE,IAAI,OAAO;QAAE,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,OAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,GAAG,CAAC;IACF,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,2DAA2D;IACxE,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;SAC/B;QACD;YACE,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,sBAAsB;YACnC,eAAe,EAAE,IAAI;SACtB;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,yBAAyB;SACvC;QACD;YACE,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,WAAW,EACT,gEAAgE;SACnE;KACF;IACD,OAAO,EAAE;QACP,UAAU;QACV,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,OAAO;QACP,MAAM;QACN,QAAQ;QACR,MAAM;QACN,OAAO;QACP,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;KACX;IACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC;IAC3D,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,2CAA2C,kBAAkB,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE,CAAC,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC;QACjM,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAI,QAAiC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAChE,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACnD,MAAM,QAAQ,GAAG,mDAAmD,kBAAkB,CAAC,MAAM,CAAC,iDAAiD,CAAC;gBAChJ,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC1D,KAAK,MAAM,KAAK,IAAK,SAAkC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;oBACnE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,oBAAoB,CAAC,IAAI,EAAE;YAChC,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @owner src/adapters/zhihu/recommend.ts
3
+ * @does Register paginated Zhihu home recommendation reader.
4
+ * @needs Logged-in Zhihu browser session, topstory recommendation API, bounded page traversal.
5
+ * @feeds surface coverage ledger, Zhihu discovery workflows, reference parity checks.
6
+ * @breaks Zhihu recommendation API paging or target shape drift can block feed extraction.
7
+ */
8
+ interface ZhihuRecommendItem {
9
+ id?: unknown;
10
+ type?: unknown;
11
+ target?: {
12
+ id?: unknown;
13
+ type?: unknown;
14
+ title?: unknown;
15
+ question?: {
16
+ id?: unknown;
17
+ title?: unknown;
18
+ };
19
+ author?: {
20
+ name?: unknown;
21
+ };
22
+ voteup_count?: unknown;
23
+ reaction?: {
24
+ statistics?: {
25
+ like_count?: unknown;
26
+ };
27
+ };
28
+ };
29
+ }
30
+ export declare function parseZhihuRecommendLimit(value: unknown): number;
31
+ export declare function zhihuRecommendItemKey(item: ZhihuRecommendItem): string;
32
+ export declare function normalizeZhihuRecommendTitle(item: ZhihuRecommendItem): string;
33
+ export declare function normalizeZhihuRecommendUrl(item: ZhihuRecommendItem): string;
34
+ export declare function mapZhihuRecommendItem(item: ZhihuRecommendItem, rank: number): Record<string, unknown>;
35
+ export {};
36
+ //# sourceMappingURL=recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../../src/adapters/zhihu/recommend.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,UAAU,kBAAkB;IAC1B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE;QACP,EAAE,CAAC,EAAE,OAAO,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7C,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE;gBAAE,UAAU,CAAC,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAC;KACtD,CAAC;CACH;AA8BD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ/D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAStE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAI7E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAgB3E;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}