Not in the top 1,000 by GitHub stars
ShZhao27208/Aut_Sci_Write
Academic research skills suite for AI Agent — literature search/download (WoS+Elsevier+Springer), PDF extraction, figure cropping, review writing, Zotero sync, and PPT/Html generation.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/sci-download/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-extract/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-figure/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-html/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-polish/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-ppt/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-review/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-search/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
skills/sci-zotero/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
357766f90bd4 → 357766f90bd4
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 357766f90bd4
No earlier version was observed for comparison.
Verified commit 357766f90bd42f4f982d054be55c687c27202f22
git clone --filter=blob:none --no-checkout https://github.com/ShZhao27208/Aut_Sci_Write.git .hotskills/shzhao27208-aut_sci_write && git -C .hotskills/shzhao27208-aut_sci_write checkout --detach 357766f90bd42f4f982d054be55c687c27202f22
# Copy each selected skill directory from .hotskills/shzhao27208-aut_sci_write into .claude/skills/<skill-name>/Heat
2.9- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- sci-download
skills/sci-download - sci-extract
skills/sci-extract - sci-figure
skills/sci-figure - sci-html
skills/sci-html - sci-polish
skills/sci-polish - sci-ppt
skills/sci-ppt - sci-review
skills/sci-review - sci-search
skills/sci-search - sci-zotero
skills/sci-zotero
How it works
sci-download
When your agent uses it
学术论文 PDF 下载。支持 8 个数据源:Elsevier、Springer Nature、IEEE Xplore、 arXiv、Unpaywall、Semantic Scholar、PubMed Central、知网(CNKI)。 自动根据 DOI 前缀路由到对应数据源,未知 DOI 自动尝试 Unpaywall → Semantic Scholar。
What it loads into context
Frontmatter
217 tokensAlways available to the agent
SKILL.md
1,216 tokensWhen the skill is activated
Reference documents
44,682 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Trigger Phrases
- Capabilities
- Auto-Routing
- Usage
- Configuration
- Dependencies
- © License & Copyright
Scripts executed separately
arxiv_download.pycnki_download.pyconfig.pyelsevier_download.pyieee_download.pypubmed_download.pysci_download.pysemantic_scholar_download.pyspringer_download.pyunpaywall_download.pywebvpn_crypto.py../sci-extract/extract_core_insights.py../sci-extract/harvest_paper.py../sci-extract/harvester/__init__.py../sci-extract/harvester/env.py../sci-extract/harvester/figures.py../sci-extract/harvester/fulltext.py../sci-extract/harvester/http.py../sci-extract/harvester/identify.py../sci-extract/harvester/jats.py../sci-extract/harvester/metadata.py../sci-extract/harvester/oa_package.py../sci-extract/harvester/render.py../sci-figure/sci_figure/__init__.py../sci-figure/sci_figure/annotator.py../sci-figure/sci_figure/caption_detector.py../sci-figure/sci_figure/cli.py../sci-figure/sci_figure/column_detector.py../sci-figure/sci_figure/exceptions.py../sci-figure/sci_figure/figure_extractor.py../sci-figure/sci_figure/image_processor.py../sci-figure/sci_figure/native_extractor.py../sci-figure/sci_figure/pdf_parser.py../sci-figure/sci_figure/region_detector.py../sci-figure/sci_figure/subfigure_splitter.py../sci-figure/sci_figure/utils.py../sci-figure/scripts/extract_figure.py../sci-figure/setup.py../sci-figure/tests/__init__.py../sci-figure/tests/test_caption_dedup.py../sci-html/conftest.py../sci-html/scripts/generate_html_deck.py../sci-html/src/sci_html/__init__.py../sci-html/src/sci_html/cli.py../sci-html/src/sci_html/integrations/__init__.py../sci-html/src/sci_html/integrations/extract/__init__.py../sci-html/src/sci_html/integrations/extract/core_insights.py../sci-html/src/sci_html/models.py../sci-html/src/sci_html/paper_pipeline.py../sci-html/src/sci_html/parser.py../sci-html/src/sci_html/renderer.py../sci-html/templates/deck.js../sci-html/tests/_path.py../sci-html/tests/test_paper_pipeline.py../sci-html/tests/test_parser.py../sci-html/tests/test_renderer.py../sci-polish/scripts/ai_score_estimator.py../sci-polish/scripts/tier1_words.py../sci-polish/scripts/validate_polish_output.py../sci-ppt/src/aut_sci_ppt/__init__.py../sci-ppt/src/aut_sci_ppt/academic_parser.py../sci-ppt/src/aut_sci_ppt/agent.py../sci-ppt/src/aut_sci_ppt/config.py../sci-ppt/src/aut_sci_ppt/enhanced_agent.py../sci-ppt/src/aut_sci_ppt/generator/__init__.py../sci-ppt/src/aut_sci_ppt/generator/formula_renderer.py../sci-ppt/src/aut_sci_ppt/generator/pptx_generator.py../sci-ppt/src/aut_sci_ppt/image/__init__.py../sci-ppt/src/aut_sci_ppt/interactive.py../sci-ppt/src/aut_sci_ppt/layout_engine.py../sci-ppt/src/aut_sci_ppt/main.py../sci-ppt/src/aut_sci_ppt/models.py../sci-ppt/src/aut_sci_ppt/paginator/__init__.py../sci-ppt/src/aut_sci_ppt/paginator/smart_paginator.py../sci-ppt/src/aut_sci_ppt/paper_workflow.py../sci-ppt/src/aut_sci_ppt/parser/__init__.py../sci-ppt/src/aut_sci_ppt/parser/text_parser.py../sci-ppt/src/aut_sci_ppt/pdf_extractor.py../sci-ppt/src/aut_sci_ppt/run.py../sci-ppt/src/aut_sci_ppt/templates/__init__.py../sci-ppt/src/aut_sci_ppt/templates/base.py../sci-ppt/src/aut_sci_ppt/templates/content_detail.py../sci-ppt/src/aut_sci_ppt/templates/content_figure.py../sci-ppt/src/aut_sci_ppt/templates/content_list.py../sci-ppt/src/aut_sci_ppt/templates/cover.py../sci-ppt/src/aut_sci_ppt/templates/ending.py../sci-ppt/src/aut_sci_ppt/templates/section.py../sci-ppt/src/aut_sci_ppt/templates/timeline.py../sci-ppt/src/aut_sci_ppt/templates/toc.py../sci-ppt/src/aut_sci_ppt/tests/__init__.py../sci-ppt/src/aut_sci_ppt/tests/test_agent.py../sci-review/scripts/validate_review_output.py../sci-search/sci_search.py../sci-zotero/zotero.py
Files
../../.claude-plugin/marketplace.jsonasset868 bytes.gitignoreasset19 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesSKILL.mdcore4,316 bytesarxiv_download.pyruns6,936 bytescnki_download.pyruns22,372 bytesconfig.pyruns6,337 byteselsevier_download.pyruns6,474 bytesieee_download.pyruns8,625 bytespubmed_download.pyruns9,717 bytesschools.jsonasset5,277 bytessci_download.pyruns9,182 bytessemantic_scholar_download.pyruns7,503 bytesspringer_download.pyruns7,068 bytesunpaywall_download.pyruns5,560 byteswebvpn_crypto.pyruns1,574 bytes../sci-extract/README.mddoc5,271 bytes../sci-extract/SKILL.mddoc23,235 bytes../sci-extract/_meta.jsonasset395 bytes../sci-extract/extract_core_insights.pyruns37,230 bytes../sci-extract/harvest_paper.pyruns14,071 bytes../sci-extract/harvester/__init__.pyruns477 bytes../sci-extract/harvester/env.pyruns3,124 bytes../sci-extract/harvester/figures.pyruns9,466 bytes../sci-extract/harvester/fulltext.pyruns8,287 bytes../sci-extract/harvester/http.pyruns5,464 bytes../sci-extract/harvester/identify.pyruns4,436 bytes../sci-extract/harvester/jats.pyruns19,397 bytes../sci-extract/harvester/metadata.pyruns41,649 bytes../sci-extract/harvester/oa_package.pyruns6,431 bytes../sci-extract/harvester/render.pyruns31,648 bytes../sci-figure/CHANGELOG.mddoc529 bytes../sci-figure/LICENSEasset965 bytes../sci-figure/README.mddoc4,247 bytes../sci-figure/README_CN.mddoc4,790 bytes../sci-figure/SKILL.mddoc6,628 bytes../sci-figure/_meta.jsonasset203 bytes../sci-figure/requirements.txtdoc105 bytes../sci-figure/sci_figure.egg-info/PKG-INFOasset5,546 bytes../sci-figure/sci_figure.egg-info/SOURCES.txtdoc601 bytes../sci-figure/sci_figure.egg-info/dependency_links.txtdoc1 bytes../sci-figure/sci_figure.egg-info/entry_points.txtdoc51 bytes../sci-figure/sci_figure.egg-info/requires.txtdoc127 bytes../sci-figure/sci_figure.egg-info/top_level.txtdoc17 bytes../sci-figure/sci_figure/__init__.pyruns102 bytes../sci-figure/sci_figure/annotator.pyruns3,954 bytes../sci-figure/sci_figure/caption_detector.pyruns8,257 bytes../sci-figure/sci_figure/cli.pyruns8,259 bytes../sci-figure/sci_figure/column_detector.pyruns3,958 bytes../sci-figure/sci_figure/exceptions.pyruns1,521 bytes../sci-figure/sci_figure/figure_extractor.pyruns15,504 bytes../sci-figure/sci_figure/image_processor.pyruns1,642 bytes../sci-figure/sci_figure/native_extractor.pyruns7,791 bytes../sci-figure/sci_figure/pdf_parser.pyruns4,317 bytes../sci-figure/sci_figure/region_detector.pyruns10,921 bytes../sci-figure/sci_figure/subfigure_splitter.pyruns18,567 bytes../sci-figure/sci_figure/utils.pyruns1,423 bytes../sci-figure/scripts/extract_figure.pyruns276 bytes../sci-figure/setup.pyruns1,408 bytes../sci-figure/tests/__init__.pyruns0 bytes../sci-figure/tests/test_caption_dedup.pyruns4,074 bytes../sci-html/.gitignoreasset80 bytes../sci-html/LICENSEasset1,530 bytes../sci-html/README.mddoc3,453 bytes../sci-html/SKILL.mddoc5,669 bytes../sci-html/THIRD_PARTY_NOTICES.mddoc1,150 bytes../sci-html/_meta.jsonasset267 bytes../sci-html/archives/.keepasset0 bytes../sci-html/conftest.pyruns488 bytes../sci-html/examples/sample_outline.mddoc929 bytes../sci-html/examples/sample_slides.mddoc578 bytes../sci-html/examples/uconversion_review.mddoc4,034 bytes../sci-html/pyproject.tomlasset522 bytes../sci-html/pyproject.tomlasset522 bytes../sci-html/requirements.txtdoc333 bytes../sci-html/scripts/generate_html_deck.pyruns322 bytes../sci-html/src/sci_html/__init__.pyruns230 bytes../sci-html/src/sci_html/cli.pyruns4,434 bytes../sci-html/src/sci_html/integrations/__init__.pyruns4 bytes../sci-html/src/sci_html/integrations/extract/SKILL.sci-extract.mddoc19,406 bytes../sci-html/src/sci_html/integrations/extract/__init__.pyruns4 bytes../sci-html/src/sci_html/integrations/extract/core_insights.pyruns23,267 bytes../sci-html/src/sci_html/models.pyruns2,190 bytes../sci-html/src/sci_html/paper_pipeline.pyruns15,503 bytes../sci-html/src/sci_html/parser.pyruns10,901 bytes../sci-html/src/sci_html/renderer.pyruns10,369 bytes../sci-html/templates/deck.jsruns2,506 bytes../sci-html/templates/index.html.j2asset958 bytes../sci-html/tests/_path.pyruns708 bytes../sci-html/tests/test_paper_pipeline.pyruns3,902 bytes../sci-html/tests/test_parser.pyruns1,992 bytes../sci-html/tests/test_renderer.pyruns3,587 bytes../sci-html/themes/academic-blue.cssasset15,492 bytes../sci-html/themes/journal-dark.cssasset5,859 bytes../sci-polish/SKILL.mddoc8,637 bytes../sci-polish/_meta.jsonasset690 bytes../sci-polish/references/ai-detection-patterns.mddoc10,459 bytes../sci-polish/references/de-ai-strategies.mddoc10,930 bytes../sci-polish/references/journal-style-db.jsonasset4,282 bytes../sci-polish/references/polish-dimensions.mddoc13,282 bytes../sci-polish/references/word-choice-anti-ai.mddoc10,987 bytes../sci-polish/scripts/ai_score_estimator.pyruns7,096 bytes../sci-polish/scripts/tier1_words.pyruns731 bytes../sci-polish/scripts/validate_polish_output.pyruns5,244 bytes../sci-polish/templates/polish-report.mddoc2,308 bytes../sci-polish/tests/golden_cases.jsonasset4,660 bytes../sci-ppt/.gitignoreasset366 bytes../sci-ppt/LICENSEasset1,081 bytes../sci-ppt/README.mddoc1,628 bytes../sci-ppt/SKILL.mddoc3,129 bytes../sci-ppt/_meta.jsonasset168 bytes../sci-ppt/pyproject.tomlasset656 bytes../sci-ppt/pyproject.tomlasset656 bytes../sci-ppt/references/rules.mddoc1,596 bytes../sci-ppt/references/style-spec.mddoc1,355 bytes../sci-ppt/requirements.txtdoc110 bytes../sci-ppt/src/aut_sci_ppt/USER_GUIDE.mddoc12,097 bytes../sci-ppt/src/aut_sci_ppt/__init__.pyruns825 bytes../sci-ppt/src/aut_sci_ppt/academic_parser.pyruns4,129 bytes../sci-ppt/src/aut_sci_ppt/agent.pyruns6,223 bytes../sci-ppt/src/aut_sci_ppt/config.pyruns6,706 bytes../sci-ppt/src/aut_sci_ppt/enhanced_agent.pyruns4,640 bytes../sci-ppt/src/aut_sci_ppt/generator/__init__.pyruns20 bytes../sci-ppt/src/aut_sci_ppt/generator/formula_renderer.pyruns4,954 bytes../sci-ppt/src/aut_sci_ppt/generator/pptx_generator.pyruns5,966 bytes../sci-ppt/src/aut_sci_ppt/image/__init__.pyruns16 bytes../sci-ppt/src/aut_sci_ppt/interactive.pyruns3,030 bytes../sci-ppt/src/aut_sci_ppt/layout_engine.pyruns3,258 bytes../sci-ppt/src/aut_sci_ppt/main.pyruns4,700 bytes../sci-ppt/src/aut_sci_ppt/models.pyruns3,495 bytes../sci-ppt/src/aut_sci_ppt/paginator/__init__.pyruns20 bytes../sci-ppt/src/aut_sci_ppt/paginator/smart_paginator.pyruns7,049 bytes../sci-ppt/src/aut_sci_ppt/paper_workflow.pyruns19,460 bytes../sci-ppt/src/aut_sci_ppt/parser/__init__.pyruns17 bytes../sci-ppt/src/aut_sci_ppt/parser/text_parser.pyruns9,968 bytes../sci-ppt/src/aut_sci_ppt/pdf_extractor.pyruns9,442 bytes../sci-ppt/src/aut_sci_ppt/run.pyruns174 bytes../sci-ppt/src/aut_sci_ppt/templates/__init__.pyruns1,508 bytes../sci-ppt/src/aut_sci_ppt/templates/base.pyruns10,868 bytes../sci-ppt/src/aut_sci_ppt/templates/content_detail.pyruns4,186 bytes../sci-ppt/src/aut_sci_ppt/templates/content_figure.pyruns12,665 bytes../sci-ppt/src/aut_sci_ppt/templates/content_list.pyruns3,514 bytes../sci-ppt/src/aut_sci_ppt/templates/cover.pyruns3,884 bytes../sci-ppt/src/aut_sci_ppt/templates/ending.pyruns1,545 bytes../sci-ppt/src/aut_sci_ppt/templates/section.pyruns2,069 bytes../sci-ppt/src/aut_sci_ppt/templates/timeline.pyruns4,483 bytes../sci-ppt/src/aut_sci_ppt/templates/toc.pyruns3,215 bytes../sci-ppt/src/aut_sci_ppt/tests/__init__.pyruns20 bytes../sci-ppt/src/aut_sci_ppt/tests/test_agent.pyruns4,405 bytes../sci-review/SKILL.mddoc2,690 bytes../sci-review/_meta.jsonasset401 bytes../sci-review/references/rebuttal-guide.mddoc3,994 bytes../sci-review/references/section-guide.mddoc11,451 bytes../sci-review/references/word-choice.mddoc3,159 bytes../sci-review/scripts/validate_review_output.pyruns2,676 bytes../sci-review/templates/literature-review-template.mddoc1,895 bytes../sci-review/templates/rebuttal-template.mddoc955 bytes../sci-review/tests/golden_cases.jsonasset1,179 bytes../sci-search/.gitignoreasset5 bytes../sci-search/SKILL.mddoc6,889 bytes../sci-search/_meta.jsonasset253 bytes../sci-search/_meta.jsonasset253 bytes../sci-search/journal_db.jsonasset1,747 bytes../sci-search/sci_search.pyruns46,070 bytes../sci-zotero/.gitignoreasset5 bytes../sci-zotero/SKILL.mddoc1,828 bytes../sci-zotero/_meta.jsonasset338 bytes../sci-zotero/zotero.pyruns27,957 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-extract
When your agent uses it
Read an academic paper end to end and extract professional research insights, figures, metadata, and critique. Use this skill whenever the user shares a scientific paper, review paper, survey paper, systematic review, meta-analysis, scoping review, arXiv link, DOI, PDF, or pasted paper text and asks to read, summarize, analyze, extract, digest, review, critique, or explain it. For original research papers, produce a modified Heilmeier analysis. For review literature, produce a field-map extraction covering scope, taxonomy, evidence quality, consensus, controversies, gaps, and future directions. Do NOT use this skill for non-academic articles, blog posts, or news.
What it loads into context
Frontmatter
337 tokensAlways available to the agent
SKILL.md
4,887 tokensWhen the skill is activated
Reference documents
1,264 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Features
- Steps:
- Attribution rules (apply across all questions)
- Citation rules (apply across all questions)
- Length and pacing
- Format and formatting compliance
- What not to do
- Usage
- Configuration
- © License & Copyright
Scripts executed separately
extract_core_insights.pyharvest_paper.pyharvester/__init__.pyharvester/env.pyharvester/figures.pyharvester/fulltext.pyharvester/http.pyharvester/identify.pyharvester/jats.pyharvester/metadata.pyharvester/oa_package.pyharvester/render.py
Files
README.mddoc5,271 bytesSKILL.mdcore23,235 bytesSKILL.mdcore23,235 bytesSKILL.mdcore23,235 bytesSKILL.mdcore23,235 bytesSKILL.mdcore23,235 bytesSKILL.mdcore23,235 bytes_meta.jsonasset395 bytesextract_core_insights.pyruns37,230 bytesharvest_paper.pyruns14,071 bytesharvester/__init__.pyruns477 bytesharvester/env.pyruns3,124 bytesharvester/figures.pyruns9,466 bytesharvester/fulltext.pyruns8,287 bytesharvester/http.pyruns5,464 bytesharvester/identify.pyruns4,436 bytesharvester/jats.pyruns19,397 bytesharvester/metadata.pyruns41,649 bytesharvester/oa_package.pyruns6,431 bytesharvester/render.pyruns31,648 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-figure
When your agent uses it
Extracts figures and sub-figures from academic PDF papers. Supports Fig/Figure, Scheme, Chart, Supplementary Figure, Extended Data Figure (Nature), and Chinese equivalents (图/方案/示意图/附图/补充图). Sub-figure label recognition supports (a)/(A)/a)/(i)/(1)/a. formats. High-quality PNG output at configurable DPI. Use when user asks to "extract figure", "截取文献图片", "提取子图", "get figure from paper", "Scheme", "方案图", "补充图", "Supplementary Figure", or "Extended Data".
What it loads into context
Frontmatter
264 tokensAlways available to the agent
SKILL.md
1,833 tokensWhen the skill is activated
Reference documents
2,766 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Installation
- Preferences (EXTEND.md)
- Usage
- Options
- Examples
- Error Handling
- Tech Stack
- Extraction Engines (v2)
- Detected Figure Fields
- Extension Support
- © License & Copyright
Scripts executed separately
sci_figure/__init__.pysci_figure/annotator.pysci_figure/caption_detector.pysci_figure/cli.pysci_figure/column_detector.pysci_figure/exceptions.pysci_figure/figure_extractor.pysci_figure/image_processor.pysci_figure/native_extractor.pysci_figure/pdf_parser.pysci_figure/region_detector.pysci_figure/subfigure_splitter.pysci_figure/utils.pyscripts/extract_figure.pysetup.pytests/__init__.pytests/test_caption_dedup.py
Files
CHANGELOG.mddoc529 bytesLICENSEasset965 bytesREADME.mddoc4,247 bytesREADME_CN.mddoc4,790 bytesSKILL.mdcore6,628 bytesSKILL.mdcore6,628 bytesSKILL.mdcore6,628 bytesSKILL.mdcore6,628 bytesSKILL.mdcore6,628 bytes_meta.jsonasset203 bytesrequirements.txtdoc105 bytessci_figure.egg-info/PKG-INFOasset5,546 bytessci_figure.egg-info/SOURCES.txtdoc601 bytessci_figure.egg-info/dependency_links.txtdoc1 bytessci_figure.egg-info/entry_points.txtdoc51 bytessci_figure.egg-info/requires.txtdoc127 bytessci_figure.egg-info/top_level.txtdoc17 bytessci_figure/__init__.pyruns102 bytessci_figure/annotator.pyruns3,954 bytessci_figure/caption_detector.pyruns8,257 bytessci_figure/cli.pyruns8,259 bytessci_figure/column_detector.pyruns3,958 bytessci_figure/exceptions.pyruns1,521 bytessci_figure/figure_extractor.pyruns15,504 bytessci_figure/image_processor.pyruns1,642 bytessci_figure/native_extractor.pyruns7,791 bytessci_figure/pdf_parser.pyruns4,317 bytessci_figure/region_detector.pyruns10,921 bytessci_figure/subfigure_splitter.pyruns18,567 bytessci_figure/utils.pyruns1,423 bytesscripts/extract_figure.pyruns276 bytessetup.pyruns1,408 bytestests/__init__.pyruns0 bytestests/test_caption_dedup.pyruns4,074 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-html
When your agent uses it
Generate academic presentation-style HTML slide decks and browser reports from PDFs, structured text, Markdown, paper summaries, outlines, or research notes. Use whenever the user wants to convert a scientific paper PDF directly into an interactive HTML report, clickable web presentation, shareable browser deck, or PPT-like HTML output with figures, structured insights, section pages, and offline deck-directory output. In the Aut_Sci_Write suite, choose this skill when the user wants HTML/web output; choose sci-ppt when they explicitly need a .pptx file.
What it loads into context
Frontmatter
235 tokensAlways available to the agent
SKILL.md
1,231 tokensWhen the skill is activated
Reference documents
6,237 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When To Use
- Output
- Workflow
- PDF Paper Workflow
- Presentation Markup
- Navigation Controls
- Design Rules
- Aut_Sci_Write Integration
Scripts executed separately
conftest.pyscripts/generate_html_deck.pysrc/sci_html/__init__.pysrc/sci_html/cli.pysrc/sci_html/integrations/__init__.pysrc/sci_html/integrations/extract/__init__.pysrc/sci_html/integrations/extract/core_insights.pysrc/sci_html/models.pysrc/sci_html/paper_pipeline.pysrc/sci_html/parser.pysrc/sci_html/renderer.pytemplates/deck.jstests/_path.pytests/test_paper_pipeline.pytests/test_parser.pytests/test_renderer.py
Files
.gitignoreasset80 bytesLICENSEasset1,530 bytesREADME.mddoc3,453 bytesSKILL.mdcore5,669 bytesSKILL.mdcore5,669 bytesSKILL.mdcore5,669 bytesSKILL.mdcore5,669 bytesSKILL.mdcore5,669 bytesTHIRD_PARTY_NOTICES.mddoc1,150 bytes_meta.jsonasset267 bytesarchives/.keepasset0 bytesconftest.pyruns488 bytesexamples/sample_outline.mddoc929 bytesexamples/sample_slides.mddoc578 bytesexamples/uconversion_review.mddoc4,034 bytespyproject.tomlasset522 bytesrequirements.txtdoc333 bytesscripts/generate_html_deck.pyruns322 bytessrc/sci_html/__init__.pyruns230 bytessrc/sci_html/cli.pyruns4,434 bytessrc/sci_html/integrations/__init__.pyruns4 bytessrc/sci_html/integrations/extract/SKILL.sci-extract.mddoc19,406 bytessrc/sci_html/integrations/extract/__init__.pyruns4 bytessrc/sci_html/integrations/extract/core_insights.pyruns23,267 bytessrc/sci_html/models.pyruns2,190 bytessrc/sci_html/paper_pipeline.pyruns15,503 bytessrc/sci_html/parser.pyruns10,901 bytessrc/sci_html/renderer.pyruns10,369 bytestemplates/deck.jsruns2,506 bytestemplates/index.html.j2asset958 bytestests/_path.pyruns708 bytestests/test_paper_pipeline.pyruns3,902 bytestests/test_parser.pyruns1,992 bytestests/test_renderer.pyruns3,587 bytesthemes/academic-blue.cssasset15,492 bytesthemes/journal-dark.cssasset5,859 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-polish
When your agent uses it
Two-stage academic paper polishing skill. Stage A reduces AI detection traces (targeting GPTZero, Turnitin, Originality.ai). Stage B performs 8-dimension quality improvement (grammar, tone, coherence, conciseness, terminology, structure, argument clarity, journal compliance). Use whenever the user asks to polish, proofread, humanize, reduce AI rate, improve writing quality, or prepare a paper for submission.
What it loads into context
Frontmatter
221 tokensAlways available to the agent
SKILL.md
2,086 tokensWhen the skill is activated
Reference documents
11,172 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Hard Rules (NEVER violate)
- Execution Modes
- Step 0: Input Processing
- Step 1: Phase A — De-AI Editing
- Step 2: Phase B — 8-Dimension Polish
- Step 3: Output
- Section-Specific Guidance
- Voice Calibration (Optional)
- Usage Examples
- © License
Scripts executed separately
scripts/ai_score_estimator.pyscripts/tier1_words.pyscripts/validate_polish_output.py
Files
SKILL.mdcore8,637 bytes_meta.jsonasset690 bytesreferences/ai-detection-patterns.mddoc10,459 bytesreferences/de-ai-strategies.mddoc10,930 bytesreferences/journal-style-db.jsonasset4,282 bytesreferences/polish-dimensions.mddoc13,282 bytesreferences/word-choice-anti-ai.mddoc10,987 bytesscripts/ai_score_estimator.pyruns7,096 bytesscripts/tier1_words.pyruns731 bytesscripts/validate_polish_output.pyruns5,244 bytestemplates/polish-report.mddoc2,308 bytestests/golden_cases.jsonasset4,660 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-ppt
When your agent uses it
Generate professional academic PowerPoint (PPTX) presentations from paper PDFs, structured outlines, or plain text. Use for thesis defense, seminar reports, literature presentations, and graduate school applications. Supports automatic figure extraction, LaTeX formula rendering, and bilingual (Chinese/English) layouts.
What it loads into context
Frontmatter
192 tokensAlways available to the agent
SKILL.md
798 tokensWhen the skill is activated
Reference documents
4,827 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Core Behavioral Rules (The 12 Laws)
- Usage
- API keys
- © License & Copyright
Scripts executed separately
src/aut_sci_ppt/__init__.pysrc/aut_sci_ppt/academic_parser.pysrc/aut_sci_ppt/agent.pysrc/aut_sci_ppt/config.pysrc/aut_sci_ppt/enhanced_agent.pysrc/aut_sci_ppt/generator/__init__.pysrc/aut_sci_ppt/generator/formula_renderer.pysrc/aut_sci_ppt/generator/pptx_generator.pysrc/aut_sci_ppt/image/__init__.pysrc/aut_sci_ppt/interactive.pysrc/aut_sci_ppt/layout_engine.pysrc/aut_sci_ppt/main.pysrc/aut_sci_ppt/models.pysrc/aut_sci_ppt/paginator/__init__.pysrc/aut_sci_ppt/paginator/smart_paginator.pysrc/aut_sci_ppt/paper_workflow.pysrc/aut_sci_ppt/parser/__init__.pysrc/aut_sci_ppt/parser/text_parser.pysrc/aut_sci_ppt/pdf_extractor.pysrc/aut_sci_ppt/run.pysrc/aut_sci_ppt/templates/__init__.pysrc/aut_sci_ppt/templates/base.pysrc/aut_sci_ppt/templates/content_detail.pysrc/aut_sci_ppt/templates/content_figure.pysrc/aut_sci_ppt/templates/content_list.pysrc/aut_sci_ppt/templates/cover.pysrc/aut_sci_ppt/templates/ending.pysrc/aut_sci_ppt/templates/section.pysrc/aut_sci_ppt/templates/timeline.pysrc/aut_sci_ppt/templates/toc.pysrc/aut_sci_ppt/tests/__init__.pysrc/aut_sci_ppt/tests/test_agent.py
Files
.gitignoreasset366 bytesLICENSEasset1,081 bytesREADME.mddoc1,628 bytesSKILL.mdcore3,129 bytesSKILL.mdcore3,129 bytesSKILL.mdcore3,129 bytes_meta.jsonasset168 bytespyproject.tomlasset656 bytesreferences/rules.mddoc1,596 bytesreferences/style-spec.mddoc1,355 bytesrequirements.txtdoc110 bytessrc/aut_sci_ppt/USER_GUIDE.mddoc12,097 bytessrc/aut_sci_ppt/__init__.pyruns825 bytessrc/aut_sci_ppt/academic_parser.pyruns4,129 bytessrc/aut_sci_ppt/agent.pyruns6,223 bytessrc/aut_sci_ppt/config.pyruns6,706 bytessrc/aut_sci_ppt/enhanced_agent.pyruns4,640 bytessrc/aut_sci_ppt/generator/__init__.pyruns20 bytessrc/aut_sci_ppt/generator/formula_renderer.pyruns4,954 bytessrc/aut_sci_ppt/generator/pptx_generator.pyruns5,966 bytessrc/aut_sci_ppt/image/__init__.pyruns16 bytessrc/aut_sci_ppt/interactive.pyruns3,030 bytessrc/aut_sci_ppt/layout_engine.pyruns3,258 bytessrc/aut_sci_ppt/main.pyruns4,700 bytessrc/aut_sci_ppt/models.pyruns3,495 bytessrc/aut_sci_ppt/paginator/__init__.pyruns20 bytessrc/aut_sci_ppt/paginator/smart_paginator.pyruns7,049 bytessrc/aut_sci_ppt/paper_workflow.pyruns19,460 bytessrc/aut_sci_ppt/parser/__init__.pyruns17 bytessrc/aut_sci_ppt/parser/text_parser.pyruns9,968 bytessrc/aut_sci_ppt/pdf_extractor.pyruns9,442 bytessrc/aut_sci_ppt/run.pyruns174 bytessrc/aut_sci_ppt/templates/__init__.pyruns1,508 bytessrc/aut_sci_ppt/templates/base.pyruns10,868 bytessrc/aut_sci_ppt/templates/content_detail.pyruns4,186 bytessrc/aut_sci_ppt/templates/content_figure.pyruns12,665 bytessrc/aut_sci_ppt/templates/content_list.pyruns3,514 bytessrc/aut_sci_ppt/templates/cover.pyruns3,884 bytessrc/aut_sci_ppt/templates/ending.pyruns1,545 bytessrc/aut_sci_ppt/templates/section.pyruns2,069 bytessrc/aut_sci_ppt/templates/timeline.pyruns4,483 bytessrc/aut_sci_ppt/templates/toc.pyruns3,215 bytessrc/aut_sci_ppt/tests/__init__.pyruns20 bytessrc/aut_sci_ppt/tests/test_agent.pyruns4,405 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-review
When your agent uses it
Specialized workflows for drafting, refining, and responding to academic literature reviews and peer review feedback. Use this skill for literature review outlines, research-gap synthesis, reviewer rebuttals, response letters, and academic writing tone repair.
What it loads into context
Frontmatter
108 tokensAlways available to the agent
SKILL.md
535 tokensWhen the skill is activated
Reference documents
4,792 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Literature Review Structure
- Rebuttal Structure
- Validation
- Best Practices
Scripts executed separately
scripts/validate_review_output.py
Files
SKILL.mdcore2,690 bytesSKILL.mdcore2,690 bytesSKILL.mdcore2,690 bytesSKILL.mdcore2,690 bytes_meta.jsonasset401 bytesreferences/rebuttal-guide.mddoc3,994 bytesreferences/section-guide.mddoc11,451 bytesreferences/word-choice.mddoc3,159 bytesscripts/validate_review_output.pyruns2,676 bytestemplates/literature-review-template.mddoc1,895 bytestemplates/rebuttal-template.mddoc955 bytestests/golden_cases.jsonasset1,179 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-search
When your agent uses it
Academic paper search and metrics analysis. Searches arXiv, PubMed, Web of Science, Springer Nature, Scopus, Semantic Scholar, and OpenAlex simultaneously with journal impact factor data. Triggers on requests to search for papers or find literature.
What it loads into context
Frontmatter
213 tokensAlways available to the agent
SKILL.md
1,773 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Trigger Phrases
- Capabilities
- Configuration
- Usage
- © License & Copyright
Scripts executed separately
sci_search.py
Files
.gitignoreasset5 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytesSKILL.mdcore6,889 bytes_meta.jsonasset253 bytesjournal_db.jsonasset1,747 bytessci_search.pyruns46,070 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubsci-zotero
When your agent uses it
Interact with your Zotero library to sync references, add citations by DOI/ISBN/PMID, and manage PDFs. Triggers on Zotero-related requests.
What it loads into context
Frontmatter
103 tokensAlways available to the agent
SKILL.md
481 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Triggers
- Usage
- © License & Copyright
Scripts executed separately
zotero.py
Files
.gitignoreasset5 bytesSKILL.mdcore1,828 bytes_meta.jsonasset338 byteszotero.pyruns27,957 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- sci-download
- sci-extract
- sci-figure
- sci-html
- sci-polish
- sci-ppt
- sci-review
- sci-search
- sci-zotero
Repository facts
- License
- No license detected
- Created
- Apr 6, 2026
- Last pushed
- Aug 13, 2026
- Forks
- 28
- Open issues
- 2
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 54 notes
skills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-download/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-html/pyproject.toml:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-ppt/pyproject.toml:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-search/_meta.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-extract/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-extract/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-extract/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-extract/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-extract/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-figure/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-figure/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/sci-figure/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 687 network referencesin 33 files: skills/sci-search/sci_search.py:271 skills/sci-extract/harvester/metadata.py:18 skills/sci-zotero/zotero.py:42 and 30 more
- 3 obfuscation signalsin 2 files: skills/sci-extract/harvester/jats.py:103 sci-download/cnki_download.py:477
- No instruction overrides
- 177 executable scriptsin 94 files: skills/sci-extract/extract_core_insights.py:1 skills/sci-extract/harvest_paper.py:1 skills/sci-extract/harvester/__init__.py:1 and 91 more
- 429 references to secretsin 26 files: skills/sci-zotero/zotero.py:4 skills/sci-search/sci_search.py:41 skills/sci-extract/harvester/metadata.py:438 and 23 more
- No requests to vote in Hot
Show all 1,296 signals by file
.claude-plugin/marketplace.json
skills/sci-download/SKILL.md
- Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Network accessline 116
| Service | URL | Notes | |---------|-----|-------| | Elsevier | https://dev.elsevier.com/ | Free, Article Retrieval API | - Network accessline 117
|---------|-----|-------| | Elsevier | https://dev.elsevier.com/ | Free, Article Retrieval API | | Springer | https://dev.springernature.com/ | Free, OA only | - Network accessline 118
| Elsevier | https://dev.elsevier.com/ | Free, Article Retrieval API | - Network accessline 119
| Springer | https://dev.springernature.com/ | Free, OA only | - Network accessline 120
| IEEE | https://developer.ieee.org/ | Free tier | - Network accessline 129
python skills/sci-download/cnki_download.py set-mode fsso python skills/sci-download/cnki_download.py status # Login at https://fsso.cnki.net → export cookies → save to ~/.aut_sci_write/webvpn_cookies.json - Network accessline 131
# Login at https://fsso.cnki.net → export cookies → save to ~/.aut_sci_write/webvpn_cookies.json
skills/sci-download/arxiv_download.py
- Executable scriptline 1
Executable file - Network accessline 28
MIN_PDF_SIZE = 10_000 ARXIV_API = "https://export.arxiv.org/api/query" - Network accessline 29
ARXIV_API = "https://export.arxiv.org/api/query" - Network accessline 30
ARXIV_PDF_BASE = "https://arxiv.org/pdf" - Network accessline 38
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 39
s = requests.Session() - Network accessline 48
def _extract_arxiv_id(identifier: str) -> str | None: identifier = identifier.strip() for prefix in ("https://arxiv.org/abs/", "https://arxiv.org/pdf/", "http://arxiv.org/abs/", "arXiv:"): - Network accessline 49
identifier = identifier.strip() for prefix in ("https://arxiv.org/abs/", "https://arxiv.org/pdf/", "http://arxiv.org/abs/", "arXiv:"): if identifier.startswith(prefix): - Network accessline 50
for prefix in ("https://arxiv.org/abs/", "https://arxiv.org/pdf/", "http://arxiv.org/abs/", "arXiv:"): - Network accessline 92
def _parse_atom_feed(xml_text: str) -> list[dict[str, str]]: ns = {"atom": "http://www.w3.org/2005/Atom"} - Network accessline 93
ns = {"atom": "http://www.w3.org/2005/Atom"}
skills/sci-download/cnki_download.py
- Executable scriptline 1
Executable file - Network accessline 10
Access modes: - fsso (default): Direct access to kns.cnki.net via CARSI/FSSO session cookie. Login at https://fsso.cnki.net → select school → CAS login → export cookie. - Network accessline 11
- fsso (default): Direct access to kns.cnki.net via CARSI/FSSO session cookie. Login at https://fsso.cnki.net → select school → CAS login → export cookie. - webvpn: Access via university WebVPN proxy (AES-encrypted URLs). - Network accessline 12
Login at https://fsso.cnki.net → select school → CAS login → export cookie. - Access to secretsline 17
[Credential-related source omitted] - Network accessline 40
CNKI_BASE = "https://kns.cnki.net" - Network accessline 62
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 63
s = requests.Session() - Network accessline 119
if not cookie_file.exists(): login_hint = "https://fsso.cnki.net" if mode == "fsso" else config.get("webvpn_host", "WebVPN portal") - Network accessline 120
login_hint = "https://fsso.cnki.net" if mode == "fsso" else config.get("webvpn_host", "WebVPN portal") - Network accessline 123
session = _get_session(config) test_url = _resolve_url("https://kns.cnki.net/kns8/defaultresult/index", config) - Network accessline 124
test_url = _resolve_url("https://kns.cnki.net/kns8/defaultresult/index", config) - Possible obfuscationline 477
is_caj = content[:4] in (b"CAJ-", b"\xc8\xaf\xc8\xaf") - Network accessline 535
if mode == "fsso": info["login_url"] = "https://fsso.cnki.net" - Network accessline 536
info["login_url"] = "https://fsso.cnki.net" - Network accessline 537
info["instructions"] = ( "1. Open https://fsso.cnki.net in browser\n" "2. Select your institution and login via CAS/Shibboleth\n" - Network accessline 538
"1. Open https://fsso.cnki.net in browser\n" - Access to secretsline 540
[Credential-related source omitted] - Access to secretsline 549
[Credential-related source omitted]
skills/sci-download/config.py
- Executable scriptline 1
Executable file - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 18
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Network accessline 47
# Aut_Sci_Download API Keys # Elsevier: https://dev.elsevier.com/ (free) - Network accessline 48
# Elsevier: https://dev.elsevier.com/ (free) - Access to secretsline 49
[Credential-related source omitted] - Network accessline 51
# Springer Nature: https://dev.springernature.com/ (free, OA only) - Access to secretsline 52
[Credential-related source omitted] - Network accessline 53
# IEEE Xplore: https://developer.ieee.org/ (free tier) - Access to secretsline 54
[Credential-related source omitted] - Network accessline 57
# NCBI/PubMed: https://www.ncbi.nlm.nih.gov/account/settings/ (free) - Access to secretsline 58
[Credential-related source omitted] - Network accessline 59
# Semantic Scholar (optional, for higher rate limits): https://www.semanticscholar.org/product/api#api-key - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 67
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 95
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 120
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Network accessline 188
entry = schools[school_name] return { "host": f"https://{entry['host']}", - Network accessline 189
return { "host": f"https://{entry['host']}", "crypto_key": entry.get("crypto_key", WEBVPN_DEFAULT_KEY), - Network accessline 190
"host": f"https://{entry['host']}",
skills/sci-download/elsevier_download.py
- Executable scriptline 1
Executable file - Network accessline 7
[Credential-related source omitted] - Access to secretsline 7
[Credential-related source omitted] - Network accessline 8
Endpoint: https://api.elsevier.com/content/article/doi/{doi} - Network accessline 31
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 32
s = requests.Session() - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Network accessline 73
url = f"https://api.elsevier.com/content/article/doi/{doi}" - Access to secretsline 76
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 122
[Credential-related source omitted] - Network accessline 126
try: resp = session.get( "https://api.elsevier.com/content/serial/title", - Network accessline 127
[Credential-related source omitted] - Network accessline 128
"https://api.elsevier.com/content/serial/title", - Access to secretsline 129
[Credential-related source omitted] - Network accessline 141
identifier = identifier.strip() identifier = identifier.replace("–", "-").replace("—", "-") for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 142
identifier = identifier.replace("–", "-").replace("—", "-") for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): if identifier.lower().startswith(prefix.lower()): - Network accessline 143
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Access to secretsline 165
[Credential-related source omitted]
skills/sci-download/ieee_download.py
- Executable scriptline 1
Executable file - Network accessline 8
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Network accessline 9
Endpoint: https://ieeexploreapi.ieee.org/api/v1/search/articles - Network accessline 30
MIN_PDF_SIZE = 10_000 API_BASE = "https://ieeexploreapi.ieee.org/api/v1/search/articles" - Network accessline 31
API_BASE = "https://ieeexploreapi.ieee.org/api/v1/search/articles" - Network accessline 34
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 35
s = requests.Session() - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 120
[Credential-related source omitted] - Access to secretsline 125
[Credential-related source omitted] - Access to secretsline 138
[Credential-related source omitted] - Access to secretsline 184
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 189
[Credential-related source omitted] - Access to secretsline 196
[Credential-related source omitted] - Network accessline 206
def _normalize_doi(identifier: str) -> str: identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 207
identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): if identifier.lower().startswith(prefix.lower()): - Network accessline 208
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Access to secretsline 230
[Credential-related source omitted]
skills/sci-download/pubmed_download.py
- Executable scriptline 1
Executable file - Network accessline 27
MIN_PDF_SIZE = 10_000 NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils" - Network accessline 28
NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils" - Network accessline 29
EUROPEPMC_BASE = "https://www.ebi.ac.uk/europepmc/webservices/rest" - Network accessline 32
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 33
s = requests.Session() - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Network accessline 137
europepmc_url = f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={pmcid}&blobtype=pdf" - Network accessline 144
ncbi_url = f"https://www.ncbi.nlm.nih.gov/pmc/articles/{pmcid}/pdf/" - Network accessline 208
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"):
skills/sci-download/sci_download.py
- Executable scriptline 1
Executable file - Network accessline 39
def route_identifier(identifier: str) -> str | None: identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 40
identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): if identifier.lower().startswith(prefix.lower()): - Network accessline 41
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 46
if ARXIV_PATTERN.match(identifier) or identifier.startswith("arXiv:"): return "arxiv" if identifier.startswith("https://arxiv.org/"): - Network accessline 47
return "arxiv" if identifier.startswith("https://arxiv.org/"): return "arxiv" - Network accessline 48
if identifier.startswith("https://arxiv.org/"): - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Access to secretsline 172
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted]
skills/sci-download/semantic_scholar_download.py
- Executable scriptline 1
Executable file - Network accessline 7
No API key required (rate-limited to 100 req/5min without key). Endpoint: https://api.semanticscholar.org/graph/v1/paper/ - Network accessline 8
Endpoint: https://api.semanticscholar.org/graph/v1/paper/ - Network accessline 28
MIN_PDF_SIZE = 10_000 API_BASE = "https://api.semanticscholar.org/graph/v1" - Network accessline 29
API_BASE = "https://api.semanticscholar.org/graph/v1" - Network accessline 32
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 33
s = requests.Session() - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Network accessline 168
identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 169
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"):
skills/sci-download/springer_download.py
- Executable scriptline 1
Executable file - Network accessline 7
[Credential-related source omitted] - Access to secretsline 7
[Credential-related source omitted] - Network accessline 8
Endpoint: https://api.springernature.com/openaccess/json - Network accessline 29
MIN_PDF_SIZE = 10_000 API_BASE = "https://api.springernature.com" - Network accessline 30
API_BASE = "https://api.springernature.com" - Network accessline 33
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 34
s = requests.Session() - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Network accessline 134
doi = record.get("doi", "") if doi: return f"https://link.springer.com/content/pdf/{doi}.pdf" - Network accessline 136
return f"https://link.springer.com/content/pdf/{doi}.pdf" - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 153
[Credential-related source omitted] - Network accessline 163
def _normalize_doi(identifier: str) -> str: identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 164
identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): if identifier.lower().startswith(prefix.lower()): - Network accessline 165
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Access to secretsline 185
[Credential-related source omitted]
skills/sci-download/unpaywall_download.py
- Executable scriptline 1
Executable file - Network accessline 6
[Credential-related source omitted] - Access to secretsline 6
[Credential-related source omitted] - Network accessline 7
Endpoint: https://api.unpaywall.org/v2/{doi}?email=xxx - Network accessline 27
MIN_PDF_SIZE = 10_000 API_BASE = "https://api.unpaywall.org/v2" - Network accessline 28
API_BASE = "https://api.unpaywall.org/v2" - Network accessline 31
def _get_session(config: dict[str, Any]) -> requests.Session: s = requests.Session() - Network accessline 32
s = requests.Session() - Access to secretsline 65
[Credential-related source omitted] - Network accessline 138
def _normalize_doi(identifier: str) -> str: identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): - Network accessline 139
identifier = identifier.strip() for prefix in ("https://doi.org/", "http://doi.org/", "doi:"): if identifier.lower().startswith(prefix.lower()): - Network accessline 140
for prefix in ("https://doi.org/", "http://doi.org/", "doi:"):
skills/sci-download/webvpn_crypto.py
skills/sci-extract/README.md
- Access to secretsline 126
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted]
skills/sci-extract/extract_core_insights.py
skills/sci-extract/harvest_paper.py
skills/sci-extract/harvester/__init__.py
skills/sci-extract/harvester/env.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted]
skills/sci-extract/harvester/figures.py
skills/sci-extract/harvester/fulltext.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 16
PMC_EFETCH = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" - Network accessline 16
PMC_EFETCH = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" - Network accessline 17
EUROPEPMC_FULLTEXT = "https://www.ebi.ac.uk/europepmc/webservices/rest" - Network accessline 17
EUROPEPMC_FULLTEXT = "https://www.ebi.ac.uk/europepmc/webservices/rest" - Network accessline 18
ELSEVIER_FULLTEXT = "https://api.elsevier.com/content/article/doi" - Network accessline 18
ELSEVIER_FULLTEXT = "https://api.elsevier.com/content/article/doi" - Network accessline 19
SPRINGER_OA_API = "https://api.springernature.com/openaccess/json" - Network accessline 19
SPRINGER_OA_API = "https://api.springernature.com/openaccess/json" - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Network accessline 223
package = oa_package.fetch(meta.pmcid) - Network accessline 223
package = oa_package.fetch(meta.pmcid) - Network accessline 225
urls.append(package.pdf_url) urls.append( f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" - Network accessline 225
urls.append(package.pdf_url) urls.append( f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" - Network accessline 226
urls.append( f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" ) - Network accessline 226
urls.append( f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" ) - Network accessline 227
f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" - Network accessline 227
f"https://europepmc.org/backend/ptpmcrender.fcgi?accid={meta.pmcid}&blobtype=pdf" - Network accessline 228
) if meta.arxiv_id: urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}") - Network accessline 228
) if meta.arxiv_id: urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}") - Network accessline 229
if meta.arxiv_id: urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}") seen: set = set() - Network accessline 229
if meta.arxiv_id: urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}") seen: set = set() - Network accessline 230
urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}") - Network accessline 230
urls.append(f"https://arxiv.org/pdf/{meta.arxiv_id}")
skills/sci-extract/harvester/http.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 68
def _session() -> requests.Session: session = requests.Session() - Network accessline 68
def _session() -> requests.Session: session = requests.Session() - Network accessline 69
session = requests.Session() - Network accessline 69
session = requests.Session()
skills/sci-extract/harvester/identify.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 24
_DOI_URL_PREFIXES = ( "https://doi.org/", - Network accessline 24
_DOI_URL_PREFIXES = ( "https://doi.org/", - Network accessline 25
"https://doi.org/", - Network accessline 25
"https://doi.org/", - Network accessline 26
"http://doi.org/", - Network accessline 26
"http://doi.org/", - Network accessline 27
"https://dx.doi.org/", - Network accessline 27
"https://dx.doi.org/", - Network accessline 28
"http://dx.doi.org/", - Network accessline 28
"http://dx.doi.org/",
skills/sci-extract/harvester/jats.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 15
NS = { "ce": "http://www.elsevier.com/xml/common/dtd", - Network accessline 15
NS = { "ce": "http://www.elsevier.com/xml/common/dtd", - Network accessline 16
"ce": "http://www.elsevier.com/xml/common/dtd", - Network accessline 16
"ce": "http://www.elsevier.com/xml/common/dtd", - Network accessline 17
"xocs": "http://www.elsevier.com/xml/xocs/dtd", - Network accessline 17
"xocs": "http://www.elsevier.com/xml/xocs/dtd", - Network accessline 18
"ja": "http://www.elsevier.com/xml/ja/dtd", - Network accessline 18
"ja": "http://www.elsevier.com/xml/ja/dtd", - Network accessline 19
"xlink": "http://www.w3.org/1999/xlink", - Network accessline 19
"xlink": "http://www.w3.org/1999/xlink", - Network accessline 20
"mml": "http://www.w3.org/1998/Math/MathML", - Network accessline 20
"mml": "http://www.w3.org/1998/Math/MathML", - Possible obfuscationline 103
return cleaned.lstrip("<U+FEFF> \n\r\t") - Possible obfuscationline 103
return cleaned.lstrip("<U+FEFF> \n\r\t") - Network accessline 179
return node.get("{http://www.w3.org/1999/xlink}href") or node.get("href") or "" - Network accessline 179
return node.get("{http://www.w3.org/1999/xlink}href") or node.get("href") or "" - Network accessline 518
label=_text_of(_find_any(figure, "label")), caption=_text_of(_find_any(figure, "caption")), graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "") - Network accessline 518
label=_text_of(_find_any(figure, "label")), caption=_text_of(_find_any(figure, "caption")), graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "") - Network accessline 519
caption=_text_of(_find_any(figure, "caption")), graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "") if link is not None - Network accessline 519
caption=_text_of(_find_any(figure, "caption")), graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "") if link is not None - Network accessline 520
graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "") - Network accessline 520
graphic_href=(link.get("{http://www.w3.org/1999/xlink}href") or link.get("locator") or "")
skills/sci-extract/harvester/metadata.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 18
CROSSREF_API = "https://api.crossref.org/works" - Network accessline 18
CROSSREF_API = "https://api.crossref.org/works" - Network accessline 19
OPENALEX_API = "https://api.openalex.org/works" - Network accessline 19
OPENALEX_API = "https://api.openalex.org/works" - Network accessline 20
S2_API = "https://api.semanticscholar.org/graph/v1/paper" - Network accessline 20
S2_API = "https://api.semanticscholar.org/graph/v1/paper" - Network accessline 21
NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils" - Network accessline 21
NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils" - Network accessline 22
UNPAYWALL_API = "https://api.unpaywall.org/v2" - Network accessline 22
UNPAYWALL_API = "https://api.unpaywall.org/v2" - Network accessline 23
ARXIV_API = "https://export.arxiv.org/api/query" - Network accessline 23
ARXIV_API = "https://export.arxiv.org/api/query" - Network accessline 24
WOS_API = "https://api.clarivate.com/apis/wos-starter/v1/documents" - Network accessline 24
WOS_API = "https://api.clarivate.com/apis/wos-starter/v1/documents" - Network accessline 25
SCOPUS_API = "https://api.elsevier.com/content/abstract/doi" - Network accessline 25
SCOPUS_API = "https://api.elsevier.com/content/abstract/doi" - Network accessline 26
SPRINGER_META_API = "https://api.springernature.com/meta/v2/json" - Network accessline 26
SPRINGER_META_API = "https://api.springernature.com/meta/v2/json" - Network accessline 27
ELSEVIER_API = "https://api.elsevier.com/content/article/doi" - Network accessline 27
ELSEVIER_API = "https://api.elsevier.com/content/article/doi" - Network accessline 283
family=entry.get("family", ""), name=entry.get("name", ""), orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( - Network accessline 283
family=entry.get("family", ""), name=entry.get("name", ""), orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( - Network accessline 284
name=entry.get("name", ""), orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( "https://orcid.org/", "" - Network accessline 284
name=entry.get("name", ""), orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( "https://orcid.org/", "" - Network accessline 285
orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( - Network accessline 285
orcid=(entry.get("ORCID") or "").replace("http://orcid.org/", "").replace( - Network accessline 286
"https://orcid.org/", "" - Network accessline 286
"https://orcid.org/", "" - Network accessline 314
email = env.key("OPENALEX_EMAIL") or env.contact_email() params = {"mailto": email} if email else {} work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) - Network accessline 314
email = env.key("OPENALEX_EMAIL") or env.contact_email() params = {"mailto": email} if email else {} work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) - Network accessline 315
params = {"mailto": email} if email else {} work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) if not work or work.get("id") is None: - Network accessline 315
params = {"mailto": email} if email else {} work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) if not work or work.get("id") is None: - Network accessline 316
work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) - Network accessline 316
work = http.get_json(f"{OPENALEX_API}/https://doi.org/{doi}", params=params) - Network accessline 418
given=" ".join(parts[:-1]) if len(parts) > 1 else "", family=parts[-1] if parts else "", orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), - Network accessline 418
given=" ".join(parts[:-1]) if len(parts) > 1 else "", family=parts[-1] if parts else "", orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), - Network accessline 419
family=parts[-1] if parts else "", orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), affiliations=[i.get("display_name", "") for i in entry.get("institutions") or []], - Network accessline 419
family=parts[-1] if parts else "", orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), affiliations=[i.get("display_name", "") for i in entry.get("institutions") or []], - Network accessline 420
orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), - Network accessline 420
orcid=(author.get("orcid") or "").replace("https://orcid.org/", ""), - Access to secretsline 438
[Credential-related source omitted] - Access to secretsline 438
[Credential-related source omitted] - Access to secretsline 439
[Credential-related source omitted] - Access to secretsline 439
[Credential-related source omitted] - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 496
[Credential-related source omitted] - Access to secretsline 496
[Credential-related source omitted] - Access to secretsline 497
[Credential-related source omitted] - Access to secretsline 497
[Credential-related source omitted] - Network accessline 510
return payload = http.get_json( "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", - Network accessline 510
return payload = http.get_json( "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", - Network accessline 511
payload = http.get_json( "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", params={"ids": probe, "format": "json", "tool": "sci-extract"}, - Network accessline 511
payload = http.get_json( "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", params={"ids": probe, "format": "json", "tool": "sci-extract"}, - Network accessline 512
"https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", - Network accessline 512
"https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/", - Network accessline 645
ns = {"atom": "http://www.w3.org/2005/Atom", "arxiv": "http://arxiv.org/schemas/atom"} - Network accessline 645
ns = {"atom": "http://www.w3.org/2005/Atom", "arxiv": "http://arxiv.org/schemas/atom"} - Network accessline 687
) ) meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") - Network accessline 687
) ) meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") - Network accessline 688
) meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") meta.oa_pdf_url = _first_nonempty(meta.oa_pdf_url, f"https://arxiv.org/pdf/{arxiv_id}") - Network accessline 688
) meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") meta.oa_pdf_url = _first_nonempty(meta.oa_pdf_url, f"https://arxiv.org/pdf/{arxiv_id}") - Network accessline 689
meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") - Network accessline 689
meta.urls.setdefault("arxiv_abs", f"https://arxiv.org/abs/{arxiv_id}") - Network accessline 690
meta.oa_pdf_url = _first_nonempty(meta.oa_pdf_url, f"https://arxiv.org/pdf/{arxiv_id}") - Network accessline 690
meta.oa_pdf_url = _first_nonempty(meta.oa_pdf_url, f"https://arxiv.org/pdf/{arxiv_id}") - Access to secretsline 699
[Credential-related source omitted] - Access to secretsline 699
[Credential-related source omitted] - Access to secretsline 700
[Credential-related source omitted] - Access to secretsline 700
[Credential-related source omitted] - Access to secretsline 705
[Credential-related source omitted] - Access to secretsline 705
[Credential-related source omitted] - Network accessline 729
if meta.wos_uid: meta.urls.setdefault( "wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" - Network accessline 729
if meta.wos_uid: meta.urls.setdefault( "wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" - Network accessline 730
meta.urls.setdefault( "wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" ) - Network accessline 730
meta.urls.setdefault( "wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" ) - Network accessline 731
"wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" - Network accessline 731
"wos", f"https://www.webofscience.com/wos/woscc/full-record/{meta.wos_uid}" - Access to secretsline 739
[Credential-related source omitted] - Access to secretsline 739
[Credential-related source omitted] - Access to secretsline 740
[Credential-related source omitted] - Access to secretsline 740
[Credential-related source omitted] - Access to secretsline 742
[Credential-related source omitted] - Access to secretsline 742
[Credential-related source omitted] - Access to secretsline 779
[Credential-related source omitted] - Access to secretsline 779
[Credential-related source omitted] - Access to secretsline 780
[Credential-related source omitted] - Access to secretsline 780
[Credential-related source omitted] - Access to secretsline 783
[Credential-related source omitted] - Access to secretsline 783
[Credential-related source omitted] - Access to secretsline 820
[Credential-related source omitted] - Access to secretsline 820
[Credential-related source omitted] - Access to secretsline 821
[Credential-related source omitted] - Access to secretsline 821
[Credential-related source omitted] - Access to secretsline 823
[Credential-related source omitted] - Access to secretsline 823
[Credential-related source omitted] - Network accessline 911
meta.year = meta.published_date[:4] if meta.doi: meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") - Network accessline 911
meta.year = meta.published_date[:4] if meta.doi: meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") - Network accessline 912
if meta.doi: meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") if meta.pmcid: - Network accessline 912
if meta.doi: meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") if meta.pmcid: - Network accessline 913
meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") - Network accessline 913
meta.urls.setdefault("doi", f"https://doi.org/{meta.doi}") - Network accessline 914
if meta.pmcid: meta.urls.setdefault( "pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" - Network accessline 914
if meta.pmcid: meta.urls.setdefault( "pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" - Network accessline 915
meta.urls.setdefault( "pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" ) - Network accessline 915
meta.urls.setdefault( "pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" ) - Network accessline 916
"pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" - Network accessline 916
"pmc", f"https://www.ncbi.nlm.nih.gov/pmc/articles/{meta.pmcid}/" - Network accessline 917
) if meta.pmid: meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/") - Network accessline 917
) if meta.pmid: meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/") - Network accessline 918
if meta.pmid: meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/") if meta.title: - Network accessline 918
if meta.pmid: meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/") if meta.title: - Network accessline 919
meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/") - Network accessline 919
meta.urls.setdefault("pubmed", f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/")
skills/sci-extract/harvester/oa_package.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 17
Docs: https://pmc.ncbi.nlm.nih.gov/tools/pmcaws/ - Network accessline 17
Docs: https://pmc.ncbi.nlm.nih.gov/tools/pmcaws/ - Network accessline 27
BUCKET = "https://pmc-oa-opendata.s3.amazonaws.com" - Network accessline 27
BUCKET = "https://pmc-oa-opendata.s3.amazonaws.com" - Network accessline 94
def fetch(pmcid: str, *, verbose: bool = False) -> OAPackage: - Network accessline 94
def fetch(pmcid: str, *, verbose: bool = False) -> OAPackage:
skills/sci-extract/harvester/render.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 259
def _raw_identifiers(out, meta: PaperMetadata) -> None: ids = [ ("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), - Network accessline 259
def _raw_identifiers(out, meta: PaperMetadata) -> None: ids = [ ("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), - Network accessline 260
ids = [ ("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), ("PMID", meta.pmid, f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" if meta.pmid else ""), - Network accessline 260
ids = [ ("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), ("PMID", meta.pmid, f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" if meta.pmid else ""), - Network accessline 261
("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), - Network accessline 261
("DOI", meta.doi, f"https://doi.org/{meta.doi}" if meta.doi else ""), - Network accessline 262
("PMID", meta.pmid, f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" if meta.pmid else ""), - Network accessline 262
("PMID", meta.pmid, f"https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" if meta.pmid else ""), - Network accessline 264
"PMCID", meta.pmcid, f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", - Network accessline 264
"PMCID", meta.pmcid, f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", - Network accessline 265
meta.pmcid, f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", ), - Network accessline 265
meta.pmcid, f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", ), - Network accessline 266
f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", - Network accessline 266
f"https://pmc.ncbi.nlm.nih.gov/articles/{meta.pmcid}/" if meta.pmcid else "", - Network accessline 267
), ("arXiv", meta.arxiv_id, f"https://arxiv.org/abs/{meta.arxiv_id}" if meta.arxiv_id else ""), ("Scopus", meta.scopus_id, ""), - Network accessline 267
), ("arXiv", meta.arxiv_id, f"https://arxiv.org/abs/{meta.arxiv_id}" if meta.arxiv_id else ""), ("Scopus", meta.scopus_id, ""), - Network accessline 268
("arXiv", meta.arxiv_id, f"https://arxiv.org/abs/{meta.arxiv_id}" if meta.arxiv_id else ""), - Network accessline 268
("arXiv", meta.arxiv_id, f"https://arxiv.org/abs/{meta.arxiv_id}" if meta.arxiv_id else ""), - Network accessline 499
doi = ref.get("doi") if doi and doi not in text: text = f"{text} https://doi.org/{doi}".strip() - Network accessline 499
doi = ref.get("doi") if doi and doi not in text: text = f"{text} https://doi.org/{doi}".strip() - Network accessline 500
if doi and doi not in text: text = f"{text} https://doi.org/{doi}".strip() if text: - Network accessline 500
if doi and doi not in text: text = f"{text} https://doi.org/{doi}".strip() if text: - Network accessline 501
text = f"{text} https://doi.org/{doi}".strip() - Network accessline 501
text = f"{text} https://doi.org/{doi}".strip() - Network accessline 606
routes: list[str] = [] landing = meta.urls.get("doi") or ( f"https://doi.org/{meta.doi}" if meta.doi else "" - Network accessline 606
routes: list[str] = [] landing = meta.urls.get("doi") or ( f"https://doi.org/{meta.doi}" if meta.doi else "" - Network accessline 607
landing = meta.urls.get("doi") or ( f"https://doi.org/{meta.doi}" if meta.doi else "" ) - Network accessline 607
landing = meta.urls.get("doi") or ( f"https://doi.org/{meta.doi}" if meta.doi else "" ) - Network accessline 608
f"https://doi.org/{meta.doi}" if meta.doi else "" - Network accessline 608
f"https://doi.org/{meta.doi}" if meta.doi else "" - Network accessline 612
if meta.pmid: routes.append( f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" - Network accessline 612
if meta.pmid: routes.append( f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" - Network accessline 613
routes.append( f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" ) - Network accessline 613
routes.append( f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" ) - Network accessline 614
f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" - Network accessline 614
f"- PubMed record: https://pubmed.ncbi.nlm.nih.gov/{meta.pmid}/" - Access to secretsline 624
[Credential-related source omitted] - Access to secretsline 624
[Credential-related source omitted]
skills/sci-figure/LICENSE
- Network accessline 16
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 16
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 17
along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 17
along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 26
For the full AGPL v3 license text, see: https://www.gnu.org/licenses/agpl-3.0.html - Network accessline 26
For the full AGPL v3 license text, see: https://www.gnu.org/licenses/agpl-3.0.html - Network accessline 27
https://www.gnu.org/licenses/agpl-3.0.html - Network accessline 27
https://www.gnu.org/licenses/agpl-3.0.html
skills/sci-figure/README.md
- Network accessline 16
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 16
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 17
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 17
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 25
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 25
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 107
| Library | Role | |---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 107
| Library | Role | |---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 108
|---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | | [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 108
|---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | | [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 109
| [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 109
| [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 110
| [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 110
| [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 111
| [opencv-python](https://opencv.org/) | Image processing | - Network accessline 111
| [opencv-python](https://opencv.org/) | Image processing | - Network accessline 112
| [Pillow](https://pillow.readthedocs.io/) | Image format conversion | - Network accessline 112
| [Pillow](https://pillow.readthedocs.io/) | Image format conversion | - Network accessline 113
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR for sub-figure labels | - Network accessline 113
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR for sub-figure labels | - Network accessline 114
| [NumPy](https://numpy.org/) | Array operations | - Network accessline 114
| [NumPy](https://numpy.org/) | Array operations | - Network accessline 130
**Note**: This project uses [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is licensed under AGPL v3. Therefore, this entire project is also licensed under AGPL v3 or later. - Network accessline 130
**Note**: This project uses [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is licensed under AGPL v3. Therefore, this entire project is also licensed under AGPL v3 or later.
skills/sci-figure/README_CN.md
- Network accessline 18
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 18
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 19
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 19
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 26
`<U+0008>ash git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 26
`<U+0008>ash git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 27
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 27
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 158
| 库 | 用途 | |----|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | - Network accessline 158
| 库 | 用途 | |----|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | - Network accessline 159
|----|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | | [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/) | PDF → 高质量图像渲染 | - Network accessline 159
|----|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | | [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/) | PDF → 高质量图像渲染 | - Network accessline 160
| [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | - Network accessline 160
| [pdfplumber](https://github.com/jsvine/pdfplumber) | 文本 + 坐标提取 | - Network accessline 161
| [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/) | PDF → 高质量图像渲染 | - Network accessline 161
| [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/) | PDF → 高质量图像渲染 | - Network accessline 162
| [opencv-python](https://opencv.org/) | 边界检测、轮廓分析 | - Network accessline 162
| [opencv-python](https://opencv.org/) | 边界检测、轮廓分析 | - Network accessline 163
| [Pillow](https://pillow.readthedocs.io/) | 图像格式转换 | - Network accessline 163
| [Pillow](https://pillow.readthedocs.io/) | 图像格式转换 | - Network accessline 164
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR 子图标签识别 | - Network accessline 164
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR 子图标签识别 | - Network accessline 165
| [NumPy](https://numpy.org/) | 数组操作 | - Network accessline 165
| [NumPy](https://numpy.org/) | 数组操作 | - Network accessline 179
如有问题或建议,请在 [GitHub Issues](https://github.com/xssjqx/Sh_Sci_Fig/issues) 中提出。 - Network accessline 179
如有问题或建议,请在 [GitHub Issues](https://github.com/xssjqx/Sh_Sci_Fig/issues) 中提出。
skills/sci-figure/SKILL.md
- Network accessline 29
> **License note**: sci-figure is licensed under **AGPL-3.0-or-later** because it links [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is AGPL-licensed. - Network accessline 29
> **License note**: sci-figure is licensed under **AGPL-3.0-or-later** because it links [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is AGPL-licensed.
skills/sci-figure/sci_figure.egg-info/PKG-INFO
- Network accessline 3
Version: 2.0.0 Summary: Scientific figure extractor for academic PDF papers — three-engine fusion Home-page: https://github.com/xssjqx/Sh_Sci_Fig - Network accessline 3
Version: 2.0.0 Summary: Scientific figure extractor for academic PDF papers — three-engine fusion Home-page: https://github.com/xssjqx/Sh_Sci_Fig - Network accessline 4
Summary: Scientific figure extractor for academic PDF papers — three-engine fusion Home-page: https://github.com/xssjqx/Sh_Sci_Fig Author: ShClaw - Network accessline 4
Summary: Scientific figure extractor for academic PDF papers — three-engine fusion Home-page: https://github.com/xssjqx/Sh_Sci_Fig Author: ShClaw - Network accessline 5
Home-page: https://github.com/xssjqx/Sh_Sci_Fig - Network accessline 5
Home-page: https://github.com/xssjqx/Sh_Sci_Fig - Network accessline 55
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 55
- Python 3.9+ - [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 56
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 56
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - Network accessline 63
```bash git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 63
```bash git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 64
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 64
git clone https://github.com/xssjqx/Sh_Sci_Fig.git - Network accessline 146
| Library | Role | |---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 146
| Library | Role | |---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 147
|---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | | [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 147
|---------|------| | [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | | [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 148
| [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 148
| [pdfplumber](https://github.com/jsvine/pdfplumber) | Text + coordinate extraction | - Network accessline 149
| [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 149
| [PyMuPDF](https://pymupdf.readthedocs.io/) | PDF → image rendering | - Network accessline 150
| [opencv-python](https://opencv.org/) | Image processing | - Network accessline 150
| [opencv-python](https://opencv.org/) | Image processing | - Network accessline 151
| [Pillow](https://pillow.readthedocs.io/) | Image format conversion | - Network accessline 151
| [Pillow](https://pillow.readthedocs.io/) | Image format conversion | - Network accessline 152
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR for sub-figure labels | - Network accessline 152
| [pytesseract](https://github.com/madmaze/pytesseract) | OCR for sub-figure labels | - Network accessline 153
| [NumPy](https://numpy.org/) | Array operations | - Network accessline 153
| [NumPy](https://numpy.org/) | Array operations | - Network accessline 169
**Note**: This project uses [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is licensed under AGPL v3. Therefore, this entire project is also licensed under AGPL v3 or later. - Network accessline 169
**Note**: This project uses [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is licensed under AGPL v3. Therefore, this entire project is also licensed under AGPL v3 or later.
skills/sci-figure/sci_figure/__init__.py
skills/sci-figure/sci_figure/annotator.py
skills/sci-figure/sci_figure/caption_detector.py
skills/sci-figure/sci_figure/cli.py
skills/sci-figure/sci_figure/column_detector.py
skills/sci-figure/sci_figure/exceptions.py
skills/sci-figure/sci_figure/figure_extractor.py
skills/sci-figure/sci_figure/image_processor.py
skills/sci-figure/sci_figure/native_extractor.py
skills/sci-figure/sci_figure/pdf_parser.py
skills/sci-figure/sci_figure/region_detector.py
skills/sci-figure/sci_figure/subfigure_splitter.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 38
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Network accessline 189
for nr in range(1, n_expected + 1): if n_expected % nr == 0: nc = n_expected // nr - Network accessline 189
for nr in range(1, n_expected + 1): if n_expected % nr == 0: nc = n_expected // nr - Network accessline 190
if n_expected % nr == 0: nc = n_expected // nr factorizations.append((nr, nc)) - Network accessline 190
if n_expected % nr == 0: nc = n_expected // nr factorizations.append((nr, nc)) - Network accessline 191
nc = n_expected // nr - Network accessline 191
nc = n_expected // nr - Network accessline 197
for nr, nc in factorizations: - Network accessline 197
for nr, nc in factorizations: - Network accessline 199
h_score = self._check_grid_gaps(gray, axis="horizontal", n_splits=nr - 1) v_score = self._check_grid_gaps(gray, axis="vertical", n_splits=nc - 1) - Network accessline 199
h_score = self._check_grid_gaps(gray, axis="horizontal", n_splits=nr - 1) v_score = self._check_grid_gaps(gray, axis="vertical", n_splits=nc - 1) - Network accessline 200
v_score = self._check_grid_gaps(gray, axis="vertical", n_splits=nc - 1) - Network accessline 200
v_score = self._check_grid_gaps(gray, axis="vertical", n_splits=nc - 1) - Network accessline 205
# Generate cells for this grid. # Guard against tiny images where h // nr or w // nc == 0. - Network accessline 205
# Generate cells for this grid. # Guard against tiny images where h // nr or w // nc == 0. - Network accessline 206
# Guard against tiny images where h // nr or w // nc == 0. - Network accessline 206
# Guard against tiny images where h // nr or w // nc == 0. - Access to secretsline 420
[Credential-related source omitted] - Access to secretsline 420
[Credential-related source omitted]
skills/sci-figure/sci_figure/utils.py
skills/sci-figure/scripts/extract_figure.py
skills/sci-figure/setup.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 11
long_description_content_type='text/markdown', author='ShClaw', url='https://github.com/xssjqx/Sh_Sci_Fig', - Network accessline 11
long_description_content_type='text/markdown', author='ShClaw', url='https://github.com/xssjqx/Sh_Sci_Fig', - Network accessline 12
author='ShClaw', url='https://github.com/xssjqx/Sh_Sci_Fig', license='AGPL-3.0-or-later', - Network accessline 12
author='ShClaw', url='https://github.com/xssjqx/Sh_Sci_Fig', license='AGPL-3.0-or-later', - Network accessline 13
url='https://github.com/xssjqx/Sh_Sci_Fig', - Network accessline 13
url='https://github.com/xssjqx/Sh_Sci_Fig',
skills/sci-figure/tests/__init__.py
skills/sci-figure/tests/test_caption_dedup.py
skills/sci-html/conftest.py
skills/sci-html/scripts/generate_html_deck.py
skills/sci-html/src/sci_html/__init__.py
skills/sci-html/src/sci_html/cli.py
skills/sci-html/src/sci_html/integrations/__init__.py
skills/sci-html/src/sci_html/integrations/extract/__init__.py
skills/sci-html/src/sci_html/integrations/extract/core_insights.py
skills/sci-html/src/sci_html/models.py
skills/sci-html/src/sci_html/paper_pipeline.py
skills/sci-html/src/sci_html/parser.py
skills/sci-html/src/sci_html/renderer.py
skills/sci-html/templates/deck.js
skills/sci-html/tests/_path.py
skills/sci-html/tests/test_paper_pipeline.py
skills/sci-html/tests/test_parser.py
skills/sci-html/tests/test_renderer.py
skills/sci-polish/scripts/ai_score_estimator.py
skills/sci-polish/scripts/tier1_words.py
skills/sci-polish/scripts/validate_polish_output.py
skills/sci-ppt/.gitignore
skills/sci-ppt/README.md
skills/sci-ppt/src/aut_sci_ppt/__init__.py
skills/sci-ppt/src/aut_sci_ppt/academic_parser.py
skills/sci-ppt/src/aut_sci_ppt/agent.py
skills/sci-ppt/src/aut_sci_ppt/config.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted]
skills/sci-ppt/src/aut_sci_ppt/enhanced_agent.py
skills/sci-ppt/src/aut_sci_ppt/generator/__init__.py
skills/sci-ppt/src/aut_sci_ppt/generator/formula_renderer.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Network accessline 118
url = ( f"https://latex.codecogs.com/png.image?" - Network accessline 118
url = ( f"https://latex.codecogs.com/png.image?" - Network accessline 119
f"https://latex.codecogs.com/png.image?" - Network accessline 119
f"https://latex.codecogs.com/png.image?" - Network accessline 120
f"\\dpi{{{self.dpi}}}\\bg{{transparent}}\\fg{{{color}}}\\inline {encoded}" ) response = requests.get(url, timeout=10) - Network accessline 120
f"\\dpi{{{self.dpi}}}\\bg{{transparent}}\\fg{{{color}}}\\inline {encoded}" ) response = requests.get(url, timeout=10) - Network accessline 121
) response = requests.get(url, timeout=10) if response.status_code == 200: - Network accessline 121
) response = requests.get(url, timeout=10) if response.status_code == 200: - Network accessline 122
response = requests.get(url, timeout=10) - Network accessline 122
response = requests.get(url, timeout=10)
skills/sci-ppt/src/aut_sci_ppt/generator/pptx_generator.py
skills/sci-ppt/src/aut_sci_ppt/image/__init__.py
skills/sci-ppt/src/aut_sci_ppt/interactive.py
skills/sci-ppt/src/aut_sci_ppt/layout_engine.py
skills/sci-ppt/src/aut_sci_ppt/main.py
skills/sci-ppt/src/aut_sci_ppt/models.py
skills/sci-ppt/src/aut_sci_ppt/paginator/__init__.py
skills/sci-ppt/src/aut_sci_ppt/paginator/smart_paginator.py
skills/sci-ppt/src/aut_sci_ppt/paper_workflow.py
skills/sci-ppt/src/aut_sci_ppt/parser/__init__.py
skills/sci-ppt/src/aut_sci_ppt/parser/text_parser.py
skills/sci-ppt/src/aut_sci_ppt/pdf_extractor.py
skills/sci-ppt/src/aut_sci_ppt/run.py
skills/sci-ppt/src/aut_sci_ppt/templates/__init__.py
skills/sci-ppt/src/aut_sci_ppt/templates/base.py
skills/sci-ppt/src/aut_sci_ppt/templates/content_detail.py
skills/sci-ppt/src/aut_sci_ppt/templates/content_figure.py
skills/sci-ppt/src/aut_sci_ppt/templates/content_list.py
skills/sci-ppt/src/aut_sci_ppt/templates/cover.py
skills/sci-ppt/src/aut_sci_ppt/templates/ending.py
skills/sci-ppt/src/aut_sci_ppt/templates/section.py
skills/sci-ppt/src/aut_sci_ppt/templates/timeline.py
skills/sci-ppt/src/aut_sci_ppt/templates/toc.py
skills/sci-ppt/src/aut_sci_ppt/tests/__init__.py
skills/sci-ppt/src/aut_sci_ppt/tests/test_agent.py
skills/sci-review/scripts/validate_review_output.py
skills/sci-search/.gitignore
skills/sci-search/SKILL.md
- Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Network accessline 63
Apply for a free API key at: https://developer.clarivate.com/apis/wos-starter - Network accessline 63
Apply for a free API key at: https://developer.clarivate.com/apis/wos-starter - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Network accessline 82
Apply for free API keys at: https://dev.springernature.com/ - Network accessline 82
Apply for free API keys at: https://dev.springernature.com/ - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Network accessline 91
Apply for a free API key at: https://dev.elsevier.com/ - Network accessline 91
Apply for a free API key at: https://dev.elsevier.com/ - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Network accessline 100
Request a key at: https://www.semanticscholar.org/product/api#api-key - Network accessline 100
Request a key at: https://www.semanticscholar.org/product/api#api-key - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted]
skills/sci-search/sci_search.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 165
[Credential-related source omitted] - Access to secretsline 165
[Credential-related source omitted] - Network accessline 271
class ArxivFetcher: API_URL = "https://export.arxiv.org/api/query" - Network accessline 271
class ArxivFetcher: API_URL = "https://export.arxiv.org/api/query" - Network accessline 272
API_URL = "https://export.arxiv.org/api/query" - Network accessline 272
API_URL = "https://export.arxiv.org/api/query" - Network accessline 273
NS = {'atom': 'http://www.w3.org/2005/Atom'} - Network accessline 273
NS = {'atom': 'http://www.w3.org/2005/Atom'} - Network accessline 277
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 277
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 278
try: with urllib.request.urlopen(url, timeout=15) as resp: content = resp.read().decode('utf-8') - Network accessline 278
try: with urllib.request.urlopen(url, timeout=15) as resp: content = resp.read().decode('utf-8') - Network accessline 279
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 279
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 301
[Credential-related source omitted] - Network accessline 301
[Credential-related source omitted] - Access to secretsline 301
[Credential-related source omitted] - Access to secretsline 301
[Credential-related source omitted] - Network accessline 302
Apply for a free API key at: https://developer.clarivate.com/apis/wos-starter - Network accessline 302
Apply for a free API key at: https://developer.clarivate.com/apis/wos-starter - Network accessline 305
API_URL = "https://api.clarivate.com/apis/wos-starter/v1/documents" - Network accessline 305
API_URL = "https://api.clarivate.com/apis/wos-starter/v1/documents" - Access to secretsline 308
[Credential-related source omitted] - Access to secretsline 308
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 314
[Credential-related source omitted] - Access to secretsline 314
[Credential-related source omitted] - Network accessline 322
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 322
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 323
[Credential-related source omitted] - Network accessline 323
[Credential-related source omitted] - Network accessline 324
req = urllib.request.Request(url, headers={ - Network accessline 324
req = urllib.request.Request(url, headers={ - Access to secretsline 325
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted] - Network accessline 327
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 327
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 328
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 328
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 329
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 329
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 355
uid = hit.get("uid", "") url_link = f"https://www.webofscience.com/wos/woscc/full-record/{uid}" if uid else "" - Network accessline 355
uid = hit.get("uid", "") url_link = f"https://www.webofscience.com/wos/woscc/full-record/{uid}" if uid else "" - Network accessline 356
url_link = f"https://www.webofscience.com/wos/woscc/full-record/{uid}" if uid else "" - Network accessline 356
url_link = f"https://www.webofscience.com/wos/woscc/full-record/{uid}" if uid else "" - Network accessline 378
[Credential-related source omitted] - Network accessline 378
[Credential-related source omitted] - Access to secretsline 378
[Credential-related source omitted] - Access to secretsline 378
[Credential-related source omitted] - Network accessline 379
Apply for a free API key at: https://dev.springernature.com/ - Network accessline 379
Apply for a free API key at: https://dev.springernature.com/ - Network accessline 382
API_URL = "https://api.springernature.com/meta/v2/json" - Network accessline 382
API_URL = "https://api.springernature.com/meta/v2/json" - Access to secretsline 385
[Credential-related source omitted] - Access to secretsline 385
[Credential-related source omitted] - Access to secretsline 388
[Credential-related source omitted] - Access to secretsline 388
[Credential-related source omitted] - Access to secretsline 391
[Credential-related source omitted] - Access to secretsline 391
[Credential-related source omitted] - Access to secretsline 396
[Credential-related source omitted] - Access to secretsline 396
[Credential-related source omitted] - Network accessline 399
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 399
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 400
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ "Accept": "application/json", - Network accessline 400
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ "Accept": "application/json", - Network accessline 401
req = urllib.request.Request(url, headers={ - Network accessline 401
req = urllib.request.Request(url, headers={ - Network accessline 403
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 403
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 404
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 404
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 405
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 405
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 416
doi = record.get("doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 416
doi = record.get("doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 417
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 417
doi_url = f"https://doi.org/{doi}" if doi else "" - Access to secretsline 446
[Credential-related source omitted] - Access to secretsline 446
[Credential-related source omitted] - Network accessline 452
[Credential-related source omitted] - Network accessline 452
[Credential-related source omitted] - Access to secretsline 452
[Credential-related source omitted] - Access to secretsline 452
[Credential-related source omitted] - Network accessline 453
[Credential-related source omitted] - Network accessline 453
[Credential-related source omitted] - Access to secretsline 453
[Credential-related source omitted] - Access to secretsline 453
[Credential-related source omitted] - Network accessline 454
Apply for access at: https://dev.springernature.com/ - Network accessline 454
Apply for access at: https://dev.springernature.com/ - Network accessline 457
API_URL = "https://api.springernature.com/openaccess/json" - Network accessline 457
API_URL = "https://api.springernature.com/openaccess/json" - Access to secretsline 460
[Credential-related source omitted] - Access to secretsline 460
[Credential-related source omitted] - Access to secretsline 463
[Credential-related source omitted] - Access to secretsline 463
[Credential-related source omitted] - Access to secretsline 466
[Credential-related source omitted] - Access to secretsline 466
[Credential-related source omitted] - Access to secretsline 471
[Credential-related source omitted] - Access to secretsline 471
[Credential-related source omitted] - Network accessline 474
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 474
} url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 475
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ "Accept": "application/json", - Network accessline 475
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ "Accept": "application/json", - Network accessline 476
req = urllib.request.Request(url, headers={ - Network accessline 476
req = urllib.request.Request(url, headers={ - Network accessline 478
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 478
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 479
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 479
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 480
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 480
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 491
doi = record.get("doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 491
doi = record.get("doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 492
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 492
doi_url = f"https://doi.org/{doi}" if doi else "" - Access to secretsline 538
[Credential-related source omitted] - Access to secretsline 538
[Credential-related source omitted] - Network accessline 544
[Credential-related source omitted] - Network accessline 544
[Credential-related source omitted] - Access to secretsline 544
[Credential-related source omitted] - Access to secretsline 544
[Credential-related source omitted] - Network accessline 545
Apply for a free API key at: https://dev.elsevier.com/ - Network accessline 545
Apply for a free API key at: https://dev.elsevier.com/ - Network accessline 547
API_URL = "https://api.elsevier.com/content/search/scopus" - Network accessline 547
API_URL = "https://api.elsevier.com/content/search/scopus" - Access to secretsline 550
[Credential-related source omitted] - Access to secretsline 550
[Credential-related source omitted] - Access to secretsline 554
[Credential-related source omitted] - Access to secretsline 554
[Credential-related source omitted] - Access to secretsline 557
[Credential-related source omitted] - Access to secretsline 557
[Credential-related source omitted] - Access to secretsline 568
[Credential-related source omitted] - Access to secretsline 568
[Credential-related source omitted] - Network accessline 572
if self.insttoken: headers["X-ELS-Insttoken"] = self.insttoken req = urllib.request.Request(url, headers=headers) - Network accessline 572
if self.insttoken: headers["X-ELS-Insttoken"] = self.insttoken req = urllib.request.Request(url, headers=headers) - Network accessline 573
headers["X-ELS-Insttoken"] = self.insttoken req = urllib.request.Request(url, headers=headers) try: - Network accessline 573
headers["X-ELS-Insttoken"] = self.insttoken req = urllib.request.Request(url, headers=headers) try: - Network accessline 574
req = urllib.request.Request(url, headers=headers) - Network accessline 574
req = urllib.request.Request(url, headers=headers) - Network accessline 575
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 575
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 576
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 576
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 590
doi = entry.get("prism:doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 590
doi = entry.get("prism:doi", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 591
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 591
doi_url = f"https://doi.org/{doi}" if doi else "" - Access to secretsline 621
[Credential-related source omitted] - Access to secretsline 621
[Credential-related source omitted] - Network accessline 627
No API key required for basic use (rate-limited). Optional SEMANTIC_SCHOLAR_API_KEY for higher rate limits. Request key at: https://www.semanticscholar.org/product/api#api-key - Network accessline 627
No API key required for basic use (rate-limited). Optional SEMANTIC_SCHOLAR_API_KEY for higher rate limits. Request key at: https://www.semanticscholar.org/product/api#api-key - Network accessline 628
[Credential-related source omitted] - Network accessline 628
[Credential-related source omitted] - Access to secretsline 628
[Credential-related source omitted] - Access to secretsline 628
[Credential-related source omitted] - Network accessline 629
Request key at: https://www.semanticscholar.org/product/api#api-key - Network accessline 629
Request key at: https://www.semanticscholar.org/product/api#api-key - Network accessline 631
API_URL = "https://api.semanticscholar.org/graph/v1/paper/search" - Network accessline 631
API_URL = "https://api.semanticscholar.org/graph/v1/paper/search" - Access to secretsline 634
[Credential-related source omitted] - Access to secretsline 634
[Credential-related source omitted] - Access to secretsline 647
[Credential-related source omitted] - Access to secretsline 647
[Credential-related source omitted] - Access to secretsline 648
[Credential-related source omitted] - Access to secretsline 648
[Credential-related source omitted] - Network accessline 650
req = urllib.request.Request(url, headers=headers) - Network accessline 650
req = urllib.request.Request(url, headers=headers) - Network accessline 652
for attempt in range(2): try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 652
for attempt in range(2): try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 653
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 653
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 654
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 654
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 674
ext_ids = item.get("externalIds") or {} doi = ext_ids.get("DOI", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 674
ext_ids = item.get("externalIds") or {} doi = ext_ids.get("DOI", "") doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 675
doi = ext_ids.get("DOI", "") doi_url = f"https://doi.org/{doi}" if doi else "" s2_url = item.get("url", "") - Network accessline 675
doi = ext_ids.get("DOI", "") doi_url = f"https://doi.org/{doi}" if doi else "" s2_url = item.get("url", "") - Network accessline 676
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 676
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 697
Completely free, no API key needed. Optional OPENALEX_EMAIL for polite pool (higher rate limits). Docs: https://docs.openalex.org/ - Network accessline 697
Completely free, no API key needed. Optional OPENALEX_EMAIL for polite pool (higher rate limits). Docs: https://docs.openalex.org/ - Network accessline 698
Optional OPENALEX_EMAIL for polite pool (higher rate limits). Docs: https://docs.openalex.org/ """ - Network accessline 698
Optional OPENALEX_EMAIL for polite pool (higher rate limits). Docs: https://docs.openalex.org/ """ - Network accessline 699
Docs: https://docs.openalex.org/ - Network accessline 699
Docs: https://docs.openalex.org/ - Network accessline 701
API_URL = "https://api.openalex.org/works" - Network accessline 701
API_URL = "https://api.openalex.org/works" - Network accessline 718
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 718
url = f"{self.API_URL}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={ - Network accessline 719
req = urllib.request.Request(url, headers={ - Network accessline 719
req = urllib.request.Request(url, headers={ - Network accessline 722
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 722
}) try: with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 723
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 723
try: with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode("utf-8")) - Network accessline 724
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 724
with urllib.request.urlopen(req, timeout=15) as resp: - Network accessline 737
year = str(work.get("publication_year", "")) if work.get("publication_year") else "" doi = (work.get("doi") or "").replace("https://doi.org/", "") - Network accessline 737
year = str(work.get("publication_year", "")) if work.get("publication_year") else "" doi = (work.get("doi") or "").replace("https://doi.org/", "") - Network accessline 738
doi = (work.get("doi") or "").replace("https://doi.org/", "") - Network accessline 738
doi = (work.get("doi") or "").replace("https://doi.org/", "") - Network accessline 739
doi_url = f"https://doi.org/{doi}" if doi else "" - Network accessline 739
doi_url = f"https://doi.org/{doi}" if doi else "" - Access to secretsline 768
[Credential-related source omitted] - Access to secretsline 768
[Credential-related source omitted] - Access to secretsline 769
[Credential-related source omitted] - Access to secretsline 769
[Credential-related source omitted] - Network accessline 773
ESEARCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" - Network accessline 773
ESEARCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" - Network accessline 774
EFETCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" - Network accessline 774
EFETCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" - Access to secretsline 777
[Credential-related source omitted] - Access to secretsline 777
[Credential-related source omitted] - Access to secretsline 786
[Credential-related source omitted] - Access to secretsline 786
[Credential-related source omitted] - Access to secretsline 787
[Credential-related source omitted] - Access to secretsline 787
[Credential-related source omitted] - Network accessline 789
req = urllib.request.Request( - Network accessline 789
req = urllib.request.Request( - Network accessline 791
headers={"User-Agent": f"{self.tool}/1.0"}, ) with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 791
headers={"User-Agent": f"{self.tool}/1.0"}, ) with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 792
) with urllib.request.urlopen(req, timeout=timeout) as resp: return resp.read() - Network accessline 792
) with urllib.request.urlopen(req, timeout=timeout) as resp: return resp.read() - Network accessline 793
with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 793
with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 874
"year": year, "journal": journal, "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", - Network accessline 874
"year": year, "journal": journal, "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", - Network accessline 875
"journal": journal, "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", "doi": doi, - Network accessline 875
"journal": journal, "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", "doi": doi, - Network accessline 876
"url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", - Network accessline 876
"url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/", - Access to secretsline 885
[Credential-related source omitted] - Access to secretsline 885
[Credential-related source omitted] - Access to secretsline 886
[Credential-related source omitted] - Access to secretsline 886
[Credential-related source omitted] - Network accessline 1016
results.extend(wos.search(args.query, args.limit)) elif args.source == 'wos': print(" WOS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://developer.clarivate.com/apis/wos-starter") - Network accessline 1016
results.extend(wos.search(args.query, args.limit)) elif args.source == 'wos': print(" WOS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://developer.clarivate.com/apis/wos-starter") - Network accessline 1017
elif args.source == 'wos': print(" WOS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://developer.clarivate.com/apis/wos-starter") return - Network accessline 1017
elif args.source == 'wos': print(" WOS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://developer.clarivate.com/apis/wos-starter") return - Network accessline 1018
[Credential-related source omitted] - Network accessline 1018
[Credential-related source omitted] - Access to secretsline 1018
[Credential-related source omitted] - Access to secretsline 1018
[Credential-related source omitted] - Access to secretsline 1021
[Credential-related source omitted] - Access to secretsline 1021
[Credential-related source omitted] - Network accessline 1028
time.sleep(RATE_LIMIT_DELAY) elif args.source in ('springer', 'springer_meta'): print(" SPRINGER_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.springernature.com/") - Network accessline 1028
time.sleep(RATE_LIMIT_DELAY) elif args.source in ('springer', 'springer_meta'): print(" SPRINGER_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.springernature.com/") - Network accessline 1029
elif args.source in ('springer', 'springer_meta'): print(" SPRINGER_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.springernature.com/") return - Network accessline 1029
elif args.source in ('springer', 'springer_meta'): print(" SPRINGER_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.springernature.com/") return - Network accessline 1030
[Credential-related source omitted] - Network accessline 1030
[Credential-related source omitted] - Access to secretsline 1030
[Credential-related source omitted] - Access to secretsline 1030
[Credential-related source omitted] - Access to secretsline 1033
[Credential-related source omitted] - Access to secretsline 1033
[Credential-related source omitted] - Network accessline 1040
time.sleep(RATE_LIMIT_DELAY) elif args.source == 'springer_oa': print(" SPRINGER_OA_API_KEY / SPRINGER_API_KEY is not configured. Get a free key at: https://dev.springernature.com/") - Network accessline 1040
time.sleep(RATE_LIMIT_DELAY) elif args.source == 'springer_oa': print(" SPRINGER_OA_API_KEY / SPRINGER_API_KEY is not configured. Get a free key at: https://dev.springernature.com/") - Network accessline 1041
elif args.source == 'springer_oa': print(" SPRINGER_OA_API_KEY / SPRINGER_API_KEY is not configured. Get a free key at: https://dev.springernature.com/") return - Network accessline 1041
elif args.source == 'springer_oa': print(" SPRINGER_OA_API_KEY / SPRINGER_API_KEY is not configured. Get a free key at: https://dev.springernature.com/") return - Network accessline 1042
[Credential-related source omitted] - Network accessline 1042
[Credential-related source omitted] - Access to secretsline 1042
[Credential-related source omitted] - Access to secretsline 1042
[Credential-related source omitted] - Network accessline 1052
time.sleep(RATE_LIMIT_DELAY) elif args.source == 'scopus': print(" SCOPUS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.elsevier.com/") - Network accessline 1052
time.sleep(RATE_LIMIT_DELAY) elif args.source == 'scopus': print(" SCOPUS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.elsevier.com/") - Network accessline 1053
elif args.source == 'scopus': print(" SCOPUS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.elsevier.com/") return - Network accessline 1053
elif args.source == 'scopus': print(" SCOPUS_API_KEY is not configured in ~/.aut_sci_write/.env. Get a free key at: https://dev.elsevier.com/") return - Network accessline 1054
[Credential-related source omitted] - Network accessline 1054
[Credential-related source omitted] - Access to secretsline 1054
[Credential-related source omitted] - Access to secretsline 1054
[Credential-related source omitted] - Access to secretsline 1057
[Credential-related source omitted] - Access to secretsline 1057
[Credential-related source omitted]
skills/sci-zotero/.gitignore
skills/sci-zotero/SKILL.md
skills/sci-zotero/zotero.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 4
[Credential-related source omitted] - Access to secretsline 4
[Credential-related source omitted] - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 5
[Credential-related source omitted] - Network accessline 42
API_BASE = "https://api.zotero.org" - Network accessline 42
API_BASE = "https://api.zotero.org" - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Network accessline 107
raise ZoteroError( "ZOTERO_API_KEY is not configured in ~/.aut_sci_write/.env\n" "Create a key at https://www.zotero.org/settings/keys/new" - Network accessline 107
raise ZoteroError( "ZOTERO_API_KEY is not configured in ~/.aut_sci_write/.env\n" "Create a key at https://www.zotero.org/settings/keys/new" - Network accessline 108
[Credential-related source omitted] - Network accessline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Network accessline 109
"Create a key at https://www.zotero.org/settings/keys/new" - Network accessline 109
"Create a key at https://www.zotero.org/settings/keys/new" - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Network accessline 156
for attempt in range(_MAX_RETRIES + 1): req = urllib.request.Request(url, data=body, headers=headers, method=method) - Network accessline 156
for attempt in range(_MAX_RETRIES + 1): req = urllib.request.Request(url, data=body, headers=headers, method=method) - Network accessline 157
req = urllib.request.Request(url, data=body, headers=headers, method=method) - Network accessline 157
req = urllib.request.Request(url, data=body, headers=headers, method=method) - Network accessline 158
try: with urllib.request.urlopen(req, timeout=30) as resp: resp_body = resp.read().decode("utf-8") - Network accessline 158
try: with urllib.request.urlopen(req, timeout=30) as resp: resp_body = resp.read().decode("utf-8") - Network accessline 159
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 159
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted] - Access to secretsline 230
[Credential-related source omitted] - Access to secretsline 230
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Access to secretsline 240
[Credential-related source omitted] - Access to secretsline 240
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 250
[Credential-related source omitted] - Access to secretsline 250
[Credential-related source omitted] - Access to secretsline 255
[Credential-related source omitted] - Access to secretsline 255
[Credential-related source omitted] - Access to secretsline 257
[Credential-related source omitted] - Access to secretsline 257
[Credential-related source omitted] - Access to secretsline 269
[Credential-related source omitted] - Access to secretsline 269
[Credential-related source omitted] - Access to secretsline 270
[Credential-related source omitted] - Access to secretsline 270
[Credential-related source omitted] - Access to secretsline 279
[Credential-related source omitted] - Access to secretsline 279
[Credential-related source omitted] - Access to secretsline 280
[Credential-related source omitted] - Access to secretsline 280
[Credential-related source omitted] - Network accessline 294
req = urllib.request.Request(url, headers={"User-Agent": "zotero-cli/1.0"}) - Network accessline 294
req = urllib.request.Request(url, headers={"User-Agent": "zotero-cli/1.0"}) - Network accessline 295
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 295
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 296
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 296
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 304
[Credential-related source omitted] - Access to secretsline 304
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Network accessline 311
[Credential-related source omitted] - Network accessline 311
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Network accessline 312
doi = args.identifier.strip() crossref_url = f"https://api.crossref.org/works/{urllib.parse.quote(doi, safe='')}" data = _external_get_json(crossref_url) - Network accessline 312
doi = args.identifier.strip() crossref_url = f"https://api.crossref.org/works/{urllib.parse.quote(doi, safe='')}" data = _external_get_json(crossref_url) - Network accessline 313
crossref_url = f"https://api.crossref.org/works/{urllib.parse.quote(doi, safe='')}" - Network accessline 313
crossref_url = f"https://api.crossref.org/works/{urllib.parse.quote(doi, safe='')}" - Access to secretsline 316
[Credential-related source omitted] - Access to secretsline 316
[Credential-related source omitted] - Access to secretsline 334
[Credential-related source omitted] - Access to secretsline 334
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Network accessline 342
isbn = re.sub(r"[^0-9X]", "", args.identifier.upper()) ol_url = ( f"https://openlibrary.org/api/books" - Network accessline 342
isbn = re.sub(r"[^0-9X]", "", args.identifier.upper()) ol_url = ( f"https://openlibrary.org/api/books" - Network accessline 343
ol_url = ( f"https://openlibrary.org/api/books" f"?bibkeys=ISBN:{isbn}&format=json&jscmd=data" - Network accessline 343
ol_url = ( f"https://openlibrary.org/api/books" f"?bibkeys=ISBN:{isbn}&format=json&jscmd=data" - Network accessline 344
f"https://openlibrary.org/api/books" - Network accessline 344
f"https://openlibrary.org/api/books" - Access to secretsline 351
[Credential-related source omitted] - Access to secretsline 351
[Credential-related source omitted] - Access to secretsline 367
[Credential-related source omitted] - Access to secretsline 367
[Credential-related source omitted] - Access to secretsline 374
[Credential-related source omitted] - Access to secretsline 374
[Credential-related source omitted] - Network accessline 375
pmid = args.identifier.strip() esummary_url = ( f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" - Network accessline 375
pmid = args.identifier.strip() esummary_url = ( f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" - Network accessline 376
esummary_url = ( f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" f"?db=pubmed&id={urllib.parse.quote(pmid, safe='')}&retmode=json" - Network accessline 376
esummary_url = ( f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" f"?db=pubmed&id={urllib.parse.quote(pmid, safe='')}&retmode=json" - Network accessline 377
f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" f"?db=pubmed&id={urllib.parse.quote(pmid, safe='')}&retmode=json" ) - Network accessline 377
f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" f"?db=pubmed&id={urllib.parse.quote(pmid, safe='')}&retmode=json" ) - Access to secretsline 384
[Credential-related source omitted] - Access to secretsline 384
[Credential-related source omitted] - Access to secretsline 406
[Credential-related source omitted] - Access to secretsline 406
[Credential-related source omitted] - Access to secretsline 413
[Credential-related source omitted] - Access to secretsline 413
[Credential-related source omitted] - Access to secretsline 415
[Credential-related source omitted] - Access to secretsline 415
[Credential-related source omitted] - Access to secretsline 422
[Credential-related source omitted] - Access to secretsline 422
[Credential-related source omitted] - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Network accessline 453
for citation in citations: query = urllib.parse.quote(citation[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 453
for citation in citations: query = urllib.parse.quote(citation[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 454
query = urllib.parse.quote(citation[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" try: - Network accessline 454
query = urllib.parse.quote(citation[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" try: - Network accessline 455
cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 455
cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Access to secretsline 481
[Credential-related source omitted] - Access to secretsline 481
[Credential-related source omitted] - Access to secretsline 483
[Credential-related source omitted] - Access to secretsline 483
[Credential-related source omitted] - Network accessline 497
continue query = urllib.parse.quote(f"{title} {author}"[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 497
continue query = urllib.parse.quote(f"{title} {author}"[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 498
query = urllib.parse.quote(f"{title} {author}"[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" try: - Network accessline 498
query = urllib.parse.quote(f"{title} {author}"[:200]) cr_url = f"https://api.crossref.org/works?query={query}&rows=1" try: - Network accessline 499
cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Network accessline 499
cr_url = f"https://api.crossref.org/works?query={query}&rows=1" - Access to secretsline 513
[Credential-related source omitted] - Access to secretsline 513
[Credential-related source omitted] - Network accessline 526
req = urllib.request.Request(url, headers={"User-Agent": "zotero-cli/1.0"}) - Network accessline 526
req = urllib.request.Request(url, headers={"User-Agent": "zotero-cli/1.0"}) - Network accessline 528
os.close(tmp_fd) try: with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 528
os.close(tmp_fd) try: with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 529
try: with urllib.request.urlopen(req, timeout=60) as resp: content_type = (resp.headers.get("Content-Type") or "").lower() - Network accessline 529
try: with urllib.request.urlopen(req, timeout=60) as resp: content_type = (resp.headers.get("Content-Type") or "").lower() - Network accessline 530
with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 530
with urllib.request.urlopen(req, timeout=60) as resp: - Access to secretsline 561
[Credential-related source omitted] - Access to secretsline 561
[Credential-related source omitted] - Access to secretsline 568
[Credential-related source omitted] - Access to secretsline 568
[Credential-related source omitted] - Access to secretsline 571
[Credential-related source omitted] - Access to secretsline 571
[Credential-related source omitted] - Access to secretsline 577
[Credential-related source omitted] - Access to secretsline 577
[Credential-related source omitted] - Network accessline 592
doi = d.get("DOI", "") unpaywall_url = ( f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" - Network accessline 592
doi = d.get("DOI", "") unpaywall_url = ( f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" - Network accessline 593
unpaywall_url = ( f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" f"?email={urllib.parse.quote(unpaywall_email, safe='')}" - Network accessline 593
unpaywall_url = ( f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" f"?email={urllib.parse.quote(unpaywall_email, safe='')}" - Network accessline 594
f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" - Network accessline 594
f"https://api.unpaywall.org/v2/{urllib.parse.quote(doi, safe='')}" - Access to secretsline 615
[Credential-related source omitted] - Access to secretsline 615
[Credential-related source omitted] - Access to secretsline 621
[Credential-related source omitted] - Access to secretsline 621
[Credential-related source omitted] - Access to secretsline 638
[Credential-related source omitted] - Access to secretsline 638
[Credential-related source omitted] - Network accessline 660
suffix_bytes = f"\r\n--{boundary}--\r\n".encode() upload_body = prefix_bytes + pdf_bytes + suffix_bytes upload_req = urllib.request.Request( - Network accessline 660
suffix_bytes = f"\r\n--{boundary}--\r\n".encode() upload_body = prefix_bytes + pdf_bytes + suffix_bytes upload_req = urllib.request.Request( - Network accessline 661
upload_body = prefix_bytes + pdf_bytes + suffix_bytes upload_req = urllib.request.Request( upload_url, - Network accessline 661
upload_body = prefix_bytes + pdf_bytes + suffix_bytes upload_req = urllib.request.Request( upload_url, - Network accessline 662
upload_req = urllib.request.Request( - Network accessline 662
upload_req = urllib.request.Request( - Network accessline 667
) try: with urllib.request.urlopen(upload_req, timeout=120): - Network accessline 667
) try: with urllib.request.urlopen(upload_req, timeout=120): - Network accessline 668
try: with urllib.request.urlopen(upload_req, timeout=120): pass - Network accessline 668
try: with urllib.request.urlopen(upload_req, timeout=120): pass - Network accessline 669
with urllib.request.urlopen(upload_req, timeout=120): - Network accessline 669
with urllib.request.urlopen(upload_req, timeout=120): - Access to secretsline 678
[Credential-related source omitted] - Access to secretsline 678
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 37 facts
- Contacts export.arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/arxiv_download.py:29High confidence
- Contacts arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/arxiv_download.py:30High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/arxiv_download.py:93High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/elsevier_download.py:143High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/ieee_download.py:208High confidence
- Contacts eutils.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-download/pubmed_download.py:28High confidence
- Contacts www.ebi.ac.uk, which SKILL.md, the README and the plugin manifest do not mentionsci-download/pubmed_download.py:29High confidence
- Contacts europepmc.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/pubmed_download.py:137High confidence
- Contacts www.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-download/pubmed_download.py:144High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/pubmed_download.py:208High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/sci_download.py:41High confidence
- Contacts arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/sci_download.py:48High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/semantic_scholar_download.py:169High confidence
- Contacts link.springer.com, which SKILL.md, the README and the plugin manifest do not mentionsci-download/springer_download.py:136High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/springer_download.py:165High confidence
- Contacts api.unpaywall.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/unpaywall_download.py:28High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-download/unpaywall_download.py:140High confidence
- Contacts eutils.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/fulltext.py:16High confidence
- Contacts www.ebi.ac.uk, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/fulltext.py:17High confidence
- Contacts europepmc.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/fulltext.py:227High confidence
- Contacts arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/fulltext.py:230High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/identify.py:25High confidence
- Contacts dx.doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/identify.py:27High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/jats.py:19High confidence
- Contacts api.crossref.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:18High confidence
- Contacts api.openalex.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:19High confidence
- Contacts eutils.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:21High confidence
- Contacts api.unpaywall.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:22High confidence
- Contacts export.arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:23High confidence
- Contacts orcid.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:285High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:316High confidence
- Contacts www.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:512High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:645High confidence
- Contacts arxiv.org, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:645High confidence
- Contacts www.webofscience.com, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:731High confidence
- Contacts pubmed.ncbi.nlm.nih.gov, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/metadata.py:919High confidence
- Contacts pmc-oa-opendata.s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionsci-extract/harvester/oa_package.py:27High confidence
Signal confidence: 463 facts
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuesci-download/SKILL.md:108Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuesci-download/SKILL.md:109Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuesci-download/SKILL.md:110Low confidence
- Network access in prose of the SKILL.mdsci-download/SKILL.md:116Low confidence
- Network access in prose of the SKILL.mdsci-download/SKILL.md:117Low confidence
- Network access in prose of the SKILL.mdsci-download/SKILL.md:118Low confidence
- Network access in prose of the SKILL.mdsci-download/SKILL.md:119Low confidence
- Network access in prose of the SKILL.mdsci-download/SKILL.md:120Low confidence
- Network access in code of the SKILL.mdsci-download/SKILL.md:129High confidence
- Network access in code of the SKILL.mdsci-download/SKILL.md:131High confidence
- Executable script in prose of a file that runssci-download/arxiv_download.py:1Low confidence
- Network access in code of a file that runssci-download/arxiv_download.py:28High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:29High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:30High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:38High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:39High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:48High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:49High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:50High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:92High confidence
- Network access in code of a file that runssci-download/arxiv_download.py:93High confidence
- Executable script in prose of a file that runssci-download/cnki_download.py:1Low confidence
- Network access in prose of a file that runssci-download/cnki_download.py:10Low confidence
- Network access in prose of a file that runssci-download/cnki_download.py:11Low confidence
- Network access in prose of a file that runssci-download/cnki_download.py:12Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuesci-download/cnki_download.py:17Low confidence
- Network access in code of a file that runssci-download/cnki_download.py:40High confidence
- Network access in code of a file that runssci-download/cnki_download.py:62High confidence
- Network access in code of a file that runssci-download/cnki_download.py:63High confidence
- Network access in code of a file that runssci-download/cnki_download.py:119High confidence
- Network access in code of a file that runssci-download/cnki_download.py:120High confidence
- Network access in code of a file that runssci-download/cnki_download.py:123High confidence
- Network access in code of a file that runssci-download/cnki_download.py:124High confidence
- Possible obfuscation in code of a file that runssci-download/cnki_download.py:477High confidence
- Network access in code of a file that runssci-download/cnki_download.py:535High confidence
- Network access in code of a file that runssci-download/cnki_download.py:536High confidence
- Network access in code of a file that runssci-download/cnki_download.py:537High confidence
- Network access in code of a file that runssci-download/cnki_download.py:538High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuesci-download/cnki_download.py:540Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuesci-download/cnki_download.py:549Low confidence
- Executable script in prose of a file that runssci-download/config.py:1Low confidence
- Access to secrets in prose of a file that runssci-download/config.py:3Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuesci-download/config.py:18Low confidence
- Access to secrets in code of a file that runssci-download/config.py:34High confidence
- Access to secrets in code of a file that runssci-download/config.py:37High confidence
- Access to secrets in code of a file that runssci-download/config.py:39High confidence
- Access to secrets in code of a file that runssci-download/config.py:40High confidence
- Access to secrets in code of a file that runssci-download/config.py:42High confidence
- Access to secrets in code of a file that runssci-download/config.py:43High confidence
- Network access in a comment of a file that runssci-download/config.py:47Low confidence
and 413 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/sci-download/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/sci-download/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/sci-download/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/sci-download/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/sci-download/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.