@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.
- package/AGENTS.md +35 -22
- package/README.md +23 -17
- package/README.zh-CN.md +23 -17
- package/dist/adapters/anilist/web.d.ts +11 -0
- package/dist/adapters/anilist/web.d.ts.map +1 -0
- package/dist/adapters/anilist/web.js +284 -0
- package/dist/adapters/anilist/web.js.map +1 -0
- package/dist/adapters/bangumi/web.d.ts +14 -0
- package/dist/adapters/bangumi/web.d.ts.map +1 -0
- package/dist/adapters/bangumi/web.js +257 -0
- package/dist/adapters/bangumi/web.js.map +1 -0
- package/dist/adapters/bilibili/comments.js +66 -4
- package/dist/adapters/bilibili/comments.js.map +1 -1
- package/dist/adapters/bilibili/compat.js +2 -2
- package/dist/adapters/bilibili/compat.js.map +1 -1
- package/dist/adapters/bilibili/download.js +4 -4
- package/dist/adapters/bilibili/download.js.map +1 -1
- package/dist/adapters/bilibili/wbi.d.ts.map +1 -1
- package/dist/adapters/bilibili/wbi.js +3 -3
- package/dist/adapters/bilibili/wbi.js.map +1 -1
- package/dist/adapters/cipo/_shared.d.ts +21 -0
- package/dist/adapters/cipo/_shared.d.ts.map +1 -0
- package/dist/adapters/cipo/_shared.js +67 -0
- package/dist/adapters/cipo/_shared.js.map +1 -0
- package/dist/adapters/cipo/get.d.ts +19 -0
- package/dist/adapters/cipo/get.d.ts.map +1 -0
- package/dist/adapters/cipo/get.js +140 -0
- package/dist/adapters/cipo/get.js.map +1 -0
- package/dist/adapters/cipo/legal-status.d.ts +19 -0
- package/dist/adapters/cipo/legal-status.d.ts.map +1 -0
- package/dist/adapters/cipo/legal-status.js +111 -0
- package/dist/adapters/cipo/legal-status.js.map +1 -0
- package/dist/adapters/cipo/search.d.ts +20 -0
- package/dist/adapters/cipo/search.d.ts.map +1 -0
- package/dist/adapters/cipo/search.js +148 -0
- package/dist/adapters/cipo/search.js.map +1 -0
- package/dist/adapters/cnipa/_shared.d.ts +47 -0
- package/dist/adapters/cnipa/_shared.d.ts.map +1 -0
- package/dist/adapters/cnipa/_shared.js +97 -0
- package/dist/adapters/cnipa/_shared.js.map +1 -0
- package/dist/adapters/cnipa/get.d.ts +19 -0
- package/dist/adapters/cnipa/get.d.ts.map +1 -0
- package/dist/adapters/cnipa/get.js +149 -0
- package/dist/adapters/cnipa/get.js.map +1 -0
- package/dist/adapters/cnipa/legal-status.d.ts +19 -0
- package/dist/adapters/cnipa/legal-status.d.ts.map +1 -0
- package/dist/adapters/cnipa/legal-status.js +119 -0
- package/dist/adapters/cnipa/legal-status.js.map +1 -0
- package/dist/adapters/cnipa/search.d.ts +21 -0
- package/dist/adapters/cnipa/search.d.ts.map +1 -0
- package/dist/adapters/cnipa/search.js +170 -0
- package/dist/adapters/cnipa/search.js.map +1 -0
- package/dist/adapters/dlsite/web.d.ts +31 -0
- package/dist/adapters/dlsite/web.d.ts.map +1 -0
- package/dist/adapters/dlsite/web.js +455 -0
- package/dist/adapters/dlsite/web.js.map +1 -0
- package/dist/adapters/ehentai/web.d.ts +66 -0
- package/dist/adapters/ehentai/web.d.ts.map +1 -0
- package/dist/adapters/ehentai/web.js +608 -0
- package/dist/adapters/ehentai/web.js.map +1 -0
- package/dist/adapters/espacenet/_shared.d.ts +21 -0
- package/dist/adapters/espacenet/_shared.d.ts.map +1 -0
- package/dist/adapters/espacenet/_shared.js +67 -0
- package/dist/adapters/espacenet/_shared.js.map +1 -0
- package/dist/adapters/espacenet/family.d.ts +19 -0
- package/dist/adapters/espacenet/family.d.ts.map +1 -0
- package/dist/adapters/espacenet/family.js +118 -0
- package/dist/adapters/espacenet/family.js.map +1 -0
- package/dist/adapters/espacenet/get.d.ts +19 -0
- package/dist/adapters/espacenet/get.d.ts.map +1 -0
- package/dist/adapters/espacenet/get.js +130 -0
- package/dist/adapters/espacenet/get.js.map +1 -0
- package/dist/adapters/espacenet/legal-status.d.ts +19 -0
- package/dist/adapters/espacenet/legal-status.d.ts.map +1 -0
- package/dist/adapters/espacenet/legal-status.js +110 -0
- package/dist/adapters/espacenet/legal-status.js.map +1 -0
- package/dist/adapters/espacenet/search.d.ts +20 -0
- package/dist/adapters/espacenet/search.d.ts.map +1 -0
- package/dist/adapters/espacenet/search.js +165 -0
- package/dist/adapters/espacenet/search.js.map +1 -0
- package/dist/adapters/facebook/subtitles.d.ts +9 -0
- package/dist/adapters/facebook/subtitles.d.ts.map +1 -0
- package/dist/adapters/facebook/subtitles.js +42 -0
- package/dist/adapters/facebook/subtitles.js.map +1 -0
- package/dist/adapters/fips/_shared.d.ts +21 -0
- package/dist/adapters/fips/_shared.d.ts.map +1 -0
- package/dist/adapters/fips/_shared.js +77 -0
- package/dist/adapters/fips/_shared.js.map +1 -0
- package/dist/adapters/fips/get.d.ts +19 -0
- package/dist/adapters/fips/get.d.ts.map +1 -0
- package/dist/adapters/fips/get.js +139 -0
- package/dist/adapters/fips/get.js.map +1 -0
- package/dist/adapters/fips/search.d.ts +20 -0
- package/dist/adapters/fips/search.d.ts.map +1 -0
- package/dist/adapters/fips/search.js +148 -0
- package/dist/adapters/fips/search.js.map +1 -0
- package/dist/adapters/freepatentsonline-web/_shared.d.ts +72 -0
- package/dist/adapters/freepatentsonline-web/_shared.d.ts.map +1 -0
- package/dist/adapters/freepatentsonline-web/_shared.js +216 -0
- package/dist/adapters/freepatentsonline-web/_shared.js.map +1 -0
- package/dist/adapters/freepatentsonline-web/get.d.ts +21 -0
- package/dist/adapters/freepatentsonline-web/get.d.ts.map +1 -0
- package/dist/adapters/freepatentsonline-web/get.js +127 -0
- package/dist/adapters/freepatentsonline-web/get.js.map +1 -0
- package/dist/adapters/freepatentsonline-web/search.d.ts +22 -0
- package/dist/adapters/freepatentsonline-web/search.d.ts.map +1 -0
- package/dist/adapters/freepatentsonline-web/search.js +149 -0
- package/dist/adapters/freepatentsonline-web/search.js.map +1 -0
- package/dist/adapters/google-patents-web/_shared.d.ts +110 -0
- package/dist/adapters/google-patents-web/_shared.d.ts.map +1 -0
- package/dist/adapters/google-patents-web/_shared.js +164 -0
- package/dist/adapters/google-patents-web/_shared.js.map +1 -0
- package/dist/adapters/google-patents-web/get.d.ts +36 -0
- package/dist/adapters/google-patents-web/get.d.ts.map +1 -0
- package/dist/adapters/google-patents-web/get.js +187 -0
- package/dist/adapters/google-patents-web/get.js.map +1 -0
- package/dist/adapters/google-patents-web/search.d.ts +23 -0
- package/dist/adapters/google-patents-web/search.d.ts.map +1 -0
- package/dist/adapters/google-patents-web/search.js +169 -0
- package/dist/adapters/google-patents-web/search.js.map +1 -0
- package/dist/adapters/inpi-br/_shared.d.ts +21 -0
- package/dist/adapters/inpi-br/_shared.d.ts.map +1 -0
- package/dist/adapters/inpi-br/_shared.js +67 -0
- package/dist/adapters/inpi-br/_shared.js.map +1 -0
- package/dist/adapters/inpi-br/get.d.ts +19 -0
- package/dist/adapters/inpi-br/get.d.ts.map +1 -0
- package/dist/adapters/inpi-br/get.js +142 -0
- package/dist/adapters/inpi-br/get.js.map +1 -0
- package/dist/adapters/inpi-br/search.d.ts +20 -0
- package/dist/adapters/inpi-br/search.d.ts.map +1 -0
- package/dist/adapters/inpi-br/search.js +154 -0
- package/dist/adapters/inpi-br/search.js.map +1 -0
- package/dist/adapters/instagram/subtitles.d.ts +9 -0
- package/dist/adapters/instagram/subtitles.d.ts.map +1 -0
- package/dist/adapters/instagram/subtitles.js +42 -0
- package/dist/adapters/instagram/subtitles.js.map +1 -0
- package/dist/adapters/jikan/web.d.ts +9 -0
- package/dist/adapters/jikan/web.d.ts.map +1 -0
- package/dist/adapters/jikan/web.js +154 -0
- package/dist/adapters/jikan/web.js.map +1 -0
- package/dist/adapters/kitsu/web.d.ts +9 -0
- package/dist/adapters/kitsu/web.d.ts.map +1 -0
- package/dist/adapters/kitsu/web.js +97 -0
- package/dist/adapters/kitsu/web.js.map +1 -0
- package/dist/adapters/mangadex/web.d.ts +10 -0
- package/dist/adapters/mangadex/web.d.ts.map +1 -0
- package/dist/adapters/mangadex/web.js +188 -0
- package/dist/adapters/mangadex/web.js.map +1 -0
- package/dist/adapters/mastodon/statuses.d.ts +40 -0
- package/dist/adapters/mastodon/statuses.d.ts.map +1 -0
- package/dist/adapters/mastodon/statuses.js +153 -0
- package/dist/adapters/mastodon/statuses.js.map +1 -0
- package/dist/adapters/moegirl/web.d.ts +23 -0
- package/dist/adapters/moegirl/web.d.ts.map +1 -0
- package/dist/adapters/moegirl/web.js +269 -0
- package/dist/adapters/moegirl/web.js.map +1 -0
- package/dist/adapters/reddit/comments.d.ts +9 -0
- package/dist/adapters/reddit/comments.d.ts.map +1 -0
- package/dist/adapters/reddit/comments.js +124 -0
- package/dist/adapters/reddit/comments.js.map +1 -0
- package/dist/adapters/safebooru/web.d.ts +10 -0
- package/dist/adapters/safebooru/web.d.ts.map +1 -0
- package/dist/adapters/safebooru/web.js +120 -0
- package/dist/adapters/safebooru/web.js.map +1 -0
- package/dist/adapters/threads/post.d.ts +32 -0
- package/dist/adapters/threads/post.d.ts.map +1 -0
- package/dist/adapters/threads/post.js +287 -0
- package/dist/adapters/threads/post.js.map +1 -0
- package/dist/adapters/tiktok/subtitles.d.ts +9 -0
- package/dist/adapters/tiktok/subtitles.d.ts.map +1 -0
- package/dist/adapters/tiktok/subtitles.js +42 -0
- package/dist/adapters/tiktok/subtitles.js.map +1 -0
- package/dist/adapters/twitter/accept.js +2 -2
- package/dist/adapters/twitter/accept.js.map +1 -1
- package/dist/adapters/twitter/browser-fallback.d.ts +26 -0
- package/dist/adapters/twitter/browser-fallback.d.ts.map +1 -0
- package/dist/adapters/twitter/browser-fallback.js +93 -0
- package/dist/adapters/twitter/browser-fallback.js.map +1 -0
- package/dist/adapters/twitter/browser-state.d.ts +11 -0
- package/dist/adapters/twitter/browser-state.d.ts.map +1 -0
- package/dist/adapters/twitter/browser-state.js +46 -0
- package/dist/adapters/twitter/browser-state.js.map +1 -0
- package/dist/adapters/twitter/client.d.ts.map +1 -1
- package/dist/adapters/twitter/client.js +36 -13
- package/dist/adapters/twitter/client.js.map +1 -1
- package/dist/adapters/twitter/reply-dm.js +2 -2
- package/dist/adapters/twitter/reply-dm.js.map +1 -1
- package/dist/adapters/twitter/reply.js +1 -0
- package/dist/adapters/twitter/reply.js.map +1 -1
- package/dist/adapters/twitter/search.js +11 -18
- package/dist/adapters/twitter/search.js.map +1 -1
- package/dist/adapters/twitter/thread.d.ts +14 -0
- package/dist/adapters/twitter/thread.d.ts.map +1 -1
- package/dist/adapters/twitter/thread.js +28 -2
- package/dist/adapters/twitter/thread.js.map +1 -1
- package/dist/adapters/twitter/trending.js +13 -59
- package/dist/adapters/twitter/trending.js.map +1 -1
- package/dist/adapters/vndb/web.d.ts +10 -0
- package/dist/adapters/vndb/web.d.ts.map +1 -0
- package/dist/adapters/vndb/web.js +321 -0
- package/dist/adapters/vndb/web.js.map +1 -0
- package/dist/adapters/xiaohongshu/browser-state.d.ts +19 -0
- package/dist/adapters/xiaohongshu/browser-state.d.ts.map +1 -0
- package/dist/adapters/xiaohongshu/browser-state.js +67 -0
- package/dist/adapters/xiaohongshu/browser-state.js.map +1 -0
- package/dist/adapters/xiaohongshu/comments.js +28 -5
- package/dist/adapters/xiaohongshu/comments.js.map +1 -1
- package/dist/adapters/xiaohongshu/download.js +49 -11
- package/dist/adapters/xiaohongshu/download.js.map +1 -1
- package/dist/adapters/xiaohongshu/search.d.ts.map +1 -1
- package/dist/adapters/xiaohongshu/search.js +11 -5
- package/dist/adapters/xiaohongshu/search.js.map +1 -1
- package/dist/adapters/xiaohongshu/trending.d.ts +9 -0
- package/dist/adapters/xiaohongshu/trending.d.ts.map +1 -0
- package/dist/adapters/xiaohongshu/trending.js +94 -0
- package/dist/adapters/xiaohongshu/trending.js.map +1 -0
- package/dist/adapters/youtube/comments.d.ts +80 -0
- package/dist/adapters/youtube/comments.d.ts.map +1 -1
- package/dist/adapters/youtube/comments.js +108 -12
- package/dist/adapters/youtube/comments.js.map +1 -1
- package/dist/adapters/youtube/subtitles.d.ts +9 -0
- package/dist/adapters/youtube/subtitles.d.ts.map +1 -0
- package/dist/adapters/youtube/subtitles.js +42 -0
- package/dist/adapters/youtube/subtitles.js.map +1 -0
- package/dist/adapters/yt-dlp/subtitles.d.ts +9 -0
- package/dist/adapters/yt-dlp/subtitles.d.ts.map +1 -0
- package/dist/adapters/yt-dlp/subtitles.js +41 -0
- package/dist/adapters/yt-dlp/subtitles.js.map +1 -0
- package/dist/adapters/zhihu/answer-detail.d.ts +39 -0
- package/dist/adapters/zhihu/answer-detail.d.ts.map +1 -0
- package/dist/adapters/zhihu/answer-detail.js +204 -0
- package/dist/adapters/zhihu/answer-detail.js.map +1 -0
- package/dist/adapters/zhihu/comment.d.ts +9 -0
- package/dist/adapters/zhihu/comment.d.ts.map +1 -0
- package/dist/adapters/zhihu/comment.js +149 -0
- package/dist/adapters/zhihu/comment.js.map +1 -0
- package/dist/adapters/zhihu/recommend.d.ts +36 -0
- package/dist/adapters/zhihu/recommend.d.ts.map +1 -0
- package/dist/adapters/zhihu/recommend.js +151 -0
- package/dist/adapters/zhihu/recommend.js.map +1 -0
- package/dist/agents/codex-pack.d.ts +62 -0
- package/dist/agents/codex-pack.d.ts.map +1 -0
- package/dist/agents/codex-pack.js +163 -0
- package/dist/agents/codex-pack.js.map +1 -0
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +14 -3
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/daemon-client.d.ts +6 -0
- package/dist/browser/daemon-client.d.ts.map +1 -1
- package/dist/browser/daemon-client.js +75 -15
- package/dist/browser/daemon-client.js.map +1 -1
- package/dist/browser/daemon.js +39 -15
- package/dist/browser/daemon.js.map +1 -1
- package/dist/browser/protocol.d.ts +1 -0
- package/dist/browser/protocol.d.ts.map +1 -1
- package/dist/browser/protocol.js +1 -0
- package/dist/browser/protocol.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +6 -43
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/approvals.d.ts.map +1 -1
- package/dist/commands/approvals.js +1 -37
- package/dist/commands/approvals.js.map +1 -1
- package/dist/commands/browser/adapter.d.ts.map +1 -1
- package/dist/commands/browser/adapter.js +17 -3
- package/dist/commands/browser/adapter.js.map +1 -1
- package/dist/commands/browser/index.d.ts.map +1 -1
- package/dist/commands/browser/index.js +7 -2
- package/dist/commands/browser/index.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +7 -3
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/describe.d.ts.map +1 -1
- package/dist/commands/describe.js +6 -7
- package/dist/commands/describe.js.map +1 -1
- package/dist/commands/dispatch.d.ts +1 -1
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +31 -5
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +10 -5
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/patent-doctor.d.ts +48 -0
- package/dist/commands/patent-doctor.d.ts.map +1 -0
- package/dist/commands/patent-doctor.js +109 -0
- package/dist/commands/patent-doctor.js.map +1 -0
- package/dist/commands/patent.d.ts +78 -0
- package/dist/commands/patent.d.ts.map +1 -0
- package/dist/commands/patent.js +919 -0
- package/dist/commands/patent.js.map +1 -0
- package/dist/commands/social.d.ts +19 -0
- package/dist/commands/social.d.ts.map +1 -0
- package/dist/commands/social.js +236 -0
- package/dist/commands/social.js.map +1 -0
- package/dist/core/command-contract-lint.d.ts +10 -0
- package/dist/core/command-contract-lint.d.ts.map +1 -0
- package/dist/core/command-contract-lint.js +41 -0
- package/dist/core/command-contract-lint.js.map +1 -0
- package/dist/core/command-contract.d.ts +100 -0
- package/dist/core/command-contract.d.ts.map +1 -0
- package/dist/core/command-contract.js +174 -0
- package/dist/core/command-contract.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/registry.d.ts +1 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +11 -2
- package/dist/core/registry.js.map +1 -1
- package/dist/discovery/aliases.d.ts +2 -2
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +464 -6
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +4 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/discovery/search.d.ts.map +1 -1
- package/dist/discovery/search.js +147 -2
- package/dist/discovery/search.js.map +1 -1
- package/dist/engine/approval-presenter.d.ts +10 -0
- package/dist/engine/approval-presenter.d.ts.map +1 -0
- package/dist/engine/approval-presenter.js +45 -0
- package/dist/engine/approval-presenter.js.map +1 -0
- package/dist/engine/approval-store.d.ts +4 -0
- package/dist/engine/approval-store.d.ts.map +1 -1
- package/dist/engine/approval-store.js +85 -11
- package/dist/engine/approval-store.js.map +1 -1
- package/dist/engine/args.d.ts.map +1 -1
- package/dist/engine/args.js +18 -1
- package/dist/engine/args.js.map +1 -1
- package/dist/engine/artifact-validation.d.ts +29 -0
- package/dist/engine/artifact-validation.d.ts.map +1 -0
- package/dist/engine/artifact-validation.js +211 -0
- package/dist/engine/artifact-validation.js.map +1 -0
- package/dist/engine/auth/oauth2-cc.d.ts +67 -0
- package/dist/engine/auth/oauth2-cc.d.ts.map +1 -0
- package/dist/engine/auth/oauth2-cc.js +120 -0
- package/dist/engine/auth/oauth2-cc.js.map +1 -0
- package/dist/engine/browser/diagnostics.d.ts +38 -0
- package/dist/engine/browser/diagnostics.d.ts.map +1 -0
- package/dist/engine/browser/diagnostics.js +40 -0
- package/dist/engine/browser/diagnostics.js.map +1 -0
- package/dist/engine/cookies.d.ts +10 -0
- package/dist/engine/cookies.d.ts.map +1 -1
- package/dist/engine/cookies.js +64 -0
- package/dist/engine/cookies.js.map +1 -1
- package/dist/engine/download.d.ts +5 -0
- package/dist/engine/download.d.ts.map +1 -1
- package/dist/engine/download.js +11 -4
- package/dist/engine/download.js.map +1 -1
- package/dist/engine/executor.d.ts +1 -0
- package/dist/engine/executor.d.ts.map +1 -1
- package/dist/engine/executor.js +25 -0
- package/dist/engine/executor.js.map +1 -1
- package/dist/engine/framework.d.ts +5 -5
- package/dist/engine/framework.js +5 -5
- package/dist/engine/harden.d.ts +1 -1
- package/dist/engine/harden.js +1 -1
- package/dist/engine/invoke.d.ts +1 -0
- package/dist/engine/invoke.d.ts.map +1 -1
- package/dist/engine/invoke.js +1 -0
- package/dist/engine/invoke.js.map +1 -1
- package/dist/engine/kernel/errors.d.ts +11 -0
- package/dist/engine/kernel/errors.d.ts.map +1 -0
- package/dist/engine/kernel/errors.js +15 -0
- package/dist/engine/kernel/errors.js.map +1 -0
- package/dist/engine/kernel/execute.d.ts +7 -18
- package/dist/engine/kernel/execute.d.ts.map +1 -1
- package/dist/engine/kernel/execute.js +25 -410
- package/dist/engine/kernel/execute.js.map +1 -1
- package/dist/engine/kernel/stages.d.ts +44 -0
- package/dist/engine/kernel/stages.d.ts.map +1 -0
- package/dist/engine/kernel/stages.js +429 -0
- package/dist/engine/kernel/stages.js.map +1 -0
- package/dist/engine/kernel/types.d.ts +21 -1
- package/dist/engine/kernel/types.d.ts.map +1 -1
- package/dist/engine/normalizer/patent-envelope.d.ts +61 -0
- package/dist/engine/normalizer/patent-envelope.d.ts.map +1 -0
- package/dist/engine/normalizer/patent-envelope.js +132 -0
- package/dist/engine/normalizer/patent-envelope.js.map +1 -0
- package/dist/engine/research.d.ts +5 -7
- package/dist/engine/research.d.ts.map +1 -1
- package/dist/engine/research.js +6 -9
- package/dist/engine/research.js.map +1 -1
- package/dist/engine/steps/browser-helpers.d.ts +2 -2
- package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
- package/dist/engine/steps/browser-helpers.js +39 -16
- package/dist/engine/steps/browser-helpers.js.map +1 -1
- package/dist/engine/steps/download.d.ts +2 -0
- package/dist/engine/steps/download.d.ts.map +1 -1
- package/dist/engine/steps/download.js +13 -7
- package/dist/engine/steps/download.js.map +1 -1
- package/dist/engine/steps/index.d.ts +2 -0
- package/dist/engine/steps/index.d.ts.map +1 -1
- package/dist/engine/steps/index.js +2 -0
- package/dist/engine/steps/index.js.map +1 -1
- package/dist/engine/steps/oauth2-token.d.ts +41 -0
- package/dist/engine/steps/oauth2-token.d.ts.map +1 -0
- package/dist/engine/steps/oauth2-token.js +115 -0
- package/dist/engine/steps/oauth2-token.js.map +1 -0
- package/dist/engine/steps/select-xml.d.ts +34 -0
- package/dist/engine/steps/select-xml.d.ts.map +1 -0
- package/dist/engine/steps/select-xml.js +222 -0
- package/dist/engine/steps/select-xml.js.map +1 -0
- package/dist/engine/template.d.ts.map +1 -1
- package/dist/engine/template.js +7 -0
- package/dist/engine/template.js.map +1 -1
- package/dist/engine/transport/mcp-browser.d.ts +128 -0
- package/dist/engine/transport/mcp-browser.d.ts.map +1 -0
- package/dist/engine/transport/mcp-browser.js +120 -0
- package/dist/engine/transport/mcp-browser.js.map +1 -0
- package/dist/fast-path/handlers/approvals.d.ts +11 -0
- package/dist/fast-path/handlers/approvals.d.ts.map +1 -0
- package/dist/fast-path/handlers/approvals.js +136 -0
- package/dist/fast-path/handlers/approvals.js.map +1 -0
- package/dist/fast-path/manifest.d.ts +1 -0
- package/dist/fast-path/manifest.d.ts.map +1 -1
- package/dist/fast-path/manifest.js.map +1 -1
- package/dist/fast-path/render.js +1 -1
- package/dist/fast-path/render.js.map +1 -1
- package/dist/fast-path.d.ts.map +1 -1
- package/dist/fast-path.js +3 -0
- package/dist/fast-path.js.map +1 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest-compact.txt +5 -5
- package/dist/manifest-search.json +1 -1
- package/dist/manifest.json +5189 -55
- package/dist/mcp/handler.d.ts.map +1 -1
- package/dist/mcp/handler.js +11 -1
- package/dist/mcp/handler.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +18 -10
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/auth-guidance.d.ts +14 -0
- package/dist/output/auth-guidance.d.ts.map +1 -0
- package/dist/output/auth-guidance.js +50 -0
- package/dist/output/auth-guidance.js.map +1 -0
- package/dist/output/error-map.d.ts +1 -1
- package/dist/output/error-map.d.ts.map +1 -1
- package/dist/output/error-map.js +29 -5
- package/dist/output/error-map.js.map +1 -1
- package/dist/output/next-actions.d.ts.map +1 -1
- package/dist/output/next-actions.js +19 -3
- package/dist/output/next-actions.js.map +1 -1
- package/dist/registry.d.ts +18 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -1
- package/dist/registry.js.map +1 -1
- package/dist/social/browser-errors.d.ts +13 -0
- package/dist/social/browser-errors.d.ts.map +1 -0
- package/dist/social/browser-errors.js +36 -0
- package/dist/social/browser-errors.js.map +1 -0
- package/dist/social/capabilities.d.ts +29 -0
- package/dist/social/capabilities.d.ts.map +1 -0
- package/dist/social/capabilities.js +448 -0
- package/dist/social/capabilities.js.map +1 -0
- package/dist/social/comments.d.ts +26 -0
- package/dist/social/comments.d.ts.map +1 -0
- package/dist/social/comments.js +97 -0
- package/dist/social/comments.js.map +1 -0
- package/dist/social/video-text.d.ts +27 -0
- package/dist/social/video-text.d.ts.map +1 -0
- package/dist/social/video-text.js +140 -0
- package/dist/social/video-text.js.map +1 -0
- package/dist/types/patent.d.ts +160 -0
- package/dist/types/patent.d.ts.map +1 -0
- package/dist/types/patent.js +16 -0
- package/dist/types/patent.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +10 -5
- package/server.json +3 -3
- package/skills/unicli/SKILL.md +1 -1
- package/skills/unicli-claude-code/SKILL.md +1 -1
- package/skills/unicli-hermes/SKILL.md +1 -1
- package/src/adapters/anilist/web.test.ts +93 -0
- package/src/adapters/anilist/web.ts +341 -0
- package/src/adapters/arxiv/download.yaml +53 -0
- package/src/adapters/bangumi/web.test.ts +109 -0
- package/src/adapters/bangumi/web.ts +295 -0
- package/src/adapters/bilibili/comments-tree.test.ts +41 -0
- package/src/adapters/bilibili/comments.ts +78 -4
- package/src/adapters/bilibili/compat.ts +5 -2
- package/src/adapters/bilibili/download.ts +7 -4
- package/src/adapters/bilibili/wbi.ts +6 -3
- package/src/adapters/brave/search.yaml +53 -0
- package/src/adapters/cipo/_shared.ts +98 -0
- package/src/adapters/cipo/get.ts +188 -0
- package/src/adapters/cipo/legal-status.ts +148 -0
- package/src/adapters/cipo/search.ts +195 -0
- package/src/adapters/cnipa/_shared.ts +138 -0
- package/src/adapters/cnipa/get.ts +199 -0
- package/src/adapters/cnipa/legal-status.ts +162 -0
- package/src/adapters/cnipa/search.ts +229 -0
- package/src/adapters/danbooru/artists.yaml +44 -0
- package/src/adapters/danbooru/comments.yaml +45 -0
- package/src/adapters/danbooru/detail.yaml +78 -0
- package/src/adapters/danbooru/download.yaml +51 -0
- package/src/adapters/danbooru/pools.yaml +56 -0
- package/src/adapters/danbooru/search.yaml +69 -0
- package/src/adapters/danbooru/tags.yaml +42 -0
- package/src/adapters/danbooru/wiki.yaml +44 -0
- package/src/adapters/dlsite/web.test.ts +132 -0
- package/src/adapters/dlsite/web.ts +557 -0
- package/src/adapters/dpma/get.yaml +67 -0
- package/src/adapters/dpma/search.yaml +77 -0
- package/src/adapters/duckduckgo/search.yaml +54 -0
- package/src/adapters/duckduckgo/suggest.yaml +52 -0
- package/src/adapters/ehentai/web.test.ts +157 -0
- package/src/adapters/ehentai/web.ts +750 -0
- package/src/adapters/epo/family.yaml +69 -0
- package/src/adapters/epo/get.yaml +74 -0
- package/src/adapters/epo/legal-status.yaml +63 -0
- package/src/adapters/epo/search.yaml +84 -0
- package/src/adapters/espacenet/_shared.ts +98 -0
- package/src/adapters/espacenet/family.ts +161 -0
- package/src/adapters/espacenet/get.ts +185 -0
- package/src/adapters/espacenet/legal-status.ts +151 -0
- package/src/adapters/espacenet/search.ts +229 -0
- package/src/adapters/facebook/subtitles.ts +44 -0
- package/src/adapters/fips/_shared.ts +109 -0
- package/src/adapters/fips/get.ts +186 -0
- package/src/adapters/fips/search.ts +195 -0
- package/src/adapters/freepatentsonline-web/_shared.ts +273 -0
- package/src/adapters/freepatentsonline-web/get.ts +144 -0
- package/src/adapters/freepatentsonline-web/search.ts +170 -0
- package/src/adapters/google-patents-bq/prior-art.yaml +80 -0
- package/src/adapters/google-patents-bq/search.yaml +97 -0
- package/src/adapters/google-patents-web/_shared.ts +242 -0
- package/src/adapters/google-patents-web/get.ts +224 -0
- package/src/adapters/google-patents-web/search.ts +196 -0
- package/src/adapters/inpi-br/_shared.ts +98 -0
- package/src/adapters/inpi-br/get.ts +193 -0
- package/src/adapters/inpi-br/search.ts +206 -0
- package/src/adapters/inpi-fr/get.yaml +62 -0
- package/src/adapters/inpi-fr/search.yaml +74 -0
- package/src/adapters/instagram/subtitles.ts +44 -0
- package/src/adapters/ipaustralia/get.yaml +67 -0
- package/src/adapters/ipaustralia/search.yaml +74 -0
- package/src/adapters/jikan/web.test.ts +50 -0
- package/src/adapters/jikan/web.ts +177 -0
- package/src/adapters/jpo/get.yaml +63 -0
- package/src/adapters/jpo/search.yaml +76 -0
- package/src/adapters/kipris/get.yaml +69 -0
- package/src/adapters/kipris/legal-status.yaml +58 -0
- package/src/adapters/kipris/search.yaml +79 -0
- package/src/adapters/kitsu/web.test.ts +29 -0
- package/src/adapters/kitsu/web.ts +109 -0
- package/src/adapters/konachan/detail.yaml +62 -0
- package/src/adapters/konachan/download.yaml +55 -0
- package/src/adapters/konachan/search.yaml +65 -0
- package/src/adapters/konachan/tags.yaml +40 -0
- package/src/adapters/lens/get.yaml +64 -0
- package/src/adapters/lens/search.yaml +82 -0
- package/src/adapters/mangadex/web.test.ts +46 -0
- package/src/adapters/mangadex/web.ts +210 -0
- package/src/adapters/mastodon/statuses.test.ts +82 -0
- package/src/adapters/mastodon/statuses.ts +208 -0
- package/src/adapters/moegirl/web.test.ts +87 -0
- package/src/adapters/moegirl/web.ts +343 -0
- package/src/adapters/patsnap/get.yaml +65 -0
- package/src/adapters/patsnap/search.yaml +77 -0
- package/src/adapters/pdf/read.yaml +49 -0
- package/src/adapters/pixiv/download.yaml +15 -2
- package/src/adapters/pqai/prior-art.yaml +59 -0
- package/src/adapters/pqai/search.yaml +60 -0
- package/src/adapters/reddit/comments-tree.test.ts +79 -0
- package/src/adapters/reddit/comments.ts +159 -0
- package/src/adapters/safebooru/detail.yaml +63 -0
- package/src/adapters/safebooru/download.yaml +58 -0
- package/src/adapters/safebooru/search.yaml +69 -0
- package/src/adapters/safebooru/web.test.ts +60 -0
- package/src/adapters/safebooru/web.ts +130 -0
- package/src/adapters/threads/post.test.ts +64 -0
- package/src/adapters/threads/post.ts +366 -0
- package/src/adapters/threads/user.yaml +73 -0
- package/src/adapters/tiktok/subtitles.ts +44 -0
- package/src/adapters/twitter/accept.ts +5 -2
- package/src/adapters/twitter/browser-fallback.ts +138 -0
- package/src/adapters/twitter/browser-state.ts +74 -0
- package/src/adapters/twitter/client.ts +51 -21
- package/src/adapters/twitter/reply-dm.ts +5 -2
- package/src/adapters/twitter/reply.ts +1 -0
- package/src/adapters/twitter/search.ts +12 -38
- package/src/adapters/twitter/thread.test.ts +43 -0
- package/src/adapters/twitter/thread.ts +44 -2
- package/src/adapters/twitter/trending.ts +14 -95
- package/src/adapters/ukipo/info.yaml +43 -0
- package/src/adapters/uspto/get.yaml +67 -0
- package/src/adapters/uspto/legal-status.yaml +58 -0
- package/src/adapters/uspto/search.yaml +88 -0
- package/src/adapters/vndb/web.test.ts +86 -0
- package/src/adapters/vndb/web.ts +393 -0
- package/src/adapters/wipo-patentscope/info.yaml +43 -0
- package/src/adapters/xiaohongshu/browser-state.ts +95 -0
- package/src/adapters/xiaohongshu/comments.ts +29 -6
- package/src/adapters/xiaohongshu/download.ts +60 -11
- package/src/adapters/xiaohongshu/search.ts +18 -6
- package/src/adapters/xiaohongshu/trending.ts +112 -0
- package/src/adapters/yahoo/search.yaml +52 -0
- package/src/adapters/yandere/detail.yaml +61 -0
- package/src/adapters/yandere/download.yaml +56 -0
- package/src/adapters/yandere/search.yaml +67 -0
- package/src/adapters/yandere/tags.yaml +41 -0
- package/src/adapters/youtube/comments-microformat.test.ts +35 -0
- package/src/adapters/youtube/comments-tree.test.ts +74 -0
- package/src/adapters/youtube/comments.ts +166 -12
- package/src/adapters/youtube/subtitles.ts +44 -0
- package/src/adapters/yt-dlp/subtitles.ts +43 -0
- package/src/adapters/zhihu/answer-detail.test.ts +83 -0
- package/src/adapters/zhihu/answer-detail.ts +275 -0
- package/src/adapters/zhihu/comment-tree.test.ts +57 -0
- package/src/adapters/zhihu/comment.ts +186 -0
- package/src/adapters/zhihu/recommend.test.ts +65 -0
- package/src/adapters/zhihu/recommend.ts +207 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::google-patents-web::get
|
|
3
|
+
* @does Keyless single-publication detail fetch — parses the SSR meta-tag and `<abstract>` block on https://patents.google.com/patent/<id>/en using regex projection (no DOM, no Chrome).
|
|
4
|
+
* @needs src/adapters/google-patents-web/_shared.ts, src/engine/normalizer/patent-envelope.ts, src/registry.ts
|
|
5
|
+
* @feeds src/commands/patent.ts (capability tag patent.get)
|
|
6
|
+
* @breaks PATENT_NOT_FOUND when the detail page returns 200 but carries no DC.title; PATENT_INVALID_NUMBER for empty input; PATENT_API_DEPRECATED on non-2xx HTTP
|
|
7
|
+
* @invariants output is a single canonical PatentRecord; abstract whitespace is normalised; HTML entities decoded; source_url is the literal page we hit
|
|
8
|
+
* @side-effects HTTPS egress to patents.google.com only
|
|
9
|
+
* @perf single page load (~350 KB); regex parse is linear in document length
|
|
10
|
+
* @concurrency safe — stateless
|
|
11
|
+
* @test verification proof in docs/skills/patent-cookbook.md
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-05-18
|
|
14
|
+
* @verification keyless-best-effort
|
|
15
|
+
*/
|
|
16
|
+
import { cli, Strategy } from "../../registry.js";
|
|
17
|
+
import { assemblePatentRecord } from "../../engine/normalizer/patent-envelope.js";
|
|
18
|
+
import { buildPatentEnvelope } from "../../engine/normalizer/patent-envelope.js";
|
|
19
|
+
import { GooglePatentsHttpError, buildGooglePatentsDetailUrl, fetchGooglePatentsHtml, stripHtml, } from "./_shared.js";
|
|
20
|
+
const ADAPTER_PATH = "src/adapters/google-patents-web/get.ts";
|
|
21
|
+
function extractMetaContent(html, name) {
|
|
22
|
+
const out = [];
|
|
23
|
+
const re = new RegExp(`<meta[^>]+name=["']${name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}["'][^>]*content=["']([^"']*)["']`, "gi");
|
|
24
|
+
let match;
|
|
25
|
+
while ((match = re.exec(html)) !== null) {
|
|
26
|
+
if (match[1])
|
|
27
|
+
out.push(match[1].trim());
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse the Google Patents detail HTML into the subset of fields we surface
|
|
33
|
+
* on PatentRecord. The DC.* meta tags are the documented machine-readable
|
|
34
|
+
* surface (Dublin Core), and citation_* mirrors what Google Scholar's
|
|
35
|
+
* indexing crawler consumes.
|
|
36
|
+
*/
|
|
37
|
+
export function parseGooglePatentsDetail(html) {
|
|
38
|
+
const titleRaw = extractMetaContent(html, "DC.title")[0] ??
|
|
39
|
+
extractMetaContent(html, "citation_title")[0];
|
|
40
|
+
const dcDates = extractMetaContent(html, "DC.date");
|
|
41
|
+
const dcContributors = extractMetaContent(html, "DC.contributor");
|
|
42
|
+
// DC.date is emitted twice on Google Patents: filing then publication.
|
|
43
|
+
const filingDate = dcDates[0];
|
|
44
|
+
const publicationDate = dcDates[1];
|
|
45
|
+
// DC.contributor mixes inventors (personal names) and assignees (org
|
|
46
|
+
// names). Google's convention is inventors first, the assignee last —
|
|
47
|
+
// approximate that, with the last-item-is-assignee heuristic.
|
|
48
|
+
const inventors = [];
|
|
49
|
+
let assignee;
|
|
50
|
+
if (dcContributors.length > 0) {
|
|
51
|
+
assignee = dcContributors[dcContributors.length - 1];
|
|
52
|
+
for (let i = 0; i < dcContributors.length - 1; i++) {
|
|
53
|
+
inventors.push(dcContributors[i]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const applicationNumber = extractMetaContent(html, "citation_patent_application_number")[0];
|
|
57
|
+
// The bibliographic abstract sits in a single `<abstract …>...</abstract>`
|
|
58
|
+
// element. Use a non-greedy match because some pages embed multiple
|
|
59
|
+
// localised abstracts; we want the first.
|
|
60
|
+
let abstractText;
|
|
61
|
+
const abstractMatch = /<abstract\b[^>]*>([\s\S]*?)<\/abstract>/i.exec(html);
|
|
62
|
+
if (abstractMatch) {
|
|
63
|
+
const cleaned = stripHtml(abstractMatch[1]);
|
|
64
|
+
if (cleaned.length > 0)
|
|
65
|
+
abstractText = cleaned;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
title: titleRaw ? titleRaw.trim() : undefined,
|
|
69
|
+
abstract: abstractText,
|
|
70
|
+
inventors,
|
|
71
|
+
assignees: assignee ? [assignee] : [],
|
|
72
|
+
filing_date: filingDate,
|
|
73
|
+
publication_date: publicationDate,
|
|
74
|
+
application_number: applicationNumber,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export async function runGooglePatentsWebGet(kwargs) {
|
|
78
|
+
const raw = String(kwargs.publication_number ?? "").trim();
|
|
79
|
+
if (raw.length === 0) {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
envelope: buildPatentEnvelope({
|
|
83
|
+
code: "PATENT_INVALID_NUMBER",
|
|
84
|
+
adapter_path: ADAPTER_PATH,
|
|
85
|
+
step: "validate",
|
|
86
|
+
suggestion: "google-patents-web get requires a publication_number (e.g. US11741188B2)",
|
|
87
|
+
}),
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
const url = buildGooglePatentsDetailUrl(raw);
|
|
92
|
+
let html;
|
|
93
|
+
try {
|
|
94
|
+
html = await fetchGooglePatentsHtml(url);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err instanceof GooglePatentsHttpError) {
|
|
98
|
+
return [
|
|
99
|
+
{
|
|
100
|
+
envelope: buildPatentEnvelope({
|
|
101
|
+
code: err.status === 404 ? "PATENT_NOT_FOUND" : "PATENT_API_DEPRECATED",
|
|
102
|
+
adapter_path: ADAPTER_PATH,
|
|
103
|
+
step: "fetch",
|
|
104
|
+
suggestion: `Google Patents detail page returned HTTP ${err.status}; verify the publication number or retry against --sources espacenet`,
|
|
105
|
+
alternatives: ["espacenet", "freepatentsonline-web"],
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
const detail = parseGooglePatentsDetail(html);
|
|
113
|
+
if (!detail.title) {
|
|
114
|
+
return [
|
|
115
|
+
{
|
|
116
|
+
envelope: buildPatentEnvelope({
|
|
117
|
+
code: "PATENT_NOT_FOUND",
|
|
118
|
+
adapter_path: ADAPTER_PATH,
|
|
119
|
+
step: "select",
|
|
120
|
+
suggestion: `google-patents-web detail page for "${raw}" yielded no DC.title meta tag`,
|
|
121
|
+
alternatives: ["espacenet", "freepatentsonline-web"],
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
return [
|
|
128
|
+
assemblePatentRecord({
|
|
129
|
+
publication_number: raw,
|
|
130
|
+
application_number: detail.application_number || undefined,
|
|
131
|
+
title: detail.title,
|
|
132
|
+
abstract: detail.abstract,
|
|
133
|
+
inventors: detail.inventors.length > 0
|
|
134
|
+
? detail.inventors.map((name) => ({ name }))
|
|
135
|
+
: undefined,
|
|
136
|
+
assignees: detail.assignees.length > 0
|
|
137
|
+
? detail.assignees.map((name) => ({ name }))
|
|
138
|
+
: undefined,
|
|
139
|
+
filing_date: detail.filing_date,
|
|
140
|
+
publication_date: detail.publication_date,
|
|
141
|
+
source_adapter: "google-patents-web",
|
|
142
|
+
source_url: url,
|
|
143
|
+
}),
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return [
|
|
148
|
+
{
|
|
149
|
+
envelope: buildPatentEnvelope({
|
|
150
|
+
code: "PATENT_NOT_FOUND",
|
|
151
|
+
adapter_path: ADAPTER_PATH,
|
|
152
|
+
step: "normalize",
|
|
153
|
+
suggestion: `google-patents-web detail page for "${raw}" did not yield a canonicalisable publication_number`,
|
|
154
|
+
alternatives: ["espacenet"],
|
|
155
|
+
}),
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
cli({
|
|
161
|
+
site: "google-patents-web",
|
|
162
|
+
name: "get",
|
|
163
|
+
description: "Retrieve a single Google Patents bibliographic record (keyless, no Chrome)",
|
|
164
|
+
domain: "patents.google.com",
|
|
165
|
+
strategy: Strategy.PUBLIC,
|
|
166
|
+
adapter_path: ADAPTER_PATH,
|
|
167
|
+
args: [
|
|
168
|
+
{
|
|
169
|
+
name: "publication_number",
|
|
170
|
+
type: "str",
|
|
171
|
+
required: true,
|
|
172
|
+
positional: true,
|
|
173
|
+
description: "ST.16 publication number, compact or segmented (e.g. US11741188B2 or US-11741188-B2)",
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
columns: [
|
|
177
|
+
"publication_number",
|
|
178
|
+
"title",
|
|
179
|
+
"publication_date",
|
|
180
|
+
"assignees",
|
|
181
|
+
"source_url",
|
|
182
|
+
],
|
|
183
|
+
capabilities: ["http.fetch", "patent.get"],
|
|
184
|
+
minimum_capability: "http.fetch",
|
|
185
|
+
func: async (_page, kwargs) => runGooglePatentsWebGet(kwargs),
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/adapters/google-patents-web/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::google-patents-web::search
|
|
3
|
+
* @does Keyless free-text patent search via the public XHR endpoint that drives patents.google.com — distinct from src/adapters/google-patents-bq which talks to BigQuery and needs a billed GCP project.
|
|
4
|
+
* @needs src/adapters/google-patents-web/_shared.ts, src/engine/normalizer/patent-envelope.ts, src/registry.ts
|
|
5
|
+
* @feeds src/commands/patent.ts (capability tag patent.search)
|
|
6
|
+
* @breaks PATENT_API_DEPRECATED with status code embedded when the XHR returns non-2xx (typically 403 → suspected UA gating); PATENT_NOT_FOUND on empty result; PATENT_SCHEMA_DRIFT when the JSON shape no longer carries results.cluster[].result[]
|
|
7
|
+
* @invariants output rows are canonical PatentRecord; source_adapter='google-patents-web'; results are server-ordered (Google's relevance ranking)
|
|
8
|
+
* @side-effects HTTPS egress to patents.google.com only — no env reads, no cookies, no auth
|
|
9
|
+
* @perf single XHR request, ~40-100 KB; results capped at min(limit, 100) per call
|
|
10
|
+
* @concurrency safe — stateless
|
|
11
|
+
* @test verification proof captured in docs/skills/patent-cookbook.md (recipe: day-zero search)
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-05-18
|
|
14
|
+
* @verification keyless-best-effort — Google does not publish a stability contract for this XHR; we live-call it from the same User-Agent the public site uses
|
|
15
|
+
*/
|
|
16
|
+
interface SearchArgs {
|
|
17
|
+
query?: unknown;
|
|
18
|
+
limit?: unknown;
|
|
19
|
+
since?: unknown;
|
|
20
|
+
}
|
|
21
|
+
export declare function runGooglePatentsWebSearch(kwargs: SearchArgs): Promise<unknown[]>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/adapters/google-patents-web/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAcD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,OAAO,EAAE,CAAC,CAuGpB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::google-patents-web::search
|
|
3
|
+
* @does Keyless free-text patent search via the public XHR endpoint that drives patents.google.com — distinct from src/adapters/google-patents-bq which talks to BigQuery and needs a billed GCP project.
|
|
4
|
+
* @needs src/adapters/google-patents-web/_shared.ts, src/engine/normalizer/patent-envelope.ts, src/registry.ts
|
|
5
|
+
* @feeds src/commands/patent.ts (capability tag patent.search)
|
|
6
|
+
* @breaks PATENT_API_DEPRECATED with status code embedded when the XHR returns non-2xx (typically 403 → suspected UA gating); PATENT_NOT_FOUND on empty result; PATENT_SCHEMA_DRIFT when the JSON shape no longer carries results.cluster[].result[]
|
|
7
|
+
* @invariants output rows are canonical PatentRecord; source_adapter='google-patents-web'; results are server-ordered (Google's relevance ranking)
|
|
8
|
+
* @side-effects HTTPS egress to patents.google.com only — no env reads, no cookies, no auth
|
|
9
|
+
* @perf single XHR request, ~40-100 KB; results capped at min(limit, 100) per call
|
|
10
|
+
* @concurrency safe — stateless
|
|
11
|
+
* @test verification proof captured in docs/skills/patent-cookbook.md (recipe: day-zero search)
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-05-18
|
|
14
|
+
* @verification keyless-best-effort — Google does not publish a stability contract for this XHR; we live-call it from the same User-Agent the public site uses
|
|
15
|
+
*/
|
|
16
|
+
import { cli, Strategy } from "../../registry.js";
|
|
17
|
+
import { assemblePatentRecord } from "../../engine/normalizer/patent-envelope.js";
|
|
18
|
+
import { buildPatentEnvelope } from "../../engine/normalizer/patent-envelope.js";
|
|
19
|
+
import { GooglePatentsHttpError, buildGooglePatentsXhrUrl, fetchGooglePatentsJson, flattenGoogleXhrResults, projectGoogleRowToRecord, } from "./_shared.js";
|
|
20
|
+
const ADAPTER_PATH = "src/adapters/google-patents-web/search.ts";
|
|
21
|
+
function clampLimit(raw) {
|
|
22
|
+
const num = typeof raw === "number" ? raw : Number(raw);
|
|
23
|
+
if (!Number.isFinite(num) || num <= 0)
|
|
24
|
+
return 25;
|
|
25
|
+
return Math.min(100, Math.max(1, Math.floor(num)));
|
|
26
|
+
}
|
|
27
|
+
function normaliseSince(raw) {
|
|
28
|
+
if (typeof raw !== "string")
|
|
29
|
+
return undefined;
|
|
30
|
+
const trimmed = raw.trim();
|
|
31
|
+
return /^\d{4}$/.test(trimmed) ? trimmed : undefined;
|
|
32
|
+
}
|
|
33
|
+
export async function runGooglePatentsWebSearch(kwargs) {
|
|
34
|
+
const query = String(kwargs.query ?? "").trim();
|
|
35
|
+
if (query.length === 0) {
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
envelope: buildPatentEnvelope({
|
|
39
|
+
code: "PATENT_UNSUPPORTED_QUERY",
|
|
40
|
+
adapter_path: ADAPTER_PATH,
|
|
41
|
+
step: "validate",
|
|
42
|
+
suggestion: "google-patents-web search requires a non-empty query",
|
|
43
|
+
alternatives: ["freepatentsonline-web"],
|
|
44
|
+
}),
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
const limit = clampLimit(kwargs.limit);
|
|
49
|
+
const since = normaliseSince(kwargs.since);
|
|
50
|
+
const url = buildGooglePatentsXhrUrl(query, limit, since);
|
|
51
|
+
let body;
|
|
52
|
+
try {
|
|
53
|
+
body = await fetchGooglePatentsJson(url);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err instanceof GooglePatentsHttpError) {
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
envelope: buildPatentEnvelope({
|
|
60
|
+
code: err.status === 429
|
|
61
|
+
? "PATENT_RATE_LIMIT"
|
|
62
|
+
: err.status === 403
|
|
63
|
+
? "PATENT_REGION_BLOCKED"
|
|
64
|
+
: "PATENT_API_DEPRECATED",
|
|
65
|
+
adapter_path: ADAPTER_PATH,
|
|
66
|
+
step: "fetch",
|
|
67
|
+
suggestion: `Google Patents XHR returned HTTP ${err.status} for ${err.url}; retry with --sources freepatentsonline-web, or check if Google now requires a session cookie`,
|
|
68
|
+
alternatives: ["freepatentsonline-web", "espacenet"],
|
|
69
|
+
retryable: err.status === 429,
|
|
70
|
+
}),
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
const rows = flattenGoogleXhrResults(body);
|
|
77
|
+
if (rows.length === 0) {
|
|
78
|
+
if (!body.results || !Array.isArray(body.results.cluster)) {
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
envelope: buildPatentEnvelope({
|
|
82
|
+
code: "PATENT_SCHEMA_DRIFT",
|
|
83
|
+
adapter_path: ADAPTER_PATH,
|
|
84
|
+
step: "select",
|
|
85
|
+
suggestion: "Google Patents XHR no longer carries results.cluster[].result[]; the adapter's flattenGoogleXhrResults projection needs updating",
|
|
86
|
+
alternatives: ["freepatentsonline-web"],
|
|
87
|
+
}),
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
return [
|
|
92
|
+
{
|
|
93
|
+
envelope: buildPatentEnvelope({
|
|
94
|
+
code: "PATENT_NOT_FOUND",
|
|
95
|
+
adapter_path: ADAPTER_PATH,
|
|
96
|
+
step: "select",
|
|
97
|
+
suggestion: `google-patents-web returned no rows for "${query}"`,
|
|
98
|
+
alternatives: ["freepatentsonline-web", "espacenet"],
|
|
99
|
+
}),
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
const out = [];
|
|
104
|
+
for (const row of rows.slice(0, limit)) {
|
|
105
|
+
const partial = projectGoogleRowToRecord(row, url);
|
|
106
|
+
if (!partial.publication_number)
|
|
107
|
+
continue;
|
|
108
|
+
try {
|
|
109
|
+
out.push(assemblePatentRecord(partial));
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Rows whose publication_number cannot be canonicalised are skipped
|
|
113
|
+
// rather than synthesised — we never invent ST.16 fields.
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (out.length === 0) {
|
|
117
|
+
return [
|
|
118
|
+
{
|
|
119
|
+
envelope: buildPatentEnvelope({
|
|
120
|
+
code: "PATENT_NOT_FOUND",
|
|
121
|
+
adapter_path: ADAPTER_PATH,
|
|
122
|
+
step: "normalize",
|
|
123
|
+
suggestion: `google-patents-web returned ${rows.length} rows but none carried a canonicalisable publication_number`,
|
|
124
|
+
alternatives: ["freepatentsonline-web", "espacenet"],
|
|
125
|
+
}),
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
cli({
|
|
132
|
+
site: "google-patents-web",
|
|
133
|
+
name: "search",
|
|
134
|
+
description: "Keyless Google Patents search via the public XHR endpoint (no API key, no Chrome required)",
|
|
135
|
+
domain: "patents.google.com",
|
|
136
|
+
strategy: Strategy.PUBLIC,
|
|
137
|
+
adapter_path: ADAPTER_PATH,
|
|
138
|
+
args: [
|
|
139
|
+
{
|
|
140
|
+
name: "query",
|
|
141
|
+
type: "str",
|
|
142
|
+
required: true,
|
|
143
|
+
positional: true,
|
|
144
|
+
description: "Free-text query (Google Patents smart-search syntax)",
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "limit",
|
|
148
|
+
type: "int",
|
|
149
|
+
default: 25,
|
|
150
|
+
description: "Max results to return (1-100)",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: "since",
|
|
154
|
+
type: "str",
|
|
155
|
+
description: "Earliest publication year (YYYY); translated to after:publication:YYYY0101",
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
columns: [
|
|
159
|
+
"publication_number",
|
|
160
|
+
"title",
|
|
161
|
+
"publication_date",
|
|
162
|
+
"assignees",
|
|
163
|
+
"source_url",
|
|
164
|
+
],
|
|
165
|
+
capabilities: ["http.fetch", "patent.search"],
|
|
166
|
+
minimum_capability: "http.fetch",
|
|
167
|
+
func: async (_page, kwargs) => runGooglePatentsWebSearch(kwargs),
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/adapters/google-patents-web/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::inpi-br::_shared
|
|
3
|
+
* @does Shared helpers for the INPI Brasil browser adapter — busca.inpi.gov.br/pePI/ has no programmatic API today (pre-API status); the browser route is the only path.
|
|
4
|
+
* @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/types/patent.ts
|
|
5
|
+
* @feeds src/adapters/inpi-br/*.ts
|
|
6
|
+
* @breaks none — pure helpers
|
|
7
|
+
* @invariants every transport gap surfaces as a PatentEnvelope row
|
|
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, type McpBrowserResult } from "../../engine/transport/mcp-browser.js";
|
|
17
|
+
import type { PatentEnvelope, PatentErrorCode } from "../../types/patent.js";
|
|
18
|
+
export declare function inpiBrEnvelope(code: PatentErrorCode, adapter_path: string, step: string, suggestion: string, alternatives?: string[]): PatentEnvelope;
|
|
19
|
+
export declare function transportErrorToInpiBrEnvelope(err: TransportError, adapter_path: string, step: string): PatentEnvelope;
|
|
20
|
+
export declare function inpiBrNavigateAndExtract<T>(url: string, expression: string): Promise<McpBrowserResult<T>>;
|
|
21
|
+
//# sourceMappingURL=_shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../../src/adapters/inpi-br/_shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,cAAc,EAId,KAAK,gBAAgB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7E,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,MAAM,EAAO,GAC1B,cAAc,CAShB;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACX,cAAc,CAoBhB;AAED,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAyB9B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::inpi-br::_shared
|
|
3
|
+
* @does Shared helpers for the INPI Brasil browser adapter — busca.inpi.gov.br/pePI/ has no programmatic API today (pre-API status); the browser route is the only path.
|
|
4
|
+
* @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/types/patent.ts
|
|
5
|
+
* @feeds src/adapters/inpi-br/*.ts
|
|
6
|
+
* @breaks none — pure helpers
|
|
7
|
+
* @invariants every transport gap surfaces as a PatentEnvelope row
|
|
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 inpiBrEnvelope(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 transportErrorToInpiBrEnvelope(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; INPI Brasil has no upstream API so the browser path is the only route — install an McpResolver to activate this adapter",
|
|
35
|
+
alternatives: ["espacenet", "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: ["espacenet"],
|
|
45
|
+
retryable: false,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export async function inpiBrNavigateAndExtract(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/inpi-br/_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,cAAc,CAC5B,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,8BAA8B,CAC5C,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,wLAAwL;YAC1L,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;YACnC,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,WAAW,CAAC;QAC3B,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,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::inpi-br::get
|
|
3
|
+
* @does Browser-driven retrieval of an INPI Brasil patent record by application/publication number; extracts the bibliographic block from the pePI detail page.
|
|
4
|
+
* @needs src/engine/transport/mcp-browser.ts, src/engine/normalizer/patent-envelope.ts, src/adapters/inpi-br/_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 (MCP_BUS_MISSING)
|
|
7
|
+
* @invariants output row is a canonical PatentRecord
|
|
8
|
+
* @side-effects controls Chrome via MCP
|
|
9
|
+
* @perf single navigate + evaluate
|
|
10
|
+
* @concurrency safe
|
|
11
|
+
* @test tests/unit/adapters/inpi-br/search.test.ts (shared transport-error path)
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-05-18
|
|
14
|
+
* @verification browser-only
|
|
15
|
+
*/
|
|
16
|
+
export declare function runInpiBrGet(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/inpi-br/get.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoDH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA+FrB"}
|