@wentorai/research-plugins 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -22
- package/curated/analysis/README.md +82 -56
- package/curated/domains/README.md +225 -69
- package/curated/literature/README.md +115 -46
- package/curated/research/README.md +106 -58
- package/curated/tools/README.md +107 -87
- package/curated/writing/README.md +92 -45
- package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
- package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
- package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
- package/mcp-configs/academic-db/gibs-mcp.json +20 -0
- package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
- package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
- package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
- package/mcp-configs/academic-db/medical-mcp.json +21 -0
- package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
- package/mcp-configs/academic-db/omop-mcp.json +20 -0
- package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
- package/mcp-configs/academic-db/openedu-mcp.json +20 -0
- package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
- package/mcp-configs/academic-db/openstax-mcp.json +21 -0
- package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
- package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
- package/mcp-configs/academic-db/pdb-mcp.json +21 -0
- package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
- package/mcp-configs/ai-platform/magi-researchers.json +21 -0
- package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
- package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
- package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
- package/mcp-configs/ai-platform/paper-reader.json +21 -0
- package/mcp-configs/ai-platform/paperdebugger.json +21 -0
- package/mcp-configs/browser/exa-mcp.json +20 -0
- package/mcp-configs/browser/mcp-searxng.json +21 -0
- package/mcp-configs/browser/mcp-webresearch.json +20 -0
- package/mcp-configs/cloud-docs/confluence-mcp.json +37 -0
- package/mcp-configs/cloud-docs/google-drive-mcp.json +35 -0
- package/mcp-configs/cloud-docs/notion-mcp.json +29 -0
- package/mcp-configs/communication/discord-mcp.json +29 -0
- package/mcp-configs/communication/discourse-mcp.json +21 -0
- package/mcp-configs/communication/slack-mcp.json +29 -0
- package/mcp-configs/communication/telegram-mcp.json +28 -0
- package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
- package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
- package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
- package/mcp-configs/data-platform/mcp-stata.json +21 -0
- package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
- package/mcp-configs/data-platform/ml-mcp.json +21 -0
- package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
- package/mcp-configs/data-platform/numpy-mcp.json +21 -0
- package/mcp-configs/database/neo4j-mcp.json +37 -0
- package/mcp-configs/database/postgres-mcp.json +28 -0
- package/mcp-configs/database/sqlite-mcp.json +29 -0
- package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
- package/mcp-configs/dev-platform/github-mcp.json +31 -0
- package/mcp-configs/dev-platform/gitlab-mcp.json +34 -0
- package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
- package/mcp-configs/dev-platform/manim-mcp.json +20 -0
- package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
- package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
- package/mcp-configs/dev-platform/paperbanana.json +20 -0
- package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
- package/mcp-configs/dev-platform/texmcp.json +20 -0
- package/mcp-configs/dev-platform/typst-mcp.json +21 -0
- package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
- package/mcp-configs/email/email-mcp.json +40 -0
- package/mcp-configs/email/gmail-mcp.json +37 -0
- package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
- package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
- package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
- package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
- package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
- package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
- package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
- package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
- package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
- package/mcp-configs/reference-mgr/academix.json +20 -0
- package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
- package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
- package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
- package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
- package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
- package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
- package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
- package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
- package/mcp-configs/reference-mgr/onecite.json +21 -0
- package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
- package/mcp-configs/reference-mgr/seerai.json +21 -0
- package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
- package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
- package/mcp-configs/registry.json +178 -149
- package/mcp-configs/repository/dataverse-mcp.json +33 -0
- package/mcp-configs/repository/huggingface-mcp.json +29 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
- package/skills/analysis/dataviz/algorithm-visualizer-guide/SKILL.md +259 -0
- package/skills/analysis/dataviz/bokeh-visualization-guide/SKILL.md +270 -0
- package/skills/analysis/dataviz/chart-image-generator/SKILL.md +229 -0
- package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
- package/skills/analysis/dataviz/d3-visualization-guide/SKILL.md +281 -0
- package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
- package/skills/analysis/dataviz/echarts-visualization-guide/SKILL.md +250 -0
- package/skills/analysis/dataviz/metabase-analytics-guide/SKILL.md +242 -0
- package/skills/analysis/dataviz/plotly-interactive-guide/SKILL.md +266 -0
- package/skills/analysis/dataviz/redash-analytics-guide/SKILL.md +284 -0
- package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +163 -0
- package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
- package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +139 -0
- package/skills/analysis/econometrics/panel-data-analyst/SKILL.md +259 -0
- package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
- package/skills/analysis/econometrics/python-causality-guide/SKILL.md +134 -0
- package/skills/analysis/econometrics/stata-accounting-guide/SKILL.md +269 -0
- package/skills/analysis/econometrics/stata-analyst-guide/SKILL.md +245 -0
- package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
- package/skills/analysis/statistics/data-anomaly-detection/SKILL.md +157 -0
- package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
- package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
- package/skills/analysis/statistics/ml-experiment-tracker/SKILL.md +212 -0
- package/skills/analysis/statistics/pywayne-statistics-guide/SKILL.md +192 -0
- package/skills/analysis/statistics/quantitative-methods-guide/SKILL.md +193 -0
- package/skills/analysis/statistics/senior-data-scientist-guide/SKILL.md +223 -0
- package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
- package/skills/analysis/wrangling/csv-data-analyzer/SKILL.md +170 -0
- package/skills/analysis/wrangling/data-cleaning-pipeline/SKILL.md +266 -0
- package/skills/analysis/wrangling/data-cog-guide/SKILL.md +178 -0
- package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
- package/skills/analysis/wrangling/stata-data-cleaning/SKILL.md +276 -0
- package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
- package/skills/analysis/wrangling/survey-data-processing/SKILL.md +298 -0
- package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/ai-model-benchmarking/SKILL.md +209 -0
- package/skills/domains/ai-ml/annotated-dl-papers-guide/SKILL.md +159 -0
- package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
- package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
- package/skills/domains/ai-ml/dl-transformer-finetune/SKILL.md +239 -0
- package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
- package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
- package/skills/domains/ai-ml/huggingface-inference-guide/SKILL.md +196 -0
- package/skills/domains/ai-ml/keras-deep-learning/SKILL.md +210 -0
- package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
- package/skills/domains/ai-ml/llm-from-scratch-guide/SKILL.md +124 -0
- package/skills/domains/ai-ml/ml-pipeline-guide/SKILL.md +295 -0
- package/skills/domains/ai-ml/nlp-toolkit-guide/SKILL.md +247 -0
- package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
- package/skills/domains/ai-ml/pytorch-guide/SKILL.md +281 -0
- package/skills/domains/ai-ml/pytorch-lightning-guide/SKILL.md +244 -0
- package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
- package/skills/domains/ai-ml/tensorflow-guide/SKILL.md +241 -0
- package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
- package/skills/domains/biomedical/bioagents-guide/SKILL.md +308 -0
- package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
- package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
- package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
- package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
- package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
- package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
- package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
- package/skills/domains/biomedical/medgeclaw-guide/SKILL.md +345 -0
- package/skills/domains/biomedical/medical-imaging-guide/SKILL.md +305 -0
- package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
- package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
- package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
- package/skills/domains/business/architecture-design-guide/SKILL.md +279 -0
- package/skills/domains/business/innovation-management-guide/SKILL.md +257 -0
- package/skills/domains/business/operations-research-guide/SKILL.md +258 -0
- package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
- package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
- package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
- package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
- package/skills/domains/chemistry/molecular-dynamics-guide/SKILL.md +237 -0
- package/skills/domains/chemistry/pubchem-api-guide/SKILL.md +180 -0
- package/skills/domains/chemistry/spectroscopy-analysis-guide/SKILL.md +290 -0
- package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
- package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
- package/skills/domains/cs/distributed-systems-guide/SKILL.md +268 -0
- package/skills/domains/cs/formal-verification-guide/SKILL.md +298 -0
- package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
- package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
- package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
- package/skills/domains/ecology/species-distribution-guide/SKILL.md +343 -0
- package/skills/domains/economics/imf-data-api-guide/SKILL.md +174 -0
- package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
- package/skills/domains/economics/post-labor-economics/SKILL.md +254 -0
- package/skills/domains/economics/pricing-psychology-guide/SKILL.md +273 -0
- package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
- package/skills/domains/economics/world-bank-data-guide/SKILL.md +179 -0
- package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
- package/skills/domains/education/assessment-design-guide/SKILL.md +213 -0
- package/skills/domains/education/educational-research-methods/SKILL.md +179 -0
- package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
- package/skills/domains/education/mooc-analytics-guide/SKILL.md +206 -0
- package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
- package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
- package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
- package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
- package/skills/domains/finance/portfolio-optimization-guide/SKILL.md +279 -0
- package/skills/domains/finance/risk-modeling-guide/SKILL.md +260 -0
- package/skills/domains/finance/stata-accounting-research/SKILL.md +372 -0
- package/skills/domains/geoscience/climate-modeling-guide/SKILL.md +215 -0
- package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
- package/skills/domains/geoscience/satellite-remote-sensing/SKILL.md +193 -0
- package/skills/domains/geoscience/seismology-data-guide/SKILL.md +208 -0
- package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
- package/skills/domains/humanities/ethical-philosophy-guide/SKILL.md +244 -0
- package/skills/domains/humanities/history-research-guide/SKILL.md +260 -0
- package/skills/domains/humanities/political-history-guide/SKILL.md +241 -0
- package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
- package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
- package/skills/domains/law/legal-nlp-guide/SKILL.md +236 -0
- package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
- package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
- package/skills/domains/law/patent-analysis-guide/SKILL.md +257 -0
- package/skills/domains/law/regulatory-compliance-guide/SKILL.md +267 -0
- package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
- package/skills/domains/math/symbolic-computation-guide/SKILL.md +263 -0
- package/skills/domains/math/topology-data-analysis/SKILL.md +305 -0
- package/skills/domains/pharma/clinical-trial-design-guide/SKILL.md +271 -0
- package/skills/domains/pharma/drug-target-interaction/SKILL.md +242 -0
- package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
- package/skills/domains/pharma/pharmacovigilance-guide/SKILL.md +216 -0
- package/skills/domains/physics/astrophysics-data-guide/SKILL.md +305 -0
- package/skills/domains/physics/particle-physics-guide/SKILL.md +287 -0
- package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
- package/skills/domains/social-science/network-analysis-guide/SKILL.md +310 -0
- package/skills/domains/social-science/psychology-research-guide/SKILL.md +270 -0
- package/skills/domains/social-science/sociology-research-guide/SKILL.md +238 -0
- package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
- package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
- package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +120 -0
- package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
- package/skills/literature/discovery/semantic-paper-radar/SKILL.md +144 -0
- package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +94 -0
- package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
- package/skills/literature/fulltext/core-api-guide/SKILL.md +144 -0
- package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
- package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
- package/skills/literature/fulltext/institutional-repository-guide/SKILL.md +212 -0
- package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +341 -0
- package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
- package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
- package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
- package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
- package/skills/literature/metadata/academic-paper-summarizer/SKILL.md +101 -0
- package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
- package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
- package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
- package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
- package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
- package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
- package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
- package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
- package/skills/literature/metadata/wikidata-api-guide/SKILL.md +156 -0
- package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
- package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
- package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
- package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
- package/skills/literature/search/arxiv-batch-reporting/SKILL.md +133 -0
- package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
- package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
- package/skills/literature/search/arxiv-paper-processor/SKILL.md +141 -0
- package/skills/literature/search/baidu-scholar-guide/SKILL.md +110 -0
- package/skills/literature/search/base-academic-search/SKILL.md +196 -0
- package/skills/literature/search/chatpaper-guide/SKILL.md +122 -0
- package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
- package/skills/literature/search/deep-literature-search/SKILL.md +149 -0
- package/skills/literature/search/deepgit-search-guide/SKILL.md +147 -0
- package/skills/literature/search/eric-education-api/SKILL.md +199 -0
- package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
- package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
- package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
- package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
- package/skills/literature/search/open-library-api/SKILL.md +196 -0
- package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
- package/skills/literature/search/openaire-api/SKILL.md +141 -0
- package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
- package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
- package/skills/literature/search/pasa-paper-search-guide/SKILL.md +138 -0
- package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
- package/skills/literature/search/scielo-api/SKILL.md +182 -0
- package/skills/literature/search/share-research-api/SKILL.md +129 -0
- package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
- package/skills/research/automation/ai-scientist-v2-guide/SKILL.md +284 -0
- package/skills/research/automation/aim-experiment-guide/SKILL.md +234 -0
- package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
- package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
- package/skills/research/automation/datagen-research-guide/SKILL.md +131 -0
- package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
- package/skills/research/automation/kedro-pipeline-guide/SKILL.md +216 -0
- package/skills/research/automation/mle-agent-guide/SKILL.md +139 -0
- package/skills/research/automation/paper-to-agent-guide/SKILL.md +116 -0
- package/skills/research/automation/rd-agent-guide/SKILL.md +246 -0
- package/skills/research/automation/research-paper-orchestrator/SKILL.md +254 -0
- package/skills/research/deep-research/academic-deep-research/SKILL.md +190 -0
- package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +141 -0
- package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
- package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
- package/skills/research/deep-research/deep-research-pro/SKILL.md +213 -0
- package/skills/research/deep-research/deep-research-work/SKILL.md +204 -0
- package/skills/research/deep-research/deep-searcher-guide/SKILL.md +253 -0
- package/skills/research/deep-research/gpt-researcher-guide/SKILL.md +191 -0
- package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
- package/skills/research/deep-research/khoj-research-guide/SKILL.md +200 -0
- package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
- package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
- package/skills/research/deep-research/local-deep-research-guide/SKILL.md +253 -0
- package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
- package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +217 -0
- package/skills/research/funding/eu-horizon-guide/SKILL.md +244 -0
- package/skills/research/funding/grant-budget-guide/SKILL.md +284 -0
- package/skills/research/funding/nih-reporter-api-guide/SKILL.md +166 -0
- package/skills/research/funding/nsf-award-api-guide/SKILL.md +133 -0
- package/skills/research/methodology/academic-mentor-guide/SKILL.md +169 -0
- package/skills/research/methodology/claude-scientific-guide/SKILL.md +122 -0
- package/skills/research/methodology/deep-innovator-guide/SKILL.md +242 -0
- package/skills/research/methodology/osf-api-guide/SKILL.md +165 -0
- package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
- package/skills/research/methodology/research-paper-kb/SKILL.md +263 -0
- package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
- package/skills/research/methodology/research-town-guide/SKILL.md +263 -0
- package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
- package/skills/research/paper-review/automated-review-guide/SKILL.md +281 -0
- package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
- package/skills/research/paper-review/paper-compare-guide/SKILL.md +238 -0
- package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
- package/skills/research/paper-review/paper-digest-guide/SKILL.md +240 -0
- package/skills/research/paper-review/paper-research-assistant/SKILL.md +231 -0
- package/skills/research/paper-review/research-quality-filter/SKILL.md +261 -0
- package/skills/research/paper-review/review-response-guide/SKILL.md +275 -0
- package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
- package/skills/tools/code-exec/google-colab-guide/SKILL.md +276 -0
- package/skills/tools/code-exec/kaggle-api-guide/SKILL.md +216 -0
- package/skills/tools/code-exec/overleaf-cli-guide/SKILL.md +279 -0
- package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
- package/skills/tools/diagram/code-flow-visualizer/SKILL.md +197 -0
- package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +170 -0
- package/skills/tools/diagram/json-data-visualizer/SKILL.md +270 -0
- package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
- package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +219 -0
- package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
- package/skills/tools/diagram/tldraw-whiteboard-guide/SKILL.md +397 -0
- package/skills/tools/document/docsgpt-guide/SKILL.md +130 -0
- package/skills/tools/document/large-document-reader/SKILL.md +202 -0
- package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
- package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
- package/skills/tools/document/paper-parse-guide/SKILL.md +243 -0
- package/skills/tools/document/weknora-guide/SKILL.md +216 -0
- package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
- package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
- package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
- package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +244 -0
- package/skills/tools/knowledge-graph/concept-map-generator/SKILL.md +284 -0
- package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +219 -0
- package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
- package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
- package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
- package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
- package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
- package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
- package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
- package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
- package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +141 -0
- package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +95 -0
- package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +143 -0
- package/skills/tools/scraping/dataset-finder-guide/SKILL.md +253 -0
- package/skills/tools/scraping/easy-spider-guide/SKILL.md +250 -0
- package/skills/tools/scraping/google-scholar-scraper/SKILL.md +255 -0
- package/skills/tools/scraping/repository-harvesting-guide/SKILL.md +310 -0
- package/skills/writing/citation/academic-citation-manager/SKILL.md +314 -0
- package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
- package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
- package/skills/writing/citation/jabref-reference-guide/SKILL.md +127 -0
- package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +103 -0
- package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
- package/skills/writing/citation/obsidian-citation-guide/SKILL.md +164 -0
- package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +137 -0
- package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
- package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +132 -0
- package/skills/writing/citation/papis-cli-guide/SKILL.md +213 -0
- package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +107 -0
- package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +121 -0
- package/skills/writing/citation/zotero-gpt-guide/SKILL.md +111 -0
- package/skills/writing/citation/zotero-mcp-guide/SKILL.md +164 -0
- package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +162 -0
- package/skills/writing/citation/zotero-reference-guide/SKILL.md +139 -0
- package/skills/writing/citation/zotero-scholar-guide/SKILL.md +294 -0
- package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +140 -0
- package/skills/writing/composition/ml-paper-writing/SKILL.md +163 -0
- package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
- package/skills/writing/composition/paper-debugger-guide/SKILL.md +143 -0
- package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
- package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
- package/skills/writing/composition/scientific-writing-resources/SKILL.md +151 -0
- package/skills/writing/composition/scientific-writing-wrapper/SKILL.md +153 -0
- package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
- package/skills/writing/latex/latex-drawing-collection/SKILL.md +154 -0
- package/skills/writing/latex/latex-templates-collection/SKILL.md +159 -0
- package/skills/writing/latex/md-to-pdf-academic/SKILL.md +230 -0
- package/skills/writing/latex/tex-render-guide/SKILL.md +243 -0
- package/skills/writing/polish/academic-tone-guide/SKILL.md +209 -0
- package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
- package/skills/writing/polish/conciseness-editing-guide/SKILL.md +225 -0
- package/skills/writing/polish/paper-polish-guide/SKILL.md +160 -0
- package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
- package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
- package/skills/writing/templates/graphical-abstract-guide/SKILL.md +183 -0
- package/skills/writing/templates/novathesis-guide/SKILL.md +152 -0
- package/skills/writing/templates/scientific-article-pdf/SKILL.md +261 -0
- package/skills/writing/templates/sjtuthesis-guide/SKILL.md +197 -0
- package/skills/writing/templates/thuthesis-guide/SKILL.md +181 -0
- package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +0 -207
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opencontracts-guide
|
|
3
|
+
description: "Legal document annotation, versioning, and analysis platform"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📋"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "law"
|
|
9
|
+
keywords: ["legal documents", "contract annotation", "document versioning", "legal AI", "NLP legal", "MCP"]
|
|
10
|
+
source: "https://github.com/Open-Source-Legal/OpenContracts"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# OpenContracts Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
OpenContracts is an open-source platform for legal document annotation, versioning, and analysis. It provides collaborative annotation tools for legal text, version tracking across document drafts, NLP-powered clause extraction, and integration with AI agents via MCP. Designed for legal researchers, law firms, and teams managing large document collections that need structured annotation and analysis.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Docker deployment
|
|
23
|
+
git clone https://github.com/Open-Source-Legal/OpenContracts.git
|
|
24
|
+
cd OpenContracts
|
|
25
|
+
docker-compose up -d
|
|
26
|
+
|
|
27
|
+
# Access at http://localhost:3000
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Core Features
|
|
31
|
+
|
|
32
|
+
### Document Management
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from opencontracts import Client
|
|
36
|
+
|
|
37
|
+
client = Client("http://localhost:3000")
|
|
38
|
+
|
|
39
|
+
# Upload documents
|
|
40
|
+
doc = client.upload(
|
|
41
|
+
file="contract.pdf",
|
|
42
|
+
metadata={
|
|
43
|
+
"type": "NDA",
|
|
44
|
+
"parties": ["Company A", "Company B"],
|
|
45
|
+
"date": "2025-01-15",
|
|
46
|
+
"jurisdiction": "Delaware",
|
|
47
|
+
},
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# Version tracking
|
|
51
|
+
versions = client.get_versions(doc.id)
|
|
52
|
+
for v in versions:
|
|
53
|
+
print(f"v{v.number}: {v.date} — {v.changes_summary}")
|
|
54
|
+
|
|
55
|
+
# Compare versions
|
|
56
|
+
diff = client.compare_versions(doc.id, v1=1, v2=3)
|
|
57
|
+
for change in diff.changes:
|
|
58
|
+
print(f"[{change.type}] Section {change.section}: "
|
|
59
|
+
f"{change.description}")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Annotation
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
# Create annotation project
|
|
66
|
+
project = client.create_project(
|
|
67
|
+
name="NDA Clause Analysis",
|
|
68
|
+
documents=[doc.id],
|
|
69
|
+
label_set=[
|
|
70
|
+
"confidentiality_scope",
|
|
71
|
+
"term_duration",
|
|
72
|
+
"exclusions",
|
|
73
|
+
"remedies",
|
|
74
|
+
"governing_law",
|
|
75
|
+
"dispute_resolution",
|
|
76
|
+
],
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# Add annotations
|
|
80
|
+
client.annotate(
|
|
81
|
+
document_id=doc.id,
|
|
82
|
+
annotations=[
|
|
83
|
+
{
|
|
84
|
+
"start": 1250, "end": 1480,
|
|
85
|
+
"label": "confidentiality_scope",
|
|
86
|
+
"note": "Broad definition including derivatives",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"start": 2100, "end": 2250,
|
|
90
|
+
"label": "term_duration",
|
|
91
|
+
"note": "5-year term with auto-renewal",
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### NLP Analysis
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
# Automated clause extraction
|
|
101
|
+
clauses = client.extract_clauses(
|
|
102
|
+
doc.id,
|
|
103
|
+
clause_types=[
|
|
104
|
+
"indemnification",
|
|
105
|
+
"limitation_of_liability",
|
|
106
|
+
"termination",
|
|
107
|
+
"force_majeure",
|
|
108
|
+
"assignment",
|
|
109
|
+
],
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
for clause in clauses:
|
|
113
|
+
print(f"\n[{clause.type}] (confidence: {clause.confidence:.2f})")
|
|
114
|
+
print(f" Location: p.{clause.page}, para {clause.paragraph}")
|
|
115
|
+
print(f" Text: {clause.text[:100]}...")
|
|
116
|
+
|
|
117
|
+
# Risk assessment
|
|
118
|
+
risks = client.assess_risks(doc.id)
|
|
119
|
+
for risk in risks:
|
|
120
|
+
print(f"[{risk.severity}] {risk.clause}: {risk.description}")
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### MCP Integration
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"mcpServers": {
|
|
128
|
+
"opencontracts": {
|
|
129
|
+
"command": "npx",
|
|
130
|
+
"args": ["@opencontracts/mcp-server"],
|
|
131
|
+
"env": {
|
|
132
|
+
"OPENCONTRACTS_URL": "http://localhost:3000"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Search and Analytics
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
# Full-text search across documents
|
|
143
|
+
results = client.search(
|
|
144
|
+
query="indemnification unlimited liability",
|
|
145
|
+
document_types=["NDA", "MSA"],
|
|
146
|
+
date_range=("2024-01-01", "2025-12-31"),
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# Analytics
|
|
150
|
+
stats = client.analytics(project_id=project.id)
|
|
151
|
+
print(f"Documents annotated: {stats.docs_complete}")
|
|
152
|
+
print(f"Total annotations: {stats.total_annotations}")
|
|
153
|
+
print(f"Inter-annotator agreement: {stats.agreement:.2f}")
|
|
154
|
+
print(f"Most common clause: {stats.top_clauses[0]}")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Use Cases
|
|
158
|
+
|
|
159
|
+
1. **Contract review**: Systematic clause analysis and risk assessment
|
|
160
|
+
2. **Legal research**: Annotate case law and legislation
|
|
161
|
+
3. **Compliance**: Track regulatory document requirements
|
|
162
|
+
4. **Training data**: Build labeled datasets for legal NLP
|
|
163
|
+
5. **Due diligence**: Structured review of deal documents
|
|
164
|
+
|
|
165
|
+
## References
|
|
166
|
+
|
|
167
|
+
- [OpenContracts GitHub](https://github.com/Open-Source-Legal/OpenContracts)
|
|
168
|
+
- [Legal NLP Resources](https://github.com/thunlp/LegalPapers)
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: patent-analysis-guide
|
|
3
|
+
description: "Patent search, classification, landscape analysis, and prior art mining"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "page-with-curl"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "law"
|
|
9
|
+
keywords: ["patent", "intellectual-property", "prior-art", "cpc", "patent-landscape", "citation-analysis"]
|
|
10
|
+
source: "wentor"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Patent Analysis Guide
|
|
14
|
+
|
|
15
|
+
A skill for conducting patent research, landscape analysis, and prior art searches. Covers patent database APIs, classification systems, citation network analysis, claim parsing, and technology trend mapping for intellectual property research.
|
|
16
|
+
|
|
17
|
+
## Patent Data Sources
|
|
18
|
+
|
|
19
|
+
### Major Patent Databases
|
|
20
|
+
|
|
21
|
+
| Database | Coverage | API | Cost |
|
|
22
|
+
|----------|----------|-----|------|
|
|
23
|
+
| USPTO PatentsView | US patents and applications | REST API, bulk download | Free |
|
|
24
|
+
| EPO Open Patent Services | EP, WO, and 100+ offices | REST API (OPS) | Free (throttled) |
|
|
25
|
+
| Google Patents | 120M+ documents worldwide | BigQuery (Google Patents Public) | Free (BigQuery costs) |
|
|
26
|
+
| Lens.org | 130M+ patent records | REST API | Free for researchers |
|
|
27
|
+
| WIPO PATENTSCOPE | PCT applications + national | REST API | Free |
|
|
28
|
+
|
|
29
|
+
### Programmatic Patent Search
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
import requests
|
|
33
|
+
import xml.etree.ElementTree as ET
|
|
34
|
+
|
|
35
|
+
class EPOClient:
|
|
36
|
+
"""Client for the EPO Open Patent Services (OPS) API."""
|
|
37
|
+
|
|
38
|
+
BASE_URL = "https://ops.epo.org/3.2/rest-services"
|
|
39
|
+
|
|
40
|
+
def __init__(self, consumer_key: str, consumer_secret: str):
|
|
41
|
+
self.token = self._authenticate(consumer_key, consumer_secret)
|
|
42
|
+
|
|
43
|
+
def _authenticate(self, key: str, secret: str) -> str:
|
|
44
|
+
import base64
|
|
45
|
+
credentials = base64.b64encode(f"{key}:{secret}".encode()).decode()
|
|
46
|
+
resp = requests.post(
|
|
47
|
+
"https://ops.epo.org/3.2/auth/accesstoken",
|
|
48
|
+
headers={"Authorization": f"Basic {credentials}"},
|
|
49
|
+
data={"grant_type": "client_credentials"},
|
|
50
|
+
)
|
|
51
|
+
return resp.json()["access_token"]
|
|
52
|
+
|
|
53
|
+
def search(self, cql_query: str, max_results: int = 25) -> list[dict]:
|
|
54
|
+
"""
|
|
55
|
+
Search patents using CQL (Common Query Language).
|
|
56
|
+
Example queries:
|
|
57
|
+
ta="machine learning" AND cl="neural network"
|
|
58
|
+
pa="university" AND pd>=2020
|
|
59
|
+
"""
|
|
60
|
+
resp = requests.get(
|
|
61
|
+
f"{self.BASE_URL}/published-data/search",
|
|
62
|
+
headers={"Authorization": f"Bearer {self.token}",
|
|
63
|
+
"Accept": "application/json"},
|
|
64
|
+
params={"q": cql_query, "Range": f"1-{max_results}"},
|
|
65
|
+
)
|
|
66
|
+
return resp.json()
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Patent Classification Systems
|
|
70
|
+
|
|
71
|
+
### Cooperative Patent Classification (CPC)
|
|
72
|
+
|
|
73
|
+
The CPC hierarchy has five levels: Section > Class > Subclass > Group > Subgroup.
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Example: H04L 9/3247
|
|
77
|
+
H = Electricity (Section)
|
|
78
|
+
H04 = Electric communication technique (Class)
|
|
79
|
+
H04L = Transmission of digital information (Subclass)
|
|
80
|
+
H04L 9/ = Cryptographic mechanisms (Group)
|
|
81
|
+
H04L 9/3247 = Digital signatures (Subgroup)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### IPC to CPC Mapping
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
def parse_cpc_code(code: str) -> dict:
|
|
88
|
+
"""Parse a CPC classification code into its hierarchical components."""
|
|
89
|
+
code = code.strip().replace(" ", "")
|
|
90
|
+
return {
|
|
91
|
+
"section": code[0],
|
|
92
|
+
"class": code[:3],
|
|
93
|
+
"subclass": code[:4],
|
|
94
|
+
"group": code.split("/")[0] if "/" in code else code[:4],
|
|
95
|
+
"subgroup": code if "/" in code else None,
|
|
96
|
+
"full": code,
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
# Technology domain mapping (top-level CPC sections)
|
|
100
|
+
CPC_SECTIONS = {
|
|
101
|
+
"A": "Human Necessities",
|
|
102
|
+
"B": "Performing Operations; Transporting",
|
|
103
|
+
"C": "Chemistry; Metallurgy",
|
|
104
|
+
"D": "Textiles; Paper",
|
|
105
|
+
"E": "Fixed Constructions",
|
|
106
|
+
"F": "Mechanical Engineering; Lighting; Heating",
|
|
107
|
+
"G": "Physics",
|
|
108
|
+
"H": "Electricity",
|
|
109
|
+
"Y": "General Tagging of New Technological Developments",
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Patent Landscape Analysis
|
|
114
|
+
|
|
115
|
+
### Building a Patent Landscape
|
|
116
|
+
|
|
117
|
+
A patent landscape maps the technology and competitive environment in a domain:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
import pandas as pd
|
|
121
|
+
import numpy as np
|
|
122
|
+
from collections import Counter
|
|
123
|
+
|
|
124
|
+
def patent_landscape_metrics(patents: pd.DataFrame) -> dict:
|
|
125
|
+
"""
|
|
126
|
+
Compute patent landscape metrics from a patent dataset.
|
|
127
|
+
Expected columns: patent_id, filing_date, grant_date,
|
|
128
|
+
assignee, cpc_codes (list), claims_count, citations_received
|
|
129
|
+
"""
|
|
130
|
+
# Filing trend (annual)
|
|
131
|
+
patents["filing_year"] = pd.to_datetime(patents.filing_date).dt.year
|
|
132
|
+
annual_filings = patents.groupby("filing_year").size()
|
|
133
|
+
|
|
134
|
+
# Top assignees
|
|
135
|
+
top_assignees = patents.assignee.value_counts().head(20)
|
|
136
|
+
|
|
137
|
+
# Technology distribution (CPC subclass level)
|
|
138
|
+
all_cpc = []
|
|
139
|
+
for codes in patents.cpc_codes:
|
|
140
|
+
all_cpc.extend([c[:4] for c in codes])
|
|
141
|
+
cpc_distribution = Counter(all_cpc).most_common(20)
|
|
142
|
+
|
|
143
|
+
# Citation impact
|
|
144
|
+
citation_stats = patents.citations_received.describe()
|
|
145
|
+
|
|
146
|
+
# Geographic distribution (from assignee country)
|
|
147
|
+
geo_dist = patents.assignee_country.value_counts()
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
"total_patents": len(patents),
|
|
151
|
+
"annual_filings": annual_filings.to_dict(),
|
|
152
|
+
"top_assignees": top_assignees.to_dict(),
|
|
153
|
+
"technology_areas": cpc_distribution,
|
|
154
|
+
"citation_stats": citation_stats.to_dict(),
|
|
155
|
+
"geographic_distribution": geo_dist.head(10).to_dict(),
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Citation Network Analysis
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
import networkx as nx
|
|
163
|
+
|
|
164
|
+
def build_citation_network(patents: pd.DataFrame,
|
|
165
|
+
citations: pd.DataFrame) -> nx.DiGraph:
|
|
166
|
+
"""
|
|
167
|
+
Build a patent citation network.
|
|
168
|
+
citations: DataFrame with columns [citing_patent, cited_patent]
|
|
169
|
+
"""
|
|
170
|
+
G = nx.DiGraph()
|
|
171
|
+
|
|
172
|
+
# Add patent nodes with attributes
|
|
173
|
+
for _, row in patents.iterrows():
|
|
174
|
+
G.add_node(row.patent_id, assignee=row.assignee,
|
|
175
|
+
year=row.filing_year, cpc=row.cpc_codes[0][:4])
|
|
176
|
+
|
|
177
|
+
# Add citation edges
|
|
178
|
+
for _, row in citations.iterrows():
|
|
179
|
+
if row.citing_patent in G and row.cited_patent in G:
|
|
180
|
+
G.add_edge(row.citing_patent, row.cited_patent)
|
|
181
|
+
|
|
182
|
+
return G
|
|
183
|
+
|
|
184
|
+
def identify_seminal_patents(G: nx.DiGraph, top_n: int = 20) -> list:
|
|
185
|
+
"""Find the most influential patents by various centrality measures."""
|
|
186
|
+
in_degree = dict(G.in_degree())
|
|
187
|
+
pagerank = nx.pagerank(G)
|
|
188
|
+
|
|
189
|
+
# Combine metrics
|
|
190
|
+
scores = {}
|
|
191
|
+
for node in G.nodes():
|
|
192
|
+
scores[node] = {
|
|
193
|
+
"citations_received": in_degree[node],
|
|
194
|
+
"pagerank": pagerank[node],
|
|
195
|
+
}
|
|
196
|
+
ranked = sorted(scores.items(), key=lambda x: x[1]["pagerank"], reverse=True)
|
|
197
|
+
return ranked[:top_n]
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Claim Analysis
|
|
201
|
+
|
|
202
|
+
### Parsing Patent Claims
|
|
203
|
+
|
|
204
|
+
Patent claims define the legal scope of protection. Independent claims are the broadest; dependent claims narrow them:
|
|
205
|
+
|
|
206
|
+
```python
|
|
207
|
+
def parse_claims(claims_text: str) -> list[dict]:
|
|
208
|
+
"""
|
|
209
|
+
Parse patent claims text into structured claim objects.
|
|
210
|
+
Identifies independent vs dependent claims and extracts dependencies.
|
|
211
|
+
"""
|
|
212
|
+
# Split on claim numbers
|
|
213
|
+
claim_pattern = re.compile(r"\n\s*(\d+)\.\s+", re.MULTILINE)
|
|
214
|
+
parts = claim_pattern.split(claims_text)
|
|
215
|
+
|
|
216
|
+
claims = []
|
|
217
|
+
for i in range(1, len(parts), 2):
|
|
218
|
+
claim_num = int(parts[i])
|
|
219
|
+
claim_text = parts[i + 1].strip()
|
|
220
|
+
|
|
221
|
+
# Detect dependency
|
|
222
|
+
dep_match = re.match(
|
|
223
|
+
r"(?:The|A)\s+\w+\s+(?:of|according to)\s+claim\s+(\d+)",
|
|
224
|
+
claim_text, re.IGNORECASE
|
|
225
|
+
)
|
|
226
|
+
is_independent = dep_match is None
|
|
227
|
+
depends_on = int(dep_match.group(1)) if dep_match else None
|
|
228
|
+
|
|
229
|
+
claims.append({
|
|
230
|
+
"number": claim_num,
|
|
231
|
+
"text": claim_text,
|
|
232
|
+
"independent": is_independent,
|
|
233
|
+
"depends_on": depends_on,
|
|
234
|
+
"word_count": len(claim_text.split()),
|
|
235
|
+
})
|
|
236
|
+
return claims
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Prior Art Search Strategy
|
|
240
|
+
|
|
241
|
+
Systematic prior art search methodology:
|
|
242
|
+
|
|
243
|
+
1. **Define the invention**: Break the invention into key technical features
|
|
244
|
+
2. **Keyword search**: Use synonyms, broader terms, and technical variants
|
|
245
|
+
3. **Classification search**: Identify relevant CPC/IPC codes and search within them
|
|
246
|
+
4. **Citation search**: Forward and backward citation tracking from known relevant patents
|
|
247
|
+
5. **Assignee search**: Search patents from known competitors and research groups
|
|
248
|
+
6. **Non-patent literature**: Check academic papers, standards, product documentation
|
|
249
|
+
|
|
250
|
+
## Tools and Resources
|
|
251
|
+
|
|
252
|
+
- **PatentsView API**: Free US patent data with assignee disambiguation
|
|
253
|
+
- **Google Patents**: Full-text search with CPC browsing and citation links
|
|
254
|
+
- **Lens.org**: Scholarly and patent search with linking between patents and papers
|
|
255
|
+
- **Derwent Innovation**: Commercial tool for comprehensive patent analytics
|
|
256
|
+
- **PatSnap**: AI-powered patent intelligence platform
|
|
257
|
+
- **WIPO Pearl**: Multilingual patent terminology database
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: regulatory-compliance-guide
|
|
3
|
+
description: "Regulatory text mining, compliance research, and policy analysis tools"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "scroll"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "law"
|
|
9
|
+
keywords: ["regulation", "compliance", "policy-analysis", "text-mining", "federal-register", "rulemaking"]
|
|
10
|
+
source: "wentor"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Regulatory Compliance Guide
|
|
14
|
+
|
|
15
|
+
A skill for mining regulatory texts, tracking regulatory changes, and conducting compliance research. Covers accessing regulatory databases, parsing regulatory language, change detection in regulations, compliance gap analysis, and computational policy analysis.
|
|
16
|
+
|
|
17
|
+
## Regulatory Data Sources
|
|
18
|
+
|
|
19
|
+
### US Federal Regulatory Data
|
|
20
|
+
|
|
21
|
+
| Source | Content | Format | Access |
|
|
22
|
+
|--------|---------|--------|--------|
|
|
23
|
+
| Federal Register API | Proposed and final rules | JSON API | Free (federalregister.gov) |
|
|
24
|
+
| eCFR (Electronic CFR) | Current Code of Federal Regulations | XML + API | Free (ecfr.gov) |
|
|
25
|
+
| Regulations.gov | Public comments on rulemakings | JSON API | Free |
|
|
26
|
+
| Congress.gov | Bills and legislative history | API + bulk | Free |
|
|
27
|
+
| SEC EDGAR | Securities filings and no-action letters | Full-text search + API | Free |
|
|
28
|
+
|
|
29
|
+
### Accessing Federal Register Data
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
import requests
|
|
33
|
+
from datetime import date, timedelta
|
|
34
|
+
|
|
35
|
+
class FederalRegisterClient:
|
|
36
|
+
"""Client for the Federal Register API."""
|
|
37
|
+
|
|
38
|
+
BASE_URL = "https://www.federalregister.gov/api/v1"
|
|
39
|
+
|
|
40
|
+
def search_rules(self, query: str, agency: str = None,
|
|
41
|
+
date_from: str = None, per_page: int = 20) -> dict:
|
|
42
|
+
"""
|
|
43
|
+
Search for rules and proposed rules in the Federal Register.
|
|
44
|
+
"""
|
|
45
|
+
params = {
|
|
46
|
+
"conditions[term]": query,
|
|
47
|
+
"conditions[type][]": ["RULE", "PRORULE"],
|
|
48
|
+
"per_page": per_page,
|
|
49
|
+
"order": "newest",
|
|
50
|
+
}
|
|
51
|
+
if agency:
|
|
52
|
+
params["conditions[agencies][]"] = agency
|
|
53
|
+
if date_from:
|
|
54
|
+
params["conditions[publication_date][gte]"] = date_from
|
|
55
|
+
|
|
56
|
+
resp = requests.get(f"{self.BASE_URL}/documents", params=params)
|
|
57
|
+
data = resp.json()
|
|
58
|
+
return {
|
|
59
|
+
"count": data.get("count", 0),
|
|
60
|
+
"results": [
|
|
61
|
+
{
|
|
62
|
+
"title": r["title"],
|
|
63
|
+
"document_number": r["document_number"],
|
|
64
|
+
"publication_date": r["publication_date"],
|
|
65
|
+
"agency_names": r.get("agency_names", []),
|
|
66
|
+
"type": r["type"],
|
|
67
|
+
"abstract": r.get("abstract", ""),
|
|
68
|
+
"html_url": r["html_url"],
|
|
69
|
+
}
|
|
70
|
+
for r in data.get("results", [])
|
|
71
|
+
],
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
def get_document(self, document_number: str) -> dict:
|
|
75
|
+
"""Retrieve full document details by document number."""
|
|
76
|
+
resp = requests.get(
|
|
77
|
+
f"{self.BASE_URL}/documents/{document_number}.json"
|
|
78
|
+
)
|
|
79
|
+
return resp.json()
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Regulatory Text Parsing
|
|
83
|
+
|
|
84
|
+
### Identifying Regulatory Obligations
|
|
85
|
+
|
|
86
|
+
Regulatory language follows predictable patterns that indicate obligation strength:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
import re
|
|
90
|
+
from enum import Enum
|
|
91
|
+
|
|
92
|
+
class ObligationLevel(Enum):
|
|
93
|
+
MANDATORY = "mandatory" # shall, must, required
|
|
94
|
+
PROHIBITIVE = "prohibitive" # shall not, must not, prohibited
|
|
95
|
+
PERMISSIVE = "permissive" # may, is permitted
|
|
96
|
+
RECOMMENDED = "recommended" # should, is recommended
|
|
97
|
+
INFORMATIVE = "informative" # for information, note
|
|
98
|
+
|
|
99
|
+
OBLIGATION_PATTERNS = {
|
|
100
|
+
ObligationLevel.MANDATORY: [
|
|
101
|
+
r"\bshall\b(?!\s+not)", r"\bmust\b(?!\s+not)",
|
|
102
|
+
r"\bis required to\b", r"\bare required to\b",
|
|
103
|
+
],
|
|
104
|
+
ObligationLevel.PROHIBITIVE: [
|
|
105
|
+
r"\bshall not\b", r"\bmust not\b",
|
|
106
|
+
r"\bis prohibited\b", r"\bmay not\b",
|
|
107
|
+
],
|
|
108
|
+
ObligationLevel.PERMISSIVE: [
|
|
109
|
+
r"\bmay\b(?!\s+not)", r"\bis permitted\b",
|
|
110
|
+
r"\bis authorized\b",
|
|
111
|
+
],
|
|
112
|
+
ObligationLevel.RECOMMENDED: [
|
|
113
|
+
r"\bshould\b(?!\s+not)", r"\bis recommended\b",
|
|
114
|
+
r"\bit is advisable\b",
|
|
115
|
+
],
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
def classify_obligations(text: str) -> list[dict]:
|
|
119
|
+
"""
|
|
120
|
+
Extract and classify regulatory obligations from text.
|
|
121
|
+
Returns sentences tagged with their obligation level.
|
|
122
|
+
"""
|
|
123
|
+
sentences = re.split(r'(?<=[.!?])\s+', text)
|
|
124
|
+
results = []
|
|
125
|
+
for sent in sentences:
|
|
126
|
+
level = ObligationLevel.INFORMATIVE
|
|
127
|
+
for obl_level, patterns in OBLIGATION_PATTERNS.items():
|
|
128
|
+
if any(re.search(p, sent, re.IGNORECASE) for p in patterns):
|
|
129
|
+
level = obl_level
|
|
130
|
+
break
|
|
131
|
+
results.append({"sentence": sent.strip(), "obligation": level.value})
|
|
132
|
+
return results
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### CFR Section Parsing
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
def parse_cfr_section(xml_text: str) -> dict:
|
|
139
|
+
"""
|
|
140
|
+
Parse an eCFR XML section into structured components.
|
|
141
|
+
Extracts the section number, heading, paragraphs, and cross-references.
|
|
142
|
+
"""
|
|
143
|
+
root = ET.fromstring(xml_text)
|
|
144
|
+
section = {
|
|
145
|
+
"number": root.findtext(".//SECTNO", ""),
|
|
146
|
+
"heading": root.findtext(".//SUBJECT", ""),
|
|
147
|
+
"paragraphs": [],
|
|
148
|
+
"cross_references": [],
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
for para in root.iter("P"):
|
|
152
|
+
text = "".join(para.itertext()).strip()
|
|
153
|
+
if text:
|
|
154
|
+
section["paragraphs"].append(text)
|
|
155
|
+
# Extract cross-references to other CFR sections
|
|
156
|
+
xrefs = re.findall(r"\d+\s+CFR\s+[\d.]+(?:\([a-z]\))?", text)
|
|
157
|
+
section["cross_references"].extend(xrefs)
|
|
158
|
+
|
|
159
|
+
return section
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Regulatory Change Detection
|
|
163
|
+
|
|
164
|
+
### Tracking Amendments Over Time
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
from difflib import SequenceMatcher, unified_diff
|
|
168
|
+
|
|
169
|
+
def compare_regulation_versions(old_text: str, new_text: str,
|
|
170
|
+
section_id: str) -> dict:
|
|
171
|
+
"""
|
|
172
|
+
Compare two versions of a regulation section to identify changes.
|
|
173
|
+
Returns a structured diff with change classification.
|
|
174
|
+
"""
|
|
175
|
+
old_lines = old_text.splitlines(keepends=True)
|
|
176
|
+
new_lines = new_text.splitlines(keepends=True)
|
|
177
|
+
|
|
178
|
+
diff = list(unified_diff(old_lines, new_lines,
|
|
179
|
+
fromfile=f"{section_id} (old)",
|
|
180
|
+
tofile=f"{section_id} (new)"))
|
|
181
|
+
|
|
182
|
+
additions = sum(1 for l in diff if l.startswith("+") and not l.startswith("+++"))
|
|
183
|
+
deletions = sum(1 for l in diff if l.startswith("-") and not l.startswith("---"))
|
|
184
|
+
|
|
185
|
+
similarity = SequenceMatcher(None, old_text, new_text).ratio()
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
"section": section_id,
|
|
189
|
+
"similarity": round(similarity, 4),
|
|
190
|
+
"lines_added": additions,
|
|
191
|
+
"lines_removed": deletions,
|
|
192
|
+
"change_magnitude": "major" if similarity < 0.8 else
|
|
193
|
+
"minor" if similarity < 0.95 else "trivial",
|
|
194
|
+
"diff": "".join(diff),
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Compliance Gap Analysis
|
|
199
|
+
|
|
200
|
+
### Mapping Requirements to Controls
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
def compliance_gap_analysis(requirements: list[dict],
|
|
204
|
+
controls: list[dict]) -> pd.DataFrame:
|
|
205
|
+
"""
|
|
206
|
+
Map regulatory requirements to organizational controls.
|
|
207
|
+
Identify gaps where requirements lack corresponding controls.
|
|
208
|
+
|
|
209
|
+
requirements: [{id, text, obligation_level, cfr_section}]
|
|
210
|
+
controls: [{id, description, implemented, evidence}]
|
|
211
|
+
"""
|
|
212
|
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
|
213
|
+
from sklearn.metrics.pairwise import cosine_similarity
|
|
214
|
+
|
|
215
|
+
req_texts = [r["text"] for r in requirements]
|
|
216
|
+
ctrl_texts = [c["description"] for c in controls]
|
|
217
|
+
|
|
218
|
+
vectorizer = TfidfVectorizer(stop_words="english", max_features=5000)
|
|
219
|
+
all_texts = req_texts + ctrl_texts
|
|
220
|
+
tfidf = vectorizer.fit_transform(all_texts)
|
|
221
|
+
|
|
222
|
+
req_vecs = tfidf[:len(req_texts)]
|
|
223
|
+
ctrl_vecs = tfidf[len(req_texts):]
|
|
224
|
+
|
|
225
|
+
similarity_matrix = cosine_similarity(req_vecs, ctrl_vecs)
|
|
226
|
+
|
|
227
|
+
gaps = []
|
|
228
|
+
for i, req in enumerate(requirements):
|
|
229
|
+
best_match_idx = similarity_matrix[i].argmax()
|
|
230
|
+
best_score = similarity_matrix[i][best_match_idx]
|
|
231
|
+
matched_ctrl = controls[best_match_idx] if best_score > 0.3 else None
|
|
232
|
+
|
|
233
|
+
gaps.append({
|
|
234
|
+
"requirement_id": req["id"],
|
|
235
|
+
"cfr_section": req["cfr_section"],
|
|
236
|
+
"obligation": req["obligation_level"],
|
|
237
|
+
"matched_control": matched_ctrl["id"] if matched_ctrl else "NONE",
|
|
238
|
+
"match_score": round(best_score, 3),
|
|
239
|
+
"status": "covered" if matched_ctrl and matched_ctrl["implemented"]
|
|
240
|
+
else "gap" if not matched_ctrl
|
|
241
|
+
else "planned",
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
return pd.DataFrame(gaps)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Regulatory Domains
|
|
248
|
+
|
|
249
|
+
Key regulated sectors with their primary frameworks:
|
|
250
|
+
|
|
251
|
+
| Sector | Primary Regulator | Key Regulations |
|
|
252
|
+
|--------|------------------|----------------|
|
|
253
|
+
| Financial services | SEC, CFTC, FINRA | Dodd-Frank, SOX, MiFID II |
|
|
254
|
+
| Healthcare | FDA, HHS | HIPAA, 21 CFR Parts 210-211 |
|
|
255
|
+
| Environment | EPA | Clean Air Act, RCRA, CERCLA |
|
|
256
|
+
| Data privacy | FTC, state AGs | CCPA, GDPR, COPPA |
|
|
257
|
+
| Telecommunications | FCC | Communications Act, net neutrality rules |
|
|
258
|
+
| Energy | FERC, NRC | Federal Power Act, 10 CFR 50 |
|
|
259
|
+
|
|
260
|
+
## Tools and Resources
|
|
261
|
+
|
|
262
|
+
- **RegInfo.gov**: Unified Agenda of regulatory actions
|
|
263
|
+
- **Regulations.gov API**: Public comments on proposed rules
|
|
264
|
+
- **GovInfo.gov**: Official publications of all branches of government
|
|
265
|
+
- **LexisNexis / Westlaw**: Commercial legal research platforms
|
|
266
|
+
- **RegTech tools**: Ascent, Compliance.ai, Clausematch
|
|
267
|
+
- **spaCy + custom pipelines**: NLP for regulatory text extraction
|