From 699861f55a8e134cb275067c2d5935305e362ba3 Mon Sep 17 00:00:00 2001
From: trsoliu <13311256+trsoliu@users.noreply.github.com>
Date: Mon, 17 Aug 2026 02:33:59 +0000
Subject: [PATCH] chore(skills): update patent-disclosure-skill
---
.../.github/workflows/update-star-history.yml | 80 +
.../skills/patent-disclosure-skill/.gitignore | 6 +-
.../skills/patent-disclosure-skill/INSTALL.md | 127 +-
.../skills/patent-disclosure-skill/README.md | 277 +-
.../skills/patent-disclosure-skill/SKILL.md | 238 +-
.../assets/obsidian/graph_color_groups.json | 2 +-
.../assets/obsidian/oa.base | 68 +
.../docs/evolution/EVOL-20260811-1051.md | 55 +
.../docs/evolution/README.md | 7 +
.../docs/oa/.gitignore | 4 +
.../patent-disclosure-skill/docs/oa/README.md | 26 +
.../docs/oa/embedding.config.yaml | 37 +
.../docs/obsidian-setup-guide.md | 6 +-
...3\346\212\225\345\275\261\345\233\276.png" | Bin 0 -> 72832 bytes
...3\345\210\251\347\272\277\347\250\277.png" | Bin 0 -> 1396297 bytes
...7\345\274\225\345\207\272\347\272\277.png" | Bin 0 -> 1181315 bytes
.../examples/README.md | 70 +-
.../knowledge/docs/README.md | 4 +-
.../example_design_desk_lamp/README.md | 50 +
.../knowledge/assets/mi_desk_lamp_pro.jpg | Bin 0 -> 172356 bytes
.../knowledge/assets/view_arm_detail.jpg | Bin 0 -> 106834 bytes
.../knowledge/assets/view_joint_detail.jpg | Bin 0 -> 102831 bytes
.../knowledge/assets/view_packaging.jpg | Bin 0 -> 971022 bytes
.../knowledge/assets/view_perspective.jpg | Bin 0 -> 200635 bytes
.../knowledge/assets/views_ortho.jpg | Bin 0 -> 165793 bytes
.../knowledge/docs/design_brief.md | 16 +
.../examples/example_oa_response/README.md | 41 +
.../cases/history/hist-clarity-connector.md | 47 +
.../cases/history/hist-inventiveness-clamp.md | 49 +
.../pending/oa_notice_pending.md | 50 +
.../examples/example_patent_reader/README.md | 33 +-
.../README.md | 80 +
.../knowledge/assets/US6301113B1_fig1.png | Bin 0 -> 82170 bytes
.../knowledge/assets/US6301113B1_fig2.png | Bin 0 -> 50621 bytes
.../knowledge/assets/fig1_assembly_side.png | Bin 0 -> 82170 bytes
.../knowledge/assets/fig2_snap_detail.png | Bin 0 -> 50621 bytes
.../knowledge/cad/demo_snap_plate.step | 901 +++++++
.../knowledge/docs/structure_brief.md | 21 +
.../{ => disclosure}/correction_handler.md | 15 +-
.../disclosure/design/disclosure_builder.md | 66 +
.../disclosure/design/patent_points.md | 47 +
.../disclosure/design/template_reference.md | 28 +
.../prompts/disclosure/disclosure_preview.md | 65 +
.../disclosure/disclosure_self_check.md | 93 +
.../prompts/disclosure/intake.md | 66 +
.../invention}/disclosure_builder.md | 58 +-
.../invention}/patent_points_analyzer.md | 4 +-
.../invention}/template_reference.md | 28 +-
.../{ => disclosure}/iteration_context.md | 18 +-
.../prompts/{ => disclosure}/merger.md | 18 +-
.../{ => disclosure}/prior_art_search.md | 56 +-
.../prompts/disclosure/project_scan.md | 148 ++
.../utility_model/disclosure_builder.md | 87 +
.../disclosure/utility_model/patent_points.md | 55 +
.../utility_model/template_reference.md | 59 +
.../prompts/disclosure_preview.md | 24 -
.../prompts/disclosure_self_check.md | 53 -
.../prompts/evolution/apply_after_confirm.md | 30 +
.../prompts/evolution/emit_backlog.md | 60 +
.../prompts/evolution/guardrails.md | 39 +
.../prompts/evolution/intake.md | 30 +
.../prompts/evolution/research.md | 53 +
.../prompts/evolution/soft_nudge.md | 24 +
.../patent-disclosure-skill/prompts/intake.md | 35 -
.../prompts/oa/case_note_template.md | 59 +
.../prompts/oa/configure_embedding.md | 65 +
.../prompts/oa/guardrails.md | 41 +
.../prompts/oa/ingest_case.md | 47 +
.../prompts/oa/intake.md | 26 +
.../prompts/oa/respond_office_action.md | 71 +
.../prompts/project_scan.md | 68 -
.../{ => reader}/obsidian_ofm_companion.md | 0
.../{ => reader}/obsidian_plugin_guide.md | 0
.../{ => reader}/patent_plain_reader.md | 57 +-
.../{ => reader}/patent_reader_self_check.md | 3 +-
.../prompts/reader/type_hooks.md | 32 +
.../prompts/shared/design_lineart_assist.md | 85 +
.../prompts/shared/fill_appearance_schema.md | 48 +
.../prompts/shared/fill_structure_schema.md | 50 +
.../shared/structure_lineart_assist.md | 92 +
.../references/formulas/README.md | 56 +
.../references/formulas/paradigms.yaml | 241 ++
.../references/patent_pdf_sources.yaml | 19 +-
.../references/patent_type_search.yaml | 63 +
.../references/schemas/README.md | 16 +
.../references/schemas/appearance.schema.yaml | 29 +
.../schemas/design_lineart_brief.schema.yaml | 55 +
.../schemas/evolution_backlog.schema.yaml | 39 +
.../schemas/figure_plan.schema.yaml | 111 +
.../schemas/formula_plan.schema.yaml | 54 +
.../references/schemas/oa_case.schema.yaml | 80 +
.../references/schemas/structure.schema.yaml | 32 +
.../structure_lineart_brief.schema.yaml | 72 +
.../patent-disclosure-skill/requirements.txt | 24 +-
.../scripts/generate-star-history.py | 450 ++++
.../patent-disclosure-skill/tests/README.md | 45 +
.../patent-disclosure-skill/tests/__init__.py | 1 +
.../tests/crawl/__init__.py | 1 +
.../{ => crawl}/test_cnipa_epub_chain.py | 17 +-
.../tests/crawl/test_cnipa_epub_crawler.py | 130 +
.../tests/oa/__init__.py | 1 +
.../tests/oa/test_oa_store.py | 421 +++
.../tests/patent_reader/__init__.py | 1 +
.../test_desc_paragraphs.py | 4 +-
.../test_extract_patent_text.py | 4 +-
.../test_fetch_patent_pdf.py | 10 +-
.../{ => patent_reader}/test_note_cites.py | 6 +-
.../test_patent_reader_debt_fixes.py | 42 +-
.../test_patent_reader_links.py | 4 +-
.../test_patent_reader_p0_p2.py | 6 +-
.../test_patent_reader_pipeline.py | 18 +-
.../tests/patent_reader/test_schema_vault.py | 82 +
.../tests/shared/__init__.py | 1 +
.../tests/shared/test_cad_step_scan.py | 118 +
.../tests/shared/test_design_lineart_gate.py | 99 +
.../tests/shared/test_formula_eval.py | 180 ++
.../tests/shared/test_formula_paradigms.py | 74 +
.../tests/shared/test_math_omml.py | 110 +
.../tests/shared/test_math_render.py | 90 +
.../tests/shared/test_md_to_docx_table.py | 42 +
.../tests/shared/test_mermaid_browser.py | 107 +
.../tests/shared/test_stdio_utf8.py | 53 +
.../shared/test_structure_lineart_gate.py | 130 +
.../tests/test_cnipa_epub_crawler.py | 58 -
.../tests/test_math_render.py | 66 -
.../tests/test_md_to_docx_table.py | 36 -
.../patent-disclosure-skill/tools/README.md | 231 +-
.../patent-disclosure-skill/tools/__init__.py | 0
.../tools/cnipa_epub_search.py | 170 --
.../tools/{ => crawl}/cnipa_epub_crawler.py | 128 +-
.../tools/{ => crawl}/cnipa_epub_parse.py | 0
.../tools/crawl/cnipa_epub_search.py | 185 ++
.../tools/crawl/requirements-cnipa.txt | 4 +
.../tools/mermaid_render.py | 474 ----
.../tools/oa/README.md | 47 +
.../tools/oa/__init__.py | 1 +
.../tools/oa/case_md.py | 81 +
.../tools/oa/config.py | 849 ++++++
.../patent-disclosure-skill/tools/oa/embed.py | 204 ++
.../tools/oa/ingest_case.py | 368 +++
.../tools/oa/pdf_text.py | 157 ++
.../tools/oa/rebuild_vectors.py | 167 ++
.../tools/oa/redact.py | 61 +
.../tools/oa/refresh_vault.py | 54 +
.../tools/oa/requirements-oa.txt | 13 +
.../tools/oa/search_cases.py | 203 ++
.../patent-disclosure-skill/tools/oa/store.py | 438 ++++
.../tools/oa/vault_layout.py | 758 ++++++
.../tools/package.json | 2 +-
.../tools/patent_reader/README.md | 82 +-
.../tools/patent_reader/__init__.py | 9 +-
.../tools/patent_reader/analyze/__init__.py | 2 +
.../{ => analyze}/build_claim_mermaid.py | 16 +-
.../{ => analyze}/build_context_anchor.py | 16 +-
.../{ => analyze}/lint_patent_note.py | 16 +-
.../{ => analyze}/validate_claim_tree.py | 20 +-
.../{ => analyze}/validate_public_clues.py | 20 +-
.../tools/patent_reader/extract/__init__.py | 2 +
.../{ => extract}/extract_patent_figures.py | 18 +-
.../{ => extract}/extract_patent_text.py | 24 +-
.../extract/fetch_design_views.py | 461 ++++
.../{ => extract}/fetch_patent_pdf.py | 39 +-
.../{ => extract}/figure_extract.py | 0
.../tools/patent_reader/shared/__init__.py | 2 +
.../patent_reader/{ => shared}/common.py | 6 +-
.../tools/patent_reader/vault/__init__.py | 2 +
.../{ => vault}/build_patent_canvas.py | 22 +-
.../{ => vault}/check_obsidian_env.py | 26 +-
.../patent_reader/{ => vault}/clue_vault.py | 0
.../{ => vault}/desc_paragraphs.py | 4 +-
.../{ => vault}/link_patent_notes.py | 26 +-
.../{ => vault}/materialize_public_clues.py | 28 +-
.../patent_reader/{ => vault}/note_cites.py | 4 +-
.../patent_reader/{ => vault}/obsidian.py | 55 +-
.../patent_reader/{ => vault}/patent_link.py | 24 +-
.../tools/patent_reader/vault/schema_vault.py | 287 ++
.../{ => vault}/setup_obsidian_vault.py | 26 +-
.../{ => vault}/write_patent_obsidian_note.py | 86 +-
.../tools/requirements-cnipa.txt | 2 -
.../tools/shared/browser.py | 179 ++
.../tools/shared/cad_formats.py | 154 ++
.../tools/shared/cad_scan.py | 91 +
.../tools/shared/check_formula_plan.py | 228 ++
.../tools/shared/design_lineart_gate.py | 258 ++
.../tools/{ => shared}/docx_to_md.py | 2 +-
.../tools/shared/formula_chem.py | 209 ++
.../tools/shared/formula_eval.py | 298 +++
.../tools/shared/formula_paradigms.py | 186 ++
.../tools/shared/formula_units.py | 109 +
.../tools/shared/gen_demo_snap_step.py | 144 +
.../{ => shared}/iteration_dialog_log.py | 2 +-
.../tools/{ => shared}/math_render.py | 74 +-
.../tools/shared/math_to_omml.py | 209 ++
.../tools/{ => shared}/md_to_docx.py | 431 ++-
.../tools/shared/mermaid_render.py | 498 ++++
.../tools/shared/patent_type.py | 273 ++
.../tools/{ => shared}/pptx_to_md.py | 2 +-
.../tools/shared/requirements-step.txt | 6 +
.../tools/shared/stdio_utf8.py | 39 +
.../tools/shared/step_to_views.py | 577 ++++
.../tools/shared/structure_lineart_gate.py | 359 +++
.../tools/shared/vendor/README.md | 9 +
.../tools/shared/vendor/mermaid.min.js | 2314 +++++++++++++++++
skills-lock.json | 2 +-
204 files changed, 18406 insertions(+), 1763 deletions(-)
create mode 100644 .agents/skills/patent-disclosure-skill/.github/workflows/update-star-history.yml
create mode 100644 .agents/skills/patent-disclosure-skill/assets/obsidian/oa.base
create mode 100644 .agents/skills/patent-disclosure-skill/docs/evolution/EVOL-20260811-1051.md
create mode 100644 .agents/skills/patent-disclosure-skill/docs/evolution/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/docs/oa/.gitignore
create mode 100644 .agents/skills/patent-disclosure-skill/docs/oa/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/docs/oa/embedding.config.yaml
create mode 100644 ".agents/skills/patent-disclosure-skill/docs/\346\225\210\346\236\234\344\276\213-cad\346\217\220\345\217\226\347\255\211\350\275\264\346\265\213\346\212\225\345\275\261\345\233\276.png"
create mode 100644 ".agents/skills/patent-disclosure-skill/docs/\346\225\210\346\236\234\344\276\213-\345\244\226\350\247\202\344\270\223\345\210\251\347\272\277\347\250\277.png"
create mode 100644 ".agents/skills/patent-disclosure-skill/docs/\346\225\210\346\236\234\344\276\213-\345\256\236\347\224\250\346\226\260\345\236\213\344\270\223\345\210\251\347\272\277\347\250\277\345\220\253\351\203\250\344\273\266\345\272\217\345\217\267\345\274\225\345\207\272\347\272\277.png"
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/mi_desk_lamp_pro.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/view_arm_detail.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/view_joint_detail.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/view_packaging.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/view_perspective.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/assets/views_ortho.jpg
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_design_desk_lamp/knowledge/docs/design_brief.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_oa_response/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_oa_response/cases/history/hist-clarity-connector.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_oa_response/cases/history/hist-inventiveness-clamp.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_oa_response/pending/oa_notice_pending.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/assets/US6301113B1_fig1.png
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/assets/US6301113B1_fig2.png
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/assets/fig1_assembly_side.png
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/assets/fig2_snap_detail.png
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/cad/demo_snap_plate.step
create mode 100644 .agents/skills/patent-disclosure-skill/examples/example_utility_model_snap_heatsink/knowledge/docs/structure_brief.md
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure}/correction_handler.md (57%)
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/design/disclosure_builder.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/design/patent_points.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/design/template_reference.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/disclosure_preview.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/disclosure_self_check.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/intake.md
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure/invention}/disclosure_builder.md (67%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure/invention}/patent_points_analyzer.md (81%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure/invention}/template_reference.md (79%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure}/iteration_context.md (71%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure}/merger.md (58%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => disclosure}/prior_art_search.md (62%)
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/project_scan.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/utility_model/disclosure_builder.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/utility_model/patent_points.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure/utility_model/template_reference.md
delete mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure_preview.md
delete mode 100644 .agents/skills/patent-disclosure-skill/prompts/disclosure_self_check.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/apply_after_confirm.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/emit_backlog.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/guardrails.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/intake.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/research.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/evolution/soft_nudge.md
delete mode 100644 .agents/skills/patent-disclosure-skill/prompts/intake.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/case_note_template.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/configure_embedding.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/guardrails.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/ingest_case.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/intake.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/oa/respond_office_action.md
delete mode 100644 .agents/skills/patent-disclosure-skill/prompts/project_scan.md
rename .agents/skills/patent-disclosure-skill/prompts/{ => reader}/obsidian_ofm_companion.md (100%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => reader}/obsidian_plugin_guide.md (100%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => reader}/patent_plain_reader.md (83%)
rename .agents/skills/patent-disclosure-skill/prompts/{ => reader}/patent_reader_self_check.md (85%)
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/reader/type_hooks.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/shared/design_lineart_assist.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/shared/fill_appearance_schema.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/shared/fill_structure_schema.md
create mode 100644 .agents/skills/patent-disclosure-skill/prompts/shared/structure_lineart_assist.md
create mode 100644 .agents/skills/patent-disclosure-skill/references/formulas/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/references/formulas/paradigms.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/patent_type_search.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/appearance.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/design_lineart_brief.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/evolution_backlog.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/figure_plan.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/formula_plan.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/oa_case.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/structure.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/references/schemas/structure_lineart_brief.schema.yaml
create mode 100644 .agents/skills/patent-disclosure-skill/scripts/generate-star-history.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/tests/__init__.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/crawl/__init__.py
rename .agents/skills/patent-disclosure-skill/tests/{ => crawl}/test_cnipa_epub_chain.py (54%)
create mode 100644 .agents/skills/patent-disclosure-skill/tests/crawl/test_cnipa_epub_crawler.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/oa/__init__.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/oa/test_oa_store.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/patent_reader/__init__.py
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_desc_paragraphs.py (97%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_extract_patent_text.py (89%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_fetch_patent_pdf.py (92%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_note_cites.py (96%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_patent_reader_debt_fixes.py (96%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_patent_reader_links.py (97%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_patent_reader_p0_p2.py (94%)
rename .agents/skills/patent-disclosure-skill/tests/{ => patent_reader}/test_patent_reader_pipeline.py (91%)
create mode 100644 .agents/skills/patent-disclosure-skill/tests/patent_reader/test_schema_vault.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/__init__.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_cad_step_scan.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_design_lineart_gate.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_formula_eval.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_formula_paradigms.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_math_omml.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_math_render.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_md_to_docx_table.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_mermaid_browser.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_stdio_utf8.py
create mode 100644 .agents/skills/patent-disclosure-skill/tests/shared/test_structure_lineart_gate.py
delete mode 100644 .agents/skills/patent-disclosure-skill/tests/test_cnipa_epub_crawler.py
delete mode 100644 .agents/skills/patent-disclosure-skill/tests/test_math_render.py
delete mode 100644 .agents/skills/patent-disclosure-skill/tests/test_md_to_docx_table.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/__init__.py
delete mode 100644 .agents/skills/patent-disclosure-skill/tools/cnipa_epub_search.py
rename .agents/skills/patent-disclosure-skill/tools/{ => crawl}/cnipa_epub_crawler.py (73%)
rename .agents/skills/patent-disclosure-skill/tools/{ => crawl}/cnipa_epub_parse.py (100%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/crawl/cnipa_epub_search.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/crawl/requirements-cnipa.txt
delete mode 100644 .agents/skills/patent-disclosure-skill/tools/mermaid_render.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/__init__.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/case_md.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/config.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/embed.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/ingest_case.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/pdf_text.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/rebuild_vectors.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/redact.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/refresh_vault.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/requirements-oa.txt
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/search_cases.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/store.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/oa/vault_layout.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/analyze/__init__.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => analyze}/build_claim_mermaid.py (66%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => analyze}/build_context_anchor.py (94%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => analyze}/lint_patent_note.py (94%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => analyze}/validate_claim_tree.py (82%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => analyze}/validate_public_clues.py (89%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/extract/__init__.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => extract}/extract_patent_figures.py (78%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => extract}/extract_patent_text.py (94%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/extract/fetch_design_views.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => extract}/fetch_patent_pdf.py (87%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => extract}/figure_extract.py (100%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/shared/__init__.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => shared}/common.py (99%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/vault/__init__.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/build_patent_canvas.py (88%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/check_obsidian_env.py (86%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/clue_vault.py (100%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/desc_paragraphs.py (99%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/link_patent_notes.py (81%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/materialize_public_clues.py (89%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/note_cites.py (99%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/obsidian.py (97%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/patent_link.py (97%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/patent_reader/vault/schema_vault.py
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/setup_obsidian_vault.py (68%)
rename .agents/skills/patent-disclosure-skill/tools/patent_reader/{ => vault}/write_patent_obsidian_note.py (93%)
delete mode 100644 .agents/skills/patent-disclosure-skill/tools/requirements-cnipa.txt
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/browser.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/cad_formats.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/cad_scan.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/check_formula_plan.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/design_lineart_gate.py
rename .agents/skills/patent-disclosure-skill/tools/{ => shared}/docx_to_md.py (99%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/formula_chem.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/formula_eval.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/formula_paradigms.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/formula_units.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/gen_demo_snap_step.py
rename .agents/skills/patent-disclosure-skill/tools/{ => shared}/iteration_dialog_log.py (99%)
rename .agents/skills/patent-disclosure-skill/tools/{ => shared}/math_render.py (83%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/math_to_omml.py
rename .agents/skills/patent-disclosure-skill/tools/{ => shared}/md_to_docx.py (70%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/mermaid_render.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/patent_type.py
rename .agents/skills/patent-disclosure-skill/tools/{ => shared}/pptx_to_md.py (99%)
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/requirements-step.txt
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/stdio_utf8.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/step_to_views.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/structure_lineart_gate.py
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/vendor/README.md
create mode 100644 .agents/skills/patent-disclosure-skill/tools/shared/vendor/mermaid.min.js
diff --git a/.agents/skills/patent-disclosure-skill/.github/workflows/update-star-history.yml b/.agents/skills/patent-disclosure-skill/.github/workflows/update-star-history.yml
new file mode 100644
index 0000000..1be6c54
--- /dev/null
+++ b/.agents/skills/patent-disclosure-skill/.github/workflows/update-star-history.yml
@@ -0,0 +1,80 @@
+# Update star history (orphan branch)
+#
+# 方案说明:
+# - 用本仓 GITHUB_TOKEN 拉取 stargazer 时间戳,生成本地静态 SVG(避免第三方
+# api.star-history.com 因 GitHub API 限制而空白)。
+# - 图表只 force-push 到 orphan 分支 `star-history`(分支上仅有 SVG,无项目源码),
+# 不往默认分支提交,避免 main 被每日 bot commit 刷屏。
+# - README 通过 raw.githubusercontent.com/.../star-history/star-history.svg 引用。
+# - 首次运行会自动创建该 orphan 分支;无需预先建分支,也无需额外 PAT。
+#
+name: Update star history
+
+on:
+ schedule:
+ # Daily 11:48 Beijing (UTC 03:48). Avoid :00 to reduce schedule drop under load.
+ - cron: "56 3 * * *"
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+concurrency:
+ group: update-star-history
+ cancel-in-progress: true
+
+jobs:
+ update-star-history:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Generate static star history
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ mkdir -p /tmp/star-history-out
+ python3 scripts/generate-star-history.py \
+ --repo "$GITHUB_REPOSITORY" \
+ --output /tmp/star-history-out/star-history.svg
+
+ - name: Publish SVG to orphan branch
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ BRANCH: star-history
+ SVG: /tmp/star-history-out/star-history.svg
+ run: |
+ set -euo pipefail
+ test -f "$SVG"
+
+ SHOULD_PUSH=1
+ if git fetch --depth=1 origin "$BRANCH"; then
+ if git show "origin/${BRANCH}:star-history.svg" > /tmp/star-history-old.svg 2>/dev/null; then
+ if python3 scripts/generate-star-history.py \
+ --same-chart "$SVG" /tmp/star-history-old.svg; then
+ echo "Star history chart unchanged; skip orphan-branch push."
+ SHOULD_PUSH=0
+ fi
+ fi
+ else
+ echo "Orphan branch '$BRANCH' not found yet; will create on first publish."
+ fi
+
+ if [ "$SHOULD_PUSH" -eq 0 ]; then
+ exit 0
+ fi
+
+ WORK="$(mktemp -d)"
+ cp "$SVG" "$WORK/star-history.svg"
+ cd "$WORK"
+ git init
+ git checkout --orphan "$BRANCH"
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git add star-history.svg
+ git commit -m "chore: update star history"
+ git remote add origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+ git push -f origin "HEAD:${BRANCH}"
+ echo "Published star-history.svg to orphan branch '$BRANCH'."
diff --git a/.agents/skills/patent-disclosure-skill/.gitignore b/.agents/skills/patent-disclosure-skill/.gitignore
index 80c514c..1582547 100644
--- a/.agents/skills/patent-disclosure-skill/.gitignore
+++ b/.agents/skills/patent-disclosure-skill/.gitignore
@@ -9,8 +9,10 @@ tmp/
examples/example_patent_reader/**
!examples/example_patent_reader/README.md
-# 国知局抓取结果缓存(tools/)
+# 国知局抓取结果缓存
tools/_last_result*.html
+tools/crawl/_last_result*.html
+tools/crawl/_last_home.html
# Python / tools
tools/node_modules/
@@ -19,6 +21,8 @@ __pycache__/
.pyo
.venv/
venv/
+.venv-step310/
+tools/shared/.venv-step310/
*.egg-info/
# math_render 联调产物(tests/test_math_render.py 运行时生成)
diff --git a/.agents/skills/patent-disclosure-skill/INSTALL.md b/.agents/skills/patent-disclosure-skill/INSTALL.md
index 4a45bd9..5873c43 100644
--- a/.agents/skills/patent-disclosure-skill/INSTALL.md
+++ b/.agents/skills/patent-disclosure-skill/INSTALL.md
@@ -50,34 +50,122 @@ git clone <本仓库 URL> "$env:USERPROFILE\.cursor\skills\patent-disclosure-ski
### 与「仅打开文件夹」等价关系
-若未使用上述 `skills/` 布局,也可**直接用 Cursor 打开本仓库根目录**作为工作区;此时将 **`CLAUDE_SKILL_DIR`** 理解为「包含 `SKILL.md` 的目录」,prompts 路径为 `./prompts/*.md`,与 `SKILL.md` 示例命令中的 **`${CLAUDE_SKILL_DIR}`** 同义。
+若未使用上述 `skills/` 布局,也可**直接用 Cursor 打开本仓库根目录**作为工作区;此时将 **`CLAUDE_SKILL_DIR`** 理解为「包含 `SKILL.md` 的目录」。分步指令在:
-为与 Claude Code 迁移一致,Cursor 也会扫描 **`~/.claude/skills/`**、项目内 **`.claude/skills/`** 等路径;详见 Cursor 官方文档与当前版本设置项。
+- `prompts/disclosure/`(交底;含 `invention/`、`utility_model/`、`design/`)
+- `prompts/reader/`(通俗解读)
+- `prompts/shared/`(Structure / Appearance 填表)
-## 可选依赖
+与 `SKILL.md` 中的 **`${CLAUDE_SKILL_DIR}/prompts/...`** 同义。
-若仅使用交底书 Markdown 流程,不必安装 Python。
+Cursor 也会扫描 **`~/.claude/skills/`**、项目内 **`.claude/skills/`** 等路径;详见 Cursor 官方文档与当前版本设置项。
-若需使用 **`tools/md_to_docx.py`**(Markdown → Word)、**`tools/docx_to_md.py`**(Word → Markdown + 图片)或 **`tools/pptx_to_md.py`**(PPT → Markdown + 图片,供扫描):
+## 默认交底需要什么(发明主路径)
+
+技能默认按**发明交底**走:定稿要 `.md` + `.docx`,3.2 / 3.4 框图要出 PNG,Step 5 优先国知局检索。这条路径**需要**:
+
+1. **Python 3.9+**(及 pip)
+2. 在技能根目录安装依赖(含 `python-docx`、`playwright` 等):
+
+ ```bash
+ pip install -r requirements.txt
+ ```
+
+3. **本机 Google Chrome 或 Microsoft Edge**(推荐,多数电脑已有)。出图与查新共用,**不必**再装 Node / npm / mmdc。
+
+探测是否已能启动浏览器:
+
+```bash
+python tools/shared/browser.py --probe
+```
+
+- `ok=true`:可直接定稿出图、跑国知局检索。
+- 没有 Playwright 包:再执行一次上面的 `pip install -r requirements.txt`。
+- 本机既无 Chrome 也无 Edge:才执行 `python -m playwright install chromium`(整机一次即可)。
+
+无可用浏览器时,发明仍可先交 **Markdown**(mermaid 围栏保留);Word 里框图可能先是代码块,补齐浏览器后重跑 `tools/shared/mermaid_render.py` 即可。
+
+公式进 Word 走 **OMML**(`latex2mathml`,已在 `requirements.txt`)。**不要**为默认交底安装 matplotlib。仅当定稿 stderr 出现 `omml_text_fallback`、且用户回复「是」之后,才:
+
+```bash
+pip install matplotlib
+python tools/shared/md_to_docx.py -i 定稿.md -o 定稿.docx --base-dir 定稿目录 --math-render
+```
+
+**实用新型 / 外观**定稿以各类型 `prompts/disclosure/utility_model|design/disclosure_builder.md` 为准:填表产出 `structure_schema`/`appearance_schema` + **`figure_plan.yaml`**,成文只嵌清单入文图(结构图或视图;docx 对实用建议、对外观可选)。不跑发明 mermaid 时,仍建议装 `requirements.txt`(扫 Word/PPT、出 docx)。
+
+仅在编辑器里**手写** Markdown、完全不跑仓库脚本时,才不必装 Python。
+
+细则见 **`tools/README.md`**。
+
+## 可选:STEP 多视角解析(默认关闭)
+
+扫描发现 **`.step` / `.stp`** 时,Agent 会**先反问**是否开启;确认前**不安装**下列依赖。仅有 SolidWorks 等原生 CAD、无 STEP 时,只会提示导出中性格式。
+
+```bash
+pip install -r tools/shared/requirements-step.txt
+python tools/shared/cad_scan.py -r knowledge --json
+python tools/shared/step_to_views.py --check-deps
+python tools/shared/step_to_views.py --enable-step-parse -i model.step -o outputs/{案件}/cad_views
+```
+
+与主 `requirements.txt` **独立**。细则见 `prompts/disclosure/project_scan.md`「CAD / STEP」、`tools/README.md`。
+
+## 可选:外观辅助线稿(默认关闭)
+
+有产品图的外观案件可反问是否开启;确认前不生成。流程见 `prompts/shared/design_lineart_assist.md`。
+
+```bash
+python tools/shared/design_lineart_gate.py --print-confirm
+python tools/shared/design_lineart_gate.py --enable-design-lineart --case-dir outputs/{案件} --prepare-jobs
+```
+
+**禁止**无参考图纯文生图;产出为交底辅助草稿,非申报终稿。
+
+## 可选:实用新型结构辅助线稿(默认关闭)
+
+有结构图的实用新型案件可反问是否开启;确认前不生成。流程见 `prompts/shared/structure_lineart_assist.md`(件号对齐 StructureSchema;推荐轮廓与序号分层)。
```bash
-pip install -r requirements.txt
+python tools/shared/structure_lineart_gate.py --print-confirm
+python tools/shared/structure_lineart_gate.py --enable-structure-lineart --case-dir outputs/{案件} --prepare-jobs
```
-交底书定稿须同时产出 **.md + .docx**,且将 **mermaid**(**3.2 系统框图**与 **3.4 流程图**)经 **`tools/mermaid_render.py`** 转为 PNG 嵌入。**mermaid** 须 **Node.js**:在 **`tools/`** 执行 **`npm install`**(含 **`puppeteer`**);若 **`mmdc`** 报找不到 Chrome,再执行 **`npx puppeteer browsers install chrome-headless-shell`**。详见 **`tools/README.md`**。
+**禁止**无参考图纯文生图与自创件号;产出为交底辅助草稿,非申报终稿。
## 可选:国知局公布公告站抓取(Step 5 查新优先路径)
-若需使用 **`tools/cnipa_epub_search.py`**(一步,推荐)或 **`tools/cnipa_epub_crawler.py`** / **`tools/cnipa_epub_parse.py`**([epub.cnipa.gov.cn](http://epub.cnipa.gov.cn/),见 `prompts/prior_art_search.md`):
+若需使用 **`tools/crawl/cnipa_epub_search.py`**(一步,推荐)或 **`tools/crawl/cnipa_epub_crawler.py`** / **`tools/crawl/cnipa_epub_parse.py`**([epub.cnipa.gov.cn](http://epub.cnipa.gov.cn/),见 `prompts/disclosure/prior_art_search.md`):
```bash
-pip install -r tools/requirements-cnipa.txt
-python -m playwright install chromium
+pip install -r tools/crawl/requirements-cnipa.txt
+python tools/shared/browser.py --probe
+# 仅当 probe 显示无 Chrome/Edge 且无自带 Chromium 时:
+# python -m playwright install chromium
+python tools/crawl/cnipa_epub_search.py --type utility_model 卡扣
```
-**Windows 终端中文**:`cnipa_epub_search.py` / `cnipa_epub_crawler.py` 已对 stdout/stderr 尝试 **UTF-8**(`reconfigure`)。若仍乱码,可在运行前执行 **`chcp 65001`**,或设置环境变量 **`PYTHONUTF8=1`**,以便复制 **`EPUB_HITS_JSON:`** 一行给 Agent 时不误判为失败。
+**Windows 终端**:定稿 / 查新脚本会把 stdout、stderr 设为 UTF-8,子进程带 `PYTHONUTF8=1`。Agent **以退出码和机读前缀为准**(`EPUB_HITS_JSON:`、`PROBE:`、`MERMAID:`、`DOCX:`、`MATH:`);stderr 有中文或 PowerShell `NativeCommandError` **不等于**失败。不必先 `chcp 65001`。若仍乱码,可设 **`PYTHONUTF8=1`**,且不要用 **`2>&1`** 把 JSON 混进错误流。
+
+`playwright` 已写入根目录 `requirements.txt`。若已按上文装过主依赖,**不必**再为查新单独 pip 一遍;`tools/crawl/requirements-cnipa.txt` 仅在只装爬虫、不装整份主依赖时使用。未装或探测失败时,Step 5 仍可按该 prompt 降级为 **WebSearch**(如 Google 学术)。
+
+## 可选:审查答复案例库(模式 D,默认关闭)
+
+显式触发「审查答复 / 案例入库 / `/oa`」后使用。配置与向量库默认在操作系统**文档**目录:`{Documents}/patent-disclosure-skill/oa/`(`PATENT_OA_HOME` 可覆盖)。**推荐**智谱 `embedding-3`;亦支持 DashScope / MiniMax / 本地 / OpenAI(`config.py set --preset …`)。
+
+```bash
+pip install -r tools/oa/requirements-oa.txt
+# 例:智谱
+# 环境变量 ZHIPUAI_API_KEY=…
+python tools/oa/config.py recommend
+python tools/oa/config.py set --preset zhipu
+# 其他:--preset dashscope|minimax|local|openai
+python tools/oa/ingest_case.py -i path/to/case.md
+python tools/oa/refresh_vault.py # 刷新 oa 索引 / Bases / 关联 Canvas
+python tools/oa/search_cases.py --query "创造性 区别特征" --defect inventiveness --top-k 5
+```
-与主流程 `requirements.txt` **独立**;未安装时 Step 5 仍可按该 prompt 降级为 **WebSearch**(如 Google 学术)。
+Obsidian 案例落在 `{vault}/oa/cases/history/`(另有 `pending/`、`drafts/`)。与主依赖**独立**。细则见 `prompts/oa/`、`tools/oa/README.md`、[SKILL.md](SKILL.md) 模式 D。
## 强烈建议:专利通俗解读 + Obsidian 库
@@ -86,11 +174,11 @@ python -m playwright install chromium
对话开始前由 Agent 运行探测(也可手动):
```bash
-python tools/patent_reader/check_obsidian_env.py
+python tools/patent_reader/vault/check_obsidian_env.py
# 自动接受唯一/当前打开的库:
-python tools/patent_reader/check_obsidian_env.py --auto-accept
+python tools/patent_reader/vault/check_obsidian_env.py --auto-accept
# 手动指定并持久化(+ Windows 用户环境变量):
-python tools/patent_reader/check_obsidian_env.py --set "C:\Users\你\Documents\Obsidian Vault" --setx
+python tools/patent_reader/vault/check_obsidian_env.py --set "C:\Users\你\Documents\Obsidian Vault" --setx
```
亦可仅设会话变量:
@@ -107,6 +195,11 @@ $env:PATENT_READER_GLOSSARY_DIR = "Research/术语"
pip install -r tools/patent_reader/requirements.txt # PDF:pymupdf
```
-**首次使用**:解读**入库时会自动**初始化库(CSS、Bases、索引、关系图配色)。用户只需安装 Obsidian、配置库路径,并(可选)在社区插件市场安装 Dataview 等——步骤与插件清单见 **`docs/obsidian-setup-guide.md`**。交付后 Agent 按 **`prompts/obsidian_plugin_guide.md`** 引导可选插件。
+**首次使用**:解读**入库时会自动**初始化库(CSS、Bases、索引、关系图配色)。用户只需安装 Obsidian、配置库路径,并(可选)在社区插件市场安装 Dataview 等——步骤与插件清单见 **`docs/obsidian-setup-guide.md`**。交付后 Agent 按 **`prompts/reader/obsidian_plugin_guide.md`** 引导可选插件。
+
+工具链分层见 **`tools/patent_reader/README.md`**(`shared/` · `extract/` · `analyze/` · `vault/`)。常用入口:
-工具链见 **`tools/patent_reader/README.md`**。
+```bash
+python tools/patent_reader/extract/fetch_patent_pdf.py --pub CN… -o tmp/patent_reader/RUN
+python tools/patent_reader/vault/write_patent_obsidian_note.py --help
+```
diff --git a/.agents/skills/patent-disclosure-skill/README.md b/.agents/skills/patent-disclosure-skill/README.md
index 459b781..4f4462a 100644
--- a/.agents/skills/patent-disclosure-skill/README.md
+++ b/.agents/skills/patent-disclosure-skill/README.md
@@ -2,11 +2,11 @@
# 中国专利.skill
-> 中国专利 Agent Skill:**挖掘并写成可交付交底书**,或把**已有专利读成通俗笔记**。
+> 专利点挖掘与交底书(发明/实用/外观)编写,通俗解读专利,嗅探政策动向,辅助审查答复。
[](LICENSE)
[](https://www.python.org/)
-[](https://nodejs.org/)
+[](https://playwright.dev/)
[](https://agentskills.io)
@@ -15,19 +15,19 @@
定稿后还要**多轮补材料、纠错**并留下修改追溯?
公开专利晦涩难懂,想**快速看懂权要与落地语境**?
-[愿景](#愿景) · [两种用法](#两种用法) · [功能特性](#功能特性) · [安装](#安装) · [使用](#使用) · [示例](#示例) · [运行效果](#运行效果) · [参考文档](#参考文档) · [详细安装说明](INSTALL.md) · [技能入口](SKILL.md)
+[初衷](#初衷) · [运行效果](#运行效果) · [功能特性](#功能特性) · [示例](#示例) · [支持作者](#支持作者) · [参考文档](#参考文档) · [安装说明](INSTALL.md) · [技能入口](SKILL.md)
---
-## 愿景
+## 初衷
### 专利交底书编写
> **做了多年核心研发,专利发明人那一栏从没写过我的名字。**
-代码是自己敲的,方案是自己扛的,轮到交底书却卡在「专利点怎么挖、查新怎么写、框图和 Word 怎么一次交得出去」。本技能把这一环打通:从项目材料梳出可申请的点,查新、脱敏、成文、迭代另存——让真正干活的人,也能把技术贡献写进可交付的交底书里。
+代码是自己敲的,方案是自己扛的,轮到交底书却卡在「专利点怎么挖、查新怎么写、框图和 Word 怎么一次交得出去」。本技能把这一环打通:覆盖发明 / 实用新型 / 外观设计,结构图与外观图都能读懂、写进交底;从项目材料梳出可申请的点,查新、脱敏、成文、迭代另存——让真正干活的人,也能把技术贡献写进可交付的交底书里。
### 专利通俗解读
@@ -37,16 +37,62 @@
---
-## 两种用法
+## 运行效果
+
+### 专利交底书编写
+
+
| 初版生成 首次落盘交付 |
+迭代更新 多版本并存 + 对话记录 |
+
|---|---|
+
+ |
+
+
+ |
+
| 外观线稿 从产品图自动提炼造型轮廓 |
+实用新型线稿 从结构图自动生成轮廓与部件序号引出 |
+CAD 三维模型投影 从工程模型自动提取等轴测等多视角 |
+
|---|---|---|
+
+ |
+
+
+ |
+
+
+ |
+
| Obsidian 关系图 知识图谱与多色节点 |
+解读 Canvas 叙事故事线 · 术语 · 公开线索 |
+
|---|---|
+
+ |
+
+
+ |
+
| 能力 | 说明 |
|---|---|
| 项目扫描 | 按优先级读文档 / 代码;.docx / .pptx 先转 Markdown 再扫(prompts/project_scan.md) |
| 专利点 | 候选点讨论与融合(patent_points_analyzer.md) |
| 查新 | 优先 国知局 · 中国专利公布公告(tools/cnipa_epub_search.py);异常或无果时降级 WebSearch。著录写入第一章(prior_art_search.md) |
| 交底书成稿 | 脱敏模版 + mermaid 框图与流程图;mermaid_render.py → PNG,默认再出 .docx |
| 专利类型 | 发明 / 实用新型 / 外观设计分模板成文;实用与外观先填 Schema,再写 figure_plan.yaml 排序入文图(成文不扫全 assets 临场挑图) |
| 项目扫描 | 按优先级读文档 / 代码;.docx / .pptx 先转 Markdown 再扫;可选扫描 .step/.stp 与原生 CAD(默认不解析,遇 STEP 先反问再装依赖出多视图)(project_scan.md) |
| 外观辅助线稿 | 可选、默认关;用户确认后基于已有参考图生成描述与线稿草稿(禁止无图纯文生);不画部件序号;默认不入正文(design_lineart_assist.md) |
| 实用结构辅助线稿 | 可选、默认关;用户确认后基于结构/参考图生成轮廓线稿,并按 structure_schema.parts 准备序号引出(推荐轮廓与序号分层 overlay,禁止自创件号);默认不入正文(structure_lineart_assist.md) |
| 专利点 | 候选点讨论与融合(按类型:invention|utility_model|design 挖点文件) |
| 查新 | 优先 国知局 · 中国专利公布公告(tools/crawl/cnipa_epub_search.py,--type 对齐类型);异常或无果时降级 WebSearch。著录写入第一章(prior_art_search.md) |
| 交底书成稿 | 脱敏模版;发明用 mermaid 框图;实用/外观按 figure_plan 嵌结构图或视图;定稿可出 .docx |
| 交付命名 | {案件名}_{YYYYMMDDHHmmss}.md 与同名 .docx(disclosure_builder.md §7.3) |
| 自检 / 迭代 | 逻辑与公式自检(不写入正文);合并 / 纠正另存新文件 + 交底书修订对话记录.md |