Commit 07dcc58
committed
Initial commit: AutoPaperToPPT — paper search → thesis-style PPT toolkit
Single-process Python 3.12+ CLI + MCP server that searches papers,
de-duplicates across sources, optionally enriches via LLM, and exports
to .pptx / .xlsx / .bib / .md / .json.
Search layer:
- 11 pluggable fetcher sources behind a shared HTTPS-only async client
with per-source token-bucket rate limits: arxiv, semantic_scholar,
openalex, pubmed, acm (Crossref-scoped), dblp, crossref (generic),
openaire, springer, ieee, scholar. Top-tier venue whitelist on by
default; opt-in scraping for ieee/scholar via env vars; springer
needs a free API key.
- Field-merge dedup so a paper indexed via multiple sources keeps the
earliest canonical record but inherits any OA pdf_url, doi, venue,
citation count from later duplicates.
- citation_pdf_url meta-tag fallback when publisher landing pages
return HTML instead of a PDF, recovering a sizeable fraction of
paywalled-but-publicly-mirrored papers.
Exporter layer:
- pptx: 16:9 widescreen, page-numbered, three rendering tiers
(lightweight abstract-only / enriched-flat / thesis-style with
pain-point quadrants, KPI block, technique-comparison tables,
per-RQ result tables, contribution summary, core observation,
limitations & future work, Q&A, references); shape-name contract
for downstream editing tools; headless overflow check tied to a
7.05" footer guard.
- i18n template strings across 14 languages (en, zh-tw, zh-cn, ja,
es, fr, de, ko, pt, ru, it, vi, hi, id), every key present in
every language enforced by pytest.
- xlsx with Source (real publication venue) vs Indexed-via (fetcher
that returned the metadata) columns kept distinct so users never
see "openalex" in a column they read as the venue.
MCP server: 11 tools (list_sources, search, fetch_paper,
fetch_pdf_text, download_pdfs, export, plus five pptx_* editing
tools) so an MCP-aware LLM client can drive the full workflow without
the Anthropic API key.
Local-PDF mode (--pdf): accepts a single file or a directory; a
heuristic metadata extractor pulls title, authors, year, arXiv ID,
DOI and the real abstract straight from each PDF's front matter,
anchored on the Abstract header rather than blind prefix truncation.
Documentation: 14-language README + 14-language Sphinx tree, all
mirroring the canonical CLAUDE.md / AGENTS.md rules — LLM-as-agent
default path, URL/DOI verification, prune-irrelevant-downloads. Six
regression tests in tests/test_agents_md.py and tests/test_i18n.py
pin the cross-document alignment so future commits can't drift the
rules out of sync.
Tooling: ruff + bandit + 392-test pytest suite, all hermetic
(fetcher tests use recorded fixtures, no live HTTP). Definition of
Done in CLAUDE.md enumerates the gates a commit must pass.0 parents commit 07dcc58
175 files changed
Lines changed: 35118 additions & 0 deletions
File tree
- autopapertoppt
- core
- exporters
- fetchers
- intelligence
- mcp
- utils
- docs
- de
- en
- es
- fr
- hi
- id
- it
- ja
- ko
- pt
- ru
- vi
- zh-cn
- zh-tw
- scripts
- sources
- acm
- arxiv
- crossref
- dblp
- ieee
- openaire
- openalex
- pubmed
- scholar
- semantic_scholar
- springer
- tests
- fixtures
- acm
- arxiv
- crossref
- dblp
- ieee
- openaire
- openalex
- pubmed
- scholar
- semantic_scholar
- springer
- sources
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
0 commit comments