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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

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>/
216GitHub stars
3stars in 7 days
9skills in this repository
0commits in 30 days

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

Oct 25, 2026Nov 5, 2026216

30-day change not yet available: not enough history.

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

1,216 tokens

When the skill is activated

Reference documents

44,682 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Trigger Phrases
  2. Capabilities
  3. Auto-Routing
  4. Usage
  5. Configuration
  6. Dependencies
  7. © License & Copyright

Scripts executed separately

  • arxiv_download.py
  • cnki_download.py
  • config.py
  • elsevier_download.py
  • ieee_download.py
  • pubmed_download.py
  • sci_download.py
  • semantic_scholar_download.py
  • springer_download.py
  • unpaywall_download.py
  • webvpn_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 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • SKILL.mdcore4,316 bytes
  • arxiv_download.pyruns6,936 bytes
  • cnki_download.pyruns22,372 bytes
  • config.pyruns6,337 bytes
  • elsevier_download.pyruns6,474 bytes
  • ieee_download.pyruns8,625 bytes
  • pubmed_download.pyruns9,717 bytes
  • schools.jsonasset5,277 bytes
  • sci_download.pyruns9,182 bytes
  • semantic_scholar_download.pyruns7,503 bytes
  • springer_download.pyruns7,068 bytes
  • unpaywall_download.pyruns5,560 bytes
  • webvpn_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 GitHub

Skills 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 shell

Automated 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:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-download/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-html/pyproject.toml:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-ppt/pyproject.toml:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-search/_meta.json:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-figure/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-figure/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/sci-figure/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 1,296 signals by file

.claude-plugin/marketplace.json

  • Network accessline 1
    {   "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  • Network accessline 2
    "$schema": "https://anthropic.com/claude-code/marketplace.schema.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

  • Executable scriptline 1
    Executable file
  • Network accessline 22
    Args:         url: Original URL (e.g. https://kns.cnki.net/kns8/...)
  • Network accessline 23
    url: Original URL (e.g. https://kns.cnki.net/kns8/...)
  • Network accessline 24
    webvpn_base: WebVPN base (e.g. https://webvpn.tsinghua.edu.cn)

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

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Executable scriptline 1
    #!/usr/bin/env python3

skills/sci-extract/harvest_paper.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Executable scriptline 1
    #!/usr/bin/env python3

skills/sci-extract/harvester/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Network accessline 123
    package = oa_package.fetch(meta.pmcid, verbose=verbose)
  • Network accessline 123
    package = oa_package.fetch(meta.pmcid, verbose=verbose)

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/annotator.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/caption_detector.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/cli.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/column_detector.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/exceptions.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/figure_extractor.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/image_processor.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/native_extractor.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/pdf_parser.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/sci_figure/region_detector.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]

skills/sci-figure/scripts/extract_figure.py

  • Executable scriptline 1
    #!/usr/bin/env python
  • Executable scriptline 1
    #!/usr/bin/env python

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-figure/tests/test_caption_dedup.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/conftest.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/scripts/generate_html_deck.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Executable scriptline 1
    #!/usr/bin/env python3

skills/sci-html/src/sci_html/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/cli.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/integrations/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/integrations/extract/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/integrations/extract/core_insights.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/models.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/paper_pipeline.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/parser.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/src/sci_html/renderer.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/templates/deck.js

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/tests/_path.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/tests/test_paper_pipeline.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/tests/test_parser.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-html/tests/test_renderer.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-polish/scripts/ai_score_estimator.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-polish/scripts/tier1_words.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-polish/scripts/validate_polish_output.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/.gitignore

  • Access to secretsline 40
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]

skills/sci-ppt/README.md

  • Network accessline 3
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  • Network accessline 3
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

skills/sci-ppt/src/aut_sci_ppt/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/academic_parser.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/agent.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/generator/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

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

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/image/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/interactive.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/layout_engine.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/main.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/models.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/paginator/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/paginator/smart_paginator.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/paper_workflow.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/parser/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/parser/text_parser.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/pdf_extractor.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/run.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/base.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/content_detail.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/content_figure.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/content_list.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/cover.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/ending.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/section.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/timeline.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/templates/toc.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/tests/__init__.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-ppt/src/aut_sci_ppt/tests/test_agent.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

skills/sci-review/scripts/validate_review_output.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Executable scriptline 1
    #!/usr/bin/env python3

skills/sci-search/.gitignore

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]

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

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]

skills/sci-zotero/SKILL.md

  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]

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
Signal confidence: 463 facts

and 413 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/sci-download/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/sci-download/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/sci-download/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/sci-download/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.