@zenalexa/unicli 0.220.0 → 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 (626) hide show
  1. package/AGENTS.md +35 -22
  2. package/README.md +23 -17
  3. package/README.zh-CN.md +23 -17
  4. package/dist/adapters/anilist/web.d.ts +11 -0
  5. package/dist/adapters/anilist/web.d.ts.map +1 -0
  6. package/dist/adapters/anilist/web.js +284 -0
  7. package/dist/adapters/anilist/web.js.map +1 -0
  8. package/dist/adapters/bangumi/web.d.ts +14 -0
  9. package/dist/adapters/bangumi/web.d.ts.map +1 -0
  10. package/dist/adapters/bangumi/web.js +257 -0
  11. package/dist/adapters/bangumi/web.js.map +1 -0
  12. package/dist/adapters/bilibili/comments.js +66 -4
  13. package/dist/adapters/bilibili/comments.js.map +1 -1
  14. package/dist/adapters/bilibili/compat.js +2 -2
  15. package/dist/adapters/bilibili/compat.js.map +1 -1
  16. package/dist/adapters/bilibili/download.js +4 -4
  17. package/dist/adapters/bilibili/download.js.map +1 -1
  18. package/dist/adapters/bilibili/wbi.d.ts.map +1 -1
  19. package/dist/adapters/bilibili/wbi.js +3 -3
  20. package/dist/adapters/bilibili/wbi.js.map +1 -1
  21. package/dist/adapters/cipo/_shared.d.ts +21 -0
  22. package/dist/adapters/cipo/_shared.d.ts.map +1 -0
  23. package/dist/adapters/cipo/_shared.js +67 -0
  24. package/dist/adapters/cipo/_shared.js.map +1 -0
  25. package/dist/adapters/cipo/get.d.ts +19 -0
  26. package/dist/adapters/cipo/get.d.ts.map +1 -0
  27. package/dist/adapters/cipo/get.js +140 -0
  28. package/dist/adapters/cipo/get.js.map +1 -0
  29. package/dist/adapters/cipo/legal-status.d.ts +19 -0
  30. package/dist/adapters/cipo/legal-status.d.ts.map +1 -0
  31. package/dist/adapters/cipo/legal-status.js +111 -0
  32. package/dist/adapters/cipo/legal-status.js.map +1 -0
  33. package/dist/adapters/cipo/search.d.ts +20 -0
  34. package/dist/adapters/cipo/search.d.ts.map +1 -0
  35. package/dist/adapters/cipo/search.js +148 -0
  36. package/dist/adapters/cipo/search.js.map +1 -0
  37. package/dist/adapters/cnipa/_shared.d.ts +47 -0
  38. package/dist/adapters/cnipa/_shared.d.ts.map +1 -0
  39. package/dist/adapters/cnipa/_shared.js +97 -0
  40. package/dist/adapters/cnipa/_shared.js.map +1 -0
  41. package/dist/adapters/cnipa/get.d.ts +19 -0
  42. package/dist/adapters/cnipa/get.d.ts.map +1 -0
  43. package/dist/adapters/cnipa/get.js +149 -0
  44. package/dist/adapters/cnipa/get.js.map +1 -0
  45. package/dist/adapters/cnipa/legal-status.d.ts +19 -0
  46. package/dist/adapters/cnipa/legal-status.d.ts.map +1 -0
  47. package/dist/adapters/cnipa/legal-status.js +119 -0
  48. package/dist/adapters/cnipa/legal-status.js.map +1 -0
  49. package/dist/adapters/cnipa/search.d.ts +21 -0
  50. package/dist/adapters/cnipa/search.d.ts.map +1 -0
  51. package/dist/adapters/cnipa/search.js +170 -0
  52. package/dist/adapters/cnipa/search.js.map +1 -0
  53. package/dist/adapters/dlsite/web.d.ts +31 -0
  54. package/dist/adapters/dlsite/web.d.ts.map +1 -0
  55. package/dist/adapters/dlsite/web.js +455 -0
  56. package/dist/adapters/dlsite/web.js.map +1 -0
  57. package/dist/adapters/ehentai/web.d.ts +66 -0
  58. package/dist/adapters/ehentai/web.d.ts.map +1 -0
  59. package/dist/adapters/ehentai/web.js +608 -0
  60. package/dist/adapters/ehentai/web.js.map +1 -0
  61. package/dist/adapters/espacenet/_shared.d.ts +21 -0
  62. package/dist/adapters/espacenet/_shared.d.ts.map +1 -0
  63. package/dist/adapters/espacenet/_shared.js +67 -0
  64. package/dist/adapters/espacenet/_shared.js.map +1 -0
  65. package/dist/adapters/espacenet/family.d.ts +19 -0
  66. package/dist/adapters/espacenet/family.d.ts.map +1 -0
  67. package/dist/adapters/espacenet/family.js +118 -0
  68. package/dist/adapters/espacenet/family.js.map +1 -0
  69. package/dist/adapters/espacenet/get.d.ts +19 -0
  70. package/dist/adapters/espacenet/get.d.ts.map +1 -0
  71. package/dist/adapters/espacenet/get.js +130 -0
  72. package/dist/adapters/espacenet/get.js.map +1 -0
  73. package/dist/adapters/espacenet/legal-status.d.ts +19 -0
  74. package/dist/adapters/espacenet/legal-status.d.ts.map +1 -0
  75. package/dist/adapters/espacenet/legal-status.js +110 -0
  76. package/dist/adapters/espacenet/legal-status.js.map +1 -0
  77. package/dist/adapters/espacenet/search.d.ts +20 -0
  78. package/dist/adapters/espacenet/search.d.ts.map +1 -0
  79. package/dist/adapters/espacenet/search.js +165 -0
  80. package/dist/adapters/espacenet/search.js.map +1 -0
  81. package/dist/adapters/facebook/subtitles.d.ts +9 -0
  82. package/dist/adapters/facebook/subtitles.d.ts.map +1 -0
  83. package/dist/adapters/facebook/subtitles.js +42 -0
  84. package/dist/adapters/facebook/subtitles.js.map +1 -0
  85. package/dist/adapters/fips/_shared.d.ts +21 -0
  86. package/dist/adapters/fips/_shared.d.ts.map +1 -0
  87. package/dist/adapters/fips/_shared.js +77 -0
  88. package/dist/adapters/fips/_shared.js.map +1 -0
  89. package/dist/adapters/fips/get.d.ts +19 -0
  90. package/dist/adapters/fips/get.d.ts.map +1 -0
  91. package/dist/adapters/fips/get.js +139 -0
  92. package/dist/adapters/fips/get.js.map +1 -0
  93. package/dist/adapters/fips/search.d.ts +20 -0
  94. package/dist/adapters/fips/search.d.ts.map +1 -0
  95. package/dist/adapters/fips/search.js +148 -0
  96. package/dist/adapters/fips/search.js.map +1 -0
  97. package/dist/adapters/freepatentsonline-web/_shared.d.ts +72 -0
  98. package/dist/adapters/freepatentsonline-web/_shared.d.ts.map +1 -0
  99. package/dist/adapters/freepatentsonline-web/_shared.js +216 -0
  100. package/dist/adapters/freepatentsonline-web/_shared.js.map +1 -0
  101. package/dist/adapters/freepatentsonline-web/get.d.ts +21 -0
  102. package/dist/adapters/freepatentsonline-web/get.d.ts.map +1 -0
  103. package/dist/adapters/freepatentsonline-web/get.js +127 -0
  104. package/dist/adapters/freepatentsonline-web/get.js.map +1 -0
  105. package/dist/adapters/freepatentsonline-web/search.d.ts +22 -0
  106. package/dist/adapters/freepatentsonline-web/search.d.ts.map +1 -0
  107. package/dist/adapters/freepatentsonline-web/search.js +149 -0
  108. package/dist/adapters/freepatentsonline-web/search.js.map +1 -0
  109. package/dist/adapters/google-patents-web/_shared.d.ts +110 -0
  110. package/dist/adapters/google-patents-web/_shared.d.ts.map +1 -0
  111. package/dist/adapters/google-patents-web/_shared.js +164 -0
  112. package/dist/adapters/google-patents-web/_shared.js.map +1 -0
  113. package/dist/adapters/google-patents-web/get.d.ts +36 -0
  114. package/dist/adapters/google-patents-web/get.d.ts.map +1 -0
  115. package/dist/adapters/google-patents-web/get.js +187 -0
  116. package/dist/adapters/google-patents-web/get.js.map +1 -0
  117. package/dist/adapters/google-patents-web/search.d.ts +23 -0
  118. package/dist/adapters/google-patents-web/search.d.ts.map +1 -0
  119. package/dist/adapters/google-patents-web/search.js +169 -0
  120. package/dist/adapters/google-patents-web/search.js.map +1 -0
  121. package/dist/adapters/inpi-br/_shared.d.ts +21 -0
  122. package/dist/adapters/inpi-br/_shared.d.ts.map +1 -0
  123. package/dist/adapters/inpi-br/_shared.js +67 -0
  124. package/dist/adapters/inpi-br/_shared.js.map +1 -0
  125. package/dist/adapters/inpi-br/get.d.ts +19 -0
  126. package/dist/adapters/inpi-br/get.d.ts.map +1 -0
  127. package/dist/adapters/inpi-br/get.js +142 -0
  128. package/dist/adapters/inpi-br/get.js.map +1 -0
  129. package/dist/adapters/inpi-br/search.d.ts +20 -0
  130. package/dist/adapters/inpi-br/search.d.ts.map +1 -0
  131. package/dist/adapters/inpi-br/search.js +154 -0
  132. package/dist/adapters/inpi-br/search.js.map +1 -0
  133. package/dist/adapters/instagram/subtitles.d.ts +9 -0
  134. package/dist/adapters/instagram/subtitles.d.ts.map +1 -0
  135. package/dist/adapters/instagram/subtitles.js +42 -0
  136. package/dist/adapters/instagram/subtitles.js.map +1 -0
  137. package/dist/adapters/jikan/web.d.ts +9 -0
  138. package/dist/adapters/jikan/web.d.ts.map +1 -0
  139. package/dist/adapters/jikan/web.js +154 -0
  140. package/dist/adapters/jikan/web.js.map +1 -0
  141. package/dist/adapters/kitsu/web.d.ts +9 -0
  142. package/dist/adapters/kitsu/web.d.ts.map +1 -0
  143. package/dist/adapters/kitsu/web.js +97 -0
  144. package/dist/adapters/kitsu/web.js.map +1 -0
  145. package/dist/adapters/mangadex/web.d.ts +10 -0
  146. package/dist/adapters/mangadex/web.d.ts.map +1 -0
  147. package/dist/adapters/mangadex/web.js +188 -0
  148. package/dist/adapters/mangadex/web.js.map +1 -0
  149. package/dist/adapters/mastodon/statuses.d.ts +40 -0
  150. package/dist/adapters/mastodon/statuses.d.ts.map +1 -0
  151. package/dist/adapters/mastodon/statuses.js +153 -0
  152. package/dist/adapters/mastodon/statuses.js.map +1 -0
  153. package/dist/adapters/moegirl/web.d.ts +23 -0
  154. package/dist/adapters/moegirl/web.d.ts.map +1 -0
  155. package/dist/adapters/moegirl/web.js +269 -0
  156. package/dist/adapters/moegirl/web.js.map +1 -0
  157. package/dist/adapters/reddit/comments.d.ts +9 -0
  158. package/dist/adapters/reddit/comments.d.ts.map +1 -0
  159. package/dist/adapters/reddit/comments.js +124 -0
  160. package/dist/adapters/reddit/comments.js.map +1 -0
  161. package/dist/adapters/safebooru/web.d.ts +10 -0
  162. package/dist/adapters/safebooru/web.d.ts.map +1 -0
  163. package/dist/adapters/safebooru/web.js +120 -0
  164. package/dist/adapters/safebooru/web.js.map +1 -0
  165. package/dist/adapters/threads/post.d.ts +32 -0
  166. package/dist/adapters/threads/post.d.ts.map +1 -0
  167. package/dist/adapters/threads/post.js +287 -0
  168. package/dist/adapters/threads/post.js.map +1 -0
  169. package/dist/adapters/tiktok/subtitles.d.ts +9 -0
  170. package/dist/adapters/tiktok/subtitles.d.ts.map +1 -0
  171. package/dist/adapters/tiktok/subtitles.js +42 -0
  172. package/dist/adapters/tiktok/subtitles.js.map +1 -0
  173. package/dist/adapters/twitter/accept.js +2 -2
  174. package/dist/adapters/twitter/accept.js.map +1 -1
  175. package/dist/adapters/twitter/browser-fallback.d.ts +26 -0
  176. package/dist/adapters/twitter/browser-fallback.d.ts.map +1 -0
  177. package/dist/adapters/twitter/browser-fallback.js +93 -0
  178. package/dist/adapters/twitter/browser-fallback.js.map +1 -0
  179. package/dist/adapters/twitter/browser-state.d.ts +11 -0
  180. package/dist/adapters/twitter/browser-state.d.ts.map +1 -0
  181. package/dist/adapters/twitter/browser-state.js +46 -0
  182. package/dist/adapters/twitter/browser-state.js.map +1 -0
  183. package/dist/adapters/twitter/client.d.ts.map +1 -1
  184. package/dist/adapters/twitter/client.js +36 -13
  185. package/dist/adapters/twitter/client.js.map +1 -1
  186. package/dist/adapters/twitter/reply-dm.js +2 -2
  187. package/dist/adapters/twitter/reply-dm.js.map +1 -1
  188. package/dist/adapters/twitter/reply.js +1 -0
  189. package/dist/adapters/twitter/reply.js.map +1 -1
  190. package/dist/adapters/twitter/search.js +11 -18
  191. package/dist/adapters/twitter/search.js.map +1 -1
  192. package/dist/adapters/twitter/thread.d.ts +14 -0
  193. package/dist/adapters/twitter/thread.d.ts.map +1 -1
  194. package/dist/adapters/twitter/thread.js +28 -2
  195. package/dist/adapters/twitter/thread.js.map +1 -1
  196. package/dist/adapters/twitter/trending.js +13 -59
  197. package/dist/adapters/twitter/trending.js.map +1 -1
  198. package/dist/adapters/vndb/web.d.ts +10 -0
  199. package/dist/adapters/vndb/web.d.ts.map +1 -0
  200. package/dist/adapters/vndb/web.js +321 -0
  201. package/dist/adapters/vndb/web.js.map +1 -0
  202. package/dist/adapters/xiaohongshu/browser-state.d.ts +19 -0
  203. package/dist/adapters/xiaohongshu/browser-state.d.ts.map +1 -0
  204. package/dist/adapters/xiaohongshu/browser-state.js +67 -0
  205. package/dist/adapters/xiaohongshu/browser-state.js.map +1 -0
  206. package/dist/adapters/xiaohongshu/comments.js +28 -5
  207. package/dist/adapters/xiaohongshu/comments.js.map +1 -1
  208. package/dist/adapters/xiaohongshu/download.js +49 -11
  209. package/dist/adapters/xiaohongshu/download.js.map +1 -1
  210. package/dist/adapters/xiaohongshu/search.d.ts.map +1 -1
  211. package/dist/adapters/xiaohongshu/search.js +11 -5
  212. package/dist/adapters/xiaohongshu/search.js.map +1 -1
  213. package/dist/adapters/xiaohongshu/trending.d.ts +9 -0
  214. package/dist/adapters/xiaohongshu/trending.d.ts.map +1 -0
  215. package/dist/adapters/xiaohongshu/trending.js +94 -0
  216. package/dist/adapters/xiaohongshu/trending.js.map +1 -0
  217. package/dist/adapters/youtube/comments.d.ts +80 -0
  218. package/dist/adapters/youtube/comments.d.ts.map +1 -1
  219. package/dist/adapters/youtube/comments.js +108 -12
  220. package/dist/adapters/youtube/comments.js.map +1 -1
  221. package/dist/adapters/youtube/subtitles.d.ts +9 -0
  222. package/dist/adapters/youtube/subtitles.d.ts.map +1 -0
  223. package/dist/adapters/youtube/subtitles.js +42 -0
  224. package/dist/adapters/youtube/subtitles.js.map +1 -0
  225. package/dist/adapters/yt-dlp/subtitles.d.ts +9 -0
  226. package/dist/adapters/yt-dlp/subtitles.d.ts.map +1 -0
  227. package/dist/adapters/yt-dlp/subtitles.js +41 -0
  228. package/dist/adapters/yt-dlp/subtitles.js.map +1 -0
  229. package/dist/adapters/zhihu/answer-detail.d.ts +39 -0
  230. package/dist/adapters/zhihu/answer-detail.d.ts.map +1 -0
  231. package/dist/adapters/zhihu/answer-detail.js +204 -0
  232. package/dist/adapters/zhihu/answer-detail.js.map +1 -0
  233. package/dist/adapters/zhihu/comment.d.ts +9 -0
  234. package/dist/adapters/zhihu/comment.d.ts.map +1 -0
  235. package/dist/adapters/zhihu/comment.js +149 -0
  236. package/dist/adapters/zhihu/comment.js.map +1 -0
  237. package/dist/adapters/zhihu/recommend.d.ts +36 -0
  238. package/dist/adapters/zhihu/recommend.d.ts.map +1 -0
  239. package/dist/adapters/zhihu/recommend.js +151 -0
  240. package/dist/adapters/zhihu/recommend.js.map +1 -0
  241. package/dist/agents/codex-pack.d.ts +62 -0
  242. package/dist/agents/codex-pack.d.ts.map +1 -0
  243. package/dist/agents/codex-pack.js +163 -0
  244. package/dist/agents/codex-pack.js.map +1 -0
  245. package/dist/browser/bridge.d.ts.map +1 -1
  246. package/dist/browser/bridge.js +14 -3
  247. package/dist/browser/bridge.js.map +1 -1
  248. package/dist/browser/daemon-client.d.ts +6 -0
  249. package/dist/browser/daemon-client.d.ts.map +1 -1
  250. package/dist/browser/daemon-client.js +75 -15
  251. package/dist/browser/daemon-client.js.map +1 -1
  252. package/dist/browser/daemon.js +39 -15
  253. package/dist/browser/daemon.js.map +1 -1
  254. package/dist/browser/protocol.d.ts +1 -0
  255. package/dist/browser/protocol.d.ts.map +1 -1
  256. package/dist/browser/protocol.js +1 -0
  257. package/dist/browser/protocol.js.map +1 -1
  258. package/dist/cli.d.ts.map +1 -1
  259. package/dist/cli.js +6 -0
  260. package/dist/cli.js.map +1 -1
  261. package/dist/commands/agents.d.ts.map +1 -1
  262. package/dist/commands/agents.js +6 -43
  263. package/dist/commands/agents.js.map +1 -1
  264. package/dist/commands/approvals.d.ts.map +1 -1
  265. package/dist/commands/approvals.js +1 -37
  266. package/dist/commands/approvals.js.map +1 -1
  267. package/dist/commands/browser/adapter.d.ts.map +1 -1
  268. package/dist/commands/browser/adapter.js +17 -3
  269. package/dist/commands/browser/adapter.js.map +1 -1
  270. package/dist/commands/browser/index.d.ts.map +1 -1
  271. package/dist/commands/browser/index.js +7 -2
  272. package/dist/commands/browser/index.js.map +1 -1
  273. package/dist/commands/daemon.d.ts.map +1 -1
  274. package/dist/commands/daemon.js +7 -3
  275. package/dist/commands/daemon.js.map +1 -1
  276. package/dist/commands/describe.d.ts.map +1 -1
  277. package/dist/commands/describe.js +6 -7
  278. package/dist/commands/describe.js.map +1 -1
  279. package/dist/commands/dispatch.d.ts +1 -1
  280. package/dist/commands/dispatch.d.ts.map +1 -1
  281. package/dist/commands/dispatch.js +31 -5
  282. package/dist/commands/dispatch.js.map +1 -1
  283. package/dist/commands/mcp.d.ts +1 -1
  284. package/dist/commands/mcp.d.ts.map +1 -1
  285. package/dist/commands/mcp.js +10 -5
  286. package/dist/commands/mcp.js.map +1 -1
  287. package/dist/commands/patent-doctor.d.ts +48 -0
  288. package/dist/commands/patent-doctor.d.ts.map +1 -0
  289. package/dist/commands/patent-doctor.js +109 -0
  290. package/dist/commands/patent-doctor.js.map +1 -0
  291. package/dist/commands/patent.d.ts +78 -0
  292. package/dist/commands/patent.d.ts.map +1 -0
  293. package/dist/commands/patent.js +919 -0
  294. package/dist/commands/patent.js.map +1 -0
  295. package/dist/commands/social.d.ts +19 -0
  296. package/dist/commands/social.d.ts.map +1 -0
  297. package/dist/commands/social.js +236 -0
  298. package/dist/commands/social.js.map +1 -0
  299. package/dist/core/command-contract-lint.d.ts +10 -0
  300. package/dist/core/command-contract-lint.d.ts.map +1 -0
  301. package/dist/core/command-contract-lint.js +41 -0
  302. package/dist/core/command-contract-lint.js.map +1 -0
  303. package/dist/core/command-contract.d.ts +100 -0
  304. package/dist/core/command-contract.d.ts.map +1 -0
  305. package/dist/core/command-contract.js +174 -0
  306. package/dist/core/command-contract.js.map +1 -0
  307. package/dist/core/index.d.ts +2 -0
  308. package/dist/core/index.d.ts.map +1 -1
  309. package/dist/core/index.js +2 -0
  310. package/dist/core/index.js.map +1 -1
  311. package/dist/core/registry.d.ts +1 -1
  312. package/dist/core/registry.d.ts.map +1 -1
  313. package/dist/core/registry.js +11 -2
  314. package/dist/core/registry.js.map +1 -1
  315. package/dist/discovery/aliases.d.ts +2 -2
  316. package/dist/discovery/aliases.d.ts.map +1 -1
  317. package/dist/discovery/aliases.js +464 -6
  318. package/dist/discovery/aliases.js.map +1 -1
  319. package/dist/discovery/loader.d.ts.map +1 -1
  320. package/dist/discovery/loader.js +4 -0
  321. package/dist/discovery/loader.js.map +1 -1
  322. package/dist/discovery/search.d.ts.map +1 -1
  323. package/dist/discovery/search.js +147 -2
  324. package/dist/discovery/search.js.map +1 -1
  325. package/dist/engine/approval-presenter.d.ts +10 -0
  326. package/dist/engine/approval-presenter.d.ts.map +1 -0
  327. package/dist/engine/approval-presenter.js +45 -0
  328. package/dist/engine/approval-presenter.js.map +1 -0
  329. package/dist/engine/approval-store.d.ts +4 -0
  330. package/dist/engine/approval-store.d.ts.map +1 -1
  331. package/dist/engine/approval-store.js +85 -11
  332. package/dist/engine/approval-store.js.map +1 -1
  333. package/dist/engine/args.d.ts.map +1 -1
  334. package/dist/engine/args.js +18 -1
  335. package/dist/engine/args.js.map +1 -1
  336. package/dist/engine/artifact-validation.d.ts +29 -0
  337. package/dist/engine/artifact-validation.d.ts.map +1 -0
  338. package/dist/engine/artifact-validation.js +211 -0
  339. package/dist/engine/artifact-validation.js.map +1 -0
  340. package/dist/engine/auth/oauth2-cc.d.ts +67 -0
  341. package/dist/engine/auth/oauth2-cc.d.ts.map +1 -0
  342. package/dist/engine/auth/oauth2-cc.js +120 -0
  343. package/dist/engine/auth/oauth2-cc.js.map +1 -0
  344. package/dist/engine/browser/diagnostics.d.ts +38 -0
  345. package/dist/engine/browser/diagnostics.d.ts.map +1 -0
  346. package/dist/engine/browser/diagnostics.js +40 -0
  347. package/dist/engine/browser/diagnostics.js.map +1 -0
  348. package/dist/engine/cookies.d.ts +10 -0
  349. package/dist/engine/cookies.d.ts.map +1 -1
  350. package/dist/engine/cookies.js +64 -0
  351. package/dist/engine/cookies.js.map +1 -1
  352. package/dist/engine/download.d.ts +5 -0
  353. package/dist/engine/download.d.ts.map +1 -1
  354. package/dist/engine/download.js +11 -4
  355. package/dist/engine/download.js.map +1 -1
  356. package/dist/engine/executor.d.ts +1 -0
  357. package/dist/engine/executor.d.ts.map +1 -1
  358. package/dist/engine/executor.js +25 -0
  359. package/dist/engine/executor.js.map +1 -1
  360. package/dist/engine/framework.d.ts +5 -5
  361. package/dist/engine/framework.js +5 -5
  362. package/dist/engine/harden.d.ts +1 -1
  363. package/dist/engine/harden.js +1 -1
  364. package/dist/engine/invoke.d.ts +1 -0
  365. package/dist/engine/invoke.d.ts.map +1 -1
  366. package/dist/engine/invoke.js +1 -0
  367. package/dist/engine/invoke.js.map +1 -1
  368. package/dist/engine/kernel/errors.d.ts +11 -0
  369. package/dist/engine/kernel/errors.d.ts.map +1 -0
  370. package/dist/engine/kernel/errors.js +15 -0
  371. package/dist/engine/kernel/errors.js.map +1 -0
  372. package/dist/engine/kernel/execute.d.ts +7 -18
  373. package/dist/engine/kernel/execute.d.ts.map +1 -1
  374. package/dist/engine/kernel/execute.js +25 -410
  375. package/dist/engine/kernel/execute.js.map +1 -1
  376. package/dist/engine/kernel/stages.d.ts +44 -0
  377. package/dist/engine/kernel/stages.d.ts.map +1 -0
  378. package/dist/engine/kernel/stages.js +429 -0
  379. package/dist/engine/kernel/stages.js.map +1 -0
  380. package/dist/engine/kernel/types.d.ts +21 -1
  381. package/dist/engine/kernel/types.d.ts.map +1 -1
  382. package/dist/engine/normalizer/patent-envelope.d.ts +61 -0
  383. package/dist/engine/normalizer/patent-envelope.d.ts.map +1 -0
  384. package/dist/engine/normalizer/patent-envelope.js +132 -0
  385. package/dist/engine/normalizer/patent-envelope.js.map +1 -0
  386. package/dist/engine/research.d.ts +5 -7
  387. package/dist/engine/research.d.ts.map +1 -1
  388. package/dist/engine/research.js +6 -9
  389. package/dist/engine/research.js.map +1 -1
  390. package/dist/engine/steps/browser-helpers.d.ts +2 -2
  391. package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
  392. package/dist/engine/steps/browser-helpers.js +39 -16
  393. package/dist/engine/steps/browser-helpers.js.map +1 -1
  394. package/dist/engine/steps/download.d.ts +2 -0
  395. package/dist/engine/steps/download.d.ts.map +1 -1
  396. package/dist/engine/steps/download.js +13 -7
  397. package/dist/engine/steps/download.js.map +1 -1
  398. package/dist/engine/steps/index.d.ts +2 -0
  399. package/dist/engine/steps/index.d.ts.map +1 -1
  400. package/dist/engine/steps/index.js +2 -0
  401. package/dist/engine/steps/index.js.map +1 -1
  402. package/dist/engine/steps/oauth2-token.d.ts +41 -0
  403. package/dist/engine/steps/oauth2-token.d.ts.map +1 -0
  404. package/dist/engine/steps/oauth2-token.js +115 -0
  405. package/dist/engine/steps/oauth2-token.js.map +1 -0
  406. package/dist/engine/steps/select-xml.d.ts +34 -0
  407. package/dist/engine/steps/select-xml.d.ts.map +1 -0
  408. package/dist/engine/steps/select-xml.js +222 -0
  409. package/dist/engine/steps/select-xml.js.map +1 -0
  410. package/dist/engine/template.d.ts.map +1 -1
  411. package/dist/engine/template.js +7 -0
  412. package/dist/engine/template.js.map +1 -1
  413. package/dist/engine/transport/mcp-browser.d.ts +128 -0
  414. package/dist/engine/transport/mcp-browser.d.ts.map +1 -0
  415. package/dist/engine/transport/mcp-browser.js +120 -0
  416. package/dist/engine/transport/mcp-browser.js.map +1 -0
  417. package/dist/fast-path/handlers/approvals.d.ts +11 -0
  418. package/dist/fast-path/handlers/approvals.d.ts.map +1 -0
  419. package/dist/fast-path/handlers/approvals.js +136 -0
  420. package/dist/fast-path/handlers/approvals.js.map +1 -0
  421. package/dist/fast-path/manifest.d.ts +1 -0
  422. package/dist/fast-path/manifest.d.ts.map +1 -1
  423. package/dist/fast-path/manifest.js.map +1 -1
  424. package/dist/fast-path/render.js +1 -1
  425. package/dist/fast-path/render.js.map +1 -1
  426. package/dist/fast-path.d.ts.map +1 -1
  427. package/dist/fast-path.js +3 -0
  428. package/dist/fast-path.js.map +1 -1
  429. package/dist/index.d.ts +23 -0
  430. package/dist/index.d.ts.map +1 -0
  431. package/dist/index.js +38 -0
  432. package/dist/index.js.map +1 -0
  433. package/dist/manifest-compact.txt +5 -5
  434. package/dist/manifest-search.json +1 -1
  435. package/dist/manifest.json +5189 -55
  436. package/dist/mcp/handler.d.ts.map +1 -1
  437. package/dist/mcp/handler.js +11 -1
  438. package/dist/mcp/handler.js.map +1 -1
  439. package/dist/mcp/server.d.ts +1 -1
  440. package/dist/mcp/server.js +1 -1
  441. package/dist/mcp/tools.d.ts.map +1 -1
  442. package/dist/mcp/tools.js +18 -10
  443. package/dist/mcp/tools.js.map +1 -1
  444. package/dist/output/auth-guidance.d.ts +14 -0
  445. package/dist/output/auth-guidance.d.ts.map +1 -0
  446. package/dist/output/auth-guidance.js +50 -0
  447. package/dist/output/auth-guidance.js.map +1 -0
  448. package/dist/output/error-map.d.ts +1 -1
  449. package/dist/output/error-map.d.ts.map +1 -1
  450. package/dist/output/error-map.js +29 -5
  451. package/dist/output/error-map.js.map +1 -1
  452. package/dist/output/next-actions.d.ts.map +1 -1
  453. package/dist/output/next-actions.js +19 -3
  454. package/dist/output/next-actions.js.map +1 -1
  455. package/dist/registry.d.ts +18 -1
  456. package/dist/registry.d.ts.map +1 -1
  457. package/dist/registry.js +7 -1
  458. package/dist/registry.js.map +1 -1
  459. package/dist/social/browser-errors.d.ts +13 -0
  460. package/dist/social/browser-errors.d.ts.map +1 -0
  461. package/dist/social/browser-errors.js +36 -0
  462. package/dist/social/browser-errors.js.map +1 -0
  463. package/dist/social/capabilities.d.ts +29 -0
  464. package/dist/social/capabilities.d.ts.map +1 -0
  465. package/dist/social/capabilities.js +448 -0
  466. package/dist/social/capabilities.js.map +1 -0
  467. package/dist/social/comments.d.ts +26 -0
  468. package/dist/social/comments.d.ts.map +1 -0
  469. package/dist/social/comments.js +97 -0
  470. package/dist/social/comments.js.map +1 -0
  471. package/dist/social/video-text.d.ts +27 -0
  472. package/dist/social/video-text.d.ts.map +1 -0
  473. package/dist/social/video-text.js +140 -0
  474. package/dist/social/video-text.js.map +1 -0
  475. package/dist/types/patent.d.ts +160 -0
  476. package/dist/types/patent.d.ts.map +1 -0
  477. package/dist/types/patent.js +16 -0
  478. package/dist/types/patent.js.map +1 -0
  479. package/dist/types.d.ts +12 -0
  480. package/dist/types.d.ts.map +1 -1
  481. package/dist/types.js.map +1 -1
  482. package/package.json +10 -5
  483. package/server.json +3 -3
  484. package/skills/unicli/SKILL.md +1 -1
  485. package/skills/unicli-claude-code/SKILL.md +1 -1
  486. package/skills/unicli-hermes/SKILL.md +1 -1
  487. package/src/adapters/anilist/web.test.ts +93 -0
  488. package/src/adapters/anilist/web.ts +341 -0
  489. package/src/adapters/arxiv/download.yaml +53 -0
  490. package/src/adapters/bangumi/web.test.ts +109 -0
  491. package/src/adapters/bangumi/web.ts +295 -0
  492. package/src/adapters/bilibili/comments-tree.test.ts +41 -0
  493. package/src/adapters/bilibili/comments.ts +78 -4
  494. package/src/adapters/bilibili/compat.ts +5 -2
  495. package/src/adapters/bilibili/download.ts +7 -4
  496. package/src/adapters/bilibili/wbi.ts +6 -3
  497. package/src/adapters/brave/search.yaml +53 -0
  498. package/src/adapters/cipo/_shared.ts +98 -0
  499. package/src/adapters/cipo/get.ts +188 -0
  500. package/src/adapters/cipo/legal-status.ts +148 -0
  501. package/src/adapters/cipo/search.ts +195 -0
  502. package/src/adapters/cnipa/_shared.ts +138 -0
  503. package/src/adapters/cnipa/get.ts +199 -0
  504. package/src/adapters/cnipa/legal-status.ts +162 -0
  505. package/src/adapters/cnipa/search.ts +229 -0
  506. package/src/adapters/danbooru/artists.yaml +44 -0
  507. package/src/adapters/danbooru/comments.yaml +45 -0
  508. package/src/adapters/danbooru/detail.yaml +78 -0
  509. package/src/adapters/danbooru/download.yaml +51 -0
  510. package/src/adapters/danbooru/pools.yaml +56 -0
  511. package/src/adapters/danbooru/search.yaml +69 -0
  512. package/src/adapters/danbooru/tags.yaml +42 -0
  513. package/src/adapters/danbooru/wiki.yaml +44 -0
  514. package/src/adapters/dlsite/web.test.ts +132 -0
  515. package/src/adapters/dlsite/web.ts +557 -0
  516. package/src/adapters/dpma/get.yaml +67 -0
  517. package/src/adapters/dpma/search.yaml +77 -0
  518. package/src/adapters/duckduckgo/search.yaml +54 -0
  519. package/src/adapters/duckduckgo/suggest.yaml +52 -0
  520. package/src/adapters/ehentai/web.test.ts +157 -0
  521. package/src/adapters/ehentai/web.ts +750 -0
  522. package/src/adapters/epo/family.yaml +69 -0
  523. package/src/adapters/epo/get.yaml +74 -0
  524. package/src/adapters/epo/legal-status.yaml +63 -0
  525. package/src/adapters/epo/search.yaml +84 -0
  526. package/src/adapters/espacenet/_shared.ts +98 -0
  527. package/src/adapters/espacenet/family.ts +161 -0
  528. package/src/adapters/espacenet/get.ts +185 -0
  529. package/src/adapters/espacenet/legal-status.ts +151 -0
  530. package/src/adapters/espacenet/search.ts +229 -0
  531. package/src/adapters/facebook/subtitles.ts +44 -0
  532. package/src/adapters/fips/_shared.ts +109 -0
  533. package/src/adapters/fips/get.ts +186 -0
  534. package/src/adapters/fips/search.ts +195 -0
  535. package/src/adapters/freepatentsonline-web/_shared.ts +273 -0
  536. package/src/adapters/freepatentsonline-web/get.ts +144 -0
  537. package/src/adapters/freepatentsonline-web/search.ts +170 -0
  538. package/src/adapters/google-patents-bq/prior-art.yaml +80 -0
  539. package/src/adapters/google-patents-bq/search.yaml +97 -0
  540. package/src/adapters/google-patents-web/_shared.ts +242 -0
  541. package/src/adapters/google-patents-web/get.ts +224 -0
  542. package/src/adapters/google-patents-web/search.ts +196 -0
  543. package/src/adapters/inpi-br/_shared.ts +98 -0
  544. package/src/adapters/inpi-br/get.ts +193 -0
  545. package/src/adapters/inpi-br/search.ts +206 -0
  546. package/src/adapters/inpi-fr/get.yaml +62 -0
  547. package/src/adapters/inpi-fr/search.yaml +74 -0
  548. package/src/adapters/instagram/subtitles.ts +44 -0
  549. package/src/adapters/ipaustralia/get.yaml +67 -0
  550. package/src/adapters/ipaustralia/search.yaml +74 -0
  551. package/src/adapters/jikan/web.test.ts +50 -0
  552. package/src/adapters/jikan/web.ts +177 -0
  553. package/src/adapters/jpo/get.yaml +63 -0
  554. package/src/adapters/jpo/search.yaml +76 -0
  555. package/src/adapters/kipris/get.yaml +69 -0
  556. package/src/adapters/kipris/legal-status.yaml +58 -0
  557. package/src/adapters/kipris/search.yaml +79 -0
  558. package/src/adapters/kitsu/web.test.ts +29 -0
  559. package/src/adapters/kitsu/web.ts +109 -0
  560. package/src/adapters/konachan/detail.yaml +62 -0
  561. package/src/adapters/konachan/download.yaml +55 -0
  562. package/src/adapters/konachan/search.yaml +65 -0
  563. package/src/adapters/konachan/tags.yaml +40 -0
  564. package/src/adapters/lens/get.yaml +64 -0
  565. package/src/adapters/lens/search.yaml +82 -0
  566. package/src/adapters/mangadex/web.test.ts +46 -0
  567. package/src/adapters/mangadex/web.ts +210 -0
  568. package/src/adapters/mastodon/statuses.test.ts +82 -0
  569. package/src/adapters/mastodon/statuses.ts +208 -0
  570. package/src/adapters/moegirl/web.test.ts +87 -0
  571. package/src/adapters/moegirl/web.ts +343 -0
  572. package/src/adapters/patsnap/get.yaml +65 -0
  573. package/src/adapters/patsnap/search.yaml +77 -0
  574. package/src/adapters/pdf/read.yaml +49 -0
  575. package/src/adapters/pixiv/download.yaml +15 -2
  576. package/src/adapters/pqai/prior-art.yaml +59 -0
  577. package/src/adapters/pqai/search.yaml +60 -0
  578. package/src/adapters/reddit/comments-tree.test.ts +79 -0
  579. package/src/adapters/reddit/comments.ts +159 -0
  580. package/src/adapters/safebooru/detail.yaml +63 -0
  581. package/src/adapters/safebooru/download.yaml +58 -0
  582. package/src/adapters/safebooru/search.yaml +69 -0
  583. package/src/adapters/safebooru/web.test.ts +60 -0
  584. package/src/adapters/safebooru/web.ts +130 -0
  585. package/src/adapters/threads/post.test.ts +64 -0
  586. package/src/adapters/threads/post.ts +366 -0
  587. package/src/adapters/threads/user.yaml +73 -0
  588. package/src/adapters/tiktok/subtitles.ts +44 -0
  589. package/src/adapters/twitter/accept.ts +5 -2
  590. package/src/adapters/twitter/browser-fallback.ts +138 -0
  591. package/src/adapters/twitter/browser-state.ts +74 -0
  592. package/src/adapters/twitter/client.ts +51 -21
  593. package/src/adapters/twitter/reply-dm.ts +5 -2
  594. package/src/adapters/twitter/reply.ts +1 -0
  595. package/src/adapters/twitter/search.ts +12 -38
  596. package/src/adapters/twitter/thread.test.ts +43 -0
  597. package/src/adapters/twitter/thread.ts +44 -2
  598. package/src/adapters/twitter/trending.ts +14 -95
  599. package/src/adapters/ukipo/info.yaml +43 -0
  600. package/src/adapters/uspto/get.yaml +67 -0
  601. package/src/adapters/uspto/legal-status.yaml +58 -0
  602. package/src/adapters/uspto/search.yaml +88 -0
  603. package/src/adapters/vndb/web.test.ts +86 -0
  604. package/src/adapters/vndb/web.ts +393 -0
  605. package/src/adapters/wipo-patentscope/info.yaml +43 -0
  606. package/src/adapters/xiaohongshu/browser-state.ts +95 -0
  607. package/src/adapters/xiaohongshu/comments.ts +29 -6
  608. package/src/adapters/xiaohongshu/download.ts +60 -11
  609. package/src/adapters/xiaohongshu/search.ts +18 -6
  610. package/src/adapters/xiaohongshu/trending.ts +112 -0
  611. package/src/adapters/yahoo/search.yaml +52 -0
  612. package/src/adapters/yandere/detail.yaml +61 -0
  613. package/src/adapters/yandere/download.yaml +56 -0
  614. package/src/adapters/yandere/search.yaml +67 -0
  615. package/src/adapters/yandere/tags.yaml +41 -0
  616. package/src/adapters/youtube/comments-microformat.test.ts +35 -0
  617. package/src/adapters/youtube/comments-tree.test.ts +74 -0
  618. package/src/adapters/youtube/comments.ts +166 -12
  619. package/src/adapters/youtube/subtitles.ts +44 -0
  620. package/src/adapters/yt-dlp/subtitles.ts +43 -0
  621. package/src/adapters/zhihu/answer-detail.test.ts +83 -0
  622. package/src/adapters/zhihu/answer-detail.ts +275 -0
  623. package/src/adapters/zhihu/comment-tree.test.ts +57 -0
  624. package/src/adapters/zhihu/comment.ts +186 -0
  625. package/src/adapters/zhihu/recommend.test.ts +65 -0
  626. package/src/adapters/zhihu/recommend.ts +207 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::_shared
