#123 by GitHub stars
handsomestWei/patent-disclosure-skill
中国专利.skill:专利点挖掘与交底书(发明/实用/外观)编写,通俗解读专利,嗅探政策动向,辅助审查答复。
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +7 / −6 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
- 3 description: "中国专利技能:挖掘专利点并撰写发明/实用新型/外观设计交底书;将已有交底改写为申请文件四件套;依据发明人材料衔接交底与申请;按著录项目检索公布公告;解读专利文献;基于已入库解读生成专利地图;对照审查政策撰写简报;辅助审查意见答复;编制权利要求对照表底稿(不构成法律意见)。| China patents: mine patent points and draft invention/utility-model/design disclosures; convert an existing disclosure into application documents; sequence disclosure and application from inventor materials; search CNIPA bibliographic records; interpret patent documents; generate a patent map from an interpreted vault; prepare examination-policy briefs; assist office-action responses; and prepare claim-chart worksheets (not legal opinions)."
- 4 version: "5.1.0"
+ 3 description: "中国专利技能:挖掘专利点并撰写发明/实用新型/外观设计交底书;将已有交底改写为申请文件四件套;依据发明人材料衔接交底与申请;按著录项目检索公布公告,点名海外时检索美欧日韩等海外专利;解读中国及海外专利文献;基于已入库解读生成专利地图;对照审查政策撰写简报;辅助审查意见答复;编制权利要求对照表底稿(不构成法律意见)。| China patents: mine patent points and draft invention/utility-model/design disclosures; convert an existing disclosure into application documents; sequence disclosure and application from inventor materials; search CNIPA bibliographic records, and overseas patents via Google Patents on request; interpret Chinese and overseas patent documents; generate a patent map from an interpreted vault; prepare examination-policy briefs; assist office-action responses; and prepare claim-chart worksheets (not legal opinions)."
+ 4 version: "5.2.0"
- 21 | **检索** | 公布站高级查询(发明人/申请人/分类号/名称/摘要等);单图或权要可先抽关键字再查 | `skills/patent-search/SKILL.md` |
- 22 | **解读** | 公开号 / PDF / 全文 → 通俗笔记 + 图谱 | `skills/patent-reader/SKILL.md` |
+ 21 | **检索** | 公布站高级查询(发明人/申请人/分类号/名称/摘要等);单图或权要可先抽关键字再查;点名海外时用 Google Patents 查美欧日韩等 | `skills/patent-search/SKILL.md` |
+ 22 | **解读** | 公开号(中国或海外)/ PDF / 全文 → 通俗笔记 + 图谱 | `skills/patent-reader/SKILL.md` |
- 39 | 读专利、给出公开号或 PDF 且目标是「读懂」;`/patent-read`、`/读专利` | 无 | 解读包(**优先**) | 不跑交底成文,不自动进对照表 |
+ 39 | 海外检索、查美国 / 欧洲 / 日本 / 韩国专利、PCT 检索、「包含某国」— **须点名** | 没提国家时走公布站 | 检索包海外旁路 | 不进交底查新;限流即停,不重试 |
+ 40 | 读专利、给出公开号(含海外号)或 PDF 且目标是「读懂」;`/patent-read`、`/读专利` | 无 | 解读包(**优先**) | 不跑交底成文,不自动进对照表;海外号不顺带做海外检索 |
- 55 按**能力总览**复述 9 项,每项一句并给出触发说法;说明**申请文件 / 案卷 / 专利地图 / 审查答复 / 政策简报 / 对照表须点名**才会进入。本节只用能力总览,不用交底的「交付后请确认」。
+ 56 按**能力总览**复述 9 项,每项一句并给出触发说法;说明**申请文件 / 案卷 / 专利地图 / 审查答复 / 政策简报 / 对照表 / 海外检索须点名**才会进入。本节只用能力总览,不用交底的「交付后请确认」。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-application/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-chart/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-disclosure/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-docket/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-exam-policy/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-map/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-oa/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-reader/SKILL.md
Week of Nov 2, 2026 · +7 / −6 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
- 3 description: "中国专利通俗解读:公开号/PDF 成通俗笔记、图谱与 Obsidian 入库。"
+ 3 description: "专利通俗解读:中国或海外(美欧日韩等)公开号 / PDF 成通俗笔记、图谱与 Obsidian 入库。"
- 11 把公开号 / PDF / 全文读成通俗笔记、图谱,并可写入 Obsidian。独权拆成稳定特征行(`claim_features.json`),说明书段落可机读(`description_paragraphs.json`),给对照表当输入。
+ 11 把公开号 / PDF / 全文读成通俗笔记、图谱,并可写入 Obsidian。独权拆成稳定特征行(`claim_features.json`),说明书段落可机读(`description_paragraphs.json`),给对照表当输入。海外公开号(US / EP / WO / JP / KR 等)一次请求取结构化全文,机翻文献同时保留原文。
- 15 用户说读专利、给出公开号或 PDF 且目标是「读懂」,或 `/patent-read`、`/读专利`。对照表派工缺 `claim_features.json` 或 `description_paragraphs.json` 时由对照表点名进入。对照表只要这两份文件,不写笔记、不入库。
+ 15 用户说读专利、给出公开号或 PDF 且目标是「读懂」,或 `/patent-read`、`/读专利`。用户给的公开号本身是海外号,即按海外件读,不另需口令;只读这一件,不顺带做海外检索。对照表派工缺 `claim_features.json` 或 `description_paragraphs.json` 时由对照表点名进入。对照表只要这两份文件,不写笔记、不入库。
- 19 公开号、专利 PDF、或粘贴的权利要求/说明书。对照表派工时默认把从属权也拆进 `claim_features.json`,并保留 `description_paragraphs.json`。
+ 19 公开号(中国或海外)、专利 PDF、或粘贴的权利要求/说明书。对照表派工时默认把从属权也拆进 `claim_features.json`,并保留 `description_paragraphs.json`。
- 27 工具在本包 **`tools/`**(`extract/` · `analyze/` · `vault/`)。PDF:`tools/extract/fetch_patent_pdf.py`;入库:`tools/vault/write_patent_obsidian_note.py`。特征行校验:`tools/analyze/validate_claim_features.py`。
+ 27 工具在本包 **`tools/`**(`extract/` · `analyze/` · `vault/` · `google_patents/`)。中国件 PDF:`tools/extract/fetch_patent_pdf.py`;海外件全文:`tools/extract/fetch_gp_fulltext.py`;入库:`tools/vault/write_patent_obsidian_note.py`。特征行校验:`tools/analyze/validate_claim_features.py`。`tools/google_patents/` 与检索包同名目录内容一致,改动须同步两处。
+ 32 - Google Patents 请求不重试:限流(退出码 4 / 「限流」报错)即停止本轮取证,请用户稍后再试或提供 PDF。
- 35 工作区 **`outputs/patent_reader/`**:通俗笔记、图谱中间产物、`claim_features.json`、`description_paragraphs.json`(含 `source_url`)。有库则另写入 Obsidian。对话给出笔记路径。
+ 36 工作区 **`outputs/patent_reader/`**:通俗笔记、图谱中间产物、`claim_features.json`、`description_paragraphs.json`(含 `source_url`)。海外件另有 `source/{公开号}.gp_detail.json` 与 `fetch_gp_status.json`。有库则另写入 Obsidian。对话给出笔记路径。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
skills/patent-search/SKILL.md
Week of Nov 2, 2026 · +12 / −8 lines
Before Network or broad shell → After Network or broad shell
6935a14d342e → 9c1a3a051e86
- 3 description: "中国专利公布公告著录检索:发明人、申请人、分类号、名称、摘要;也可从单图或权利要求生成名称/摘要关键字后查询。"
+ 3 description: "专利著录检索:中国专利公布公告(发明人、申请人、分类号、名称、摘要;也可从单图或权利要求生成名称/摘要关键字后查询);用户点名海外时,用 Google Patents 检索美欧日韩等海外专利。"
- 11 公布站高级查询(发明人 / 申请人 / 分类号 / 名称 / 摘要等)。个人公开清单只是一种用法。单图或权要可先抽关键字再查。对照表派工时可按特征精排,另出覆盖旁路,**不改**列表报告。
+ 11 公布站高级查询(发明人 / 申请人 / 分类号 / 名称 / 摘要等)。个人公开清单只是一种用法。单图或权要可先抽关键字再查。对照表派工时可按特征精排,另出覆盖旁路,**不改**列表报告。用户点名海外 / 指定局时,走 Google Patents 海外检索旁路(`gp_search.py`)。
- 15 用户要按著录字段查公布公告、个人公开清单、以图或权要生成检索式,或 `/patent-search`。对照表派工或用户点名「按特征精排」时再走 `covers_rank.md`。
+ 15 用户要按著录字段查公布公告、个人公开清单、以图或权要生成检索式,或 `/patent-search`。对照表派工或用户点名「按特征精排」时再走 `covers_rank.md`。用户点名「海外检索」「查美国 / 欧洲 / 日本 / 韩国专利」「PCT 检索」「包含某国」时走 `global_search.md`;没提国家时仍走公布站。
- 19 至少一项:发明人、申请人、分类号、名称、摘要/简要说明、申请号或公开号。单图必须 `--type design|utility_model|invention`,不能 `all`;用户没说类型时看图推断并加 `--type-inferred`。权要按文本选类型,可用 `all`。
+ 19 至少一项:发明人、申请人、分类号、名称、摘要/简要说明、申请号或公开号。单图必须 `--type design|utility_model|invention`,不能 `all`;用户没说类型时看图推断并加 `--type-inferred`。权要按文本选类型,可用 `all`。海外检索至少一项:英文关键词、名称 / 摘要 / 权要字段、CPC、申请人、发明人;局别按用户点名。
- 23 **先 `Read` `prompts/patent_search.md`。** 用户给单图或权要时再 `Read` `prompts/derived_query.md`。对照表派工或用户点名「按特征精排」时再 `Read` `prompts/covers_rank.md`。翻页口径以该文件「默认少翻页 / 完整性门禁」为准。
+ 23 **先 `Read` `prompts/patent_search.md`。** 用户给单图或权要时再 `Read` `prompts/derived_query.md`。对照表派工或用户点名「按特征精排」时再 `Read` `prompts/covers_rank.md`。翻页口径以该文件「默认少翻页 / 完整性门禁」为准。用户点名海外时**只** `Read` `prompts/global_search.md`。
+ 32 python skills/patent-search/tools/gp_search.py -q "(battery OR cell) (thermal runaway)" --country US,EP,JP --after 2020
- 34 单独拷走本包时:`python tools/cnipa_search.py …`。改版式只动 `tools/emit_search_report.py`。机读前缀:`EPUB_SEARCH_MD:` / `EPUB_SEARCH_JSON:` / `EPUB_SEARCH_NOTE:` / `EPUB_SEARCH_INCOMPLETE:`。对话里给出 Markdown 路径。
+ 35 单独拷走本包时:`python tools/cnipa_search.py …` / `python tools/gp_search.py …`。改版式只动 `tools/emit_search_report.py`。机读前缀:`EPUB_SEARCH_MD:` / `EPUB_SEARCH_JSON:` / `EPUB_SEARCH_NOTE:` / `EPUB_SEARCH_INCOMPLETE:`;海外 `GP_SEARCH_MD:` / `GP_SEARCH_JSON:` / `GP_SEARCH_NOTE:` / `GP_SEARCH_ERROR:`。对话里给出 Markdown 路径。
+ 36
+ 37 `tools/google_patents/` 与解读包同名目录内容一致,改动须同步两处。
- 39 - 本包只做公布站高级查询。单图或权要只生成公布站布尔式。覆盖精排是列表之后的可选旁路。
+ 42 - 本包只做公布站高级查询与点名后的 Google Patents 海外检索。单图或权要只生成公布站布尔式。覆盖精排是列表之后的可选旁路。
+ 43 - 海外检索每次运行一个请求、不重试;`gp_search.py` 退出码 4(限流)即结束本轮,细则见 `prompts/global_search.md`。
- 43 `outputs/patent-search/SEARCH-YYYYMMDD-HHMMSS.md`(及对应 json)。精排旁路另出 `SEARCH-*.covers.md` / `.covers.json`,不改列表报告。本包**不设**「交付后请确认」。
+ 47 `outputs/patent-search/SEARCH-YYYYMMDD-HHMMSS.md`(及对应 json)。公布站与海外检索同目录,海外报告标题为「海外检索」。精排旁路另出 `SEARCH-*.covers.md` / `.covers.json`,不改列表报告。本包**不设**「交付后请确认」。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 6935a14d342e
No earlier version was observed for comparison.
Heat
7.9- Star growth, last 7 daysAhead of 96% of tracked repositories
- Star growth, last 24 hoursAhead of 96% of tracked repositories
- Rank movement, last 7 daysAhead of 85% of tracked repositories
- Commits, last 30 daysAhead of 75% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- patent-disclosure-skill
/ - patent-application
skills/patent-application - patent-chart
skills/patent-chart - patent-disclosure
skills/patent-disclosure - patent-docket
skills/patent-docket - patent-exam-policy
skills/patent-exam-policy - patent-map
skills/patent-map - patent-oa
skills/patent-oa - patent-reader
skills/patent-reader - patent-search
skills/patent-search
How it works
patent-disclosure-skill
When your agent uses it
中国专利技能:挖掘专利点并撰写发明/实用新型/外观设计交底书;将已有交底改写为申请文件四件套;依据发明人材料衔接交底与申请;按著录项目检索公布公告,点名海外时检索美欧日韩等海外专利;解读中国及海外专利文献;基于已入库解读生成专利地图;对照审查政策撰写简报;辅助审查意见答复;编制权利要求对照表底稿(不构成法律意见)。| China patents: mine patent points and draft invention/utility-model/design disclosures; convert an existing disclosure into application documents; sequence disclosure and application from inventor materials; search CNIPA bibliographic records, and overseas patents via Google Patents on request; interpret Chinese and overseas patent documents; generate a patent map from an interpreted vault; prepare examination-policy briefs; assist office-action responses; and prepare claim-chart worksheets (not legal opinions).
What it loads into context
Frontmatter
332 tokensAlways available to the agent
SKILL.md
2,725 tokensWhen the skill is activated
Reference documents
7,685 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 能力总览
- 路由判定表
- 通则
- 能力自述(用户问「你能做什么 / 还能做什么」时)
- 目录
- 环境与约定
- 执行前核对
Scripts executed separately
scripts/generate-star-history.py
Files
.github/workflows/update-star-history.ymlasset2,840 bytes.gitignoreasset1,219 bytesINSTALL.mddoc14,789 bytesLICENSEasset1,070 bytesREADME.mddoc10,900 bytesSKILL.mdcore8,964 bytesSKILL.mdcore8,964 bytesSKILL.mdcore8,964 bytesdocs/thanks.jpgasset146,142 bytesdocs/效果例-cad提取等轴测投影图.pngasset72,832 bytesdocs/效果例-obs图谱.jpgasset120,459 bytesdocs/效果例-专利地图.jpgasset246,227 bytesdocs/效果例-初版生成.jpgasset233,396 bytesdocs/效果例-外观专利线稿.pngasset1,396,297 bytesdocs/效果例-实用新型专利线稿含部件序号引出线.pngasset1,188,778 bytesdocs/效果例-解读.jpgasset400,993 bytesdocs/效果例-迭代更新.jpgasset55,327 bytesrequirements.txtdoc1,138 bytesscripts/generate-star-history.pyruns17,189 bytes
Read SKILL.md
# 中国专利技能
按用户意图 **`Read`** 对应入口的 `SKILL.md`,再按该流程执行。**先查「路由判定表」定去向,再看「通则」。**
## 能力总览
| 能力 | 做什么 | 入口 |
|------|--------|------|
| **交底** | 挖专利点 → 查新 → 成稿 → 迭代(发明 / 实用新型 / 外观);首篇定稿后可做保护型 1+N 专利布局 | `skills/patent-disclosure/SKILL.md` |
| **申请文件** | 已有交底 → 权要 / 说明书 / 摘要 / 附图 | `skills/patent-application/SKILL.md` |
| **案卷** | 按发明人/工程师给的材料一趟写出交底书和申请文件 | `skills/patent-docket/SKILL.md` |
| **检索** | 公布站高级查询(发明人/申请人/分类号/名称/摘要等);单图或权要可先抽关键字再查;点名海外时用 Google Patents 查美欧日韩等 | `skills/patent-search/SKILL.md` |
| **解读** | 公开号(中国或海外)/ PDF / 全文 → 通俗笔记 + 图谱 | `skills/patent-reader/SKILL.md` |
| **对照表** | 独权特征 vs 对比文件 / 产品 / 标准,逐格证据与强弱(须点名;底稿,非法律意见) | `skills/patent-chart/SKILL.md` |View the complete source on GitHubpatent-application
When your agent uses it
申请文件:把已有交底写成权利要求书、说明书、摘要与说明书附图。须指定交底目录;仅缺材料才终止。内容争议写入问题清单,不阻塞主文件。交付后请确认须摘要清单。已有产出上改稿则另存新时间戳目录。须显式触发。
What it loads into context
Frontmatter
98 tokensAlways available to the agent
SKILL.md
742 tokensWhen the skill is activated
Reference documents
12,971 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/test_audit_claims.pytests/test_design_view_sync.pytests/test_emit_application_docx.pytests/test_invention_figures.pytests/test_lexicon.pytests/test_material_gate.pytests/test_math_to_omml.pytests/test_numeral_register.pytests/test_plan_figures.pytests/test_support_and_antecedent.pytools/__init__.pytools/audit_claims.pytools/check_design_views.pytools/check_numeral_register.pytools/check_support.pytools/compose_application_figure.pytools/emit_application_docx.pytools/iteration_dialog_log.pytools/latex_delimiters.pytools/lexicon.pytools/material_gate.pytools/math_to_omml.pytools/md_to_docx.pytools/plan_figures.pytools/render_invention_figures.pytools/stdio_utf8.py
Files
README.mddoc1,386 bytesSKILL.mdcore2,472 bytesSKILL.mdcore2,472 bytesprompts/claim_strategy.mddoc2,069 bytesprompts/claims_builder.mddoc1,946 bytesprompts/consistency.mddoc1,857 bytesprompts/design_application.mddoc2,576 bytesprompts/figure_plan.mddoc1,528 bytesprompts/figures.mddoc3,543 bytesprompts/guardrails.mddoc3,579 bytesprompts/intake.mddoc929 bytesprompts/issues.mddoc2,453 bytesprompts/iteration.mddoc2,075 bytesprompts/iteration_context.mddoc663 bytesprompts/material_gate.mddoc740 bytesprompts/numeral_register.mddoc972 bytesprompts/self_check.mddoc2,483 bytesprompts/specification_builder.mddoc6,186 bytesreferences/design_view_cnipa.mddoc3,499 bytesreferences/disclosure_to_spec_map.mddoc1,941 bytesreferences/promo_terms.yamlasset2,465 bytesreferences/schemas/README.mddoc766 bytesreferences/schemas/application_figure_plan.schema.yamlasset1,526 bytesreferences/schemas/application_plan.schema.yamlasset1,978 bytesreferences/schemas/invention_figures.schema.yamlasset1,974 bytesreferences/schemas/numeral_register.schema.yamlasset859 bytestests/test_audit_claims.pyruns3,072 bytestests/test_design_view_sync.pyruns1,035 bytestests/test_emit_application_docx.pyruns1,828 bytestests/test_invention_figures.pyruns8,769 bytestests/test_lexicon.pyruns1,478 bytestests/test_material_gate.pyruns4,259 bytestests/test_math_to_omml.pyruns1,215 bytestests/test_numeral_register.pyruns3,388 bytestests/test_plan_figures.pyruns2,345 bytestests/test_support_and_antecedent.pyruns3,971 bytestools/README.mddoc2,485 bytestools/__init__.pyruns72 bytestools/audit_claims.pyruns8,012 bytestools/check_design_views.pyruns12,979 bytestools/check_numeral_register.pyruns13,045 bytestools/check_support.pyruns12,900 bytestools/compose_application_figure.pyruns4,882 bytestools/emit_application_docx.pyruns3,444 bytestools/iteration_dialog_log.pyruns2,660 bytestools/latex_delimiters.pyruns6,442 bytestools/lexicon.pyruns1,100 bytestools/material_gate.pyruns10,384 bytestools/math_to_omml.pyruns9,644 bytestools/md_to_docx.pyruns45,633 bytestools/plan_figures.pyruns10,677 bytestools/render_invention_figures.pyruns23,085 bytestools/stdio_utf8.pyruns1,394 bytes
Read SKILL.md
# 申请文件
## 用途
把已有交底写成权利要求书、说明书、摘要与说明书附图(四件套:Markdown + Word + 黑白图)。内容歧义不阻塞主文件,缺口写入问题清单。
## 何时用
须用户点名(申请文件 / 申请底稿 / 申报材料 / 权利要求书 / `/申请底稿` / `/patent-apply`),并**指定交底材料目录**。案卷会稿调度本包时视为已点名,仍须有交底目录。
## 输入
同案交底产出:交底书(时间戳 `.md`,有则兼用 `.docx`);发明用正文(框图/流程在 mermaid 里);实用新型用 `structure_schema` + `figure_plan` + 入文线稿;外观用 `appearance_schema` + `figure_plan` + 入文实拍/线稿。仅**缺文件**时终止。发明人/申请人未填只记清单,不终止、不挡案卷轮次。
View the complete source on GitHubpatent-chart
When your agent uses it
权利要求对照表:独权拆成技术特征,逐格比对对比文件/产品/标准,附证据与强弱。用于无效对照、FTO 初筛、侵权/EoU、SEP、可专利性底稿。须点名。不出法律意见。
What it loads into context
Frontmatter
83 tokensAlways available to the agent
SKILL.md
852 tokensWhen the skill is activated
Reference documents
4,977 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/test_emit_chart.pytests/test_highlights.pytests/test_write_intake.pytools/emit_chart.pytools/highlights.pytools/write_intake.pytools/xlsx_minimal.py
Files
README.mddoc1,631 bytesSKILL.mdcore2,625 bytesexamples/example_cgm_implant_chart/README.mddoc1,701 bytesprompts/delivery_confirm.mddoc833 bytesprompts/fill_chart.mddoc4,488 bytesprompts/guardrails.mddoc1,972 bytesprompts/intake.mddoc4,379 bytesreferences/handoff.mddoc1,303 bytestests/test_emit_chart.pyruns18,399 bytestests/test_highlights.pyruns3,749 bytestests/test_write_intake.pyruns6,640 bytestools/emit_chart.pyruns47,465 bytestools/highlights.pyruns13,314 bytestools/write_intake.pyruns9,614 bytestools/xlsx_minimal.pyruns26,008 bytes
Read SKILL.md
# 权利要求对照表
## 用途
把独权(默认兼从权)拆成技术特征,逐格比对对比文件 / 产品 / 标准,附证据与强弱。用于无效对照、FTO 初筛、侵权/EoU、SEP、可专利性、审查答复驳回映射。本包只填矩阵并导出。左列特征、右列原文、补搜命中由解读包 / 检索包生产。
## 何时用
须用户点名(对照表 / claim chart / 无效对照 / FTO 初筛 / 侵权对照 / `/patent-chart`)。
## 输入
左列须有公开号 / PDF / 权要 / `claim_features.json` / 交底 5.1。材料在对话里收集(`prompts/intake.md` 先 `--alloc`);三件套不齐只提问。不够就提问,收齐并 `INTAKE_OK:1` 后才分析、才写 `intake.json`。
View the complete source on GitHubpatent-disclosure
When your agent uses it
中国专利交底书:发明/实用新型/外观设计的专利点挖掘、轻量查新与成文、保护型1+N专利布局。
What it loads into context
Frontmatter
60 tokensAlways available to the agent
SKILL.md
1,245 tokensWhen the skill is activated
Reference documents
86,647 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
examples/example_batch_job_scheduler/knowledge/pkg/scheduler/heartbeat.goexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/reorder.goexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/scorer.goexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/types.gotests/__init__.pytests/test_cad_step_scan.pytests/test_cad_venv.pytests/test_check_design_views.pytests/test_cnipa_class_codes.pytests/test_cnipa_epub_chain.pytests/test_cnipa_epub_crawler.pytests/test_cnipa_epub_wait.pytests/test_design_lineart_gate.pytests/test_fence.pytests/test_formula_eval.pytests/test_formula_paradigms.pytests/test_image_gen.pytests/test_latex_delimiters.pytests/test_math_omml.pytests/test_math_render.pytests/test_md_to_docx_list.pytests/test_md_to_docx_table.pytests/test_mermaid_browser.pytests/test_mermaid_step_labels.pytests/test_pdf_to_md.pytests/test_source_parts.pytests/test_stdio_utf8.pytests/test_structure_callout_layout.pytests/test_structure_callout_overlay.pytests/test_structure_lineart_compose.pytests/test_structure_lineart_gate.pytests/test_svg_screenshot.pytools/bootstrap_cad_venv.pytools/browser.pytools/cad_formats.pytools/cad_scan.pytools/cad_venv.pytools/check_design_views.pytools/check_formula_plan.pytools/check_source_parts.pytools/crawl/cnipa_epub_crawler.pytools/crawl/cnipa_epub_nav.pytools/crawl/cnipa_epub_parse.pytools/crawl/cnipa_epub_search.pytools/crawl/cnipa_epub_wait.pytools/design_lineart_gate.pytools/docx_to_md.pytools/fence/check_layout.pytools/fence/check_scorecard.pytools/fence/family_lib.pytools/fence/layout_lib.pytools/fence/scorecard_lib.pytools/formula_chem.pytools/formula_eval.pytools/formula_paradigms.pytools/formula_units.pytools/gen_demo_snap_step.pytools/image_gen.pytools/iteration_dialog_log.pytools/latex_delimiters.pytools/math_render.pytools/math_to_omml.pytools/md_to_docx.pytools/mermaid_render.pytools/package.jsontools/patent_type.pytools/pdf_to_md.pytools/pptx_to_md.pytools/run_step_to_views.pytools/stdio_utf8.pytools/step_to_views.pytools/structure_callout_layout.pytools/structure_callout_overlay.pytools/structure_lineart_compose.pytools/structure_lineart_gate.pytools/svg_screenshot.pytools/vendor/mermaid.min.js
Files
README.mddoc2,644 bytesSKILL.mdcore3,935 bytesSKILL.mdcore3,935 bytesexamples/README.mddoc668 bytesexamples/example_batch_job_scheduler/README.mddoc608 bytesexamples/example_batch_job_scheduler/knowledge/docs/README.mddoc1,200 bytesexamples/example_batch_job_scheduler/knowledge/docs/architecture.mddoc2,310 bytesexamples/example_batch_job_scheduler/knowledge/docs/sample_architecture_review.docxasset38,804 bytesexamples/example_batch_job_scheduler/knowledge/docs/sample_assets/sample_fig_modules.pngasset2,540 bytesexamples/example_batch_job_scheduler/knowledge/docs/sample_assets/sample_fig_queue.pngasset1,741 bytesexamples/example_batch_job_scheduler/knowledge/docs/sample_scheduler_deck.pptxasset33,772 bytesexamples/example_batch_job_scheduler/knowledge/meeting_notes_intake_example.mddoc731 bytesexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/heartbeat.goruns553 bytesexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/reorder.goruns1,404 bytesexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/scorer.goruns497 bytesexamples/example_batch_job_scheduler/knowledge/pkg/scheduler/types.goruns866 bytesexamples/example_batch_job_scheduler/knowledge/tex/README.mddoc624 bytesexamples/example_batch_job_scheduler/knowledge/tex/macros.texasset158 bytesexamples/example_batch_job_scheduler/knowledge/tex/main.texasset180 bytesexamples/example_batch_job_scheduler/knowledge/tex/sections/method.texasset685 bytesexamples/example_design_desk_lamp/README.mddoc3,468 bytesexamples/example_design_desk_lamp/knowledge/assets/mi_desk_lamp_pro.jpgasset172,356 bytesexamples/example_design_desk_lamp/knowledge/assets/view_arm_detail.jpgasset106,834 bytesexamples/example_design_desk_lamp/knowledge/assets/view_joint_detail.jpgasset102,831 bytesexamples/example_design_desk_lamp/knowledge/assets/view_packaging.jpgasset971,022 bytesexamples/example_design_desk_lamp/knowledge/assets/view_perspective.jpgasset200,635 bytesexamples/example_design_desk_lamp/knowledge/assets/views_ortho.jpgasset165,793 bytesexamples/example_design_desk_lamp/knowledge/docs/design_brief.mddoc785 bytesexamples/example_utility_model_ev_powertrain/README.mddoc3,813 bytesexamples/example_utility_model_ev_powertrain/knowledge/assets/photo_motor_pcu.jpgasset126,182 bytesexamples/example_utility_model_ev_powertrain/knowledge/docs/structure_brief.mddoc10,484 bytesprompts/correction_handler.mddoc4,783 bytesprompts/delivery_confirm.mddoc4,137 bytesprompts/design/disclosure_builder.mddoc5,314 bytesprompts/design/patent_points.mddoc3,103 bytesprompts/design/template_reference.mddoc2,083 bytesprompts/design_lineart_assist.mddoc5,816 bytesprompts/disclosure_preview.mddoc3,404 bytesprompts/disclosure_self_check.mddoc20,752 bytesprompts/fence/decompose.mddoc1,224 bytesprompts/fence/design_around.mddoc1,536 bytesprompts/fence/dispatch.mddoc2,311 bytesprompts/fence/guardrails.mddoc2,440 bytesprompts/fence/matrix.mddoc1,518 bytesprompts/fence/plan.mddoc5,426 bytesprompts/fence/score.mddoc5,211 bytesprompts/fill_appearance_schema.mddoc4,611 bytesprompts/fill_structure_schema.mddoc4,457 bytesprompts/image_gen.mddoc4,995 bytesprompts/intake.mddoc3,041 bytesprompts/invention/disclosure_builder.mddoc29,418 bytesprompts/invention/patent_points_analyzer.mddoc1,885 bytesprompts/invention/template_reference.mddoc17,593 bytesprompts/iteration_context.mddoc6,230 bytesprompts/merger.mddoc6,155 bytesprompts/prior_art_search.mddoc23,364 bytesprompts/project_scan.mddoc12,370 bytesprompts/structure_lineart_assist.mddoc8,314 bytesprompts/structure_lineart_compose.mddoc5,490 bytesprompts/tex_scan.mddoc3,362 bytesprompts/utility_model/disclosure_builder.mddoc6,475 bytesprompts/utility_model/patent_points.mddoc4,066 bytesprompts/utility_model/template_reference.mddoc2,925 bytesreferences/design_view_cnipa.mddoc3,499 bytesreferences/formulas/README.mddoc2,936 bytesreferences/formulas/paradigms.yamlasset10,165 bytesreferences/patent_type_search.yamlasset2,913 bytesreferences/schemas/README.mddoc2,518 bytesreferences/schemas/appearance.schema.yamlasset2,882 bytesreferences/schemas/decompose.schema.yamlasset217 bytesreferences/schemas/design_around.schema.yamlasset337 bytesreferences/schemas/design_lineart_brief.schema.yamlasset3,159 bytesreferences/schemas/family_plan.schema.yamlasset627 bytesreferences/schemas/figure_plan.schema.yamlasset7,991 bytesreferences/schemas/formula_plan.schema.yamlasset4,059 bytesreferences/schemas/matrix.schema.yamlasset217 bytesreferences/schemas/scorecard.schema.yamlasset619 bytesreferences/schemas/structure.schema.yamlasset1,448 bytesreferences/schemas/structure_callout_anchors.schema.yamlasset2,619 bytesreferences/schemas/structure_lineart_brief.schema.yamlasset3,872 bytesreferences/schemas/structure_lineart_compose.schema.yamlasset2,952 bytesreferences/scorecards/README.mddoc1,084 bytesreferences/scorecards/gbt42748_fence.yamlasset6,392 bytestests/README.mddoc613 bytestests/__init__.pyruns4 bytestests/fixtures/cad/demo_snap_plate.stepasset33,300 bytestests/fixtures/epub_item_ipc.htmlasset288 bytestests/fixtures/epub_item_loc.htmlasset272 bytestests/test_cad_step_scan.pyruns4,713 bytestests/test_cad_venv.pyruns5,172 bytestests/test_check_design_views.pyruns3,589 bytestests/test_cnipa_class_codes.pyruns7,862 bytestests/test_cnipa_epub_chain.pyruns1,685 bytestests/test_cnipa_epub_crawler.pyruns19,594 bytestests/test_cnipa_epub_wait.pyruns2,923 bytestests/test_design_lineart_gate.pyruns4,641 bytestests/test_fence.pyruns6,669 bytestests/test_formula_eval.pyruns5,724 bytestests/test_formula_paradigms.pyruns6,017 bytestests/test_image_gen.pyruns4,999 bytestests/test_latex_delimiters.pyruns6,885 bytestests/test_math_omml.pyruns12,925 bytestests/test_math_render.pyruns3,249 bytestests/test_md_to_docx_list.pyruns1,704 bytestests/test_md_to_docx_table.pyruns1,550 bytestests/test_mermaid_browser.pyruns3,617 bytestests/test_mermaid_step_labels.pyruns2,553 bytestests/test_pdf_to_md.pyruns4,017 bytestests/test_source_parts.pyruns2,117 bytestests/test_stdio_utf8.pyruns1,691 bytestests/test_structure_callout_layout.pyruns3,244 bytestests/test_structure_callout_overlay.pyruns5,499 bytestests/test_structure_lineart_compose.pyruns7,665 bytestests/test_structure_lineart_gate.pyruns6,399 bytestests/test_svg_screenshot.pyruns2,587 bytestools/README.mddoc24,079 bytestools/bootstrap_cad_venv.pyruns6,654 bytestools/browser.pyruns6,459 bytestools/cad_formats.pyruns4,543 bytestools/cad_scan.pyruns3,080 bytestools/cad_venv.pyruns6,428 bytestools/check_design_views.pyruns12,979 bytestools/check_formula_plan.pyruns13,359 bytestools/check_source_parts.pyruns8,566 bytestools/crawl/cnipa_epub_crawler.pyruns36,239 bytestools/crawl/cnipa_epub_nav.pyruns17,093 bytestools/crawl/cnipa_epub_parse.pyruns19,620 bytestools/crawl/cnipa_epub_search.pyruns9,417 bytestools/crawl/cnipa_epub_wait.pyruns4,273 bytestools/crawl/cnipa_epub_wait.yamlasset2,508 bytestools/crawl/requirements-cnipa.txtdoc260 bytestools/design_lineart_gate.pyruns9,544 bytestools/docx_to_md.pyruns3,834 bytestools/fence/README.mddoc1,074 bytestools/fence/check_layout.pyruns2,098 bytestools/fence/check_scorecard.pyruns2,054 bytestools/fence/family_lib.pyruns3,314 bytestools/fence/layout_lib.pyruns3,550 bytestools/fence/scorecard_lib.pyruns5,943 bytestools/formula_chem.pyruns6,792 bytestools/formula_eval.pyruns8,793 bytestools/formula_paradigms.pyruns6,042 bytestools/formula_units.pyruns3,706 bytestools/gen_demo_snap_step.pyruns5,140 bytestools/image_gen.pyruns9,795 bytestools/iteration_dialog_log.pyruns3,230 bytestools/latex_delimiters.pyruns6,313 bytestools/math_render.pyruns14,502 bytestools/math_to_omml.pyruns9,582 bytestools/md_to_docx.pyruns47,138 bytestools/mermaid_render.pyruns21,569 bytestools/package-lock.jsonasset86,410 bytestools/package.jsonruns309 bytestools/patent_type.pyruns9,373 bytestools/pdf_to_md.pyruns5,039 bytestools/pptx_to_md.pyruns5,039 bytestools/requirements-pdf.txtdoc84 bytestools/requirements-step.txtdoc325 bytestools/run_step_to_views.pyruns4,077 bytestools/stdio_utf8.pyruns1,394 bytestools/step_to_views.pyruns18,415 bytestools/structure_callout_layout.pyruns16,723 bytestools/structure_callout_overlay.pyruns17,191 bytestools/structure_lineart_compose.pyruns24,833 bytestools/structure_lineart_gate.pyruns15,335 bytestools/svg_screenshot.pyruns12,496 bytestools/vendor/README.mddoc450 bytestools/vendor/mermaid.min.jsruns2,571,900 bytes
Read SKILL.md
# 交底书编写
## 用途
挖专利点、轻量查新、写成发明 / 实用新型 / 外观设计交底书;首篇定稿后可走保护型 1+N 围栏。发明 / 实用新型 / 外观是**包内三个目录**,不是三个可触发技能。分步指令在本包 **`prompts/`**。
## 何时用
用户说专利挖掘、交底书、查新、实用新型、外观设计,或 `/patent-disclosure`、`/交底书`。未显式指定类型时**默认发明**。
「专利布局 / 专利围栏 / 族树 / 做围栏」走本包旁路(首篇已定稿;用户点名可强开)。不要因写申请、读专利、对照表自动进入。
## 输入
发明人材料、项目目录、可选 `.tex`;类型与联系人在 `prompts/intake.md` 收敛,不全可推断并注明假设。`--type` 与 intake 一致。线稿、CAD、公式、Word 出图、PDF 转 md 用本包 `tools/`。View the complete source on GitHubpatent-docket
When your agent uses it
按发明人/工程师给的材料一趟写出交底书和申请文件;申请问题清单上的缺口最多改三轮。缺技术事实就问人,不编。触发:交底申请一起做、从零出交底和申请、一条龙、帮写交底再出申请、按清单改、会稿、案卷、/patent-docket。
What it loads into context
Frontmatter
104 tokensAlways available to the agent
SKILL.md
1,056 tokensWhen the skill is activated
Reference documents
6,620 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/__init__.pytests/test_docket.pytools/docket_config.pytools/docket_paths.pytools/docket_spec.pytools/emit_tracker.pytools/init_docket.pytools/stdio_utf8.pytools/validate_docket.py
Files
README.mddoc1,474 bytesSKILL.mdcore3,470 bytesSKILL.mdcore3,470 bytesassets/tracker_readme.mddoc312 bytesconfig.yamlasset144 bytesexamples/README.mddoc194 bytesprompts/ask_human.mddoc1,086 bytesprompts/bootstrap.mddoc1,454 bytesprompts/dispatch_application.mddoc1,424 bytesprompts/dispatch_disclosure.mddoc1,398 bytesprompts/emit_tracker.mddoc502 bytesprompts/guardrails.mddoc1,375 bytesprompts/intake.mddoc2,353 bytesprompts/resume.mddoc985 bytesprompts/round_close.mddoc1,897 bytesprompts/triage.mddoc1,387 bytesreferences/dispositions.yamlasset958 bytesreferences/docket.schema.yamlasset692 bytesreferences/handoff_contract.mddoc1,162 bytesreferences/issue_taxonomy.mddoc2,608 bytesreferences/max_rounds.mddoc1,354 bytesreferences/phase_machine.mddoc877 bytesreferences/phases.yamlasset1,953 bytestests/__init__.pyruns24 bytestests/test_docket.pyruns6,870 bytestools/README.mddoc381 bytestools/docket_config.pyruns990 bytestools/docket_paths.pyruns1,410 bytestools/docket_spec.pyruns1,862 bytestools/emit_tracker.pyruns5,288 bytestools/init_docket.pyruns4,532 bytestools/stdio_utf8.pyruns1,394 bytestools/validate_docket.pyruns6,042 bytes
Read SKILL.md
# 案卷会稿
## 用途
单 agent 协调者:立案、分诊、派工、记轮次。按发明人/工程师给的材料一趟串起交底书和申请文件。本包只调度与记案卷,不写交底正文、不出四件套。
## 何时用
须用户点名(交底申请一起做、从零出交底和申请、一条龙、帮写交底再出申请、按清单改、会稿、案卷、`/patent-docket`)。只写交底,或已有交底只出四件套时,不进案卷。
## 输入
发明人/工程师材料;已有则读磁盘上的交底 md、申请 md、问题清单。状态以 `outputs/docket/{case_id}/docket.yaml` 为准。缺技术事实就问人,不编、不以聊天记忆当事实。
View the complete source on GitHubpatent-exam-policy
When your agent uses it
给交底用的政策简报:对照国知局近期口径,说明对交底写法/本稿的影响,并提示申请书式。技能进化仅为旁路,默认只改交底包,须另点名才改文件。
What it loads into context
Frontmatter
75 tokensAlways available to the agent
SKILL.md
547 tokensWhen the skill is activated
Reference documents
8,779 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Files
README.mddoc1,143 bytesSKILL.mdcore1,800 bytesdocs/archive.mddoc396 bytesprompts/apply_after_confirm.mddoc2,315 bytesprompts/emit_backlog.mddoc7,350 bytesprompts/guardrails.mddoc3,490 bytesprompts/intake.mddoc1,975 bytesprompts/research.mddoc6,245 bytesprompts/soft_nudge.mddoc1,740 bytesreferences/schemas/exam_policy_backlog.schema.yamlasset3,794 bytesreferences/sources.yamlasset7,388 bytesreferences/topic_prompt_map.mddoc4,323 bytes
Read SKILL.md
# 政策简报(交底用)
## 用途
对照国知局近期口径,说明对交底写法 / 本稿的影响,并提示申请书式(只说明,默认不改申请包)。技能进化仅为旁路:同一套检索,仍先出简报。
## 何时用
须用户点名(政策简报 / 政策雷达 / 审查政策更新 / `/政策简报` / `/patent-brief` / `/patent-exam-policy`)。「技能进化 / `/patent-evolve`」同一入口,仍先出简报;只有用户再点名改技能时才 `Read` `apply_after_confirm.md`。
## 输入
信源种子 `references/sources.yaml`(A 可支撑交底口径;B 与地方预审不得单独改技能)。主题→文件:`references/topic_prompt_map.md`(交底表可进 E*;申请表仅简报说明)。
View the complete source on GitHubpatent-map
When your agent uses it
专利地图:基于通俗解读已入库的 Obsidian 案例,点名后打开五种图。地形按 bge-small-zh 向量摊开。
What it loads into context
Frontmatter
59 tokensAlways available to the agent
SKILL.md
650 tokensWhen the skill is activated
Reference documents
2,029 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/test_map.pytools/__init__.pytools/embed_layout.pytools/ensure_model.pytools/ipc_scheme/__init__.pytools/ipc_scheme/__main__.pytools/ipc_scheme/build.pytools/ipc_scheme/cli.pytools/ipc_scheme/config.pytools/ipc_scheme/download.pytools/ipc_scheme/emit.pytools/ipc_scheme/parse.pytools/ipc_titles.pytools/map_cache.pytools/model_store.pytools/serve_map.pytools/vault_index.pyweb/js/app.jsweb/js/camera.jsweb/js/chrome.jsweb/js/core.jsweb/js/detail.jsweb/js/layout.jsweb/js/view-bubble.jsweb/js/view-citation.jsweb/js/view-dashboard.jsweb/js/view-matrix.jsweb/js/view-terrain.jsweb/terrain3d.jsweb/vendor/three.module.min.js
Files
README.mddoc1,287 bytesSKILL.mdcore2,007 bytesSKILL.mdcore2,007 bytesSKILL.mdcore2,007 bytesdata/ipc_subclasses_2026.01.csvasset88,101 bytesprompts/guardrails.mddoc2,019 bytesprompts/intake.mddoc910 bytestests/test_map.pyruns14,431 bytestools/__init__.pyruns0 bytestools/embed_layout.pyruns7,606 bytestools/ensure_model.pyruns396 bytestools/ipc_scheme/README.mddoc2,253 bytestools/ipc_scheme/__init__.pyruns67 bytestools/ipc_scheme/__main__.pyruns79 bytestools/ipc_scheme/build.pyruns429 bytestools/ipc_scheme/cli.pyruns2,031 bytestools/ipc_scheme/config.pyruns2,786 bytestools/ipc_scheme/download.pyruns5,838 bytestools/ipc_scheme/emit.pyruns860 bytestools/ipc_scheme/parse.pyruns5,617 bytestools/ipc_scheme/requirements.txtdoc110 bytestools/ipc_scheme/testdata/sample_en_scheme.xmlasset756 bytestools/ipc_scheme/testdata/sample_ipcpub.jsonasset122 bytestools/ipc_titles.pyruns2,085 bytestools/map_cache.pyruns6,087 bytestools/model_store.pyruns15,288 bytestools/requirements.txtdoc175 bytestools/serve_map.pyruns6,781 bytestools/vault_index.pyruns15,697 bytesweb/index.htmlasset5,146 bytesweb/js/app.jsruns1,905 bytesweb/js/camera.jsruns8,792 bytesweb/js/chrome.jsruns3,331 bytesweb/js/core.jsruns6,348 bytesweb/js/detail.jsruns5,457 bytesweb/js/layout.jsruns6,770 bytesweb/js/view-bubble.jsruns5,853 bytesweb/js/view-citation.jsruns2,733 bytesweb/js/view-dashboard.jsruns8,318 bytesweb/js/view-matrix.jsruns12,932 bytesweb/js/view-terrain.jsruns14,313 bytesweb/styles.cssasset10,708 bytesweb/terrain3d.jsruns10,500 bytesweb/vendor/README.txtdoc129 bytesweb/vendor/THREE_LICENSEasset1,081 bytesweb/vendor/three.module.min.jsruns691,648 bytes
Read SKILL.md
# 专利地图
## 用途
把已经解读入库的案例摊成五种图(语义地形),给代理师找相近案子、看申请人重叠和文内引证。本包只读 vault、起本地页。空白点只表示「库里没读到」。
## 何时用
须用户点名(专利地图 / 案例地图 / `/专利地图` / `/patent-map`)。解读继续只入库。
## 输入
已有解读入库的 vault(与解读同一份:`PATENT_READER_OBSIDIAN_VAULT` 或 `~/.patent-disclosure-skill/obsidian_vault.txt`)。取数优先扫 `Research/Patents/**/*_解读_*.md`。若本机 `obsidian` CLI 可用且库已打开,用 `obsidian vaults` / `base:query` 核对,不替代磁盘扫描。
View the complete source on GitHubpatent-oa
When your agent uses it
审查答复辅助:审查意见问答与草稿;库薄时引导案例入库。须显式触发。
What it loads into context
Frontmatter
46 tokensAlways available to the agent
SKILL.md
578 tokensWhen the skill is activated
Reference documents
9,982 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/__init__.pytests/test_chart_tools_sync.pytests/test_oa_store.pytests/test_opinion_docx.pytools/__init__.pytools/case_md.pytools/config.pytools/embed.pytools/emit_chart.pytools/emit_opinion_docx.pytools/highlights.pytools/ingest_case.pytools/latex_delimiters.pytools/md_to_docx.pytools/pdf_text.pytools/rebuild_vectors.pytools/redact.pytools/refresh_vault.pytools/search_cases.pytools/stdio_utf8.pytools/store.pytools/vault_layout.pytools/write_intake.pytools/xlsx_minimal.py
Files
README.mddoc1,161 bytesSKILL.mdcore1,873 bytesassets/obsidian/oa.base.yamlasset1,260 bytesassets/opinion_statement.mddoc1,111 bytesdocs/.gitignoreasset49 bytesdocs/embedding.config.yamlasset962 bytesdocs/vault.mddoc1,253 bytesexamples/example_oa_response/README.mddoc1,863 bytesexamples/example_oa_response/cases/history/hist-clarity-connector.mddoc1,106 bytesexamples/example_oa_response/cases/history/hist-inventiveness-clamp.mddoc1,347 bytesexamples/example_oa_response/pending/oa_notice_pending.mddoc1,472 bytesprompts/case_note_template.mddoc1,568 bytesprompts/configure_embedding.mddoc2,428 bytesprompts/guardrails.mddoc3,088 bytesprompts/ingest_case.mddoc2,094 bytesprompts/intake.mddoc1,313 bytesprompts/respond_office_action.mddoc8,420 bytesprompts/soft_nudge.mddoc1,882 bytesreferences/schemas/oa_case.schema.yamlasset2,911 bytestests/__init__.pyruns24 bytestests/test_chart_tools_sync.pyruns983 bytestests/test_oa_store.pyruns16,900 bytestests/test_opinion_docx.pyruns1,987 bytestools/README.mddoc2,696 bytestools/__init__.pyruns75 bytestools/case_md.pyruns2,638 bytestools/config.pyruns31,859 bytestools/embed.pyruns8,169 bytestools/emit_chart.pyruns42,046 bytestools/emit_opinion_docx.pyruns2,488 bytestools/highlights.pyruns13,314 bytestools/ingest_case.pyruns11,900 bytestools/latex_delimiters.pyruns6,567 bytestools/md_to_docx.pyruns45,899 bytestools/pdf_text.pyruns5,447 bytestools/rebuild_vectors.pyruns5,451 bytestools/redact.pyruns1,860 bytestools/refresh_vault.pyruns2,644 bytestools/requirements-oa.txtdoc386 bytestools/search_cases.pyruns7,442 bytestools/stdio_utf8.pyruns1,394 bytestools/store.pyruns13,898 bytestools/vault_layout.pyruns24,897 bytestools/write_intake.pyruns9,614 bytestools/xlsx_minimal.pyruns26,008 bytes
Read SKILL.md
# 审查答复辅助
## 用途
审查意见问答与内部草稿;用户确认采纳后才出意见陈述 Word。案例入库是让检索变准的配套。草稿须复核后递交,不替代代理签字。
## 何时用
须用户点名(审查意见 / OA / 入库,或 `/oa`)。库薄时先引导入库,不要挂进交底或解读的默认步骤。
## 输入
审查意见通知书、本申请文件、可选对比文件 PDF;向量配置可选。新颖性/创造性且通知书列了对比文件时,另用本包对照副本收三件套。
View the complete source on GitHubpatent-reader
When your agent uses it
专利通俗解读:中国或海外(美欧日韩等)公开号 / PDF 成通俗笔记、图谱与 Obsidian 入库。
What it loads into context
Frontmatter
49 tokensAlways available to the agent
SKILL.md
723 tokensWhen the skill is activated
Reference documents
21,368 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/__init__.pytests/test_biblio_extract.pytests/test_claim_features.pytests/test_clue_market.pytests/test_clue_vocab.pytests/test_desc_paragraphs.pytests/test_extract_patent_text.pytests/test_fetch_gp_fulltext.pytests/test_fetch_patent_pdf.pytests/test_google_patents.pytests/test_note_cites.pytests/test_patent_reader_debt_fixes.pytests/test_patent_reader_links.pytests/test_patent_reader_p0_p2.pytests/test_patent_reader_pipeline.pytests/test_schema_vault.pytests/test_text_vocab.pytools/__init__.pytools/analyze/__init__.pytools/analyze/build_claim_mermaid.pytools/analyze/build_context_anchor.pytools/analyze/claim_features.pytools/analyze/lint_patent_note.pytools/analyze/validate_claim_features.pytools/analyze/validate_claim_tree.pytools/analyze/validate_public_clues.pytools/browser.pytools/crawl/cnipa_epub_crawler.pytools/crawl/cnipa_epub_parse.pytools/extract/__init__.pytools/extract/extract_patent_figures.pytools/extract/extract_patent_text.pytools/extract/fetch_design_views.pytools/extract/fetch_gp_fulltext.pytools/extract/fetch_patent_pdf.pytools/extract/figure_extract.pytools/google_patents/__init__.pytools/google_patents/api.pytools/google_patents/client.pytools/google_patents/detail.pytools/google_patents/errors.pytools/google_patents/html_text.pytools/google_patents/query.pytools/google_patents/results.pytools/patent_type.pytools/shared/__init__.pytools/shared/biblio.pytools/shared/claims.pytools/shared/common.pytools/shared/obsidian_env.pytools/shared/paths.pytools/shared/rules.pytools/shared/text_vocab.pytools/stdio_utf8.pytools/vault/__init__.pytools/vault/build_patent_canvas.pytools/vault/check_obsidian_env.pytools/vault/clue_vault.pytools/vault/clues/__init__.pytools/vault/clues/annotate.pytools/vault/clues/matching.pytools/vault/clues/model.pytools/vault/clues/render.pytools/vault/clues/summary.pytools/vault/clues/vocab.pytools/vault/desc_paragraphs.pytools/vault/link_patent_notes.pytools/vault/materialize_public_clues.pytools/vault/note_cites.pytools/vault/obsidian.pytools/vault/obsidian_bootstrap.pytools/vault/obsidian_canvas.pytools/vault/obsidian_claims.pytools/vault/obsidian_frontmatter.pytools/vault/obsidian_glossary.pytools/vault/obsidian_paths.pytools/vault/patent_link.pytools/vault/schema_vault.pytools/vault/setup_obsidian_vault.pytools/vault/write_patent_obsidian_note.py
Files
README.mddoc1,834 bytesSKILL.mdcore2,425 bytesassets/obsidian/README.mddoc578 bytesassets/obsidian/_专利解读索引.template.mddoc1,836 bytesassets/obsidian/glossary.base.yamlasset542 bytesassets/obsidian/graph_color_groups.jsonasset800 bytesassets/obsidian/patent-reader.cssasset1,561 bytesassets/obsidian/patents.base.yamlasset2,534 bytesassets/patent_note_template.mddoc3,919 bytesdocs/obsidian-setup-guide.mddoc4,783 bytesexamples/example_patent_reader/README.mddoc2,844 bytesprompts/fill_appearance_schema.mddoc1,789 bytesprompts/fill_structure_schema.mddoc1,596 bytesprompts/obsidian_ofm_companion.mddoc2,332 bytesprompts/obsidian_plugin_guide.mddoc1,656 bytesprompts/patent_plain_reader.mddoc27,311 bytesprompts/patent_reader_self_check.mddoc1,735 bytesprompts/type_hooks.mddoc1,968 bytesreferences/clue_vocab.yamlasset2,374 bytesreferences/ipc_application_hints.yamlasset3,603 bytesreferences/patent_domain_rules.yamlasset1,030 bytesreferences/patent_obsidian_format.mddoc8,788 bytesreferences/patent_pdf_sources.yamlasset4,505 bytesreferences/schemas/appearance.schema.yamlasset1,992 bytesreferences/schemas/claim_features.schema.yamlasset897 bytesreferences/schemas/structure.schema.yamlasset1,385 bytesreferences/tech_effect_hints.yamlasset700 bytesreferences/text_vocab.yamlasset1,567 bytestests/__init__.pyruns4 bytestests/fixtures/google_patents/detail_JP7371268B2.htmlasset16,825 bytestests/fixtures/google_patents/detail_US11450918B2.htmlasset15,382 bytestests/fixtures/google_patents/search.jsonasset5,817 bytestests/fixtures/patent_reader_sample.txtdoc1,083 bytestests/test_biblio_extract.pyruns1,075 bytestests/test_claim_features.pyruns3,525 bytestests/test_clue_market.pyruns4,787 bytestests/test_clue_vocab.pyruns1,578 bytestests/test_desc_paragraphs.pyruns4,897 bytestests/test_extract_patent_text.pyruns1,631 bytestests/test_fetch_gp_fulltext.pyruns7,411 bytestests/test_fetch_patent_pdf.pyruns6,069 bytestests/test_google_patents.pyruns11,280 bytestests/test_note_cites.pyruns4,437 bytestests/test_patent_reader_debt_fixes.pyruns38,061 bytestests/test_patent_reader_links.pyruns5,537 bytestests/test_patent_reader_p0_p2.pyruns4,811 bytestests/test_patent_reader_pipeline.pyruns8,434 bytestests/test_schema_vault.pyruns3,060 bytestests/test_text_vocab.pyruns1,464 bytestools/README.mddoc6,543 bytestools/__init__.pyruns336 bytestools/analyze/__init__.pyruns28 bytestools/analyze/build_claim_mermaid.pyruns1,592 bytestools/analyze/build_context_anchor.pyruns10,059 bytestools/analyze/claim_features.pyruns7,327 bytestools/analyze/lint_patent_note.pyruns10,084 bytestools/analyze/validate_claim_features.pyruns2,807 bytestools/analyze/validate_claim_tree.pyruns3,965 bytestools/analyze/validate_public_clues.pyruns6,777 bytestools/browser.pyruns6,447 bytestools/crawl/cnipa_epub_crawler.pyruns17,971 bytestools/crawl/cnipa_epub_parse.pyruns19,545 bytestools/crawl/requirements-cnipa.txtdoc248 bytestools/extract/__init__.pyruns28 bytestools/extract/extract_patent_figures.pyruns2,921 bytestools/extract/extract_patent_text.pyruns14,790 bytestools/extract/fetch_design_views.pyruns15,851 bytestools/extract/fetch_gp_fulltext.pyruns11,877 bytestools/extract/fetch_patent_pdf.pyruns16,871 bytestools/extract/figure_extract.pyruns18,754 bytestools/google_patents/__init__.pyruns1,754 bytestools/google_patents/api.pyruns1,679 bytestools/google_patents/client.pyruns2,941 bytestools/google_patents/detail.pyruns11,642 bytestools/google_patents/errors.pyruns1,007 bytestools/google_patents/html_text.pyruns569 bytestools/google_patents/query.pyruns6,142 bytestools/google_patents/results.pyruns3,893 bytestools/patent_type.pyruns10,983 bytestools/requirements.txtdoc158 bytestools/shared/__init__.pyruns27 bytestools/shared/biblio.pyruns4,324 bytestools/shared/claims.pyruns7,691 bytestools/shared/common.pyruns1,532 bytestools/shared/obsidian_env.pyruns11,671 bytestools/shared/paths.pyruns889 bytestools/shared/rules.pyruns3,330 bytestools/shared/text_vocab.pyruns1,392 bytestools/stdio_utf8.pyruns1,394 bytestools/vault/__init__.pyruns26 bytestools/vault/build_patent_canvas.pyruns6,541 bytestools/vault/check_obsidian_env.pyruns6,693 bytestools/vault/clue_vault.pyruns1,708 bytestools/vault/clues/__init__.pyruns381 bytestools/vault/clues/annotate.pyruns18,723 bytestools/vault/clues/matching.pyruns13,354 bytestools/vault/clues/model.pyruns5,301 bytestools/vault/clues/render.pyruns14,178 bytestools/vault/clues/summary.pyruns10,243 bytestools/vault/clues/vocab.pyruns1,263 bytestools/vault/desc_paragraphs.pyruns13,143 bytestools/vault/link_patent_notes.pyruns4,393 bytestools/vault/materialize_public_clues.pyruns7,581 bytestools/vault/note_cites.pyruns14,334 bytestools/vault/obsidian.pyruns4,350 bytestools/vault/obsidian_bootstrap.pyruns22,037 bytestools/vault/obsidian_canvas.pyruns20,165 bytestools/vault/obsidian_claims.pyruns14,772 bytestools/vault/obsidian_frontmatter.pyruns10,368 bytestools/vault/obsidian_glossary.pyruns16,799 bytestools/vault/obsidian_paths.pyruns594 bytestools/vault/patent_link.pyruns28,031 bytestools/vault/schema_vault.pyruns9,504 bytestools/vault/setup_obsidian_vault.pyruns2,793 bytestools/vault/write_patent_obsidian_note.pyruns47,333 bytes
Read SKILL.md
# 专利通俗解读
## 用途
把公开号 / PDF / 全文读成通俗笔记、图谱,并可写入 Obsidian。独权拆成稳定特征行(`claim_features.json`),说明书段落可机读(`description_paragraphs.json`),给对照表当输入。海外公开号(US / EP / WO / JP / KR 等)一次请求取结构化全文,机翻文献同时保留原文。
## 何时用
用户说读专利、给出公开号或 PDF 且目标是「读懂」,或 `/patent-read`、`/读专利`。用户给的公开号本身是海外号,即按海外件读,不另需口令;只读这一件,不顺带做海外检索。对照表派工缺 `claim_features.json` 或 `description_paragraphs.json` 时由对照表点名进入。对照表只要这两份文件,不写笔记、不入库。
## 输入
公开号(中国或海外)、专利 PDF、或粘贴的权利要求/说明书。对照表派工时默认把从属权也拆进 `claim_features.json`,并保留 `description_paragraphs.json`。
View the complete source on GitHubpatent-search
When your agent uses it
专利著录检索:中国专利公布公告(发明人、申请人、分类号、名称、摘要;也可从单图或权利要求生成名称/摘要关键字后查询);用户点名海外时,用 Google Patents 检索美欧日韩等海外专利。
What it loads into context
Frontmatter
79 tokensAlways available to the agent
SKILL.md
1,067 tokensWhen the skill is activated
Reference documents
5,353 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用途
- 何时用
- 输入
- 步骤
- 护栏
- 产出物
Scripts executed separately
tests/__init__.pytests/test_cnipa_search.pytests/test_emit_covers_report.pytests/test_emit_search_report.pytests/test_google_patents.pytests/test_gp_search.pytools/browser.pytools/cnipa_crawler.pytools/cnipa_parse.pytools/cnipa_search.pytools/derived_query.pytools/emit_covers_report.pytools/emit_search_report.pytools/google_patents/__init__.pytools/google_patents/api.pytools/google_patents/client.pytools/google_patents/detail.pytools/google_patents/errors.pytools/google_patents/html_text.pytools/google_patents/query.pytools/google_patents/results.pytools/gp_search.pytools/patent_type.pytools/search_config.pytools/stdio_utf8.py
Files
README.mddoc2,456 bytesSKILL.mdcore3,708 bytesSKILL.mdcore3,708 bytesconfig.yamlasset1,149 bytesprompts/covers_rank.mddoc1,592 bytesprompts/derived_query.mddoc3,842 bytesprompts/global_search.mddoc3,329 bytesprompts/patent_search.mddoc6,350 bytesreferences/patent_type_search.yamlasset961 bytestests/__init__.pyruns24 bytestests/fixtures/google_patents/detail_JP7371268B2.htmlasset16,825 bytestests/fixtures/google_patents/detail_US11450918B2.htmlasset15,382 bytestests/fixtures/google_patents/search.jsonasset5,817 bytestests/test_cnipa_search.pyruns33,660 bytestests/test_emit_covers_report.pyruns2,684 bytestests/test_emit_search_report.pyruns4,785 bytestests/test_google_patents.pyruns11,280 bytestests/test_gp_search.pyruns5,096 bytestools/browser.pyruns6,435 bytestools/cnipa_crawler.pyruns41,810 bytestools/cnipa_parse.pyruns21,766 bytestools/cnipa_search.pyruns14,431 bytestools/derived_query.pyruns3,069 bytestools/emit_covers_report.pyruns5,358 bytestools/emit_search_report.pyruns16,487 bytestools/google_patents/__init__.pyruns1,754 bytestools/google_patents/api.pyruns1,679 bytestools/google_patents/client.pyruns2,941 bytestools/google_patents/detail.pyruns11,642 bytestools/google_patents/errors.pyruns1,007 bytestools/google_patents/html_text.pyruns569 bytestools/google_patents/query.pyruns6,142 bytestools/google_patents/results.pyruns3,893 bytestools/gp_search.pyruns8,871 bytestools/patent_type.pyruns9,341 bytestools/requirements-cnipa.txtdoc230 bytestools/search_config.pyruns3,093 bytestools/stdio_utf8.pyruns1,394 bytes
Read SKILL.md
# 著录检索
## 用途
公布站高级查询(发明人 / 申请人 / 分类号 / 名称 / 摘要等)。个人公开清单只是一种用法。单图或权要可先抽关键字再查。对照表派工时可按特征精排,另出覆盖旁路,**不改**列表报告。用户点名海外 / 指定局时,走 Google Patents 海外检索旁路(`gp_search.py`)。
## 何时用
用户要按著录字段查公布公告、个人公开清单、以图或权要生成检索式,或 `/patent-search`。对照表派工或用户点名「按特征精排」时再走 `covers_rank.md`。用户点名「海外检索」「查美国 / 欧洲 / 日本 / 韩国专利」「PCT 检索」「包含某国」时走 `global_search.md`;没提国家时仍走公布站。
## 输入
至少一项:发明人、申请人、分类号、名称、摘要/简要说明、申请号或公开号。单图必须 `--type design|utility_model|invention`,不能 `all`;用户没说类型时看图推断并加 `--type-inferred`。权要按文本选类型,可用 `all`。海外检索至少一项:英文关键词、名称 / 摘要 / 权要字段、CPC、申请人、发明人;局别按用户点名。
View the complete source on GitHubSkills included
- patent-disclosure-skill
- patent-application
- patent-chart
- patent-disclosure
- patent-docket
- patent-exam-policy
- patent-map
- patent-oa
- patent-reader
- patent-search
Repository facts
- License
- MIT
- Created
- Apr 7, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 1,400
- Open issues
- 13
- Project activity
- Active
Rank over the last 12 weeks
Now #123 · best #123 · up 2 in 30 days
- #124 from Oct 21 to Oct 24
- #125 on Oct 25
- #123 from Oct 28 to Oct 29
- #125 from Oct 30 to Oct 31
- #124 from Nov 1 to Nov 3
- #123 since Nov 4
57 earlier periods
- #203 on Aug 2
- #202 from Aug 7 to Aug 9
- #207 on Aug 10
- #206 on Aug 11
- #204 on Aug 12
- #208 on Aug 13
- #209 on Aug 14
- #208 on Aug 15
- #206 on Aug 16
- #205 on Aug 17
- #207 on Aug 18
- #206 on Aug 19
- #203 on Aug 20
- #205 on Aug 21
- #203 on Aug 22
- #207 on Aug 23
- #206 from Aug 24 to Aug 25
- #205 on Aug 26
- #206 on Aug 27
- #203 on Aug 28
- #204 on Aug 29
- #191 on Aug 30
- #176 on Aug 31
- #166 on Sep 1
- #160 on Sep 2
- #161 on Sep 3
- #158 from Sep 4 to Sep 5
- #148 on Sep 6
- #143 on Sep 7
- #140 on Sep 8
- #138 on Sep 9
- #137 on Sep 10
- #133 from Sep 11 to Sep 12
- #132 from Sep 13 to Sep 14
- #131 on Sep 15
- #130 on Sep 16
- #131 on Sep 17
- #132 on Sep 18
- #130 from Sep 19 to Sep 23
- #128 on Sep 24
- #130 from Sep 25 to Sep 26
- #129 on Sep 27
- #130 from Sep 28 to Sep 29
- #129 from Sep 30 to Oct 1
- #126 on Oct 2
- #125 on Oct 3
- #124 on Oct 4
- #125 on Oct 5
- #123 on Oct 6
- #125 on Oct 7
- #124 from Oct 8 to Oct 9
- #125 on Oct 10
- #126 from Oct 11 to Oct 15
- #127 on Oct 16
- #126 on Oct 17
- #127 on Oct 18
- #125 from Oct 19 to Oct 20
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 89 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/patent-application/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/patent-disclosure/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/patent-disclosure/tools/vendor/mermaid.min.js:1Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:7Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:5Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:2Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:6Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:9[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:12[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:10[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:13Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:11Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:267[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:265Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:268[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:266Analysis incomplete: physical or joined line exceeds character limitskills/patent-disclosure/tools/vendor/mermaid.min.js:272[Credential-related source omitted]skills/patent-disclosure/tools/vendor/mermaid.min.js:270Analysis incomplete: physical or joined line exceeds character limit
- 1 broad permissionin 1 file: SKILL.md:1
- 3 dangerous shell commandsin 2 files: patent-reader/tools/extract/figure_extract.py:248 patent-disclosure/tools/formula_eval.py:239
- 865 network referencesin 90 files: patent-disclosure/tools/package-lock.json:19 patent-exam-policy/references/sources.yaml:10 patent-chart/tools/xlsx_minimal.py:278 and 87 more
- 72 obfuscation signalsin 7 files: patent-disclosure/tools/vendor/mermaid.min.js:1 patent-disclosure/tests/test_structure_lineart_gate.py:74 patent-disclosure/tests/test_svg_screenshot.py:18 and 4 more
- No instruction overrides
- 279 executable scriptsin 279 files: scripts/generate-star-history.py:1 patent-application/tests/test_audit_claims.py:1 patent-application/tests/test_design_view_sync.py:1 and 276 more
- 172 references to secretsin 53 files: patent-oa/tools/config.py:35 patent-oa/tests/test_oa_store.py:186 patent-reader/tools/shared/obsidian_env.py:47 and 50 more
- No requests to vote in Hot
Show all 1,392 signals by file
.github/workflows/update-star-history.yml
INSTALL.md
- Network accessline 3
本技能遵循 [AgentSkills](https://agentskills.io) 常见布局:仓库根目录即技能根目录,内含 `SKILL.md`。 - Network accessline 20
Cursor 支持 [Agent Skills](https://www.cursor.com/docs/context/skills) 约定:每个技能是一个**子文件夹**,内含根级 `SKILL.md`(`name` 字段须与文件夹名一致,本仓库为 `patent-disclosure-skill`)。可将**本仓库完整内容**(含各 `skills/patent-*` 子包)放在下列位置之一,重启 Cursor 后在 **Settings → Rules** 中查看是否 - Network accessline 138
若需使用交底轻量查新 **`skills/patent-disclosure/tools/crawl/cnipa_epub_search.py`**(一词一页)或著录检索 **`skills/patent-search/tools/cnipa_search.py`**([epub.cnipa.gov.cn](http://epub.cnipa.gov.cn/)): - Access to secretsline 196
[Credential-related source omitted]
README.md
- Network accessline 7
[](LICENSE) - Network accessline 8
[](https://www.python.org/) - Network accessline 9
[](https://playwright.dev/) - Network accessline 10
[](https://agentskills.io) - Network accessline 36
公开专利常把阅读门槛抬得很高:权要绕、术语密、落地语境散落在说明书与附图里。本技能把单篇读成通俗笔记与图谱,并入库 Obsidian;依托双链、图谱、插件与 Bases 等生态,陆续解读的专利可以沉淀成**只属于自己的私有专利知识库**——权要、术语、线索与附图彼此勾连,越读越厚。再叠上 [Obsidian CLI](https://help.obsidian.md/cli) 与库内外连接能力,检索、批处理、和外部工具接力都更容易:从单篇通俗笔记,走向可检索、可关联、可继续生 - Network accessline 204
</td> <td width="60%" valign="middle" align="center"> <img alt="Star History Chart" src="https://raw.githubusercontent.com/handsomestWei/patent-disclosure-skill/star-history/star-history.svg" width="100%" /> - Network accessline 205
<td width="60%" valign="middle" align="center"> <img alt="Star History Chart" src="https://raw.githubusercontent.com/handsomestWei/patent-disclosure-skill/star-history/star-history.svg" width="100%" /> </td> - Network accessline 206
<img alt="Star History Chart" src="https://raw.githubusercontent.com/handsomestWei/patent-disclosure-skill/star-history/star-history.svg" width="100%" /> - Network accessline 223
MIT License © [handsomestWei](https://github.com/handsomestWei/)
SKILL.md
- Broad permissionsline 1
Read, Write, Edit, Grep, Glob, WebSearch, Bash
scripts/generate-star-history.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 23
GITHUB_API = "https://api.github.com" - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Network accessline 121
last_error: Exception | None = None for attempt in range(retries + 1): request = urllib.request.Request(url, headers=headers) - Network accessline 122
for attempt in range(retries + 1): request = urllib.request.Request(url, headers=headers) try: - Network accessline 123
request = urllib.request.Request(url, headers=headers) - Network accessline 124
try: with urllib.request.urlopen(request, timeout=45) as response: return json.loads(response.read().decode("utf-8")) - Network accessline 125
with urllib.request.urlopen(request, timeout=45) as response: - Network accessline 343
return f'''<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}" role="img" aria-labelledby="title desc">
skills/patent-application/tests/test_audit_claims.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_design_view_sync.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_emit_application_docx.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_invention_figures.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_lexicon.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_material_gate.py
- Executable scriptline 1
Executable file - Network accessline 63
"$schema: structure.schema\nversion: 1\nparts:\n - id: '1'\n name: 壳体\n", ) _write(case / "figs" / "assembly.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n") - Network accessline 64
) _write(case / "figs" / "assembly.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n") _write( - Network accessline 65
_write(case / "figs" / "assembly.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n") - Network accessline 85
"product_form: solid\nclaimed_faces: [主视]\n", ) _write(case / "line.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n") - Network accessline 86
) _write(case / "line.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n") _write( - Network accessline 87
_write(case / "line.svg", "<svg xmlns='http://www.w3.org/2000/svg'/>\n")
skills/patent-application/tests/test_math_to_omml.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_numeral_register.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_plan_figures.py
- Executable scriptline 1
Executable file
skills/patent-application/tests/test_support_and_antecedent.py
- Executable scriptline 1
Executable file
skills/patent-application/tools/__init__.py
- Executable scriptline 1
Executable file
skills/patent-application/tools/audit_claims.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/check_design_views.py
- Executable scriptline 1
Executable file
skills/patent-application/tools/check_numeral_register.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/check_support.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/compose_application_figure.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 74
return ( '<?xml version="1.0" encoding="UTF-8"?>\n' f'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 75
'<?xml version="1.0" encoding="UTF-8"?>\n' f'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' f'width="170mm" height="120mm" viewBox="0 0 170 120">' - Network accessline 76
f'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" '
skills/patent-application/tools/emit_application_docx.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/iteration_dialog_log.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/latex_delimiters.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/lexicon.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/material_gate.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/math_to_omml.py
skills/patent-application/tools/md_to_docx.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-application/tools/plan_figures.py
- Executable scriptline 1
Executable file
skills/patent-application/tools/render_invention_figures.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 152
vb_w, vb_h = (x1 - x0) + 2 * pad, (y1 - y0) + 2 * pad body = ( f'<svg xmlns="http://www.w3.org/2000/svg" width="{vb_w:.2f}mm" height="{vb_h:.2f}mm" ' - Network accessline 153
body = ( f'<svg xmlns="http://www.w3.org/2000/svg" width="{vb_w:.2f}mm" height="{vb_h:.2f}mm" ' f'viewBox="{vb_x:.2f} {vb_y:.2f} {vb_w:.2f} {vb_h:.2f}">' - Network accessline 154
f'<svg xmlns="http://www.w3.org/2000/svg" width="{vb_w:.2f}mm" height="{vb_h:.2f}mm" '
skills/patent-application/tools/stdio_utf8.py
skills/patent-chart/tests/test_emit_chart.py
- Executable scriptline 1
Executable file - Network accessline 37
"label": "CN216600001U", "pub_number": "CN216600001U", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", - Network accessline 38
"pub_number": "CN216600001U", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", } - Network accessline 39
"source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", - Network accessline 50
"quote": "壳体与端盖形成冷却空腔,并且在周向均布多条加强筋以承受热负荷。" * 2, "analysis": "对应:权要的冷却腔对应说明书里的冷却空腔。\n差别:对照未写端盖如何密封。\n依据:说明书 [0021]。", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", - Network accessline 51
"analysis": "对应:权要的冷却腔对应说明书里的冷却空腔。\n差别:对照未写端盖如何密封。\n依据:说明书 [0021]。", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", "desc_para": "0021", - Network accessline 52
"source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", - Network accessline 355
"quote": "周向均布加强筋。", "analysis": "对应:仅加强筋片段。\n差别:未见密封圈。\n依据:说明书 [0021]。", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", - Network accessline 356
"analysis": "对应:仅加强筋片段。\n差别:未见密封圈。\n依据:说明书 [0021]。", "source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U", "desc_para": "0021", - Network accessline 357
"source_url": "http://epub.cnipa.gov.cn/patent/CN216600001U",
skills/patent-chart/tests/test_highlights.py
- Executable scriptline 1
Executable file
skills/patent-chart/tests/test_write_intake.py
- Executable scriptline 1
Executable file - Network accessline 47
) self.assertEqual(linked["right"][0]["kind"], "product") self.assertEqual(linked["right"][0]["url"], "https://www.example.com/p/1") - Network accessline 49
self.assertEqual(linked["right"][0]["url"], "https://www.example.com/p/1") - Network accessline 67
"scene": "infringement", "left": {"pub_number": "CN1"}, "right": [{"pub_number": "型号A", "url": "https://example.com/p"}], - Network accessline 68
"left": {"pub_number": "CN1"}, "right": [{"pub_number": "型号A", "url": "https://example.com/p"}], }, - Network accessline 69
"right": [{"pub_number": "型号A", "url": "https://example.com/p"}],
skills/patent-chart/tools/emit_chart.py
- Executable scriptline 1
Executable file
skills/patent-chart/tools/highlights.py
- Executable scriptline 1
Executable file
skills/patent-chart/tools/write_intake.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-chart/tools/xlsx_minimal.py
- Executable scriptline 1
Executable file - Network accessline 278
xml = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 279
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' ' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 280
'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 281
' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 312
return ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' - Network accessline 313
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' "<authors><author>对照表</author></authors>" - Network accessline 314
'<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' - Network accessline 369
workbook = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 370
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' ' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 371
'<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 372
' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 375
wb_rels = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 376
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' + "".join( - Network accessline 377
'<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 378
+ "".join( f'<Relationship Id="rId{i}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' - Network accessline 379
f'<Relationship Id="rId{i}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' f'Target="worksheets/sheet{i}.xml"/>' - Network accessline 380
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' - Network accessline 383
) + f'<Relationship Id="rId{len(sheets) + 1}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' - Network accessline 384
+ f'<Relationship Id="rId{len(sheets) + 1}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' 'Target="styles.xml"/>' - Network accessline 385
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' - Network accessline 401
content_types = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' - Network accessline 402
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' '<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relation - Network accessline 403
'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' - Network accessline 413
) rels = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> - Network accessline 414
rels = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/rel - Network accessline 415
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> - Network accessline 416
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/> - Network accessline 428
f"xl/worksheets/_rels/sheet{i}.xml.rels", '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 429
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' f'<Relationship Id="rId1" Type="http://schemas.o - Network accessline 430
'<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 431
f'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" Target="../drawings/vmlDrawing{i}.vml"/>' - Network accessline 432
f'<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" Target="../comments{i}.xml"/>' - Network accessline 486
xf_count = HIGHLIGHT_XF_BASE + len(PALETTE) return f"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> - Network accessline 487
return f"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <fonts count="10"> - Network accessline 488
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
skills/patent-disclosure/README.md
- Network accessline 17
<tr><td nowrap width="1%"><strong>实用结构线稿</strong></td><td>成文前选用或生成结构线稿,并叠部件序号</td></tr> <tr><td nowrap width="1%"><strong>专利点</strong></td><td>候选点讨论与融合</td></tr> <tr><td nowrap width="1%"><strong>查新</strong></td><td><strong>优先</strong> <a h - Network accessline 18
<tr><td nowrap width="1%"><strong>专利点</strong></td><td>候选点讨论与融合</td></tr> <tr><td nowrap width="1%"><strong>查新</strong></td><td><strong>优先</strong> <a href="http://epub.cnipa.gov.cn/">国知局 · 中国专利公布公告</a>;异常或无果时再换其他检索。著录写入交底第一章</td></tr> <tr> - Network accessline 19
<tr><td nowrap width="1%"><strong>查新</strong></td><td><strong>优先</strong> <a href="http://epub.cnipa.gov.cn/">国知局 · 中国专利公布公告</a>;异常或无果时再换其他检索。著录写入交底第一章</td></tr>
skills/patent-disclosure/examples/example_batch_job_scheduler/knowledge/pkg/scheduler/heartbeat.go
- Executable scriptline 1
Executable file
skills/patent-disclosure/examples/example_batch_job_scheduler/knowledge/pkg/scheduler/reorder.go
- Executable scriptline 1
Executable file
skills/patent-disclosure/examples/example_batch_job_scheduler/knowledge/pkg/scheduler/scorer.go
- Executable scriptline 1
Executable file
skills/patent-disclosure/examples/example_batch_job_scheduler/knowledge/pkg/scheduler/types.go
- Executable scriptline 1
Executable file
skills/patent-disclosure/examples/example_design_desk_lamp/README.md
- Network accessline 38
| 本地文件 | 来源文章 | 直链 | |----------|----------|------| | `view_perspective.jpg` | [明基 WiT 上手](https://sspai.com/post/81747) | https://cdnfile.sspai.com/2023/08/03/article/58410f27568ccd9df0d9d8b6893bc5e9?imageView2/2/w/1400/q/90/interlace/1/ig - Network accessline 39
|----------|----------|------| | `view_perspective.jpg` | [明基 WiT 上手](https://sspai.com/post/81747) | https://cdnfile.sspai.com/2023/08/03/article/58410f27568ccd9df0d9d8b6893bc5e9?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | | `vie - Network accessline 40
| `view_perspective.jpg` | [明基 WiT 上手](https://sspai.com/post/81747) | https://cdnfile.sspai.com/2023/08/03/article/58410f27568ccd9df0d9d8b6893bc5e9?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | - Network accessline 41
| `views_ortho.jpg` | 同上 | https://cdnfile.sspai.com/2023/08/03/article/2841967c7a0bd40ef062a281350b0561?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | - Network accessline 42
| `view_arm_detail.jpg` | 同上 | https://cdnfile.sspai.com/2023/08/03/article/cd955177eb766eff79d9fe1ce990e893?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | - Network accessline 43
| `view_joint_detail.jpg` | 同上 | https://cdnfile.sspai.com/2023/08/03/article/6960c15717c38cecfeb6c533a672154d?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | - Network accessline 44
| `view_packaging.jpg` | 同上 | https://cdnfile.sspai.com/2023/08/03/article/4adf940a108373a2aa76e88093dd353a?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 | - Network accessline 45
| `mi_desk_lamp_pro.jpg` | [米家台灯 Pro](https://sspai.com/post/52856) | https://cdnfile.sspai.com/2019/02/12/69013154e9c566e4f8651d6d645484cf.jpg?imageView2/2/w/1400/q/90/interlace/1/ignore-error/1 |
skills/patent-disclosure/examples/example_utility_model_ev_powertrain/README.md
- Network accessline 6
> 结构说明为教学虚构,保护点落在分腔壳体、花键滑脱抽拔、水套限于电机腔。实拍来自 Wikimedia 展台照片,车型与本案无关。附图类型划分参考 [汽车专利附图:动力总成、电池包、ADAS 与线束](https://patentfig.ai/zh/blog/automotive-patent-drawings-powertrain-battery-adas)(剖视 / 爆炸 / 局部)。 - Network accessline 36
| 本地文件 | 说明 | 页面 | 直链 | |----------|------|------|------| | `photo_motor_pcu.jpg` | Toyota Mirai 电机与 PCU 剖开展台 | [File:Toyota Mirai power control unit and electric motor SAO 2016 9019.jpg](https://commons.wikimedia.org/wiki/File:Toyota_Mirai - Network accessline 38
| `photo_motor_pcu.jpg` | Toyota Mirai 电机与 PCU 剖开展台 | [File:Toyota Mirai power control unit and electric motor SAO 2016 9019.jpg](https://commons.wikimedia.org/wiki/File:Toyota_Mirai_power_control_unit_and_electric_motor_SAO_2016_9019.jpg) - Network accessline 44
| 主题 | 公开号 | 页面 | |------|--------|------| | 电动车桥总成(桥壳内电机/减速器/差速器) | CN206327151U | https://patents.google.com/patent/CN206327151U/zh | - Network accessline 45
|------|--------|------| | 电动车桥总成(桥壳内电机/减速器/差速器) | CN206327151U | https://patents.google.com/patent/CN206327151U/zh | | 电驱动总成、集成水套(说明书附图标记) | — | https://www.xjishu.com/zhuanli/50/202110277717.html | - Network accessline 46
| 电动车桥总成(桥壳内电机/减速器/差速器) | CN206327151U | https://patents.google.com/patent/CN206327151U/zh | - Network accessline 47
| 电驱动总成、集成水套(说明书附图标记) | — | https://www.xjishu.com/zhuanli/50/202110277717.html |
skills/patent-disclosure/examples/example_utility_model_ev_powertrain/knowledge/docs/structure_brief.md
- Network accessline 8
图型配置参考公开文章对汽车动力总成附图的习惯划分(剖视承载内部结构、爆炸图承载装配关系、局部放大承载密封/花键等细节):[汽车专利附图:动力总成、电池包、ADAS 与线束](https://patentfig.ai/zh/blog/automotive-patent-drawings-powertrain-battery-adas)。 - Network accessline 21
公开检索可见大量「电机 + 减速器 + 差速器进桥壳」的实用新型,例如东风德纳 [CN206327151U《一种电动车桥总成》](https://patents.google.com/patent/CN206327151U/zh)(减速器在电机两端、差速器在电机内部、整体位于桥壳内)。本案教学点不在「三合一」口号本身,而在**壳体分腔 + 电机轴向可抽拔 + 水套随电机腔一体**这一组构造。 - Network accessline 135
| 资料 | 用途 | |------|------| | [PatentFig:汽车动力总成附图](https://patentfig.ai/zh/blog/automotive-patent-drawings-powertrain-battery-adas) | 剖视 / 爆炸 / 局部放大该何时用 | - Network accessline 136
|------|------| | [PatentFig:汽车动力总成附图](https://patentfig.ai/zh/blog/automotive-patent-drawings-powertrain-battery-adas) | 剖视 / 爆炸 / 局部放大该何时用 | | [CN206327151U](https://patents.google.com/patent/CN206327151U/zh) | 桥壳内电机+两端减速器+内部差速器的已有集成方式 | - Network accessline 137
| [PatentFig:汽车动力总成附图](https://patentfig.ai/zh/blog/automotive-patent-drawings-powertrain-battery-adas) | 剖视 / 爆炸 / 局部放大该何时用 | - Network accessline 138
| [CN206327151U](https://patents.google.com/patent/CN206327151U/zh) | 桥壳内电机+两端减速器+内部差速器的已有集成方式 | - Network accessline 139
| [CN 电驱动总成(集成水套)公开文本](https://www.xjishu.com/zhuanli/50/202110277717.html) | 壳体分室、集成水套、差速器总成等附图标记习惯 |
skills/patent-disclosure/prompts/prior_art_search.md
- Network accessline 13
1. **站点**:[国家知识产权局 中国专利公布公告](http://epub.cnipa.gov.cn/)(`epub.cnipa.gov.cn`)。 - Network accessline 130
7. **链接与著录**:`EPUB_HITS_JSON` 命中项在 1.1 的「来源链接」**直接使用 JSON 的 `link` 字段**(国知局公布站 `epub.cnipa.gov.cn`)。Google Patents 仅用于 **§B** 降级检索所得条目,或 JSON 无 `link`、仅知 `pub_number` 时的备选取址(如 `https://patents.google.com/patent/CN…/en`)。公开号与 URL 须对得上 JSON。页 - Network accessline 136
1. **中文文献与学术**:[Google 学术搜索](https://scholar.google.com)(`scholar.google.com`)。 - Network accessline 138
- 用中文关键词、技术方案核心术语、应用场景;可组合 2–3 组查询。 - 通过 WebSearch 或浏览器检索;优先可打开且与标题/作者匹配的链接。 2. **专利公开文献(补充)**:[Google Patents](https://patents.google.com/)。 - Network accessline 139
- 通过 WebSearch 或浏览器检索;优先可打开且与标题/作者匹配的链接。 2. **专利公开文献(补充)**:[Google Patents](https://patents.google.com/)。 - **发明**:界面/参数倾向 **Patent(`type=PATENT`)** + `country:CN`;公开号常见 `CN…A` / `CN…B`。第二轮分类号可拼 `CPC=B01J20/low`(见 3b.5,外网不通则跳过)。 - Network accessline 140
2. **专利公开文献(补充)**:[Google Patents](https://patents.google.com/)。 - Network accessline 160
| 类型 | 推荐 URL 形式 | 说明 | |------|----------------|------| | 美国等专利(公开出版物号) | `https://patents.google.com/patent/US20240118920A1/en` | 将 `US20240118920A1` 替换为实际公开号;以 Google Patents 页面能打开且标题/摘要匹配为准。 | - Network accessline 161
|------|----------------|------| | 美国等专利(公开出版物号) | `https://patents.google.com/patent/US20240118920A1/en` | 将 `US20240118920A1` 替换为实际公开号;以 Google Patents 页面能打开且标题/摘要匹配为准。 | | 中国专利(**§A 国知局 JSON 命中**) | JSON 的 **`link`**,如 `http://epub.cnipa - Network accessline 162
| 美国等专利(公开出版物号) | `https://patents.google.com/patent/US20240118920A1/en` | 将 `US20240118920A1` 替换为实际公开号;以 Google Patents 页面能打开且标题/摘要匹配为准。 | - Network accessline 163
| 中国专利(**§A 国知局 JSON 命中**) | JSON 的 **`link`**,如 `http://epub.cnipa.gov.cn/patent/CN119781913A` | 1.1「来源链接」照抄 `link`。 | - Network accessline 164
| 中国专利(**§B / WebSearch 补条**) | `https://patents.google.com/patent/CNXXXXXXXXXA/en`(或对应 B 型等) | 仅无国知局 `link`、经 §B 检索所得条目使用。 | - Network accessline 165
| 学术论文(含 Scholar) | Scholar 条目页、出版社官方页或 **`https://doi.org/10.xxxx/...`** | Scholar 链接若重定向或镜像,以最终可长期解析的 DOI/出版社页为准。 | - Network accessline 166
| arXiv 预印本 | `https://arxiv.org/abs/2008.09213` | `abs` 页为规范条目页。 | - Network accessline 167
| 期刊 / 会议 | 出版社 DOI:`https://doi.org/10.xxxx/...` 或官方摘要页 | 以 DOI 解析后页面与文献一致为准。 |
skills/patent-disclosure/tests/__init__.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_cad_step_scan.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_cad_venv.py
- Executable scriptline 1
Executable file - Network accessline 33
def test_isolated_env_drops_pythonpath(self) -> None: with patch.dict("os.environ", {"PYTHONPATH": "C:\\leak", "PIP_INDEX_URL": "http://x"}, clear=False): - Network accessline 34
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Network accessline 49
def test_china_mirrors_then_pypi(self) -> None: urls = boot._index_list(pypi_only=False, extra=[]) self.assertEqual(urls[-1], "https://pypi.org/simple") - Network accessline 50
urls = boot._index_list(pypi_only=False, extra=[]) self.assertEqual(urls[-1], "https://pypi.org/simple") self.assertTrue(any("tsinghua" in u or "tuna" in u for u in urls)) - Network accessline 51
self.assertEqual(urls[-1], "https://pypi.org/simple") - Network accessline 55
def test_pypi_only(self) -> None: self.assertEqual(boot._index_list(pypi_only=True, extra=[]), ["https://pypi.org/simple"]) - Network accessline 56
self.assertEqual(boot._index_list(pypi_only=True, extra=[]), ["https://pypi.org/simple"]) - Network accessline 82
class SvgScreenshotTests(unittest.TestCase): def test_wrap_strips_xml_decl(self) -> None: html = shot.wrap_svg_html('<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg"></svg>') - Network accessline 83
def test_wrap_strips_xml_decl(self) -> None: html = shot.wrap_svg_html('<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg"></svg>') self.assertIn("<svg", html) - Network accessline 84
html = shot.wrap_svg_html('<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg"></svg>') - Network accessline 93
def test_pick_free_port_skips_busy(self) -> None: srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - Network accessline 94
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skills/patent-disclosure/tests/test_check_design_views.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_cnipa_class_codes.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_cnipa_epub_chain.py
skills/patent-disclosure/tests/test_cnipa_epub_crawler.py
- Executable scriptline 1
Executable file - Network accessline 166
def test_goto_uses_commit_and_30s(self) -> None: page = MagicMock() _goto(page, "http://epub.cnipa.gov.cn/", advanced=False) - Network accessline 167
page = MagicMock() _goto(page, "http://epub.cnipa.gov.cn/", advanced=False) kwargs = page.goto.call_args.kwargs - Network accessline 168
_goto(page, "http://epub.cnipa.gov.cn/", advanced=False) - Network accessline 177
page.goto.side_effect = PlaywrightTimeoutError("nav") with self.assertRaises(EpubNavError) as ctx: _goto(page, "http://epub.cnipa.gov.cn/Advanced", advanced=True) - Network accessline 178
with self.assertRaises(EpubNavError) as ctx: _goto(page, "http://epub.cnipa.gov.cn/Advanced", advanced=True) self.assertEqual(ctx.exception.stage, "goto") - Network accessline 179
_goto(page, "http://epub.cnipa.gov.cn/Advanced", advanced=True) - Network accessline 197
page = MagicMock() page.query_selector.return_value = None page.url = "http://epub.cnipa.gov.cn/" - Network accessline 198
page.query_selector.return_value = None page.url = "http://epub.cnipa.gov.cn/" with self.assertRaises(EpubNavError) as ctx: - Network accessline 199
page.url = "http://epub.cnipa.gov.cn/" - Access to secretsline 422
[Credential-related source omitted]
skills/patent-disclosure/tests/test_cnipa_epub_wait.py
- Executable scriptline 1
Executable file - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 65
[Credential-related source omitted]
skills/patent-disclosure/tests/test_design_lineart_gate.py
skills/patent-disclosure/tests/test_fence.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_formula_eval.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_formula_paradigms.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_image_gen.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_latex_delimiters.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_math_omml.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_math_render.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_md_to_docx_list.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_md_to_docx_table.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_mermaid_browser.py
skills/patent-disclosure/tests/test_mermaid_step_labels.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_pdf_to_md.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_source_parts.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_stdio_utf8.py
skills/patent-disclosure/tests/test_structure_callout_layout.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tests/test_structure_callout_overlay.py
- Executable scriptline 1
Executable file - Possible obfuscationline 25
PNG = base64.b64decode( - Network accessline 71
(case / "composed.svg").write_text( '<?xml version="1.0" encoding="UTF-8"?>\n' '<svg xmlns="http://www.w3.org/2000/svg" width="100" height="80" ' - Network accessline 72
'<?xml version="1.0" encoding="UTF-8"?>\n' '<svg xmlns="http://www.w3.org/2000/svg" width="100" height="80" ' 'viewBox="0 0 100 80">\n' - Network accessline 73
'<svg xmlns="http://www.w3.org/2000/svg" width="100" height="80" '
skills/patent-disclosure/tests/test_structure_lineart_compose.py
skills/patent-disclosure/tests/test_structure_lineart_gate.py
skills/patent-disclosure/tests/test_svg_screenshot.py
- Executable scriptline 1
Executable file - Possible obfuscationline 18
PNG = base64.b64decode( - Network accessline 29
(root / "lineart.png").write_bytes(PNG) (parts / "v_1.svg").write_text( '<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1" ' - Network accessline 30
(parts / "v_1.svg").write_text( '<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1" ' 'viewBox="0 0 1 1">' - Network accessline 31
'<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1" ' - Network accessline 36
parent = root / "out.svg" parent.write_text( '<svg xmlns="http://www.w3.org/2000/svg">' - Network accessline 37
parent.write_text( '<svg xmlns="http://www.w3.org/2000/svg">' '<image href="parts/v_1.svg"/></svg>\n', - Network accessline 38
'<svg xmlns="http://www.w3.org/2000/svg">' - Possible obfuscationline 47
inner = base64.b64decode(match.group(1)).decode("utf-8") - Network accessline 51
def test_svg_display_size_uses_width_height(self): svg = '<svg xmlns="http://www.w3.org/2000/svg" width="1536" height="1024" viewBox="0 0 1536 1024"></svg>' - Network accessline 52
svg = '<svg xmlns="http://www.w3.org/2000/svg" width="1536" height="1024" viewBox="0 0 1536 1024"></svg>' - Network accessline 59
def test_leaves_remote_and_fragment_hrefs(self): svg = ( '<svg xmlns="http://www.w3.org/2000/svg">' - Network accessline 60
svg = ( '<svg xmlns="http://www.w3.org/2000/svg">' '<use href="#src"/><image href="https://example.com/a.png"/></svg>' - Network accessline 61
'<svg xmlns="http://www.w3.org/2000/svg">' - Network accessline 62
'<use href="#src"/><image href="https://example.com/a.png"/></svg>'
skills/patent-disclosure/tools/README.md
- Network accessline 334
- 仅 **`.docx`**(OOXML);老版 **`.doc`** 不支持。 - **Markdown 输出在 mammoth 侧标记为 deprecated**,复杂排版可能弱于「先导出 HTML 再转 MD」;专利扫描一般足够。若版式崩坏,建议所内 **另存为 PDF 或纯文本** 再扫。 - **WMF/EMF** 等 Windows 图元可能需单独处理(见 [mammoth WMF 配方](https://github.com/mwilliamson/pytho - Network accessline 336
- **WMF/EMF** 等 Windows 图元可能需单独处理(见 [mammoth WMF 配方](https://github.com/mwilliamson/python-mammoth))。
skills/patent-disclosure/tools/bootstrap_cad_venv.py
- Executable scriptline 1
Executable file - Network accessline 42
DEFAULT_PIP_INDEXES = ( "https://pypi.tuna.tsinghua.edu.cn/simple", - Network accessline 43
"https://pypi.tuna.tsinghua.edu.cn/simple", - Network accessline 44
"https://mirrors.aliyun.com/pypi/simple", - Network accessline 45
"https://pypi.mirrors.ustc.edu.cn/simple", - Network accessline 46
"https://repo.huaweicloud.com/repository/pypi/simple", - Network accessline 47
"https://pypi.org/simple", - Network accessline 51
def _index_list(*, pypi_only: bool, extra: list[str]) -> list[str]: if pypi_only: return ["https://pypi.org/simple"] - Network accessline 52
if pypi_only: return ["https://pypi.org/simple"] out: list[str] = [] - Network accessline 53
return ["https://pypi.org/simple"] - Access to secretsline 55
[Credential-related source omitted]
skills/patent-disclosure/tools/browser.py
skills/patent-disclosure/tools/cad_formats.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/cad_scan.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/cad_venv.py
skills/patent-disclosure/tools/check_design_views.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/check_formula_plan.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/check_source_parts.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/crawl/cnipa_epub_crawler.py
- Network accessline 1
# -*- coding: utf-8 -*- """ 中国专利公布公告站:http://epub.cnipa.gov.cn/ —— **首页「公布公告查询」**(#indexForm / - Executable scriptline 1
Executable file - Network accessline 2
""" 中国专利公布公告站:http://epub.cnipa.gov.cn/ —— **首页「公布公告查询」**(#indexForm / #searchStr)及 **高级查询**(/Advanced,分类号与名称字段)。 - Network accessline 3
中国专利公布公告站:http://epub.cnipa.gov.cn/ —— **首页「公布公告查询」**(#indexForm / - Network accessline 283
mode = 'manual'; } const r = await fetch(url, { - Network accessline 284
} const r = await fetch(url, { method: 'POST', - Network accessline 285
const r = await fetch(url, { - Access to secretsline 312
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 835
[Credential-related source omitted]
skills/patent-disclosure/tools/crawl/cnipa_epub_nav.py
skills/patent-disclosure/tools/crawl/cnipa_epub_parse.py
- Network accessline 1
# -*- coding: utf-8 -*- """ 解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Executable scriptline 1
Executable file - Network accessline 3
解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Network accessline 15
EPUB_BASE = "http://epub.cnipa.gov.cn/" - Network accessline 394
""" 新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; - Network accessline 395
新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; 摘要位于 ``dt`` 为「摘要」的 ``dd`` 内(含 ``span.alltxt`` 折叠段)。 - Network accessline 396
详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上;
skills/patent-disclosure/tools/crawl/cnipa_epub_search.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/crawl/cnipa_epub_wait.py
skills/patent-disclosure/tools/design_lineart_gate.py
skills/patent-disclosure/tools/docx_to_md.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/fence/check_layout.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/fence/check_scorecard.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/fence/family_lib.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/fence/layout_lib.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/fence/scorecard_lib.py
skills/patent-disclosure/tools/formula_chem.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/formula_eval.py
skills/patent-disclosure/tools/formula_paradigms.py
skills/patent-disclosure/tools/formula_units.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/gen_demo_snap_step.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/image_gen.py
skills/patent-disclosure/tools/iteration_dialog_log.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/latex_delimiters.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/math_render.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/math_to_omml.py
skills/patent-disclosure/tools/md_to_docx.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/mermaid_render.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/package-lock.json
- Network accessline 19
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 20
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 21
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 31
}, "funding": { "url": "https://github.com/sponsors/antfu" - Network accessline 32
"funding": { "url": "https://github.com/sponsors/antfu" } - Network accessline 33
"url": "https://github.com/sponsors/antfu" - Network accessline 430
"funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" - Network accessline 431
"type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, - Network accessline 432
"url": "https://github.com/sponsors/tannerlinsley" - Network accessline 443
"funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" - Network accessline 444
"type": "github", "url": "https://github.com/sponsors/tannerlinsley" } - Network accessline 445
"url": "https://github.com/sponsors/tannerlinsley" - Network accessline 790
}, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" - Network accessline 791
"funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } - Network accessline 792
"url": "https://github.com/chalk/ansi-styles?sponsor=1" - Network accessline 951
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 952
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 953
"url": "https://github.com/sponsors/feross" - Network accessline 955
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 956
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 957
"url": "https://www.patreon.com/feross" - Network accessline 959
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 960
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 961
"url": "https://feross.org/support" - Network accessline 980
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 981
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 982
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 1000
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 1001
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 1002
"url": "https://github.com/sponsors/feross" - Network accessline 1004
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 1005
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 1006
"url": "https://www.patreon.com/feross" - Network accessline 1008
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 1009
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 1010
"url": "https://feross.org/support" - Network accessline 1049
}, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" - Network accessline 1050
"funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } - Network accessline 1051
"url": "https://github.com/chalk/chalk?sponsor=1" - Network accessline 1095
}, "funding": { "url": "https://paulmillr.com/funding/" - Network accessline 1096
"funding": { "url": "https://paulmillr.com/funding/" }, - Network accessline 1097
"url": "https://paulmillr.com/funding/" - Network accessline 1132
}, "funding": { "url": "https://polar.sh/cva" - Network accessline 1133
"funding": { "url": "https://polar.sh/cva" } - Network accessline 1134
"url": "https://polar.sh/cva" - Network accessline 1226
}, "funding": { "url": "https://github.com/sponsors/d-fischer" - Network accessline 1227
"funding": { "url": "https://github.com/sponsors/d-fischer" }, - Network accessline 1228
"url": "https://github.com/sponsors/d-fischer" - Network accessline 1982
"node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - Network accessline 1983
"version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - Network accessline 1984
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - Network accessline 2000
"license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" - Network accessline 2001
"funding": { "url": "https://github.com/sponsors/ljharb" } - Network accessline 2002
"url": "https://github.com/sponsors/ljharb" - Network accessline 2022
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 2023
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 2024
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 2119
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 2120
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 2121
"url": "https://github.com/sponsors/feross" - Network accessline 2123
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 2124
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 2125
"url": "https://www.patreon.com/feross" - Network accessline 2127
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 2128
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 2129
"url": "https://feross.org/support" - Network accessline 2138
"funding": { "type": "opencollective", "url": "https://opencollective.com/immer" - Network accessline 2139
"type": "opencollective", "url": "https://opencollective.com/immer" } - Network accessline 2140
"url": "https://opencollective.com/immer" - Network accessline 2153
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 2154
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 2155
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 2162
"funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" - Network accessline 2163
"type": "github", "url": "https://github.com/sponsors/wooorm" } - Network accessline 2164
"url": "https://github.com/sponsors/wooorm" - Network accessline 2208
}, "funding": { "url": "https://github.com/sponsors/ljharb" - Network accessline 2209
"funding": { "url": "https://github.com/sponsors/ljharb" } - Network accessline 2210
"url": "https://github.com/sponsors/ljharb" - Network accessline 2307
"dev": true, "funding": [ "https://opencollective.com/katex", - Network accessline 2308
"funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" - Network accessline 2309
"https://opencollective.com/katex", - Network accessline 2310
"https://github.com/sponsors/katex" - Network accessline 2360
}, "funding": { "url": "https://github.com/sponsors/antonk52" - Network accessline 2361
"funding": { "url": "https://github.com/sponsors/antonk52" } - Network accessline 2362
"url": "https://github.com/sponsors/antonk52" - Network accessline 2493
{ "type": "github", "url": "https://github.com/sponsors/ai" - Network accessline 2494
"type": "github", "url": "https://github.com/sponsors/ai" } - Network accessline 2495
"url": "https://github.com/sponsors/ai" - Network accessline 2617
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 2618
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 2619
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 2653
}, "funding": { "url": "https://github.com/sponsors/jonschlinkert" - Network accessline 2654
"funding": { "url": "https://github.com/sponsors/jonschlinkert" } - Network accessline 2655
"url": "https://github.com/sponsors/jonschlinkert" - Network accessline 2737
{ "type": "opencollective", "url": "https://opencollective.com/postcss/" - Network accessline 2738
"type": "opencollective", "url": "https://opencollective.com/postcss/" }, - Network accessline 2739
"url": "https://opencollective.com/postcss/" - Network accessline 2741
{ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" - Network accessline 2742
"type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" }, - Network accessline 2743
"url": "https://tidelift.com/funding/github/npm/postcss" - Network accessline 2745
{ "type": "github", "url": "https://github.com/sponsors/ai" - Network accessline 2746
"type": "github", "url": "https://github.com/sponsors/ai" } - Network accessline 2747
"url": "https://github.com/sponsors/ai" - Network accessline 2780
{ "type": "opencollective", "url": "https://opencollective.com/postcss/" - Network accessline 2781
"type": "opencollective", "url": "https://opencollective.com/postcss/" }, - Network accessline 2782
"url": "https://opencollective.com/postcss/" - Network accessline 2784
{ "type": "github", "url": "https://github.com/sponsors/ai" - Network accessline 2785
"type": "github", "url": "https://github.com/sponsors/ai" } - Network accessline 2786
"url": "https://github.com/sponsors/ai" - Network accessline 2804
{ "type": "opencollective", "url": "https://opencollective.com/postcss/" - Network accessline 2805
"type": "opencollective", "url": "https://opencollective.com/postcss/" }, - Network accessline 2806
"url": "https://opencollective.com/postcss/" - Network accessline 2808
{ "type": "github", "url": "https://github.com/sponsors/ai" - Network accessline 2809
"type": "github", "url": "https://github.com/sponsors/ai" } - Network accessline 2810
"url": "https://github.com/sponsors/ai" - Network accessline 2845
{ "type": "opencollective", "url": "https://opencollective.com/postcss/" - Network accessline 2846
"type": "opencollective", "url": "https://opencollective.com/postcss/" }, - Network accessline 2847
"url": "https://opencollective.com/postcss/" - Network accessline 2849
{ "type": "github", "url": "https://github.com/sponsors/ai" - Network accessline 2850
"type": "github", "url": "https://github.com/sponsors/ai" } - Network accessline 2851
"url": "https://github.com/sponsors/ai" - Network accessline 2975
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 2976
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 2977
"url": "https://github.com/sponsors/feross" - Network accessline 2979
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 2980
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 2981
"url": "https://www.patreon.com/feross" - Network accessline 2983
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 2984
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 2985
"url": "https://feross.org/support" - Network accessline 3078
}, "funding": { "url": "https://github.com/sponsors/ljharb" - Network accessline 3079
"funding": { "url": "https://github.com/sponsors/ljharb" } - Network accessline 3080
"url": "https://github.com/sponsors/ljharb" - Network accessline 3120
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 3121
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 3122
"url": "https://github.com/sponsors/feross" - Network accessline 3124
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 3125
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 3126
"url": "https://www.patreon.com/feross" - Network accessline 3128
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 3129
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 3130
"url": "https://feross.org/support" - Network accessline 3147
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 3148
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 3149
"url": "https://github.com/sponsors/feross" - Network accessline 3151
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 3152
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 3153
"url": "https://www.patreon.com/feross" - Network accessline 3155
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 3156
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 3157
"url": "https://feross.org/support" - Network accessline 3341
}, "funding": { "url": "https://github.com/sponsors/ljharb" - Network accessline 3342
"funding": { "url": "https://github.com/sponsors/ljharb" } - Network accessline 3343
"url": "https://github.com/sponsors/ljharb" - Network accessline 3355
"funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" - Network accessline 3356
"type": "github", "url": "https://github.com/sponsors/dcastil" } - Network accessline 3357
"url": "https://github.com/sponsors/dcastil" - Network accessline 3486
}, "funding": { "url": "https://github.com/sponsors/SuperchupuDev" - Network accessline 3487
"funding": { "url": "https://github.com/sponsors/SuperchupuDev" } - Network accessline 3488
"url": "https://github.com/sponsors/SuperchupuDev" - Network accessline 3513
}, "funding": { "url": "https://github.com/sponsors/jonschlinkert" - Network accessline 3514
"funding": { "url": "https://github.com/sponsors/jonschlinkert" } - Network accessline 3515
"url": "https://github.com/sponsors/jonschlinkert" - Network accessline 3570
{ "type": "github", "url": "https://github.com/sponsors/feross" - Network accessline 3571
"type": "github", "url": "https://github.com/sponsors/feross" }, - Network accessline 3572
"url": "https://github.com/sponsors/feross" - Network accessline 3574
{ "type": "patreon", "url": "https://www.patreon.com/feross" - Network accessline 3575
"type": "patreon", "url": "https://www.patreon.com/feross" }, - Network accessline 3576
"url": "https://www.patreon.com/feross" - Network accessline 3578
{ "type": "consulting", "url": "https://feross.org/support" - Network accessline 3579
"type": "consulting", "url": "https://feross.org/support" } - Network accessline 3580
"url": "https://feross.org/support" - Network accessline 3610
"dev": true, "funding": [ "https://github.com/sponsors/broofa", - Network accessline 3611
"funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" - Network accessline 3612
"https://github.com/sponsors/broofa", - Network accessline 3613
"https://github.com/sponsors/ctavan" - Network accessline 3674
}, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - Network accessline 3675
"funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } - Network accessline 3676
"url": "https://github.com/chalk/wrap-ansi?sponsor=1" - Network accessline 3749
"license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" - Network accessline 3750
"funding": { "url": "https://github.com/sponsors/colinhacks" } - Network accessline 3751
"url": "https://github.com/sponsors/colinhacks"
skills/patent-disclosure/tools/package.json
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/patent_type.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/pdf_to_md.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/pptx_to_md.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-disclosure/tools/run_step_to_views.py
skills/patent-disclosure/tools/stdio_utf8.py
skills/patent-disclosure/tools/step_to_views.py
skills/patent-disclosure/tools/structure_callout_layout.py
- Executable scriptline 1
Executable file
skills/patent-disclosure/tools/structure_callout_overlay.py
- Executable scriptline 1
Executable file - Network accessline 399
'<?xml version="1.0" encoding="UTF-8"?>', ( f'<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 400
( f'<svg xmlns="http://www.w3.org/2000/svg" ' f'xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 401
f'<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 402
f'xmlns:xlink="http://www.w3.org/1999/xlink" '
skills/patent-disclosure/tools/structure_lineart_compose.py
- Executable scriptline 1
Executable file - Network accessline 251
'<?xml version="1.0" encoding="UTF-8"?>', ( '<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 252
( '<svg xmlns="http://www.w3.org/2000/svg" ' 'xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 253
'<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 254
'xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 451
'<?xml version="1.0" encoding="UTF-8"?>', ( '<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 452
( '<svg xmlns="http://www.w3.org/2000/svg" ' 'xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 453
'<svg xmlns="http://www.w3.org/2000/svg" ' - Network accessline 454
'xmlns:xlink="http://www.w3.org/1999/xlink" ' - Network accessline 455
'xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" '
skills/patent-disclosure/tools/structure_lineart_gate.py
skills/patent-disclosure/tools/svg_screenshot.py
- Executable scriptline 1
Executable file - Network accessline 49
def port_free(host: str, port: int) -> bool: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - Network accessline 50
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - Network accessline 62
return preferred print(f"SVG_HTTP: preferred_port_busy={preferred}", file=sys.stderr, flush=True) with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - Network accessline 63
print(f"SVG_HTTP: preferred_port_busy={preferred}", file=sys.stderr, flush=True) with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, 0)) - Network accessline 64
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - Access to secretsline 72
[Credential-related source omitted] - Network accessline 272
try: for key, svg_path, png_path in queued: url = f"http://{host}:{port}/view?id={key}" - Network accessline 273
for key, svg_path, png_path in queued: url = f"http://{host}:{port}/view?id={key}" try: - Network accessline 274
url = f"http://{host}:{port}/view?id={key}"
skills/patent-disclosure/tools/vendor/README.md
skills/patent-disclosure/tools/vendor/mermaid.min.js
- Possible obfuscationline 1
"use strict";var __esbuild_esm_mermaid=(()=>{var cxe=Object.create;var R1=Object.defineProperty;var uxe=Object.getOwnPropertyDescriptor;var hxe=Object.getOwnPropertyNames;var fxe=Object.getPrototypeOf,dxe=Object.prototype.hasOwnProperty;var - Executable scriptline 1
Executable file - Possible obfuscationline 2
[ ]{`+Math.min.apply(Math,i)+"}","g");n=n.map(function(l){return l.replace(a, `)})}n[0]=n[0].replace(/^\r?\n/,"");var s=n[0];return e.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),f=h?h[1]:"",d=l;typeof l=="string"&&l.includes( `)&& - Possible obfuscationline 7
`);for(let[r,{detector:n}]of Object.entries(Gf))if(n(t,e))return r;throw new rp(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Bb=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)OS(e,r,n)},"registerL - Possible obfuscationline 8
[Credential-related source omitted] - Possible obfuscationline 9
[Credential-related source omitted] - Possible obfuscationline 10
[Credential-related source omitted] - Possible obfuscationline 11
`+X+"^"},"showPosition"),test_match:o(function(xe,X){var fe,he,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_col - Possible obfuscationline 12
[Credential-related source omitted] - Possible obfuscationline 13
`+Ir),ae&&qb([k,R,S],kn=>{Ir=H1(Ir,kn," ")}),_&&Fe?_.createHTML(Ir):Ir},e.setConfig=function(){let yt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ft(yt),te=!0},e.clearConfig=function(){Tt=null,te=!1},e.isValidAttribute=functio - Possible obfuscationline 267
[Credential-related source omitted] - Possible obfuscationline 268
[Credential-related source omitted] - Possible obfuscationline 271
?)[ \r ]*`,_C="[\u0300-\u036F]",u3e=new RegExp(_C+"+$"),h3e="("+S$+"+)|"+(c3e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(_C+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(_C+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+ - Possible obfuscationline 272
[Credential-related source omitted] - Possible obfuscationline 273
please report what input caused this bug`);return n=n.slice(1,-1),{type:"verb",mode:"text",body:n,star:i}}OG.hasOwnProperty(r[0])&&!En[this.mode][r[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextIn - Possible obfuscationline 328
`},"getStyles"),B$=o((t,e)=>{e!==void 0&&(k4[t]=e)},"addStylesForDiagram"),F$=N3e});var iy={};vr(iy,{clear:()=>_r,getAccDescription:()=>Fr,getAccTitle:()=>Pr,getDiagramTitle:()=>Jr,setAccDescription:()=>Br,setAccTitle:()=>Rr,setDiagramTitle - Possible obfuscationline 329
`)},"setAccDescription"),Fr=o(()=>e7,"getAccDescription"),ln=o(t=>{JC=t7(t)},"setDiagramTitle"),Jr=o(()=>JC,"getDiagramTitle")});var z$,R3e,de,n7,S4,i7,a7,M3e,E4,Qf,ay,r7,Vt=M(()=>{"use strict";$f();ht();Ua();fr();ni();QC();ki();z$=Y,R3e=M1 - Possible obfuscationline 330
`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=zf.exec(t))!==null;)if(n.index===zf.lastIndex&&zf.lastIndex++,n&&!e||e&&n[1]?.matc - Possible obfuscationline 334
`,"getStyles"),$X=i7e});var UX={};vr(UX,{diagram:()=>a7e});var a7e,HX=M(()=>{"use strict";PS();l7();GX();VX();a7e={parser:QF,db:oy,renderer:o9,styles:$X,init:o(({c4:t,wrap:e})=>{o9.setConf(t),oy.setWrap(e)},"init")}});function u9(){return{a - Possible obfuscationline 336
`)}function en(t,e){return kd.parse(t,e)}var Ed,JX,c7e,ej,u7e,h7e,qX,f7e,p7e,uv,nm,y7e,v7e,x7e,fv,b7e,tj,rj,h9,w7e,f9,T7e,k7e,w5,d9,E7e,nj,S7e,p9,QX,C7e,A7e,ij,_7e,aj,L7e,dv,D7e,N7e,R7e,M7e,I7e,O7e,P7e,B7e,F7e,b5,z7e,sj,oj,G7e,m9,$7e,l9,V7e - Possible obfuscationline 344
${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s[s.length-1];if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+ `+n.join( `),v= - Possible obfuscationline 356
`,e=e.substring(T.length+1),d=p.slice(g)}}a.loose||(l?a.loose=!0:/\n *\n *$/.test(h)&&(l=!0));let y=null,v;this.options.gfm&&(y=/^\[[ xX]\] /.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:h, - Possible obfuscationline 358
`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules. - Possible obfuscationline 359
]`).replace("lheading",rj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ij=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,_7e=/^(`+)([^`]|[^ - Possible obfuscationline 360
`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){this.options.pedantic?e=e.replace(/\t/ - Possible obfuscationline 369
`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return - Possible obfuscationline 387
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${e}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.par - Possible obfuscationline 388
`+this.renderer.text(l);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u}]}):n+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error - Network accessline 389
Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+eo(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},kd=new c9;o(en,"marked");en.options=en. - Possible obfuscationline 389
Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+eo(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},kd=new c9;o(en,"marked");en.options=en. - Network accessline 392
`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.tex - Possible obfuscationline 392
`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.tex - Network accessline 393
`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return g9(t,e)}function g9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.s - Network accessline 394
`),de()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),mj(h,e.labelStyle),h.attr("class",`${u} ${n}`),mj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.s - Possible obfuscationline 394
`),de()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),mj(h,e.labelStyle),h.attr("class",`${u} ${n}`),mj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.s - Possible obfuscationline 395
M ${i.x},${i.y} L ${s.x},${s.y}`}function Zj(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Ke.svg(i),u=Ze(e - Network accessline 397
node: `,e,` res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBox - Network accessline 398
`,e, res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD") - Possible obfuscationline 398
`,e, res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD") - Network accessline 399
res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(rQ - Possible obfuscationline 399
res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(rQ - Network accessline 400
`),de()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),xAe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style - Possible obfuscationline 400
`),de()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),xAe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style - Possible obfuscationline 406
l${-r},0`,"createCylinderPathD"),kAe=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),EAe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a - Possible obfuscationline 408
M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look - Possible obfuscationline 410
`+t.mark.snippet),n+" "+r):n}function bv(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=mZ(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack| - Possible obfuscationline 413
`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=$9(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Pi.repeat(" ",e.indent)+V9((t.line+u+1).toString(),f)+" | "+h.str+ `;return l.replace(/\n$/,"")}function UAe(t){var e={};return t!==null& - Possible obfuscationline 414
`;return l.replace(/\n$/,"")}function UAe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function HAe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if($Ae.indexOf(r)===-1)t - Possible obfuscationline 415
`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function Q8e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(( - Possible obfuscationline 416
`,e-1))}function J8e(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ss(m)||lm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.ch - Possible obfuscationline 417
`,a?1+u:u):i===U9&&a&&(t.result+= `);break}for(n?_d(d)?(h=!0,t.result+=Pi.repeat( `,a?1+u:u)):h?(h=!1,t.result+=Pi.repeat( `,u+1)):u===0?a&&(t.result+=" "):t.result+=Pi.repeat( `,u):t.result+=Pi.repeat( `,a?1+u:u),a=!0,s=!0,u=0,r=t.position - Possible obfuscationline 422
`,a?1+u:u),a=!0,s=!0,u=0,r=t.position;!yc(d)&&d!==0;)d=t.input.charCodeAt(++t.position);Gh(t,r,t.position,!1)}return!0}function aZ(t,e){var r,n=t.tag,i=t.anchor,a=[],s,l=!1,u;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorM - Possible obfuscationline 423
`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var r=new Z8e(t,e),n=t.indexOf("\0");for(n!==-1&&(r.position=n,Qt(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.po - Possible obfuscationline 426
`+Pi.repeat(" ",t.indent*e)}function O_e(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function G5(t){return t===m_e||t===d_e}function kv(t){return 32<=t&&t<=126||161<=t&&t<= - Possible obfuscationline 437
`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function $_e(t){for(var e="",r=0,n,i=0;i<t.length;r>=65536?i+=2:i++)r=xv(t,i),n=Na[r],!n&&kv(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||R_e(r);return e}function V_e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0 - Possible obfuscationline 438
`:""}function J9(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var MAe,IAe,OAe,PAe,BAe,FAe,Pi,Es,GAe,$Ae,VAe,Da,YAe,qAe,XAe,jAe,KAe,e8e,i8e,h8e, - Possible obfuscationline 439
\r`;o(C8e,"resolveYamlBinary");o(A8e,"constructYamlBinary");o(_8e,"representYamlBinary");o(L8e,"isBinary");D8e=new Da("tag:yaml.org,2002:binary",{kind:"scalar",resolve:C8e,construct:A8e,predicate:L8e,represent:_8e}),N8e=Object.prototype.has - Possible obfuscationline 447
You have to call mermaid.initialize.`)},"addSingleLink"),Z_e=o(function(t,e,r){Y.info("addLink",t,e,r);for(let n of t)for(let i of e)Q_e(n,i,r)},"addLink"),J_e=o(function(t,e){t.forEach(function(r){r==="default"?Cs.defaultInterpolate=e:Cs[r - Possible obfuscationline 450
node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i: - Possible obfuscationline 451
Node.id = `,y, data=`,x.height, Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Clust - Possible obfuscationline 453
Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.no - Possible obfuscationline 454
[Credential-related source omitted] - Possible obfuscationline 455
[Credential-related source omitted] - Possible obfuscationline 456
[Credential-related source omitted] - Possible obfuscationline 457
`+St+"^"},"showPosition"),test_match:o(function(_t,St){var bt,Ue,Kt;if(this.options.backtrack_lexer&&(Kt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_c - Possible obfuscationline 458
[Credential-related source omitted] - Possible obfuscationline 604
`,"getStyles"),qie=hPe});var hT={};vr(hT,{diagram:()=>fPe});var fPe,fT=M(()=>{"use strict";Vt();oL();Hie();Yie();Xie();fPe={parser:Wie,db:X5,renderer:Uie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&n7({layout:t.layout}),t. - Possible obfuscationline 605
[Credential-related source omitted] - Possible obfuscationline 606
[Credential-related source omitted] - Possible obfuscationline 607
[Credential-related source omitted] - Possible obfuscationline 608
`+I+"^"},"showPosition"),test_match:o(function(A,I){var D,k,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:t - Possible obfuscationline 609
[Credential-related source omitted] - Possible obfuscationline 654
`,"getStyles"),kae=WPe});var Sae={};vr(Sae,{diagram:()=>YPe});var YPe,Cae=M(()=>{"use strict";eae();nae();Tae();Eae();YPe={parser:Jie,db:rae,renderer:wae,styles:kae}});function ei(t){return typeof t=="object"&&t!==null&&typeof t.$type=="str
skills/patent-docket/tests/__init__.py
- Executable scriptline 1
Executable file
skills/patent-docket/tests/test_docket.py
skills/patent-docket/tools/docket_config.py
- Executable scriptline 1
Executable file
skills/patent-docket/tools/docket_paths.py
skills/patent-docket/tools/docket_spec.py
- Executable scriptline 1
Executable file
skills/patent-docket/tools/emit_tracker.py
- Executable scriptline 1
Executable file
skills/patent-docket/tools/init_docket.py
- Executable scriptline 1
Executable file
skills/patent-docket/tools/stdio_utf8.py
skills/patent-docket/tools/validate_docket.py
- Executable scriptline 1
Executable file
skills/patent-exam-policy/prompts/emit_backlog.md
- Network accessline 38
| 编号 | 轨道 | 观点摘要(可核验) | 证据 | 发布/施行 | 增量 | 信源标题 | 信源 URL | |------|------|-------------------|------|-----------|------|----------|----------| | S1 | 审查工具 / 申请客体 / 程序通识 / 实用新型 / 外观设计 | … | A/B/C | YYYY-MM-DD | 新出现 | … | https://… | - Network accessline 40
| S1 | 审查工具 / 申请客体 / 程序通识 / 实用新型 / 外观设计 | … | A/B/C | YYYY-MM-DD | 新出现 | … | https://… | - Network accessline 53
| 编号 | 文件 | 公布日 | 施行日 | 简报日是否已施行 | 可否作为当前交底硬性要求 | 信源 URL | |------|------|--------|--------|------------------|--------------------------|----------| | C1 | 局令第84号《修改专利审查指南的决定》 | 2025-11-13 | 2026-01-01 | 是/否 | 是 / 否(尚未施行) | https://… | - Network accessline 55
| C1 | 局令第84号《修改专利审查指南的决定》 | 2025-11-13 | 2026-01-01 | 是/否 | 是 / 否(尚未施行) | https://… | - Network accessline 120
- [ ] 已对照上次 POLICY(或注明无历史) - [ ] 第 1 节每行均有完整 `https://` URL - Network accessline 121
- [ ] 第 1 节每行均有完整 `https://` URL
skills/patent-exam-policy/references/sources.yaml
- Network accessline 10
kind: column title: 部门规章(局令) url: https://www.cnipa.gov.cn/col/col99/index.html - Network accessline 11
title: 部门规章(局令) url: https://www.cnipa.gov.cn/col/col99/index.html track: 程序通识 - Network accessline 12
url: https://www.cnipa.gov.cn/col/col99/index.html - Network accessline 17
kind: column title: 政策解读 url: https://www.cnipa.gov.cn/col/col66/index.html - Network accessline 18
title: 政策解读 url: https://www.cnipa.gov.cn/col/col66/index.html track: 申请客体 - Network accessline 19
url: https://www.cnipa.gov.cn/col/col66/index.html - Network accessline 24
kind: column title: 通知(政策文件) url: https://www.cnipa.gov.cn/col/col75/index.html - Network accessline 25
title: 通知(政策文件) url: https://www.cnipa.gov.cn/col/col75/index.html track: 程序通识 - Network accessline 26
url: https://www.cnipa.gov.cn/col/col75/index.html - Network accessline 31
kind: column title: 公告(政策文件) url: https://www.cnipa.gov.cn/col/col74/index.html - Network accessline 32
title: 公告(政策文件) url: https://www.cnipa.gov.cn/col/col74/index.html track: 程序通识 - Network accessline 33
url: https://www.cnipa.gov.cn/col/col74/index.html - Network accessline 38
kind: column title: 法律法规 · 专利 · 法律 url: https://www.cnipa.gov.cn/col/col97/index.html - Network accessline 39
title: 法律法规 · 专利 · 法律 url: https://www.cnipa.gov.cn/col/col97/index.html track: 程序通识 - Network accessline 40
url: https://www.cnipa.gov.cn/col/col97/index.html - Network accessline 45
kind: column title: 法律法规 · 专利 · 行政法规 url: https://www.cnipa.gov.cn/col/col98/index.html - Network accessline 46
title: 法律法规 · 专利 · 行政法规 url: https://www.cnipa.gov.cn/col/col98/index.html track: 程序通识 - Network accessline 47
url: https://www.cnipa.gov.cn/col/col98/index.html - Network accessline 52
kind: column title: 你问我答(指南修改解读,含局部外观 / GUI) url: https://www.cnipa.gov.cn/col/col2199/index.html - Network accessline 53
title: 你问我答(指南修改解读,含局部外观 / GUI) url: https://www.cnipa.gov.cn/col/col2199/index.html track: 外观设计 - Network accessline 54
url: https://www.cnipa.gov.cn/col/col2199/index.html - Network accessline 62
kind: document title: 中华人民共和国专利法(2020年修正) url: https://www.cnipa.gov.cn/art/2020/11/23/art_97_155167.html - Network accessline 63
title: 中华人民共和国专利法(2020年修正) url: https://www.cnipa.gov.cn/art/2020/11/23/art_97_155167.html track: 程序通识 - Network accessline 64
url: https://www.cnipa.gov.cn/art/2020/11/23/art_97_155167.html - Network accessline 69
kind: document title: 中华人民共和国专利法实施细则(2023年修订) url: https://www.cnipa.gov.cn/art/2023/12/21/art_98_189197.html - Network accessline 70
title: 中华人民共和国专利法实施细则(2023年修订) url: https://www.cnipa.gov.cn/art/2023/12/21/art_98_189197.html track: 程序通识 - Network accessline 71
url: https://www.cnipa.gov.cn/art/2023/12/21/art_98_189197.html - Network accessline 76
kind: document title: 全国人大常委会关于修改专利法的决定(2020) url: https://www.npc.gov.cn/npc/c2/c30834/202010/t20201019_308327.html - Network accessline 77
title: 全国人大常委会关于修改专利法的决定(2020) url: https://www.npc.gov.cn/npc/c2/c30834/202010/t20201019_308327.html track: 程序通识 - Network accessline 78
url: https://www.npc.gov.cn/npc/c2/c30834/202010/t20201019_308327.html - Network accessline 83
kind: document title: 《专利审查指南》(2023)(局令第78号) url: https://www.cnipa.gov.cn/art/2023/12/21/art_99_189202.html - Network accessline 84
title: 《专利审查指南》(2023)(局令第78号) url: https://www.cnipa.gov.cn/art/2023/12/21/art_99_189202.html track: 程序通识 - Network accessline 85
url: https://www.cnipa.gov.cn/art/2023/12/21/art_99_189202.html - Network accessline 90
kind: document title: 关于修改《专利审查指南》的决定(局令第84号,施行日 2026-01-01) url: https://www.cnipa.gov.cn/art/2025/11/13/art_99_202568.html - Network accessline 91
title: 关于修改《专利审查指南》的决定(局令第84号,施行日 2026-01-01) url: https://www.cnipa.gov.cn/art/2025/11/13/art_99_202568.html track: 申请客体 - Network accessline 92
url: https://www.cnipa.gov.cn/art/2025/11/13/art_99_202568.html - Network accessline 98
kind: document title: 国务院公报转载 · 局令第84号 url: https://www.gov.cn/gongbao/2026/issue_12526/202601/content_7056486.html - Network accessline 99
title: 国务院公报转载 · 局令第84号 url: https://www.gov.cn/gongbao/2026/issue_12526/202601/content_7056486.html track: 申请客体 - Network accessline 100
url: https://www.gov.cn/gongbao/2026/issue_12526/202601/content_7056486.html - Network accessline 109
kind: column title: 新闻 · 图文直播(例行新闻发布会) url: https://www.cnipa.gov.cn/col/col226/index.html - Network accessline 110
title: 新闻 · 图文直播(例行新闻发布会) url: https://www.cnipa.gov.cn/col/col226/index.html track: 程序通识 - Network accessline 111
url: https://www.cnipa.gov.cn/col/col226/index.html - Network accessline 117
kind: column title: 新闻发布(新闻发言人页) url: https://www.cnipa.gov.cn/col/col2486/index.html - Network accessline 118
title: 新闻发布(新闻发言人页) url: https://www.cnipa.gov.cn/col/col2486/index.html track: 程序通识 - Network accessline 119
url: https://www.cnipa.gov.cn/col/col2486/index.html - Network accessline 124
kind: document title: 司法部、国知局负责人就修改专利法实施细则答记者问 url: https://www.moj.gov.cn/pub/sfbgw/zcjd/202312/t20231221_492075.html - Network accessline 125
title: 司法部、国知局负责人就修改专利法实施细则答记者问 url: https://www.moj.gov.cn/pub/sfbgw/zcjd/202312/t20231221_492075.html track: 程序通识 - Network accessline 126
url: https://www.moj.gov.cn/pub/sfbgw/zcjd/202312/t20231221_492075.html - Network accessline 132
kind: column title: 复审无效十大案件(典型案例) url: https://www.cnipa.gov.cn/col/col2648/index.html - Network accessline 133
title: 复审无效十大案件(典型案例) url: https://www.cnipa.gov.cn/col/col2648/index.html track: 程序通识 - Network accessline 134
url: https://www.cnipa.gov.cn/col/col2648/index.html - Network accessline 140
kind: column title: 最高人民法院知识产权法庭 url: https://ipc.court.gov.cn/zh-cn/index - Network accessline 141
title: 最高人民法院知识产权法庭 url: https://ipc.court.gov.cn/zh-cn/index track: 程序通识 - Network accessline 142
url: https://ipc.court.gov.cn/zh-cn/index
skills/patent-map/tests/test_map.py
- Executable scriptline 1
Executable file - Access to secretsline 14
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 265
[Credential-related source omitted] - Access to secretsline 275
[Credential-related source omitted] - Access to secretsline 282
[Credential-related source omitted] - Access to secretsline 284
[Credential-related source omitted] - Network accessline 287
def test_onnx_only_not_pytorch() -> None: assert HUB_ENDPOINTS == ( "https://hf-mirror.com", - Network accessline 288
assert HUB_ENDPOINTS == ( "https://hf-mirror.com", "https://www.modelscope.cn/models", - Network accessline 289
"https://hf-mirror.com", - Network accessline 290
"https://www.modelscope.cn/models", - Network accessline 291
"https://huggingface.co", - Network accessline 325
port = httpd.server_address[1] try: urllib.request.urlopen(f"http://127.0.0.1:{port}/json/version", timeout=5) - Network accessline 326
try: urllib.request.urlopen(f"http://127.0.0.1:{port}/json/version", timeout=5) raise AssertionError("expected 404") - Network accessline 327
urllib.request.urlopen(f"http://127.0.0.1:{port}/json/version", timeout=5) - Network accessline 329
except urllib.error.HTTPError as e: assert e.code == 404 with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/health", timeout=5) as resp: - Network accessline 330
assert e.code == 404 with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/health", timeout=5) as resp: body = json.loads(resp.read().decode("utf-8")) - Network accessline 331
with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/health", timeout=5) as resp: - Network accessline 357
try: port = httpd.server_address[1] with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/ipc-subclasses", timeout=5) as resp: - Network accessline 358
port = httpd.server_address[1] with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/ipc-subclasses", timeout=5) as resp: body = json.loads(resp.read().decode("utf-8")) - Network accessline 359
with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/ipc-subclasses", timeout=5) as resp:
skills/patent-map/tools/__init__.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/embed_layout.py
skills/patent-map/tools/ensure_model.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-map/tools/ipc_scheme/README.md
- Network accessline 33
| 步骤 | 源 | 用途 | | --- | --- | --- | | 1 | [WIPO MasterFiles `ipc_scheme_*.zip`](https://www.wipo.int/classifications/data/ipc/ITSupport_and_download_area/20260101/MasterFiles/) | 解析 EN XML,`kind="u"` 即小类代号 + 英文标题 | - Network accessline 34
| --- | --- | --- | | 1 | [WIPO MasterFiles `ipc_scheme_*.zip`](https://www.wipo.int/classifications/data/ipc/ITSupport_and_download_area/20260101/MasterFiles/) | 解析 EN XML,`kind="u"` 即小类代号 + 英文标题 | | 2 | [ipcpub.wipo.int](https://ipcpub.wi - Network accessline 35
| 1 | [WIPO MasterFiles `ipc_scheme_*.zip`](https://www.wipo.int/classifications/data/ipc/ITSupport_and_download_area/20260101/MasterFiles/) | 解析 EN XML,`kind="u"` 即小类代号 + 英文标题 | - Network accessline 36
| 2 | [ipcpub.wipo.int](https://ipcpub.wipo.int/) CDN `…/IPC/scheme/{lang}/json/` | **尝试**拉中文 scheme。官方 IPCPUB 目前只有 `en` / `fr` / `enfr`,`zh` 为 403 | - Network accessline 37
| 3 | [国知局 2026.01 分类表](https://www.cnipa.gov.cn/art/2025/12/31/art_3161_203422.html) A–H PDF | 中文短标题(轴上用) |
skills/patent-map/tools/ipc_scheme/__init__.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/ipc_scheme/__main__.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/ipc_scheme/build.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-map/tools/ipc_scheme/cli.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/ipc_scheme/config.py
- Executable scriptline 1
Executable file - Network accessline 15
WIPO_IT_BASE = ( "https://www.wipo.int/classifications/data/ipc/" - Network accessline 16
"https://www.wipo.int/classifications/data/ipc/" - Network accessline 21
IPCPUB_HOME = "https://ipcpub.wipo.int/" - Network accessline 22
IPCPUB_CDN = "https://cdn.ipcpub.wipo.int/media" - Network accessline 25
CNIPA_TABLE_PAGE = "https://www.cnipa.gov.cn/art/2025/12/31/art_3161_203422.html" - Network accessline 28
CNIPA_PDF_FALLBACK = { "A": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-A%E9%83%A8.pdf&filename=84f50032f9ce4301ab100f5c403e000b.pdf", - Network accessline 29
"A": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-A%E9%83%A8.pdf&filename=84f50032f9ce4301ab100f5c403e000b.pdf", - Network accessline 30
"B": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-B%E9%83%A8.pdf&filename=a4f808817050429e849bd818907cfc1d.pdf", - Network accessline 31
"C": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-C%E9%83%A8.pdf&filename=99c9d77c96ae4000ab1ec35c75a95881.pdf", - Network accessline 32
"D": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-D%E9%83%A8.pdf&filename=7719d52ee72b4cedb8a925a86d8932cb.pdf", - Network accessline 33
"E": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-E%E9%83%A8.pdf&filename=b5822d0c2cbc4daa823e95ebb9d70cd2.pdf", - Network accessline 34
"F": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-F%E9%83%A8.pdf&filename=826c947f24cd469485b8c75e76b3226e.pdf", - Network accessline 35
"G": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-G%E9%83%A8.pdf&filename=61ec0e15ff694bbc98f302ab0e4438ee.pdf", - Network accessline 36
"H": "https://www.cnipa.gov.cn/module/download/downfile.jsp?classid=0&showname=2026.01%E7%89%88IPC%E5%88%86%E7%B1%BB%E8%A1%A8-H%E9%83%A8.pdf&filename=e68dc3300ca44d2d9e606a6a5c979725.pdf", - Network accessline 44
USER_AGENT = "patent-map-ipc-scheme/1.0 (+https://github.com/handsomestWei/patent-disclosure-skill)"
skills/patent-map/tools/ipc_scheme/download.py
- Executable scriptline 1
Executable file - Network accessline 35
def _request(url: str, timeout: int = 180) -> bytes: req = urllib.request.Request(url, headers=HEADERS) - Network accessline 36
req = urllib.request.Request(url, headers=HEADERS) - Network accessline 37
with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 41
def _get(url: str, timeout: int = 60) -> tuple[int, bytes]: req = urllib.request.Request(url, headers=HEADERS) - Network accessline 42
req = urllib.request.Request(url, headers=HEADERS) - Network accessline 43
try: with urllib.request.urlopen(req, timeout=timeout) as resp: return resp.status, _unwrap(resp.read(), resp.getheader("Content-Encoding") or "") - Network accessline 44
with urllib.request.urlopen(req, timeout=timeout) as resp:
skills/patent-map/tools/ipc_scheme/emit.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/ipc_scheme/parse.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/ipc_scheme/testdata/sample_en_scheme.xml
skills/patent-map/tools/ipc_titles.py
- Executable scriptline 1
Executable file
skills/patent-map/tools/map_cache.py
skills/patent-map/tools/model_store.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 18
HUB_ENDPOINTS = ( "https://hf-mirror.com", - Network accessline 19
"https://hf-mirror.com", - Network accessline 20
"https://www.modelscope.cn/models", - Network accessline 21
"https://huggingface.co", - Access to secretsline 64
[Credential-related source omitted] - Network accessline 167
dest.parent.mkdir(parents=True, exist_ok=True) tmp = dest.with_suffix(dest.suffix + ".part") req = urllib.request.Request(url, headers=_UA) - Network accessline 168
tmp = dest.with_suffix(dest.suffix + ".part") req = urllib.request.Request(url, headers=_UA) with urllib.request.urlopen(req, timeout=timeout) as resp, open(tmp, "wb") as fh: - Network accessline 169
req = urllib.request.Request(url, headers=_UA) - Network accessline 170
with urllib.request.urlopen(req, timeout=timeout) as resp, open(tmp, "wb") as fh: - Access to secretsline 243
[Credential-related source omitted] - Access to secretsline 302
[Credential-related source omitted] - Access to secretsline 340
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 342
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted]
skills/patent-map/tools/serve_map.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 153
httpd = MapServer((host, 0), MapHandler) port = httpd.server_address[1] url = f"http://{host}:{port}/" - Network accessline 154
port = httpd.server_address[1] url = f"http://{host}:{port}/" local = find_local_model(vault) - Network accessline 155
url = f"http://{host}:{port}/"
skills/patent-map/tools/vault_index.py
skills/patent-map/web/index.html
- Network accessline 25
<span class="title-word">专利地图</span> <span class="gh-row" id="gh-row"> <a class="gh-btn" href="https://github.com/handsomestWei/patent-disclosure-skill" target="_blank" rel="noopener noreferrer" title="技能仓库"> - Network accessline 26
<span class="gh-row" id="gh-row"> <a class="gh-btn" href="https://github.com/handsomestWei/patent-disclosure-skill" target="_blank" rel="noopener noreferrer" title="技能仓库"> <svg viewBox="0 0 16 16" width="14" height - Network accessline 27
<a class="gh-btn" href="https://github.com/handsomestWei/patent-disclosure-skill" target="_blank" rel="noopener noreferrer" title="技能仓库"> - Network accessline 29
GitHub </a> <a class="gh-btn star" id="gh-star" href="https://github.com/handsomestWei/patent-disclosure-skill/stargazers" target="_blank" rel="noopener noreferrer" title="Star 仓库"> - Network accessline 30
</a> <a class="gh-btn star" id="gh-star" href="https://github.com/handsomestWei/patent-disclosure-skill/stargazers" target="_blank" rel="noopener noreferrer" title="Star 仓库"> <svg viewBox="0 0 16 16" width="14" hei - Network accessline 31
<a class="gh-btn star" id="gh-star" href="https://github.com/handsomestWei/patent-disclosure-skill/stargazers" target="_blank" rel="noopener noreferrer" title="Star 仓库"> - Network accessline 33
<span id="gh-star-label">Star</span> </a> <a class="gh-btn" id="gh-fork" href="https://github.com/handsomestWei/patent-disclosure-skill/fork" target="_blank" rel="noopener noreferrer" title="Fork 仓库"> - Network accessline 34
</a> <a class="gh-btn" id="gh-fork" href="https://github.com/handsomestWei/patent-disclosure-skill/fork" target="_blank" rel="noopener noreferrer" title="Fork 仓库"> <svg viewBox="0 0 16 16" width="14" height="14" ar - Network accessline 35
<a class="gh-btn" id="gh-fork" href="https://github.com/handsomestWei/patent-disclosure-skill/fork" target="_blank" rel="noopener noreferrer" title="Fork 仓库">
skills/patent-map/web/js/app.js
- Executable scriptline 1
Executable file - Network accessline 48
loadGithubMeta(); try { const ipcPromise = fetch("/api/ipc-subclasses") - Network accessline 49
try { const ipcPromise = fetch("/api/ipc-subclasses") .then((r) => (r.ok ? r.json() : { titles: {} })) - Network accessline 50
const ipcPromise = fetch("/api/ipc-subclasses") - Network accessline 51
.then((r) => (r.ok ? r.json() : { titles: {} })) .catch(() => ({ titles: {} })); const res = await fetch("/api/patents"); - Network accessline 52
.catch(() => ({ titles: {} })); const res = await fetch("/api/patents"); DATA = await res.json(); - Network accessline 53
const res = await fetch("/api/patents");
skills/patent-map/web/js/camera.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/chrome.js
- Executable scriptline 1
Executable file - Network accessline 48
async function loadGithubMeta() { try { const res = await fetch("https://api.github.com/repos/handsomestWei/patent-disclosure-skill"); - Network accessline 49
try { const res = await fetch("https://api.github.com/repos/handsomestWei/patent-disclosure-skill"); if (!res.ok) return; - Network accessline 50
const res = await fetch("https://api.github.com/repos/handsomestWei/patent-disclosure-skill");
skills/patent-map/web/js/core.js
skills/patent-map/web/js/detail.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/layout.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/view-bubble.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/view-citation.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/view-dashboard.js
- Executable scriptline 1
Executable file
skills/patent-map/web/js/view-matrix.js
- Executable scriptline 1
Executable file - Network accessline 37
const parts = k.split("||"); const nr = rowMap[parts[0]] || parts[0]; const nc = colMap[parts[1]] || parts[1]; - Network accessline 38
const nr = rowMap[parts[0]] || parts[0]; const nc = colMap[parts[1]] || parts[1]; const nk = nr + "||" + nc; - Network accessline 39
const nc = colMap[parts[1]] || parts[1];
skills/patent-map/web/js/view-terrain.js
- Executable scriptline 1
Executable file
skills/patent-map/web/terrain3d.js
- Executable scriptline 1
Executable file
skills/patent-map/web/vendor/README.txt
skills/patent-map/web/vendor/three.module.min.js
- Executable scriptline 1
Executable file - Possible obfuscationline 6
const t="170",e={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},n={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},i=0,r=1,s=2,a=3,o=0,l=1,c=2,h=3,u=0,d=1,p=2,m=0,f=1,g=2,v=3,_=4,x=5,y=100,M=101,S=102,b=103,T=104,w=200,E=201,A=202,R=203,C=204,I
skills/patent-oa/docs/embedding.config.yaml
skills/patent-oa/prompts/configure_embedding.md
- Network accessline 34
python skills/patent-oa/tools/config.py set --provider openai_compatible \ --model embedding-3 --dimensions 1024 \ --base-url "https://open.bigmodel.cn/api/paas/v4" \ - Network accessline 35
--model embedding-3 --dimensions 1024 \ --base-url "https://open.bigmodel.cn/api/paas/v4" \ --api-key "用户提供的Key" - Network accessline 36
--base-url "https://open.bigmodel.cn/api/paas/v4" \
skills/patent-oa/tests/__init__.py
- Executable scriptline 1
Executable file
skills/patent-oa/tests/test_chart_tools_sync.py
- Executable scriptline 1
Executable file
skills/patent-oa/tests/test_oa_store.py
- Executable scriptline 1
Executable file - Network accessline 183
dimensions=1024, path=path, base_url="https://open.bigmodel.cn/api/paas/v4", - Network accessline 184
path=path, base_url="https://open.bigmodel.cn/api/paas/v4", api_key_env="ZHIPUAI_API_KEY", - Network accessline 185
base_url="https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 201
[Credential-related source omitted] - Network accessline 239
old = embed_mod.urllib.request.urlopen - Network accessline 240
embed_mod.urllib.request.urlopen = fake_urlopen # type: ignore[assignment] - Network accessline 245
"model": "embedding-3", "dimensions": 4, "base_url": "https://open.bigmodel.cn/api/paas/v4", - Network accessline 246
"dimensions": 4, "base_url": "https://open.bigmodel.cn/api/paas/v4", "api_key_env": "ZHIPUAI_API_KEY", - Network accessline 247
"base_url": "https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 248
[Credential-related source omitted] - Access to secretsline 252
[Credential-related source omitted] - Access to secretsline 253
[Credential-related source omitted] - Access to secretsline 258
[Credential-related source omitted] - Network accessline 260
[Credential-related source omitted] - Access to secretsline 260
[Credential-related source omitted] - Network accessline 262
embed_mod.urllib.request.urlopen = old # type: ignore[assignment] - Network accessline 295
old = embed_mod.urllib.request.urlopen - Network accessline 296
embed_mod.urllib.request.urlopen = fake_urlopen # type: ignore[assignment] - Network accessline 301
"model": "embo-01", "dimensions": 3, "base_url": "https://api.minimaxi.com/v1/embeddings", - Network accessline 302
"dimensions": 3, "base_url": "https://api.minimaxi.com/v1/embeddings", "api_key_env": "MINIMAX_API_KEY", - Network accessline 303
"base_url": "https://api.minimaxi.com/v1/embeddings", - Access to secretsline 304
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 317
[Credential-related source omitted] - Network accessline 319
[Credential-related source omitted] - Access to secretsline 319
[Credential-related source omitted] - Network accessline 321
embed_mod.urllib.request.urlopen = old # type: ignore[assignment] - Access to secretsline 360
[Credential-related source omitted] - Access to secretsline 364
[Credential-related source omitted] - Access to secretsline 366
[Credential-related source omitted] - Access to secretsline 376
[Credential-related source omitted]
skills/patent-oa/tests/test_opinion_docx.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/README.md
- Network accessline 15
python skills/patent-oa/tools/config.py set --provider openai_compatible \ --model embedding-3 --dimensions 1024 \ --base-url https://open.bigmodel.cn/api/paas/v4 \ - Network accessline 16
--model embedding-3 --dimensions 1024 \ --base-url https://open.bigmodel.cn/api/paas/v4 \ --api-key "sk-..." - Network accessline 17
--base-url https://open.bigmodel.cn/api/paas/v4 \
skills/patent-oa/tools/__init__.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/case_md.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/config.py
- Executable scriptline 1
Executable file - Network accessline 32
"model": "embedding-3", "dimensions": 1024, "base_url": "https://open.bigmodel.cn/api/paas/v4", - Network accessline 33
"dimensions": 1024, "base_url": "https://open.bigmodel.cn/api/paas/v4", "api_key_env": "ZHIPUAI_API_KEY", - Network accessline 34
"base_url": "https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 35
[Credential-related source omitted] - Network accessline 41
"model": "text-embedding-v3", "dimensions": 1024, "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", - Network accessline 42
"dimensions": 1024, "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "api_key_env": "DASHSCOPE_API_KEY", - Network accessline 43
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", - Access to secretsline 44
[Credential-related source omitted] - Network accessline 50
"model": "text-embedding-3-small", "dimensions": 1536, "base_url": "https://api.openai.com/v1", - Network accessline 51
"dimensions": 1536, "base_url": "https://api.openai.com/v1", "api_key_env": "OPENAI_API_KEY", - Network accessline 52
"base_url": "https://api.openai.com/v1", - Access to secretsline 53
[Credential-related source omitted] - Network accessline 59
"model": "embo-01", "dimensions": 1536, "base_url": "https://api.minimaxi.com/v1/embeddings", - Network accessline 60
"dimensions": 1536, "base_url": "https://api.minimaxi.com/v1/embeddings", "api_key_env": "MINIMAX_API_KEY", - Network accessline 61
"base_url": "https://api.minimaxi.com/v1/embeddings", - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Access to secretsline 158
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 171
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted] - Access to secretsline 183
[Credential-related source omitted] - Access to secretsline 270
[Credential-related source omitted] - Access to secretsline 360
[Credential-related source omitted] - Access to secretsline 362
[Credential-related source omitted] - Access to secretsline 364
[Credential-related source omitted] - Access to secretsline 366
[Credential-related source omitted] - Access to secretsline 368
[Credential-related source omitted] - Access to secretsline 585
[Credential-related source omitted] - Access to secretsline 590
[Credential-related source omitted] - Access to secretsline 595
[Credential-related source omitted] - Access to secretsline 714
[Credential-related source omitted] - Access to secretsline 735
[Credential-related source omitted] - Access to secretsline 820
[Credential-related source omitted] - Access to secretsline 822
[Credential-related source omitted] - Access to secretsline 832
[Credential-related source omitted] - Access to secretsline 840
[Credential-related source omitted]
skills/patent-oa/tools/embed.py
- Executable scriptline 1
Executable file - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Network accessline 112
def _embed_openai(self, texts: list[str]) -> np.ndarray: key = self._api_key() base = (self.cfg.get("base_url") or "https://api.openai.com/v1").rstrip("/") - Network accessline 113
key = self._api_key() base = (self.cfg.get("base_url") or "https://api.openai.com/v1").rstrip("/") url = f"{base}/embeddings" - Network accessline 114
base = (self.cfg.get("base_url") or "https://api.openai.com/v1").rstrip("/") - Network accessline 118
payload_obj["dimensions"] = int(self.dimensions) body = json.dumps(payload_obj).encode("utf-8") req = urllib.request.Request( - Network accessline 119
body = json.dumps(payload_obj).encode("utf-8") req = urllib.request.Request( url, - Network accessline 120
req = urllib.request.Request( - Network accessline 142
group_id = resolve_group_id(self.cfg) base = ( self.cfg.get("base_url") or "https://api.minimaxi.com/v1/embeddings" - Network accessline 143
base = ( self.cfg.get("base_url") or "https://api.minimaxi.com/v1/embeddings" ).rstrip("/") - Network accessline 144
self.cfg.get("base_url") or "https://api.minimaxi.com/v1/embeddings" - Network accessline 162
} body = json.dumps(payload_obj).encode("utf-8") req = urllib.request.Request( - Network accessline 163
body = json.dumps(payload_obj).encode("utf-8") req = urllib.request.Request( url, - Network accessline 164
req = urllib.request.Request( - Network accessline 190
def _http_json(self, req: urllib.request.Request) -> dict: - Network accessline 191
try: with urllib.request.urlopen(req, timeout=self.timeout) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 192
with urllib.request.urlopen(req, timeout=self.timeout) as resp:
skills/patent-oa/tools/emit_chart.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/emit_opinion_docx.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/highlights.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/ingest_case.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/latex_delimiters.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/md_to_docx.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/pdf_text.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/rebuild_vectors.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/redact.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/refresh_vault.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/requirements-oa.txt
- Access to secretsline 15
[Credential-related source omitted]
skills/patent-oa/tools/search_cases.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/stdio_utf8.py
skills/patent-oa/tools/store.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/vault_layout.py
- Executable scriptline 1
Executable file
skills/patent-oa/tools/write_intake.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-oa/tools/xlsx_minimal.py
- Executable scriptline 1
Executable file - Network accessline 278
xml = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 279
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' ' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 280
'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 281
' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 312
return ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' - Network accessline 313
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' "<authors><author>对照表</author></authors>" - Network accessline 314
'<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' - Network accessline 369
workbook = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 370
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' ' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 371
'<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"' - Network accessline 372
' xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 375
wb_rels = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 376
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' + "".join( - Network accessline 377
'<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 378
+ "".join( f'<Relationship Id="rId{i}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' - Network accessline 379
f'<Relationship Id="rId{i}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' f'Target="worksheets/sheet{i}.xml"/>' - Network accessline 380
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" ' - Network accessline 383
) + f'<Relationship Id="rId{len(sheets) + 1}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' - Network accessline 384
+ f'<Relationship Id="rId{len(sheets) + 1}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' 'Target="styles.xml"/>' - Network accessline 385
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" ' - Network accessline 401
content_types = ( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' - Network accessline 402
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' '<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relation - Network accessline 403
'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' - Network accessline 413
) rels = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> - Network accessline 414
rels = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/rel - Network accessline 415
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> - Network accessline 416
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/> - Network accessline 428
f"xl/worksheets/_rels/sheet{i}.xml.rels", '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 429
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' '<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' f'<Relationship Id="rId1" Type="http://schemas.o - Network accessline 430
'<Relationships xmlns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 431
f'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" Target="../drawings/vmlDrawing{i}.vml"/>' - Network accessline 432
f'<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" Target="../comments{i}.xml"/>' - Network accessline 486
xf_count = HIGHLIGHT_XF_BASE + len(PALETTE) return f"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> - Network accessline 487
return f"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <fonts count="10"> - Network accessline 488
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
skills/patent-reader/assets/obsidian/_专利解读索引.template.md
- Network accessline 24
安装 [Dataview](https://obsidian.md/plugins?id=dataview) 后,下列查询可替代或补充 Bases:
skills/patent-reader/docs/obsidian-setup-guide.md
- Network accessline 16
1. 打开官网:<https://obsidian.md/download> - Network accessline 72
| 插件(搜索名) | 作用 | 安装页 | |----------------|------|--------| | **Dataview** | 索引页动态表回退 | <https://obsidian.md/plugins?id=dataview> | - Network accessline 73
|----------------|------|--------| | **Dataview** | 索引页动态表回退 | <https://obsidian.md/plugins?id=dataview> | | **Colored Tags** | 标签上色 | <https://obsidian.md/plugins?id=colored-tags> | - Network accessline 74
| **Dataview** | 索引页动态表回退 | <https://obsidian.md/plugins?id=dataview> | - Network accessline 75
| **Colored Tags** | 标签上色 | <https://obsidian.md/plugins?id=colored-tags> | - Network accessline 76
| **Colored Bases Properties** | Bases 属性 pill 上色 | <https://obsidian.md/plugins?id=colored-bases-properties> | - Network accessline 77
| **Iconize** | 侧栏图标 | <https://obsidian.md/plugins?id=iconize> | - Network accessline 78
| **Supercharged Links** | 双链按属性上色 | <https://obsidian.md/plugins?id=supercharged-links> |
skills/patent-reader/examples/example_patent_reader/README.md
- Network accessline 20
| 公开号 | 用途 | PDF / 页面镜像 | |--------|------|----------------| | `CN119961390A` | 主示例(发明公布 · 软件/RAG 类解读) | https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf | - Network accessline 21
|--------|------|----------------| | `CN119961390A` | 主示例(发明公布 · 软件/RAG 类解读) | https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf | | `CN119961396A` | 近似专利(关联 / 同域对照) | https://patentimages.storage.googleap - Network accessline 22
| `CN119961390A` | 主示例(发明公布 · 软件/RAG 类解读) | https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf | - Network accessline 23
| `CN119961396A` | 近似专利(关联 / 同域对照) | https://patentimages.storage.googleapis.com/3f/29/d0/a2461c5080d73d/CN119961396A.pdf | - Network accessline 24
| `CN114552122A` | **按图裁切解读** | https://patentimages.storage.googleapis.com/c2/6c/51/75412585086edf/CN114552122A.pdf | - Network accessline 25
| `CN209861402U` | **实用新型**解读(散热片卡扣安装 · Schema 挂钩) | https://patentimages.storage.googleapis.com/39/b7/d6/0050a57f67b004/CN209861402U.pdf |
skills/patent-reader/prompts/obsidian_ofm_companion.md
- Network accessline 3
> 与 [kepano/obsidian-skills](https://github.com/kepano/obsidian-skills) 的 `obsidian-markdown` 对齐子集。若环境已安装该技能,写笔记前可额外 **`Read`** 其 `SKILL.md`;**未安装时**以本文件为准即可。
skills/patent-reader/prompts/obsidian_plugin_guide.md
- Network accessline 22
| 插件 | 安装 | 作用 | |------|------|------| | Dataview | https://obsidian.md/plugins?id=dataview | 索引动态表 | - Network accessline 23
|------|------|------| | Dataview | https://obsidian.md/plugins?id=dataview | 索引动态表 | | Colored Tags | https://obsidian.md/plugins?id=colored-tags | 标签上色 | - Network accessline 24
| Dataview | https://obsidian.md/plugins?id=dataview | 索引动态表 | - Network accessline 25
| Colored Tags | https://obsidian.md/plugins?id=colored-tags | 标签上色 | - Network accessline 26
| Colored Bases Properties | https://obsidian.md/plugins?id=colored-bases-properties | Bases pill | - Network accessline 27
| Iconize | https://obsidian.md/plugins?id=iconize | 侧栏图标 | - Network accessline 28
| Supercharged Links | https://obsidian.md/plugins?id=supercharged-links | 双链上色 | - Network accessline 34
https://help.obsidian.md/cli — 检测到 `obsidian` 命令时入库可同步属性。
skills/patent-reader/prompts/patent_plain_reader.md
skills/patent-reader/references/patent_pdf_sources.yaml
- Network accessline 9
name: Google Patents 详情页 page_templates: - "https://patents.google.com/patent/{pub}/zh" - Network accessline 10
page_templates: - "https://patents.google.com/patent/{pub}/zh" - "https://patents.google.com/patent/{pub}/en" - Network accessline 11
- "https://patents.google.com/patent/{pub}/zh" - Network accessline 12
- "https://patents.google.com/patent/{pub}/en" - Network accessline 13
- "https://patents.google.com/patent/{pub}" - Network accessline 16
HTTP 429 / 503 = 限流:立即报错,不重试。 海外号取结构化全文用 fetch_gp_fulltext.py(同一 /en 详情页,一次请求)。 直链 https://patents.google.com/patent/{pub}.pdf 常 404,勿当作主路径。 - Network accessline 17
海外号取结构化全文用 fetch_gp_fulltext.py(同一 /en 详情页,一次请求)。 直链 https://patents.google.com/patent/{pub}.pdf 常 404,勿当作主路径。 详情页 404 = 未收录(新公开专利通常 1–3 周后才上 Google);外观设计多有页无 PDF。 - Network accessline 18
直链 https://patents.google.com/patent/{pub}.pdf 常 404,勿当作主路径。 - Network accessline 26
name: Google Patents PDF CDN host: patentimages.storage.googleapis.com url_pattern: "https://patentimages.storage.googleapis.com/<hash-path>/{pub}.pdf" - Network accessline 27
host: patentimages.storage.googleapis.com url_pattern: "https://patentimages.storage.googleapis.com/<hash-path>/{pub}.pdf" notes: | - Network accessline 28
url_pattern: "https://patentimages.storage.googleapis.com/<hash-path>/{pub}.pdf" - Network accessline 74
# 示例专利已知 CDN(仅 examples;通用下载仍应解析页面) known_cdn_examples: CN119961390A: "https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf" - Network accessline 75
known_cdn_examples: CN119961390A: "https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf" CN119961396A: "https://patentimages.storage.googleapis.com/3f/29/d0/a2461c5080d73d/CN119961396A.pdf" - Network accessline 76
CN119961390A: "https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf" - Network accessline 77
CN119961396A: "https://patentimages.storage.googleapis.com/3f/29/d0/a2461c5080d73d/CN119961396A.pdf" - Network accessline 78
CN114552122A: "https://patentimages.storage.googleapis.com/c2/6c/51/75412585086edf/CN114552122A.pdf" - Network accessline 79
CN209861402U: "https://patentimages.storage.googleapis.com/39/b7/d6/0050a57f67b004/CN209861402U.pdf"
skills/patent-reader/tests/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/fixtures/google_patents/detail_JP7371268B2.html
- Network accessline 8
<meta name="DC.description" content=""> <meta name="citation_patent_application_number" content="JP:2022548006A"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf"> - Network accessline 9
<meta name="citation_patent_application_number" content="JP:2022548006A"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf"> <meta name="citation_patent_number" conte - Network accessline 10
<meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf">
skills/patent-reader/tests/fixtures/google_patents/detail_US11450918B2.html
- Network accessline 9
"> <meta name="citation_patent_application_number" content="US:16/796,222"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf"> - Network accessline 10
<meta name="citation_patent_application_number" content="US:16/796,222"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf"> <meta name="citation_patent_number" content - Network accessline 11
<meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf">
skills/patent-reader/tests/test_biblio_extract.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_claim_features.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_clue_market.py
- Executable scriptline 1
Executable file - Network accessline 66
class ClueRegionTests(unittest.TestCase): def _clue(self, title: str, conf: str, group: str = "") -> dict: c = {"title": title, "url": f"https://news.example/{title}", "confidence": conf, "reason": "同主题产品线报道"} - Network accessline 67
def _clue(self, title: str, conf: str, group: str = "") -> dict: c = {"title": title, "url": f"https://news.example/{title}", "confidence": conf, "reason": "同主题产品线报道"} if group: - Network accessline 68
c = {"title": title, "url": f"https://news.example/{title}", "confidence": conf, "reason": "同主题产品线报道"}
skills/patent-reader/tests/test_clue_vocab.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_desc_paragraphs.py
- Executable scriptline 1
Executable file - Network accessline 126
self.assertEqual( data["source_url"], "http://epub.cnipa.gov.cn/patent/CN219812345U", - Network accessline 127
data["source_url"], "http://epub.cnipa.gov.cn/patent/CN219812345U", ) - Network accessline 128
"http://epub.cnipa.gov.cn/patent/CN219812345U",
skills/patent-reader/tests/test_extract_patent_text.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_fetch_gp_fulltext.py
- Executable scriptline 1
Executable file - Network accessline 26
def _detail(name: str, pub: str): html = (FIXTURES / name).read_text(encoding="utf-8") return parse_detail_html(html, pub=pub, url=f"https://patents.google.com/patent/{pub}/en") - Network accessline 28
return parse_detail_html(html, pub=pub, url=f"https://patents.google.com/patent/{pub}/en") - Network accessline 88
self.assertEqual(nodes[6]["parent"], 5) paras = json.loads((run / "description_paragraphs.json").read_text(encoding="utf-8")) self.assertEqual(paras["source_url"], "https://patents.google.com/patent/US11450918B2/en") - Network accessline 89
paras = json.loads((run / "description_paragraphs.json").read_text(encoding="utf-8")) self.assertEqual(paras["source_url"], "https://patents.google.com/patent/US11450918B2/en") self.assertEqual(paras["count"], 3) - Network accessline 90
self.assertEqual(paras["source_url"], "https://patents.google.com/patent/US11450918B2/en") - Network accessline 142
self.assertEqual( pdf_mod.google_patent_page_urls("US11450918B2"), ["https://patents.google.com/patent/US11450918B2/en"], - Network accessline 143
pdf_mod.google_patent_page_urls("US11450918B2"), ["https://patents.google.com/patent/US11450918B2/en"], ) - Network accessline 144
["https://patents.google.com/patent/US11450918B2/en"],
skills/patent-reader/tests/test_fetch_patent_pdf.py
- Executable scriptline 1
Executable file - Network accessline 25
SAMPLE_HTML = """ <html> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf"> - Network accessline 26
<html> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf"> <title>CN119961390A - demo</title> - Network accessline 27
<meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf"> <title>CN119961390A - demo</title> <a href="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN - Network accessline 28
<title>CN119961390A - demo</title> <a href="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf" itemprop="pdfLink">Download PDF</a> </html> - Network accessline 29
<a href="https://patentimages.storage.googleapis.com/58/1b/9b/07a9f35635df34/CN119961390A.pdf" itemprop="pdfLink">Download PDF</a> - Network accessline 69
self.assertTrue(urls) self.assertIn("CN119961390A.pdf", urls[0]) self.assertTrue(urls[0].startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 71
self.assertTrue(urls[0].startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 80
resp = _FakeResp(body) with _Patch(_open=lambda *_a, **_k: resp): urls, n = read_page_pdf_urls("https://p/zh", "CN119961390A") - Network accessline 81
with _Patch(_open=lambda *_a, **_k: resp): urls, n = read_page_pdf_urls("https://p/zh", "CN119961390A") self.assertIn("CN119961390A.pdf", urls[0]) - Network accessline 82
urls, n = read_page_pdf_urls("https://p/zh", "CN119961390A") - Network accessline 95
timeout=1, known_cdn={ "CN114552122A": "https://patentimages.storage.googleapis.com/c2/6c/51/75412585086edf/CN114552122A.pdf" - Network accessline 96
known_cdn={ "CN114552122A": "https://patentimages.storage.googleapis.com/c2/6c/51/75412585086edf/CN114552122A.pdf" }, - Network accessline 97
"CN114552122A": "https://patentimages.storage.googleapis.com/c2/6c/51/75412585086edf/CN114552122A.pdf" - Network accessline 127
with tempfile.TemporaryDirectory() as td: out = Path(td) st = fetch_patent_pdf("CN1", out, url="https://example.com/CN1.pdf") - Network accessline 128
out = Path(td) st = fetch_patent_pdf("CN1", out, url="https://example.com/CN1.pdf") self.assertTrue(st["ok"]) - Network accessline 129
st = fetch_patent_pdf("CN1", out, url="https://example.com/CN1.pdf") - Network accessline 131
self.assertEqual(st["source_id"], "direct_url") self.assertTrue((out / "source" / "CN1.pdf").is_file()) self.assertEqual(calls, ["https://example.com/CN1.pdf"]) - Network accessline 133
self.assertEqual(calls, ["https://example.com/CN1.pdf"]) - Network accessline 144
with _Patch(download_pdf_bytes=flaky): with tempfile.TemporaryDirectory() as td: st = fetch_patent_pdf("CN1", Path(td), url="https://example.com/CN1.pdf") - Network accessline 145
with tempfile.TemporaryDirectory() as td: st = fetch_patent_pdf("CN1", Path(td), url="https://example.com/CN1.pdf") self.assertTrue(st["ok"]) - Network accessline 146
st = fetch_patent_pdf("CN1", Path(td), url="https://example.com/CN1.pdf") - Network accessline 150
def test_download_404_falls_to_known_cdn(self) -> None: page_url = "https://patentimages.storage.googleapis.com/aa/CN114552122A.pdf" - Network accessline 151
page_url = "https://patentimages.storage.googleapis.com/aa/CN114552122A.pdf"
skills/patent-reader/tests/test_google_patents.py
- Executable scriptline 1
Executable file - Network accessline 45
class _Resp(io.BytesIO): def __init__(self, body: bytes, url: str = "https://patents.google.com/x") -> None: - Network accessline 46
def __init__(self, body: bytes, url: str = "https://patents.google.com/x") -> None: - Network accessline 84
q = SearchQuery(keywords="battery", countries=["US"]) url = xhr_url(q) self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) - Network accessline 85
url = xhr_url(q) self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) self.assertTrue(url.endswith("&exp=")) - Network accessline 86
self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) self.assertTrue(url.endswith("&exp=")) inner = urllib.parse.unquote(url.split("url=", 1)[1].rsplit("&exp=", 1)[0]) - Network accessline 91
def test_web_url_uses_same_params(self) -> None: q = SearchQuery(keywords="lamp", patent_type="DESIGN", page=1) self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) - Network accessline 92
q = SearchQuery(keywords="lamp", patent_type="DESIGN", page=1) self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) self.assertIn("type=DESIGN", web_url(q)) - Network accessline 93
self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) - Network accessline 160
self.assertEqual((first.country, first.kind), ("US", "B2")) self.assertNotIn("<b>", first.title) self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") - Network accessline 161
self.assertNotIn("<b>", first.title) self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") self.assertIn("JP", first.family_countries) - Network accessline 162
self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") - Network accessline 164
with_pdf = [h for h in page.hits if h.pdf_url] self.assertTrue(with_pdf) self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 165
self.assertTrue(with_pdf) self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) self.assertTrue(any(h.country == "JP" for h in page.hits)) - Network accessline 166
self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 240
with _PatchAttr(gp_client, "_urlopen", self._http_error(429)): with self.assertRaises(GooglePatentsBlocked): gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 242
gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 245
with _PatchAttr(gp_client, "_urlopen", self._http_error(404)): with self.assertRaises(GooglePatentsNotFound): gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 247
gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 259
with _PatchAttr(gp_client, "_urlopen", opener): with self.assertRaises(GooglePatentsUnavailable): gp_client.fetch_text("https://patents.google.com/") - Network accessline 261
gp_client.fetch_text("https://patents.google.com/") - Network accessline 271
with _PatchAttr(gp_api, "fetch_text", lambda *_a, **_k: body): d = gp_api.fetch_detail("US11450918B2") self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en") - Network accessline 272
d = gp_api.fetch_detail("US11450918B2") self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en") self.assertEqual(len(d.claims), 6) - Network accessline 273
self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en")
skills/patent-reader/tests/test_note_cites.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_patent_reader_debt_fixes.py
- Executable scriptline 1
Executable file - Network accessline 192
{ "title": "某白皮书", "url": "https://example.org/a", - Network accessline 193
"title": "某白皮书", "url": "https://example.org/a", "confidence": "中", - Network accessline 194
"url": "https://example.org/a", - Network accessline 208
clues = [ {"title": "低1", "url": "https://a.example/1", "confidence": "低", "reason": "理由足够长了"}, - Network accessline 209
{"title": "低1", "url": "https://a.example/1", "confidence": "低", "reason": "理由足够长了"}, - Network accessline 210
{"title": "高1", "url": "https://a.example/2", "confidence": "高", "reason": "理由足够长了"}, - Network accessline 211
{"title": "中1", "url": "https://a.example/3", "confidence": "中", "reason": "理由足够长了"}, - Network accessline 212
{"title": "中2", "url": "https://a.example/4", "confidence": "中", "reason": "理由足够长了"}, - Network accessline 213
{"title": "高2", "url": "https://a.example/5", "confidence": "高", "reason": "理由足够长了"}, - Network accessline 246
{ "title": "Agent已读", "url": "https://example.org/a", - Network accessline 247
"title": "Agent已读", "url": "https://example.org/a", "confidence": "高", - Network accessline 248
"url": "https://example.org/a", - Network accessline 255
{ "title": "仅有链接", "url": "https://example.org/b", - Network accessline 256
"title": "仅有链接", "url": "https://example.org/b", "confidence": "中", - Network accessline 257
"url": "https://example.org/b", - Network accessline 521
clue = { "title": "水性PVDF产品报道", "url": "https://news.example/x", - Network accessline 522
"title": "水性PVDF产品报道", "url": "https://news.example/x", "confidence": "中", - Network accessline 523
"url": "https://news.example/x", - Access to secretsline 578
[Credential-related source omitted] - Access to secretsline 585
[Credential-related source omitted] - Access to secretsline 586
[Credential-related source omitted] - Access to secretsline 594
[Credential-related source omitted] - Access to secretsline 596
[Credential-related source omitted]
skills/patent-reader/tests/test_patent_reader_links.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_patent_reader_p0_p2.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_patent_reader_pipeline.py
skills/patent-reader/tests/test_schema_vault.py
- Executable scriptline 1
Executable file
skills/patent-reader/tests/test_text_vocab.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/analyze/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/analyze/build_claim_mermaid.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/analyze/build_context_anchor.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/analyze/claim_features.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/analyze/lint_patent_note.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/analyze/validate_claim_features.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/analyze/validate_claim_tree.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/analyze/validate_public_clues.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/browser.py
skills/patent-reader/tools/crawl/cnipa_epub_crawler.py
- Network accessline 1
# -*- coding: utf-8 -*- """ 中国专利公布公告网站点:http://epub.cnipa.gov.cn/ —— **首页「公布公告查询」**(#indexForm / #searchStr)及 **高级查询**(/Advanced,分类号、名称与发明人字段)。 - Executable scriptline 1
Executable file - Network accessline 3
中国专利公布公告网站点:http://epub.cnipa.gov.cn/ —— **首页「公布公告查询」**(#indexForm / #searchStr)及 **高级查询**(/Advanced,分类号、名称与发明人字段)。 - Network accessline 80
EPUB_BASE = "http://epub.cnipa.gov.cn/" - Access to secretsline 112
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 435
[Credential-related source omitted]
skills/patent-reader/tools/crawl/cnipa_epub_parse.py
- Network accessline 1
# -*- coding: utf-8 -*- """ 解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Executable scriptline 1
Executable file - Network accessline 3
解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Network accessline 15
EPUB_BASE = "http://epub.cnipa.gov.cn/" - Network accessline 394
""" 新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; - Network accessline 395
新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; 摘要位于 ``dt`` 为「摘要」的 ``dd`` 内(含 ``span.alltxt`` 折叠段)。 - Network accessline 396
详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上;
skills/patent-reader/tools/extract/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/extract/extract_patent_figures.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/extract/extract_patent_text.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/extract/fetch_design_views.py
skills/patent-reader/tools/extract/fetch_gp_fulltext.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/extract/fetch_patent_pdf.py
- Executable scriptline 1
#!/usr/bin/env python - Network accessline 20
python skills/patent-reader/tools/extract/fetch_patent_pdf.py --pub CN… -o RUN --save-html python skills/patent-reader/tools/extract/fetch_patent_pdf.py --url https://…/CNxxx.pdf -o RUN --pub CNxxx - Network accessline 21
python skills/patent-reader/tools/extract/fetch_patent_pdf.py --url https://…/CNxxx.pdf -o RUN --pub CNxxx - Network accessline 63
CDN_HOST_RE = re.compile( r"https://patentimages\.storage\.googleapis\.com/[^\s\"'<>\\]+?\.pdf", - Network accessline 64
r"https://patentimages\.storage\.googleapis\.com/[^\s\"'<>\\]+?\.pdf", - Network accessline 71
) PDF_LINK_RE = re.compile( r'href=["\'](https://patentimages\.storage\.googleapis\.com/[^"\']+\.pdf)["\']', - Network accessline 72
PDF_LINK_RE = re.compile( r'href=["\'](https://patentimages\.storage\.googleapis\.com/[^"\']+\.pdf)["\']', re.I, - Network accessline 73
r'href=["\'](https://patentimages\.storage\.googleapis\.com/[^"\']+\.pdf)["\']', - Network accessline 108
jurisdiction = infer_jurisdiction(p) if jurisdiction and jurisdiction != "CN": return [f"https://patents.google.com/patent/{p}/en"] - Network accessline 109
if jurisdiction and jurisdiction != "CN": return [f"https://patents.google.com/patent/{p}/en"] return [ - Network accessline 110
return [f"https://patents.google.com/patent/{p}/en"] - Network accessline 111
return [ f"https://patents.google.com/patent/{p}/zh", f"https://patents.google.com/patent/{p}/en", - Network accessline 112
f"https://patents.google.com/patent/{p}/zh", - Network accessline 113
f"https://patents.google.com/patent/{p}/en", - Network accessline 114
f"https://patents.google.com/patent/{p}", - Network accessline 149
def _open(url: str, *, timeout: float): req = urllib.request.Request(url, headers={"User-Agent": UA}) - Network accessline 150
req = urllib.request.Request(url, headers={"User-Agent": UA}) - Network accessline 151
return urllib.request.urlopen(req, timeout=timeout, context=_SSL_CTX)
skills/patent-reader/tools/extract/figure_extract.py
skills/patent-reader/tools/google_patents/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/api.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/client.py
- Executable scriptline 1
Executable file - Network accessline 23
BASE_URL = "https://patents.google.com" - Network accessline 31
_SSL_CTX = ssl.create_default_context() _urlopen = urllib.request.urlopen - Network accessline 32
_urlopen = urllib.request.urlopen - Network accessline 50
if accept: headers["Accept"] = accept req = urllib.request.Request(url, headers=headers) - Network accessline 51
headers["Accept"] = accept req = urllib.request.Request(url, headers=headers) try: - Network accessline 52
req = urllib.request.Request(url, headers=headers)
skills/patent-reader/tools/google_patents/detail.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/errors.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/html_text.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/query.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/google_patents/results.py
skills/patent-reader/tools/patent_type.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/biblio.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/claims.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/common.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/obsidian_env.py
- Executable scriptline 1
Executable file - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 211
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted] - Access to secretsline 332
[Credential-related source omitted] - Access to secretsline 335
[Credential-related source omitted] - Access to secretsline 338
[Credential-related source omitted]
skills/patent-reader/tools/shared/paths.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/rules.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/shared/text_vocab.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/stdio_utf8.py
skills/patent-reader/tools/vault/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/build_patent_canvas.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/vault/check_obsidian_env.py
skills/patent-reader/tools/vault/clue_vault.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/__init__.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/annotate.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/matching.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/model.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/render.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/summary.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/clues/vocab.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/desc_paragraphs.py
skills/patent-reader/tools/vault/link_patent_notes.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/vault/materialize_public_clues.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/vault/note_cites.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_bootstrap.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_canvas.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_claims.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_frontmatter.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_glossary.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/obsidian_paths.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/patent_link.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/schema_vault.py
- Executable scriptline 1
Executable file
skills/patent-reader/tools/vault/setup_obsidian_vault.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-reader/tools/vault/write_patent_obsidian_note.py
- Executable scriptline 1
#!/usr/bin/env python
skills/patent-search/tests/__init__.py
- Executable scriptline 1
Executable file
skills/patent-search/tests/fixtures/google_patents/detail_JP7371268B2.html
- Network accessline 8
<meta name="DC.description" content=""> <meta name="citation_patent_application_number" content="JP:2022548006A"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf"> - Network accessline 9
<meta name="citation_patent_application_number" content="JP:2022548006A"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf"> <meta name="citation_patent_number" conte - Network accessline 10
<meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/92/93/65/cb5e16693b3b9b/JP7371268B2.pdf">
skills/patent-search/tests/fixtures/google_patents/detail_US11450918B2.html
- Network accessline 9
"> <meta name="citation_patent_application_number" content="US:16/796,222"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf"> - Network accessline 10
<meta name="citation_patent_application_number" content="US:16/796,222"> <meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf"> <meta name="citation_patent_number" content - Network accessline 11
<meta name="citation_pdf_url" content="https://patentimages.storage.googleapis.com/06/cd/ed/b18cc897c07986/US11450918.pdf">
skills/patent-search/tests/test_cnipa_search.py
- Executable scriptline 1
Executable file - Network accessline 144
self.assertEqual(hits[0].applicant, "示例 人工智能 研究院") self.assertEqual(hits[0].title, "一种示例数据处理方法、装置及电子设备") self.assertEqual(hits[0].link, "http://epub.cnipa.gov.cn/patent/CN120000001A") - Network accessline 146
self.assertEqual(hits[0].link, "http://epub.cnipa.gov.cn/patent/CN120000001A") - Network accessline 201
<dt>摘要:</dt><dd>本发明提供一种示例数据处理方法。</dd> </dl> <div class="qrcode" title="http://epub.cnipa.gov.cn/patent/CN120000001A"></div> - Network accessline 202
</dl> <div class="qrcode" title="http://epub.cnipa.gov.cn/patent/CN120000001A"></div> </div> - Network accessline 203
<div class="qrcode" title="http://epub.cnipa.gov.cn/patent/CN120000001A"></div>
skills/patent-search/tests/test_emit_covers_report.py
- Executable scriptline 1
Executable file - Network accessline 33
"snippet": "连通筋连接第一流道与第二流道", "abstract": "连通筋连接第一流道与第二流道", "link": "http://epub.cnipa.gov.cn/patent/CN218800002U", - Network accessline 34
"abstract": "连通筋连接第一流道与第二流道", "link": "http://epub.cnipa.gov.cn/patent/CN218800002U", } - Network accessline 35
"link": "http://epub.cnipa.gov.cn/patent/CN218800002U",
skills/patent-search/tests/test_emit_search_report.py
- Executable scriptline 1
Executable file - Network accessline 22
def _sample_payload() -> dict: return { "source": "http://epub.cnipa.gov.cn/Advanced", - Network accessline 23
return { "source": "http://epub.cnipa.gov.cn/Advanced", "query_mode": "derived_image", - Network accessline 24
"source": "http://epub.cnipa.gov.cn/Advanced", - Network accessline 61
"filing_date": "2026.04.22", "publication_date": "2026.08.18", "link": "http://epub.cnipa.gov.cn/patent/CN120000001A", - Network accessline 62
"publication_date": "2026.08.18", "link": "http://epub.cnipa.gov.cn/patent/CN120000001A", "abstract": "本发明提供一种示例数据处理方法。", - Network accessline 63
"link": "http://epub.cnipa.gov.cn/patent/CN120000001A", - Network accessline 91
self.assertIn("单图关键字代理", text) self.assertIn("不是以图搜图", text) self.assertIn("[一种示例数据处理方法](http://epub.cnipa.gov.cn/patent/CN120000001A)", text) - Network accessline 92
self.assertIn("不是以图搜图", text) self.assertIn("[一种示例数据处理方法](http://epub.cnipa.gov.cn/patent/CN120000001A)", text) self.assertIn("本发明提供一种示例数据处理方法。", text) - Network accessline 93
self.assertIn("[一种示例数据处理方法](http://epub.cnipa.gov.cn/patent/CN120000001A)", text)
skills/patent-search/tests/test_google_patents.py
- Executable scriptline 1
Executable file - Network accessline 45
class _Resp(io.BytesIO): def __init__(self, body: bytes, url: str = "https://patents.google.com/x") -> None: - Network accessline 46
def __init__(self, body: bytes, url: str = "https://patents.google.com/x") -> None: - Network accessline 84
q = SearchQuery(keywords="battery", countries=["US"]) url = xhr_url(q) self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) - Network accessline 85
url = xhr_url(q) self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) self.assertTrue(url.endswith("&exp=")) - Network accessline 86
self.assertTrue(url.startswith("https://patents.google.com/xhr/query?url=")) self.assertTrue(url.endswith("&exp=")) inner = urllib.parse.unquote(url.split("url=", 1)[1].rsplit("&exp=", 1)[0]) - Network accessline 91
def test_web_url_uses_same_params(self) -> None: q = SearchQuery(keywords="lamp", patent_type="DESIGN", page=1) self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) - Network accessline 92
q = SearchQuery(keywords="lamp", patent_type="DESIGN", page=1) self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) self.assertIn("type=DESIGN", web_url(q)) - Network accessline 93
self.assertEqual(web_url(q), "https://patents.google.com/?" + inner_query_string(q)) - Network accessline 160
self.assertEqual((first.country, first.kind), ("US", "B2")) self.assertNotIn("<b>", first.title) self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") - Network accessline 161
self.assertNotIn("<b>", first.title) self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") self.assertIn("JP", first.family_countries) - Network accessline 162
self.assertEqual(first.url, "https://patents.google.com/patent/US12394859B2/en") - Network accessline 164
with_pdf = [h for h in page.hits if h.pdf_url] self.assertTrue(with_pdf) self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 165
self.assertTrue(with_pdf) self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) self.assertTrue(any(h.country == "JP" for h in page.hits)) - Network accessline 166
self.assertTrue(with_pdf[0].pdf_url.startswith("https://patentimages.storage.googleapis.com/")) - Network accessline 240
with _PatchAttr(gp_client, "_urlopen", self._http_error(429)): with self.assertRaises(GooglePatentsBlocked): gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 242
gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 245
with _PatchAttr(gp_client, "_urlopen", self._http_error(404)): with self.assertRaises(GooglePatentsNotFound): gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 247
gp_client.fetch_text("https://patents.google.com/patent/US1/en") - Network accessline 259
with _PatchAttr(gp_client, "_urlopen", opener): with self.assertRaises(GooglePatentsUnavailable): gp_client.fetch_text("https://patents.google.com/") - Network accessline 261
gp_client.fetch_text("https://patents.google.com/") - Network accessline 271
with _PatchAttr(gp_api, "fetch_text", lambda *_a, **_k: body): d = gp_api.fetch_detail("US11450918B2") self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en") - Network accessline 272
d = gp_api.fetch_detail("US11450918B2") self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en") self.assertEqual(len(d.claims), 6) - Network accessline 273
self.assertEqual(d.url, "https://patents.google.com/patent/US11450918B2/en")
skills/patent-search/tests/test_gp_search.py
- Executable scriptline 1
Executable file - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Network accessline 85
hit = payload["hits"][0] self.assertEqual(hit["pub_number"], "US12394859B2") self.assertEqual(hit["link"], "https://patents.google.com/patent/US12394859B2/en") - Network accessline 86
self.assertEqual(hit["pub_number"], "US12394859B2") self.assertEqual(hit["link"], "https://patents.google.com/patent/US12394859B2/en") md_path = Path(out.split("GP_SEARCH_MD:", 1)[1].split("\n", 1)[0].strip()) - Network accessline 87
self.assertEqual(hit["link"], "https://patents.google.com/patent/US12394859B2/en")
skills/patent-search/tools/browser.py
skills/patent-search/tools/cnipa_crawler.py
- Executable scriptline 1
Executable file - Network accessline 82
EPUB_BASE = "http://epub.cnipa.gov.cn/" - Network accessline 229
const timer = setTimeout(() => controller.abort(), timeoutMs); try { const response = await fetch(form.action, { - Network accessline 230
try { const response = await fetch(form.action, { method: "POST", - Network accessline 231
const response = await fetch(form.action, { - Access to secretsline 385
[Credential-related source omitted] - Access to secretsline 389
[Credential-related source omitted]
skills/patent-search/tools/cnipa_parse.py
- Network accessline 1
# -*- coding: utf-8 -*- """ 解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Executable scriptline 1
Executable file - Network accessline 3
解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML,提取公布公告列表中的标题、公开号、详情链接、摘要(若有)。 - Network accessline 5
解析 http://epub.cnipa.gov.cn/ 检索结果页 HTML。patent-search 独立副本,不依赖交底 crawl。 - Network accessline 15
EPUB_BASE = "http://epub.cnipa.gov.cn/" - Network accessline 452
""" 新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; - Network accessline 453
新版「公布模式」结果页:无表格行,每条为 ``div.item``,题名在 ``h1.title``, 详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上; 摘要位于 ``dt`` 为「摘要」的 ``dd`` 内(含 ``span.alltxt`` 折叠段)。 - Network accessline 454
详情 URL 多在二维码 ``div.qrcode`` 的 ``title="http://epub.../patent/CN…"`` 上;
skills/patent-search/tools/cnipa_search.py
- Executable scriptline 1
Executable file - Network accessline 297
queried_at = datetime.now() payload = { "source": "http://epub.cnipa.gov.cn/Advanced", - Network accessline 298
payload = { "source": "http://epub.cnipa.gov.cn/Advanced", "scope": "published_records_only", - Network accessline 299
"source": "http://epub.cnipa.gov.cn/Advanced",
skills/patent-search/tools/derived_query.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/emit_covers_report.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/emit_search_report.py
- Executable scriptline 1
Executable file - Access to secretsline 101
[Credential-related source omitted] - Network accessline 177
"", f"- **查询时间**:{stamp}", f"- **数据源**:{_text(payload.get('source'), empty='http://epub.cnipa.gov.cn/Advanced')}", - Network accessline 178
f"- **查询时间**:{stamp}", f"- **数据源**:{_text(payload.get('source'), empty='http://epub.cnipa.gov.cn/Advanced')}", f"- **范围**:仅已公开/公告记录,不得写成实际提交总数", - Network accessline 179
f"- **数据源**:{_text(payload.get('source'), empty='http://epub.cnipa.gov.cn/Advanced')}", - Network accessline 329
"", f"- **查询时间**:{stamp}", f"- **数据源**:Google Patents({_text(payload.get('source'), empty='https://patents.google.com/')})", - Network accessline 330
f"- **查询时间**:{stamp}", f"- **数据源**:Google Patents({_text(payload.get('source'), empty='https://patents.google.com/')})", "- **范围**:仅已公开/公告文献;按同族去重;非英文文献按 Google 机器翻译检索", - Network accessline 331
f"- **数据源**:Google Patents({_text(payload.get('source'), empty='https://patents.google.com/')})",
skills/patent-search/tools/google_patents/__init__.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/api.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/client.py
- Executable scriptline 1
Executable file - Network accessline 23
BASE_URL = "https://patents.google.com" - Network accessline 31
_SSL_CTX = ssl.create_default_context() _urlopen = urllib.request.urlopen - Network accessline 32
_urlopen = urllib.request.urlopen - Network accessline 50
if accept: headers["Accept"] = accept req = urllib.request.Request(url, headers=headers) - Network accessline 51
headers["Accept"] = accept req = urllib.request.Request(url, headers=headers) try: - Network accessline 52
req = urllib.request.Request(url, headers=headers)
skills/patent-search/tools/google_patents/detail.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/errors.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/html_text.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/query.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/google_patents/results.py
skills/patent-search/tools/gp_search.py
- Executable scriptline 1
Executable file - Network accessline 184
payload = { "source_id": GOOGLE_SOURCE_ID, "source": "https://patents.google.com/", - Network accessline 185
"source_id": GOOGLE_SOURCE_ID, "source": "https://patents.google.com/", "scope": "published_records_only", - Network accessline 186
"source": "https://patents.google.com/",
skills/patent-search/tools/patent_type.py
- Executable scriptline 1
Executable file
skills/patent-search/tools/search_config.py
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 23 facts
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionscripts/generate-star-history.py:343High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-application/tools/compose_application_figure.py:76High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-application/tools/math_to_omml.py:20High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-application/tools/render_invention_figures.py:154High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-chart/tools/xlsx_minimal.py:280High confidence
- Contacts pypi.tuna.tsinghua.edu.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/bootstrap_cad_venv.py:43High confidence
- Contacts mirrors.aliyun.com, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/bootstrap_cad_venv.py:44High confidence
- Contacts pypi.mirrors.ustc.edu.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/bootstrap_cad_venv.py:45High confidence
- Contacts repo.huaweicloud.com, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/bootstrap_cad_venv.py:46High confidence
- Contacts pypi.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/bootstrap_cad_venv.py:47High confidence
- Contacts epub.cnipa.gov.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/crawl/cnipa_epub_nav.py:61High confidence
- Contacts epub.cnipa.gov.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/crawl/cnipa_epub_parse.py:15High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/math_to_omml.py:20High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/structure_callout_overlay.py:401High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/structure_lineart_compose.py:253High confidence
- Contacts www.inkscape.org, which SKILL.md, the README and the plugin manifest do not mentionpatent-disclosure/tools/structure_lineart_compose.py:455High confidence
- Contacts www.wipo.int, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/ipc_scheme/config.py:16High confidence
- Contacts ipcpub.wipo.int, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/ipc_scheme/config.py:21High confidence
- Contacts cdn.ipcpub.wipo.int, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/ipc_scheme/config.py:22High confidence
- Contacts www.cnipa.gov.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/ipc_scheme/config.py:25High confidence
- Contacts hf-mirror.com, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/model_store.py:19High confidence
- Contacts www.modelscope.cn, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/model_store.py:20High confidence
- Contacts huggingface.co, which SKILL.md, the README and the plugin manifest do not mentionpatent-map/tools/model_store.py:21High confidence
Signal confidence: 477 facts
- Network access in prose of documentationINSTALL.md:3Low confidence
- Network access in prose of documentationINSTALL.md:20Low confidence
- Network access in prose of documentationINSTALL.md:138Low confidence
- Access to secrets in code of documentationINSTALL.md:196Low confidence
- Network access in prose of documentationREADME.md:7Low confidence
- Network access in prose of documentationREADME.md:8Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Network access in prose of documentationREADME.md:10Low confidence
- Network access in prose of documentationREADME.md:36Low confidence
- Network access in prose of documentationREADME.md:204Low confidence
- Network access in prose of documentationREADME.md:205Low confidence
- Network access in prose of documentationREADME.md:206Low confidence
- Network access in prose of documentationREADME.md:223Low confidence
- Broad permissions in the frontmatter of the SKILL.mdSKILL.md:1High confidence
- Executable script in code of a file that runsscripts/generate-star-history.py:1High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:23High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/generate-star-history.py:30Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/generate-star-history.py:50Low confidence
- Access to secrets in code of a file that runsscripts/generate-star-history.py:51High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:121High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:122High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:123High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:124High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:125High confidence
- Network access in code of a file that runsscripts/generate-star-history.py:343High confidence
- Executable script in a comment of a testpatent-application/tests/test_audit_claims.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_design_view_sync.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_emit_application_docx.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_invention_figures.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_lexicon.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_material_gate.py:1Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:63Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:64Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:65Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:85Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:86Low confidence
- Network access in code of a testpatent-application/tests/test_material_gate.py:87Low confidence
- Executable script in a comment of a testpatent-application/tests/test_math_to_omml.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_numeral_register.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_plan_figures.py:1Low confidence
- Executable script in a comment of a testpatent-application/tests/test_support_and_antecedent.py:1Low confidence
- Executable script in a comment of a file that runspatent-application/tools/__init__.py:1Low confidence
- Executable script in code of a file that runspatent-application/tools/audit_claims.py:1High confidence
- Executable script in a comment of a file that runspatent-application/tools/check_design_views.py:1Low confidence
- Executable script in code of a file that runspatent-application/tools/check_numeral_register.py:1High confidence
- Executable script in code of a file that runspatent-application/tools/check_support.py:1High confidence
- Executable script in code of a file that runspatent-application/tools/compose_application_figure.py:1High confidence
- Network access in code of a file that runspatent-application/tools/compose_application_figure.py:74High confidence
- Network access in code of a file that runspatent-application/tools/compose_application_figure.py:75High confidence
- Network access in code of a file that runspatent-application/tools/compose_application_figure.py:76High confidence
and 427 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Frontmatter field user-invocable in SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/handsomestwei-patent-disclosure-skill/)