3
+ * @does Shared helpers for the Espacenet browser-driven adapter — distinct from the EPO OPS HTTP adapter (which lives at src/adapters/epo/*). Espacenet is the no-key public front end; EPO OPS is the keyed REST API.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/types/patent.ts
5
+ * @feeds src/adapters/espacenet/*.ts
6
+ * @breaks none — pure helpers
7
+ * @invariants every transport gap surfaces as a PatentEnvelope row with adapter_path stamped
8
+ * @side-effects none
9
+ * @perf n/a
10
+ * @concurrency safe
11
+ * @test covered transitively
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ import { TransportError, initMcpBrowserTransport, mcpBrowserEvaluate, mcpBrowserNavigate, } from "../../engine/transport/mcp-browser.js";
17
+ import { buildPatentEnvelope } from "../../engine/normalizer/patent-envelope.js";
18
+ export function espacenetEnvelope(code, adapter_path, step, suggestion, alternatives = []) {
19
+ return buildPatentEnvelope({
20
+ code,
21
+ adapter_path,
22
+ step,
23
+ suggestion,
24
+ alternatives,
25
+ retryable: false,
26
+ });
27
+ }
28
+ export function transportErrorToEspacenetEnvelope(err, adapter_path, step) {
29
+ if (err.code === "MCP_BUS_MISSING") {
30
+ return buildPatentEnvelope({
31
+ code: "PATENT_API_DEPRECATED",
32
+ adapter_path,
33
+ step,
34
+ suggestion: "engine has no outbound MCP transport wired into the bus today; install an McpResolver before invoking espacenet browser adapter, or use EPO OPS (src/adapters/epo/*) which exposes a keyed API",
35
+ alternatives: ["epo", "uspto", "lens"],
36
+ retryable: false,
37
+ });
38
+ }
39
+ return buildPatentEnvelope({
40
+ code: "PATENT_API_DEPRECATED",
41
+ adapter_path,
42
+ step,
43
+ suggestion: `mcp-browser transport error (${err.code}): ${err.message}`,
44
+ alternatives: ["epo"],
45
+ retryable: false,
46
+ });
47
+ }
48
+ export async function espacenetNavigateAndExtract(url, expression) {
49
+ const init = await initMcpBrowserTransport();
50
+ if (init.active_server === "none") {
51
+ const code = init.reason === "bus-missing" ? "MCP_BUS_MISSING" : "MCP_NO_SERVER";
52
+ throw new TransportError(code, `mcp-browser unavailable (${init.reason})`);
53
+ }
54
+ const navResult = await mcpBrowserNavigate({ url });
55
+ if (!navResult.ok) {
56
+ throw new TransportError(navResult.code ?? "MCP_NAVIGATE_FAILED", navResult.message ?? "navigate did not succeed");
57
+ }
58
+ const evalResult = await mcpBrowserEvaluate({
59
+ expression,
60
+ tab: navResult.tab,
61
+ });
62
+ if (!evalResult.ok) {
63
+ throw new TransportError(evalResult.code ?? "MCP_EVALUATE_FAILED", evalResult.message ?? "evaluate did not succeed");
64
+ }
65
+ return evalResult;
66
+ }
67
+ //# sourceMappingURL=_shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/adapters/espacenet/_shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAGjF,MAAM,UAAU,iBAAiB,CAC/B,IAAqB,EACrB,YAAoB,EACpB,IAAY,EACZ,UAAkB,EAClB,eAAyB,EAAE;IAE3B,OAAO,mBAAmB,CAAC;QACzB,IAAI;QACJ,YAAY;QACZ,IAAI;QACJ,UAAU;QACV,YAAY;QACZ,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,GAAmB,EACnB,YAAoB,EACpB,IAAY;IAEZ,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACnC,OAAO,mBAAmB,CAAC;YACzB,IAAI,EAAE,uBAAuB;YAC7B,YAAY;YACZ,IAAI;YACJ,UAAU,EACR,gMAAgM;YAClM,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;YACtC,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC;QACzB,IAAI,EAAE,uBAAuB;QAC7B,YAAY;QACZ,IAAI;QACJ,UAAU,EAAE,gCAAgC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE;QACvE,YAAY,EAAE,CAAC,KAAK,CAAC;QACrB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,GAAW,EACX,UAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAC7C,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC;QACtE,MAAM,IAAI,cAAc,CAAC,IAAI,EAAE,4BAA4B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,cAAc,CACtB,SAAS,CAAC,IAAI,IAAI,qBAAqB,EACvC,SAAS,CAAC,OAAO,IAAI,0BAA0B,CAChD,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAI;QAC7C,UAAU;QACV,GAAG,EAAE,SAAS,CAAC,GAAG;KACnB,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,cAAc,CACtB,UAAU,CAAC,IAAI,IAAI,qBAAqB,EACxC,UAAU,CAAC,OAAO,IAAI,0BAA0B,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::family
3
+ * @does Browser-driven Espacenet family lookup — DOCDB simple-family rows visible on the family tab of the detail page; alternative to EPO OPS keyed family broker.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.family)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED (MCP_BUS_MISSING)
7
+ * @invariants output rows carry publication_number + jurisdiction + relationship per PatentFamilyMember shape
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (transport-error shared path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ export declare function runEspacenetFamily(kwargs: {
17
+ publication_number: string;
18
+ }): Promise<unknown[]>;
19
+ //# sourceMappingURL=family.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"family.d.ts","sourceRoot":"","sources":["../../../src/adapters/espacenet/family.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAyCH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAuErB"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::family
3
+ * @does Browser-driven Espacenet family lookup — DOCDB simple-family rows visible on the family tab of the detail page; alternative to EPO OPS keyed family broker.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.family)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED (MCP_BUS_MISSING)
7
+ * @invariants output rows carry publication_number + jurisdiction + relationship per PatentFamilyMember shape
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (transport-error shared path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ import { cli, Strategy } from "../../registry.js";
17
+ import { TransportError } from "../../engine/transport/mcp-browser.js";
18
+ import { espacenetEnvelope, espacenetNavigateAndExtract, transportErrorToEspacenetEnvelope, } from "./_shared.js";
19
+ const ADAPTER_PATH = "src/adapters/espacenet/family.ts";
20
+ const FAMILY_EXTRACTOR = `(() => {
21
+ const rows = Array.from(
22
+ document.querySelectorAll('[data-test="family-row"], .familyRow, tr.family-member')
23
+ ).map((el) => {
24
+ const text = (sel) => {
25
+ const node = el.querySelector(sel);
26
+ return node ? (node.textContent || '').trim() : '';
27
+ };
28
+ return {
29
+ publication_number: text('[data-test="publication-number"], .publicationNumber'),
30
+ jurisdiction: text('[data-test="country"], .country'),
31
+ publication_date: text('[data-test="publication-date"], .publicationDate'),
32
+ };
33
+ });
34
+ return { rows };
35
+ })()`;
36
+ function familyUrlFor(pubNo) {
37
+ return `https://worldwide.espacenet.com/patent/search/family/${encodeURIComponent(pubNo)}`;
38
+ }
39
+ export async function runEspacenetFamily(kwargs) {
40
+ const pubNo = String(kwargs.publication_number ?? "").trim();
41
+ if (pubNo.length === 0) {
42
+ return [
43
+ {
44
+ envelope: espacenetEnvelope("PATENT_INVALID_NUMBER", ADAPTER_PATH, "validate", "espacenet family requires a non-empty publication_number"),
45
+ },
46
+ ];
47
+ }
48
+ const url = familyUrlFor(pubNo);
49
+ let extract;
50
+ try {
51
+ const result = await espacenetNavigateAndExtract(url, FAMILY_EXTRACTOR);
52
+ if (!result.data) {
53
+ return [
54
+ {
55
+ envelope: espacenetEnvelope("PATENT_SCHEMA_DRIFT", ADAPTER_PATH, "evaluate", "espacenet family evaluate returned no data"),
56
+ },
57
+ ];
58
+ }
59
+ extract = result.data;
60
+ }
61
+ catch (err) {
62
+ if (err instanceof TransportError) {
63
+ return [
64
+ {
65
+ envelope: transportErrorToEspacenetEnvelope(err, ADAPTER_PATH, "navigate"),
66
+ },
67
+ ];
68
+ }
69
+ throw err;
70
+ }
71
+ if (extract.rows.length === 0) {
72
+ return [
73
+ {
74
+ envelope: espacenetEnvelope("PATENT_NOT_FOUND", ADAPTER_PATH, "evaluate", `espacenet found no family members for "${pubNo}"`, ["epo"]),
75
+ },
76
+ ];
77
+ }
78
+ return extract.rows
79
+ .filter((row) => row.publication_number)
80
+ .map((row) => ({
81
+ publication_number: row.publication_number,
82
+ jurisdiction: row.jurisdiction || row.publication_number.slice(0, 2).toUpperCase(),
83
+ relationship: "simple_family",
84
+ publication_date: row.publication_date || undefined,
85
+ source_adapter: "espacenet",
86
+ }));
87
+ }
88
+ cli({
89
+ site: "espacenet",
90
+ name: "family",
91
+ description: "Espacenet DOCDB simple-family lookup (browser)",
92
+ domain: "worldwide.espacenet.com",
93
+ strategy: Strategy.PUBLIC,
94
+ adapter_path: ADAPTER_PATH,
95
+ args: [
96
+ {
97
+ name: "publication_number",
98
+ type: "str",
99
+ required: true,
100
+ positional: true,
101
+ description: "ST.16 publication number",
102
+ },
103
+ ],
104
+ columns: [
105
+ "publication_number",
106
+ "jurisdiction",
107
+ "relationship",
108
+ "publication_date",
109
+ ],
110
+ capabilities: [
111
+ "mcp-browser.navigate",
112
+ "mcp-browser.evaluate",
113
+ "patent.family",
114
+ ],
115
+ minimum_capability: "mcp-browser.evaluate",
116
+ func: async (_page, kwargs) => runEspacenetFamily(kwargs),
117
+ });
118
+ //# sourceMappingURL=family.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"family.js","sourceRoot":"","sources":["../../../src/adapters/espacenet/family.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::get
3
+ * @does Browser-driven retrieval of a single Espacenet publication detail page; extracts bibliographic fields and emits a PatentRecord.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.get)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED with MCP_BUS_MISSING
7
+ * @invariants output is a single PatentRecord row when upstream answers; never returns a stub
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (transport-error path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ export declare function runEspacenetGet(kwargs: {
17
+ publication_number: string;
18
+ }): Promise<unknown[]>;
19
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/adapters/espacenet/get.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmDH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA6FrB"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::get
3
+ * @does Browser-driven retrieval of a single Espacenet publication detail page; extracts bibliographic fields and emits a PatentRecord.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.get)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED with MCP_BUS_MISSING
7
+ * @invariants output is a single PatentRecord row when upstream answers; never returns a stub
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (transport-error path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ import { cli, Strategy } from "../../registry.js";
17
+ import { TransportError } from "../../engine/transport/mcp-browser.js";
18
+ import { assemblePatentRecord } from "../../engine/normalizer/patent-envelope.js";
19
+ import { espacenetEnvelope, espacenetNavigateAndExtract, transportErrorToEspacenetEnvelope, } from "./_shared.js";
20
+ const ADAPTER_PATH = "src/adapters/espacenet/get.ts";
21
+ const DETAIL_EXTRACTOR = `(() => {
22
+ const text = (sel) => {
23
+ const node = document.querySelector(sel);
24
+ return node ? (node.textContent || '').trim() : '';
25
+ };
26
+ return {
27
+ publication_number: text('[data-test="publication-number"], .publicationNumber'),
28
+ application_number: text('[data-test="application-number"], .applicationNumber'),
29
+ title: text('[data-test="title"], h1.title, .invention-title'),
30
+ abstract: text('[data-test="abstract"], .abstract'),
31
+ applicant: text('[data-test="applicant"], .applicantName'),
32
+ inventor: text('[data-test="inventor"], .inventorName'),
33
+ publication_date: text('[data-test="publication-date"], .publicationDate'),
34
+ filing_date: text('[data-test="filing-date"], .filingDate'),
35
+ source_url: location.href,
36
+ html_marker: document.body && document.body.innerText
37
+ ? document.body.innerText.slice(0, 200)
38
+ : '',
39
+ };
40
+ })()`;
41
+ function detailUrlFor(pubNo) {
42
+ return `https://worldwide.espacenet.com/patent/search/publication/${encodeURIComponent(pubNo)}`;
43
+ }
44
+ export async function runEspacenetGet(kwargs) {
45
+ const pubNo = String(kwargs.publication_number ?? "").trim();
46
+ if (pubNo.length === 0) {
47
+ return [
48
+ {
49
+ envelope: espacenetEnvelope("PATENT_INVALID_NUMBER", ADAPTER_PATH, "validate", "espacenet get requires a non-empty publication_number"),
50
+ },
51
+ ];
52
+ }
53
+ const url = detailUrlFor(pubNo);
54
+ let detail;
55
+ try {
56
+ const result = await espacenetNavigateAndExtract(url, DETAIL_EXTRACTOR);
57
+ if (!result.data) {
58
+ return [
59
+ {
60
+ envelope: espacenetEnvelope("PATENT_SCHEMA_DRIFT", ADAPTER_PATH, "evaluate", "espacenet detail evaluate returned no data"),
61
+ },
62
+ ];
63
+ }
64
+ detail = result.data;
65
+ }
66
+ catch (err) {
67
+ if (err instanceof TransportError) {
68
+ return [
69
+ {
70
+ envelope: transportErrorToEspacenetEnvelope(err, ADAPTER_PATH, "navigate"),
71
+ },
72
+ ];
73
+ }
74
+ throw err;
75
+ }
76
+ const fieldCount = [detail.publication_number, detail.title].filter(Boolean).length;
77
+ if (fieldCount === 0) {
78
+ return [
79
+ {
80
+ envelope: espacenetEnvelope("PATENT_NOT_FOUND", ADAPTER_PATH, "evaluate", `espacenet detail page for "${pubNo}" yielded no bibliographic fields`, ["epo", "uspto"]),
81
+ },
82
+ ];
83
+ }
84
+ const canonicalPubNo = detail.publication_number || pubNo;
85
+ try {
86
+ return [
87
+ assemblePatentRecord({
88
+ publication_number: canonicalPubNo,
89
+ application_number: detail.application_number || undefined,
90
+ title: detail.title || undefined,
91
+ abstract: detail.abstract || undefined,
92
+ assignees: detail.applicant ? [{ name: detail.applicant }] : undefined,
93
+ inventors: detail.inventor ? [{ name: detail.inventor }] : undefined,
94
+ publication_date: detail.publication_date || undefined,
95
+ filing_date: detail.filing_date || undefined,
96
+ source_adapter: "espacenet",
97
+ source_url: detail.source_url || url,
98
+ }),
99
+ ];
100
+ }
101
+ catch {
102
+ return [
103
+ {
104
+ envelope: espacenetEnvelope("PATENT_NOT_FOUND", ADAPTER_PATH, "normalize", `espacenet detail page for "${pubNo}" did not yield a valid publication_number`, ["epo"]),
105
+ },
106
+ ];
107
+ }
108
+ }
109
+ cli({
110
+ site: "espacenet",
111
+ name: "get",
112
+ description: "Retrieve a single Espacenet publication detail (browser, no key)",
113
+ domain: "worldwide.espacenet.com",
114
+ strategy: Strategy.PUBLIC,
115
+ adapter_path: ADAPTER_PATH,
116
+ args: [
117
+ {
118
+ name: "publication_number",
119
+ type: "str",
120
+ required: true,
121
+ positional: true,
122
+ description: "ST.16 publication number (e.g. EP4123456A1)",
123
+ },
124
+ ],
125
+ columns: ["publication_number", "title", "publication_date", "source_url"],
126
+ capabilities: ["mcp-browser.navigate", "mcp-browser.evaluate", "patent.get"],
127
+ minimum_capability: "mcp-browser.evaluate",
128
+ func: async (_page, kwargs) => runEspacenetGet(kwargs),
129
+ });
130
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/adapters/espacenet/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::legal-status
3
+ * @does Browser-driven Espacenet legal-status lookup — INPADOC events table on the legal-status tab.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.legal-status)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED (MCP_BUS_MISSING)
7
+ * @invariants output row carries legal_status as the most-recent INPADOC event verbatim
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (shared transport-error path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ export declare function runEspacenetLegalStatus(kwargs: {
17
+ publication_number: string;
18
+ }): Promise<unknown[]>;
19
+ //# sourceMappingURL=legal-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legal-status.d.ts","sourceRoot":"","sources":["../../../src/adapters/espacenet/legal-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoCH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAuErB"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::legal-status
3
+ * @does Browser-driven Espacenet legal-status lookup — INPADOC events table on the legal-status tab.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.legal-status)
6
+ * @breaks PATENT_INVALID_NUMBER, PATENT_NOT_FOUND, PATENT_API_DEPRECATED (MCP_BUS_MISSING)
7
+ * @invariants output row carries legal_status as the most-recent INPADOC event verbatim
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts (shared transport-error path)
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only
15
+ */
16
+ import { cli, Strategy } from "../../registry.js";
17
+ import { TransportError } from "../../engine/transport/mcp-browser.js";
18
+ import { espacenetEnvelope, espacenetNavigateAndExtract, transportErrorToEspacenetEnvelope, } from "./_shared.js";
19
+ const ADAPTER_PATH = "src/adapters/espacenet/legal-status.ts";
20
+ const EXTRACTOR = `(() => {
21
+ const text = (sel) => {
22
+ const node = document.querySelector(sel);
23
+ return node ? (node.textContent || '').trim() : '';
24
+ };
25
+ return {
26
+ publication_number: text('[data-test="publication-number"], .publicationNumber'),
27
+ legal_status: text('[data-test="legal-status"] tr:first-child td:nth-child(2), .legalStatus__currentStatus'),
28
+ status_date: text('[data-test="legal-status"] tr:first-child td:nth-child(1), .legalStatus__currentDate'),
29
+ source_url: location.href,
30
+ };
31
+ })()`;
32
+ function legalUrlFor(pubNo) {
33
+ return `https://worldwide.espacenet.com/patent/search/legal-status/${encodeURIComponent(pubNo)}`;
34
+ }
35
+ export async function runEspacenetLegalStatus(kwargs) {
36
+ const pubNo = String(kwargs.publication_number ?? "").trim();
37
+ if (pubNo.length === 0) {
38
+ return [
39
+ {
40
+ envelope: espacenetEnvelope("PATENT_INVALID_NUMBER", ADAPTER_PATH, "validate", "espacenet legal-status requires a non-empty publication_number"),
41
+ },
42
+ ];
43
+ }
44
+ const url = legalUrlFor(pubNo);
45
+ let detail;
46
+ try {
47
+ const result = await espacenetNavigateAndExtract(url, EXTRACTOR);
48
+ if (!result.data) {
49
+ return [
50
+ {
51
+ envelope: espacenetEnvelope("PATENT_SCHEMA_DRIFT", ADAPTER_PATH, "evaluate", "espacenet legal-status evaluate returned no data"),
52
+ },
53
+ ];
54
+ }
55
+ detail = result.data;
56
+ }
57
+ catch (err) {
58
+ if (err instanceof TransportError) {
59
+ return [
60
+ {
61
+ envelope: transportErrorToEspacenetEnvelope(err, ADAPTER_PATH, "navigate"),
62
+ },
63
+ ];
64
+ }
65
+ throw err;
66
+ }
67
+ if (!detail.legal_status) {
68
+ return [
69
+ {
70
+ envelope: espacenetEnvelope("PATENT_NOT_FOUND", ADAPTER_PATH, "evaluate", `espacenet returned no legal_status for "${pubNo}"`, ["epo"]),
71
+ },
72
+ ];
73
+ }
74
+ return [
75
+ {
76
+ publication_number: detail.publication_number || pubNo,
77
+ legal_status: detail.legal_status,
78
+ status_date: detail.status_date,
79
+ source_adapter: "espacenet",
80
+ source_url: detail.source_url || url,
81
+ retrieved_at: new Date().toISOString(),
82
+ },
83
+ ];
84
+ }
85
+ cli({
86
+ site: "espacenet",
87
+ name: "legal-status",
88
+ description: "Espacenet INPADOC legal-status lookup (browser)",
89
+ domain: "worldwide.espacenet.com",
90
+ strategy: Strategy.PUBLIC,
91
+ adapter_path: ADAPTER_PATH,
92
+ args: [
93
+ {
94
+ name: "publication_number",
95
+ type: "str",
96
+ required: true,
97
+ positional: true,
98
+ description: "ST.16 publication number",
99
+ },
100
+ ],
101
+ columns: ["publication_number", "legal_status", "status_date", "source_url"],
102
+ capabilities: [
103
+ "mcp-browser.navigate",
104
+ "mcp-browser.evaluate",
105
+ "patent.legal-status",
106
+ ],
107
+ minimum_capability: "mcp-browser.evaluate",
108
+ func: async (_page, kwargs) => runEspacenetLegalStatus(kwargs),
109
+ });
110
+ //# sourceMappingURL=legal-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legal-status.js","sourceRoot":"","sources":["../../../src/adapters/espacenet/legal-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @owner src::adapters::espacenet::search
3
+ * @does Browser-driven Espacenet front-end search at worldwide.espacenet.com/patent/search — the EPO public no-key fallback for global patent search; complements the keyed EPO OPS adapter at src/adapters/epo/*.
4
+ * @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/adapters/espacenet/_shared.ts, src/registry.ts
5
+ * @feeds src/commands/patent.ts (capability tag patent.search)
6
+ * @breaks PATENT_API_DEPRECATED with MCP_BUS_MISSING when no outbound MCP transport; PATENT_NOT_FOUND on empty result; PATENT_BROWSER_CAPTCHA on EPO's anti-bot challenge
7
+ * @invariants output rows are canonical PatentRecord; source_adapter='espacenet'
8
+ * @side-effects controls Chrome via MCP
9
+ * @perf single navigate + evaluate
10
+ * @concurrency safe
11
+ * @test tests/unit/adapters/espacenet/search.test.ts
12
+ * @stability experimental
13
+ * @since 2026-05-18
14
+ * @verification browser-only (distinct from EPO OPS which is keyed REST)
15
+ */
16
+ export declare function runEspacenetSearch(kwargs: {
17
+ query: string;
18
+ limit?: number;
19
+ }): Promise<unknown[]>;
20
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/adapters/espacenet/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA+DH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAkHrB"}