paperful 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- paperful-1.1.0/.dockerignore +35 -0
- paperful-1.1.0/.env.example +49 -0
- paperful-1.1.0/.github/workflows/ci.yml +51 -0
- paperful-1.1.0/.github/workflows/coverage-badge.yml +40 -0
- paperful-1.1.0/.github/workflows/docs.yml +36 -0
- paperful-1.1.0/.github/workflows/pages.yml +48 -0
- paperful-1.1.0/.github/workflows/publish.yml +33 -0
- paperful-1.1.0/.gitignore +24 -0
- paperful-1.1.0/.python-version +1 -0
- paperful-1.1.0/.readthedocs.yml +19 -0
- paperful-1.1.0/CHANGELOG.md +781 -0
- paperful-1.1.0/CONTRIBUTING.md +78 -0
- paperful-1.1.0/Dockerfile +68 -0
- paperful-1.1.0/LICENSE +21 -0
- paperful-1.1.0/Makefile +64 -0
- paperful-1.1.0/PKG-INFO +255 -0
- paperful-1.1.0/README.md +195 -0
- paperful-1.1.0/badges/coverage.json +6 -0
- paperful-1.1.0/compose.gui.yaml +9 -0
- paperful-1.1.0/compose.override.example.yaml +15 -0
- paperful-1.1.0/compose.yaml +39 -0
- paperful-1.1.0/config.example.toml +419 -0
- paperful-1.1.0/config.minimal.toml +14 -0
- paperful-1.1.0/data +1 -0
- paperful-1.1.0/docs/ROADMAP.md +1502 -0
- paperful-1.1.0/docs/TERMS.md +35 -0
- paperful-1.1.0/docs/_static/.gitkeep +0 -0
- paperful-1.1.0/docs/_static/docs.css +19 -0
- paperful-1.1.0/docs/_static/icon.png +0 -0
- paperful-1.1.0/docs/_static/logo-dark.png +0 -0
- paperful-1.1.0/docs/_static/logo.png +0 -0
- paperful-1.1.0/docs/_static/workflows/activity.png +0 -0
- paperful-1.1.0/docs/_static/workflows/briefs.png +0 -0
- paperful-1.1.0/docs/_static/workflows/discover-people.png +0 -0
- paperful-1.1.0/docs/_static/workflows/discover.png +0 -0
- paperful-1.1.0/docs/_static/workflows/index-ask.png +0 -0
- paperful-1.1.0/docs/_static/workflows/index.png +0 -0
- paperful-1.1.0/docs/_static/workflows/library.png +0 -0
- paperful-1.1.0/docs/_static/workflows/mirror.png +0 -0
- paperful-1.1.0/docs/_static/workflows/repair.png +0 -0
- paperful-1.1.0/docs/_static/workflows/system.png +0 -0
- paperful-1.1.0/docs/_static/workflows/wanted-held.png +0 -0
- paperful-1.1.0/docs/_static/workflows/wanted.png +0 -0
- paperful-1.1.0/docs/_templates/page.html +40 -0
- paperful-1.1.0/docs/ai.md +286 -0
- paperful-1.1.0/docs/architecture.md +448 -0
- paperful-1.1.0/docs/authorwatch.md +160 -0
- paperful-1.1.0/docs/bbnj-author-lanes.md +205 -0
- paperful-1.1.0/docs/browser-agent-models.md +111 -0
- paperful-1.1.0/docs/camofox.md +83 -0
- paperful-1.1.0/docs/commands.md +481 -0
- paperful-1.1.0/docs/comparison-reference.md +211 -0
- paperful-1.1.0/docs/comparison.md +188 -0
- paperful-1.1.0/docs/conf.py +84 -0
- paperful-1.1.0/docs/config.md +412 -0
- paperful-1.1.0/docs/dedupe.md +98 -0
- paperful-1.1.0/docs/developer.md +331 -0
- paperful-1.1.0/docs/docker.md +297 -0
- paperful-1.1.0/docs/e2e-nba.md +148 -0
- paperful-1.1.0/docs/e2e-stack.md +101 -0
- paperful-1.1.0/docs/endnote.md +94 -0
- paperful-1.1.0/docs/example-setups.md +353 -0
- paperful-1.1.0/docs/ezproxy.md +204 -0
- paperful-1.1.0/docs/favicon-32.png +0 -0
- paperful-1.1.0/docs/favicon.ico +0 -0
- paperful-1.1.0/docs/first-fill.md +106 -0
- paperful-1.1.0/docs/grow-library.md +101 -0
- paperful-1.1.0/docs/gui.md +291 -0
- paperful-1.1.0/docs/how-it-works.md +151 -0
- paperful-1.1.0/docs/icon.png +0 -0
- paperful-1.1.0/docs/index.md +78 -0
- paperful-1.1.0/docs/llm.md +429 -0
- paperful-1.1.0/docs/logo-dark.png +0 -0
- paperful-1.1.0/docs/logo.png +0 -0
- paperful-1.1.0/docs/mendeley.md +71 -0
- paperful-1.1.0/docs/plans/miss-desk-1.0-gui-fixes.md +177 -0
- paperful-1.1.0/docs/quiet-mirror.md +136 -0
- paperful-1.1.0/docs/rag.md +317 -0
- paperful-1.1.0/docs/releases.md +121 -0
- paperful-1.1.0/docs/research-ops.md +110 -0
- paperful-1.1.0/docs/research-pack.md +103 -0
- paperful-1.1.0/docs/scihub.md +54 -0
- paperful-1.1.0/docs/screen.md +39 -0
- paperful-1.1.0/docs/serpapi.md +107 -0
- paperful-1.1.0/docs/sessions.md +119 -0
- paperful-1.1.0/docs/snowball.md +765 -0
- paperful-1.1.0/docs/sources.md +145 -0
- paperful-1.1.0/docs/templates/e2e-watch-assessment.md +63 -0
- paperful-1.1.0/docs/tidy-library.md +90 -0
- paperful-1.1.0/docs/walkthroughs.md +42 -0
- paperful-1.1.0/docs/why.md +74 -0
- paperful-1.1.0/docs/workflows.md +416 -0
- paperful-1.1.0/docs/zotero.md +226 -0
- paperful-1.1.0/out +1 -0
- paperful-1.1.0/packs +1 -0
- paperful-1.1.0/paperful/__init__.py +3 -0
- paperful-1.1.0/paperful/acronyms.py +173 -0
- paperful-1.1.0/paperful/agent_json.py +95 -0
- paperful-1.1.0/paperful/agent_ops.py +558 -0
- paperful-1.1.0/paperful/all_cmd.py +345 -0
- paperful-1.1.0/paperful/ask_cmd.py +335 -0
- paperful-1.1.0/paperful/attach.py +291 -0
- paperful-1.1.0/paperful/attach_cmd.py +93 -0
- paperful-1.1.0/paperful/attachments.py +570 -0
- paperful-1.1.0/paperful/attachments_cmd.py +219 -0
- paperful-1.1.0/paperful/author_request.py +138 -0
- paperful-1.1.0/paperful/authors_cmd.py +168 -0
- paperful-1.1.0/paperful/authors_report.py +197 -0
- paperful-1.1.0/paperful/authorwatch.py +1396 -0
- paperful-1.1.0/paperful/authorwatch_social.py +169 -0
- paperful-1.1.0/paperful/authorwatch_suggest.py +432 -0
- paperful-1.1.0/paperful/browser_agent.py +881 -0
- paperful-1.1.0/paperful/cache_cmd.py +42 -0
- paperful-1.1.0/paperful/camofox_client.py +245 -0
- paperful-1.1.0/paperful/camofox_recover.py +184 -0
- paperful-1.1.0/paperful/catalogue.py +611 -0
- paperful-1.1.0/paperful/circuit.py +85 -0
- paperful-1.1.0/paperful/cli.py +6233 -0
- paperful-1.1.0/paperful/cli_runtime.py +970 -0
- paperful-1.1.0/paperful/collections_add.py +151 -0
- paperful-1.1.0/paperful/collections_cmd.py +130 -0
- paperful-1.1.0/paperful/completeness_cmd.py +14 -0
- paperful-1.1.0/paperful/config.py +922 -0
- paperful-1.1.0/paperful/config_tables.py +667 -0
- paperful-1.1.0/paperful/cookies.py +332 -0
- paperful-1.1.0/paperful/coverage.py +349 -0
- paperful-1.1.0/paperful/coverage_cmd.py +133 -0
- paperful-1.1.0/paperful/data/grey_playbooks_examples/grey_playbooks_energy.toml +16 -0
- paperful-1.1.0/paperful/data/grey_playbooks_examples/grey_playbooks_intl_orgs.toml +29 -0
- paperful-1.1.0/paperful/data/grey_playbooks_ocean.toml +89 -0
- paperful-1.1.0/paperful/dedupe.py +807 -0
- paperful-1.1.0/paperful/dedupe_cmd.py +268 -0
- paperful-1.1.0/paperful/doctor.py +1123 -0
- paperful-1.1.0/paperful/doctor_cmd.py +183 -0
- paperful-1.1.0/paperful/download.py +148 -0
- paperful-1.1.0/paperful/e2e_nba.py +1087 -0
- paperful-1.1.0/paperful/endnote.py +1216 -0
- paperful-1.1.0/paperful/export_build.py +89 -0
- paperful-1.1.0/paperful/export_cmd.py +148 -0
- paperful-1.1.0/paperful/fetch_wins.py +362 -0
- paperful-1.1.0/paperful/fix_metadata_cmd.py +236 -0
- paperful-1.1.0/paperful/gaps_cmd.py +269 -0
- paperful-1.1.0/paperful/grey_probe.py +465 -0
- paperful-1.1.0/paperful/greyid.py +164 -0
- paperful-1.1.0/paperful/grounding.py +62 -0
- paperful-1.1.0/paperful/handoff.py +582 -0
- paperful-1.1.0/paperful/handoff_rank.py +118 -0
- paperful-1.1.0/paperful/identity.py +258 -0
- paperful-1.1.0/paperful/inbox.py +918 -0
- paperful-1.1.0/paperful/inbox_cmd.py +359 -0
- paperful-1.1.0/paperful/inbox_match.py +484 -0
- paperful-1.1.0/paperful/inbox_route.py +489 -0
- paperful-1.1.0/paperful/ingest_dois.py +299 -0
- paperful-1.1.0/paperful/interop/__init__.py +31 -0
- paperful-1.1.0/paperful/interop/bibtex.py +169 -0
- paperful-1.1.0/paperful/interop/endnote_xml.py +265 -0
- paperful-1.1.0/paperful/interop/load.py +131 -0
- paperful-1.1.0/paperful/interop/ris.py +190 -0
- paperful-1.1.0/paperful/interop/types.py +322 -0
- paperful-1.1.0/paperful/library.py +907 -0
- paperful-1.1.0/paperful/lint.py +414 -0
- paperful-1.1.0/paperful/lint_cmd.py +179 -0
- paperful-1.1.0/paperful/llm/__init__.py +85 -0
- paperful-1.1.0/paperful/llm/client.py +324 -0
- paperful-1.1.0/paperful/llm/embed.py +300 -0
- paperful-1.1.0/paperful/llm/preflight.py +114 -0
- paperful-1.1.0/paperful/llm/validate.py +170 -0
- paperful-1.1.0/paperful/llm_pdf_match.py +66 -0
- paperful-1.1.0/paperful/llm_title.py +70 -0
- paperful-1.1.0/paperful/mcp_server.py +353 -0
- paperful-1.1.0/paperful/mendeley.py +1344 -0
- paperful-1.1.0/paperful/metadata.py +326 -0
- paperful-1.1.0/paperful/mirror.py +509 -0
- paperful-1.1.0/paperful/mirrors_cmd.py +27 -0
- paperful-1.1.0/paperful/miss_surface.py +323 -0
- paperful-1.1.0/paperful/notehtml.py +102 -0
- paperful-1.1.0/paperful/notes.py +196 -0
- paperful-1.1.0/paperful/notes_delete_cmd.py +170 -0
- paperful-1.1.0/paperful/oa_locations.py +106 -0
- paperful-1.1.0/paperful/ocr.py +327 -0
- paperful-1.1.0/paperful/ocr_cmd.py +216 -0
- paperful-1.1.0/paperful/ocr_ignore.py +113 -0
- paperful-1.1.0/paperful/ocr_ignore_cmd.py +92 -0
- paperful-1.1.0/paperful/pack.py +228 -0
- paperful-1.1.0/paperful/pack_bib.py +122 -0
- paperful-1.1.0/paperful/pack_cmd.py +93 -0
- paperful-1.1.0/paperful/page_signals.py +274 -0
- paperful-1.1.0/paperful/pdfid.py +171 -0
- paperful-1.1.0/paperful/pipeline.py +1341 -0
- paperful-1.1.0/paperful/pipeline_attach.py +101 -0
- paperful-1.1.0/paperful/pipeline_browser.py +44 -0
- paperful-1.1.0/paperful/pipeline_phases.py +244 -0
- paperful-1.1.0/paperful/pipeline_save.py +127 -0
- paperful-1.1.0/paperful/playbooks.py +338 -0
- paperful-1.1.0/paperful/progress.py +95 -0
- paperful-1.1.0/paperful/provenance.py +106 -0
- paperful-1.1.0/paperful/quotes.py +111 -0
- paperful-1.1.0/paperful/rag/__init__.py +6 -0
- paperful-1.1.0/paperful/rag/answer.py +109 -0
- paperful-1.1.0/paperful/rag/answered.py +248 -0
- paperful-1.1.0/paperful/rag/ask_turn.py +101 -0
- paperful-1.1.0/paperful/rag/auto.py +43 -0
- paperful-1.1.0/paperful/rag/batch.py +296 -0
- paperful-1.1.0/paperful/rag/chunk.py +214 -0
- paperful-1.1.0/paperful/rag/extract.py +220 -0
- paperful-1.1.0/paperful/rag/index.py +232 -0
- paperful-1.1.0/paperful/rag/ingest.py +468 -0
- paperful-1.1.0/paperful/rag/ledger.py +223 -0
- paperful-1.1.0/paperful/rag/prompt.py +228 -0
- paperful-1.1.0/paperful/rag/questions.py +301 -0
- paperful-1.1.0/paperful/rag/retrieve.py +133 -0
- paperful-1.1.0/paperful/rag/status.py +112 -0
- paperful-1.1.0/paperful/rag/thread.py +115 -0
- paperful-1.1.0/paperful/reachout.py +301 -0
- paperful-1.1.0/paperful/reachout_cmd.py +218 -0
- paperful-1.1.0/paperful/recover_cmd.py +175 -0
- paperful-1.1.0/paperful/refs_gap.py +207 -0
- paperful-1.1.0/paperful/refs_gap_cmd.py +158 -0
- paperful-1.1.0/paperful/remarks.py +133 -0
- paperful-1.1.0/paperful/resolve/__init__.py +89 -0
- paperful-1.1.0/paperful/resolve/enrich.py +623 -0
- paperful-1.1.0/paperful/resolve/ids.py +560 -0
- paperful-1.1.0/paperful/restore.py +276 -0
- paperful-1.1.0/paperful/routing.py +626 -0
- paperful-1.1.0/paperful/run_cmd.py +288 -0
- paperful-1.1.0/paperful/run_config.py +801 -0
- paperful-1.1.0/paperful/run_hooks.py +484 -0
- paperful-1.1.0/paperful/runreport.py +774 -0
- paperful-1.1.0/paperful/scope.py +144 -0
- paperful-1.1.0/paperful/screen.py +637 -0
- paperful-1.1.0/paperful/screen_cmd.py +205 -0
- paperful-1.1.0/paperful/sections/__init__.py +1 -0
- paperful-1.1.0/paperful/sections/command.py +196 -0
- paperful-1.1.0/paperful/sections/extract.py +256 -0
- paperful-1.1.0/paperful/sections/headings.py +172 -0
- paperful-1.1.0/paperful/sections/llm.py +148 -0
- paperful-1.1.0/paperful/serve.py +77 -0
- paperful-1.1.0/paperful/session.py +1168 -0
- paperful-1.1.0/paperful/session_cmd.py +332 -0
- paperful-1.1.0/paperful/snapshot.py +696 -0
- paperful-1.1.0/paperful/snowball/__init__.py +19 -0
- paperful-1.1.0/paperful/snowball/authors.py +388 -0
- paperful-1.1.0/paperful/snowball/bibliography.py +564 -0
- paperful-1.1.0/paperful/snowball/briefing.py +230 -0
- paperful-1.1.0/paperful/snowball/candidate.py +71 -0
- paperful-1.1.0/paperful/snowball/command.py +1734 -0
- paperful-1.1.0/paperful/snowball/crawl.py +1441 -0
- paperful-1.1.0/paperful/snowball/digest.py +330 -0
- paperful-1.1.0/paperful/snowball/europepmc.py +239 -0
- paperful-1.1.0/paperful/snowball/expand.py +474 -0
- paperful-1.1.0/paperful/snowball/fill.py +755 -0
- paperful-1.1.0/paperful/snowball/hops.py +352 -0
- paperful-1.1.0/paperful/snowball/ingest.py +348 -0
- paperful-1.1.0/paperful/snowball/local_cites.py +172 -0
- paperful-1.1.0/paperful/snowball/local_openalex.py +284 -0
- paperful-1.1.0/paperful/snowball/openalex.py +924 -0
- paperful-1.1.0/paperful/snowball/orcid.py +129 -0
- paperful-1.1.0/paperful/snowball/preflight.py +134 -0
- paperful-1.1.0/paperful/snowball/profile.py +226 -0
- paperful-1.1.0/paperful/snowball/queue.py +74 -0
- paperful-1.1.0/paperful/snowball/rank.py +23 -0
- paperful-1.1.0/paperful/snowball/refine.py +56 -0
- paperful-1.1.0/paperful/snowball/searxng.py +112 -0
- paperful-1.1.0/paperful/snowball/seeds.py +101 -0
- paperful-1.1.0/paperful/snowball/similar.py +159 -0
- paperful-1.1.0/paperful/snowball/tally.py +205 -0
- paperful-1.1.0/paperful/snowball/titles.py +133 -0
- paperful-1.1.0/paperful/snowball/trends.py +96 -0
- paperful-1.1.0/paperful/snowball/trends_cmd.py +75 -0
- paperful-1.1.0/paperful/snowball/watch.py +393 -0
- paperful-1.1.0/paperful/sources/__init__.py +46 -0
- paperful-1.1.0/paperful/sources/arxiv.py +68 -0
- paperful-1.1.0/paperful/sources/author_site.py +77 -0
- paperful-1.1.0/paperful/sources/base.py +138 -0
- paperful-1.1.0/paperful/sources/biorxiv.py +42 -0
- paperful-1.1.0/paperful/sources/browser_agent.py +72 -0
- paperful-1.1.0/paperful/sources/camofox.py +43 -0
- paperful-1.1.0/paperful/sources/core.py +70 -0
- paperful-1.1.0/paperful/sources/direct.py +100 -0
- paperful-1.1.0/paperful/sources/europepmc.py +91 -0
- paperful-1.1.0/paperful/sources/ezproxy.py +178 -0
- paperful-1.1.0/paperful/sources/htmlpdf.py +273 -0
- paperful-1.1.0/paperful/sources/landing.py +399 -0
- paperful-1.1.0/paperful/sources/openaire.py +96 -0
- paperful-1.1.0/paperful/sources/openalex.py +73 -0
- paperful-1.1.0/paperful/sources/scholar.py +181 -0
- paperful-1.1.0/paperful/sources/scihub.py +250 -0
- paperful-1.1.0/paperful/sources/semanticscholar.py +42 -0
- paperful-1.1.0/paperful/sources/serpapi_scholar.py +89 -0
- paperful-1.1.0/paperful/sources/unpaywall.py +77 -0
- paperful-1.1.0/paperful/ste.py +219 -0
- paperful-1.1.0/paperful/store.py +634 -0
- paperful-1.1.0/paperful/summarize.py +612 -0
- paperful-1.1.0/paperful/summarize_cmd.py +237 -0
- paperful-1.1.0/paperful/sync.py +665 -0
- paperful-1.1.0/paperful/synthesize.py +691 -0
- paperful-1.1.0/paperful/synthesize_cmd.py +270 -0
- paperful-1.1.0/paperful/twenty.py +1373 -0
- paperful-1.1.0/paperful/ui/__init__.py +1 -0
- paperful-1.1.0/paperful/ui/app.py +226 -0
- paperful-1.1.0/paperful/ui/commands.py +241 -0
- paperful-1.1.0/paperful/ui/context.py +105 -0
- paperful-1.1.0/paperful/ui/discover_jobs.py +159 -0
- paperful-1.1.0/paperful/ui/discover_routes.py +825 -0
- paperful-1.1.0/paperful/ui/doctor_steps.py +17 -0
- paperful-1.1.0/paperful/ui/index_jobs.py +628 -0
- paperful-1.1.0/paperful/ui/index_routes.py +688 -0
- paperful-1.1.0/paperful/ui/jobs.py +718 -0
- paperful-1.1.0/paperful/ui/pages.py +1006 -0
- paperful-1.1.0/paperful/ui/prefs.py +45 -0
- paperful-1.1.0/paperful/ui/preview_store.py +39 -0
- paperful-1.1.0/paperful/ui/rag_form.py +201 -0
- paperful-1.1.0/paperful/ui/repair_jobs.py +774 -0
- paperful-1.1.0/paperful/ui/repair_mirror_jobs.py +785 -0
- paperful-1.1.0/paperful/ui/repair_routes.py +297 -0
- paperful-1.1.0/paperful/ui/shell_routes.py +508 -0
- paperful-1.1.0/paperful/ui/snowball_form.py +244 -0
- paperful-1.1.0/paperful/ui/static/favicon-32.png +0 -0
- paperful-1.1.0/paperful/ui/static/icon.png +0 -0
- paperful-1.1.0/paperful/ui/static/workbench.css +886 -0
- paperful-1.1.0/paperful/ui/static/workbench.js +164 -0
- paperful-1.1.0/paperful/ui/templates/_help.html +11 -0
- paperful-1.1.0/paperful/ui/templates/_icon_btn.html +28 -0
- paperful-1.1.0/paperful/ui/templates/_job_status.html +8 -0
- paperful-1.1.0/paperful/ui/templates/_miss_surface.html +47 -0
- paperful-1.1.0/paperful/ui/templates/_rag_prompt_fields.html +23 -0
- paperful-1.1.0/paperful/ui/templates/_rag_scope_fields.html +10 -0
- paperful-1.1.0/paperful/ui/templates/activity.html +23 -0
- paperful-1.1.0/paperful/ui/templates/ask.html +120 -0
- paperful-1.1.0/paperful/ui/templates/base.html +71 -0
- paperful-1.1.0/paperful/ui/templates/brief_summary.html +9 -0
- paperful-1.1.0/paperful/ui/templates/briefs.html +119 -0
- paperful-1.1.0/paperful/ui/templates/discover.html +432 -0
- paperful-1.1.0/paperful/ui/templates/index.html +161 -0
- paperful-1.1.0/paperful/ui/templates/library.html +115 -0
- paperful-1.1.0/paperful/ui/templates/mirror.html +65 -0
- paperful-1.1.0/paperful/ui/templates/repair.html +91 -0
- paperful-1.1.0/paperful/ui/templates/settings.html +33 -0
- paperful-1.1.0/paperful/ui/templates/stub.html +6 -0
- paperful-1.1.0/paperful/ui/templates/system.html +22 -0
- paperful-1.1.0/paperful/ui/templates/wanted.html +265 -0
- paperful-1.1.0/paperful/ui/verify.py +69 -0
- paperful-1.1.0/paperful/ui/wanted_jobs.py +358 -0
- paperful-1.1.0/paperful/ui/wanted_routes.py +512 -0
- paperful-1.1.0/paperful/urls.py +163 -0
- paperful-1.1.0/paperful/versions.py +544 -0
- paperful-1.1.0/paperful/versions_cmd.py +148 -0
- paperful-1.1.0/paperful/witness.py +183 -0
- paperful-1.1.0/paperful/xfer.py +53 -0
- paperful-1.1.0/paperful/zot.py +823 -0
- paperful-1.1.0/paperful-cloud/favicon-32.png +0 -0
- paperful-1.1.0/paperful-cloud/favicon.ico +0 -0
- paperful-1.1.0/paperful-cloud/index.html +80 -0
- paperful-1.1.0/paperful-cloud/og.png +0 -0
- paperful-1.1.0/profiles/bbnj-journal.toml +12 -0
- paperful-1.1.0/profiles/doi-refs-gated.toml +9 -0
- paperful-1.1.0/profiles/e2e-nba-run.toml +12 -0
- paperful-1.1.0/profiles/e2e-nba-search.toml +14 -0
- paperful-1.1.0/profiles/keyword-library.toml +11 -0
- paperful-1.1.0/profiles/keyword-scout.toml +8 -0
- paperful-1.1.0/profiles/orcid-ego-auto.toml +10 -0
- paperful-1.1.0/pyproject.toml +121 -0
- paperful-1.1.0/scripts/coverage_badge.py +54 -0
- paperful-1.1.0/scripts/docs/capture_workbench.py +369 -0
- paperful-1.1.0/scripts/e2e_nba.py +16 -0
- paperful-1.1.0/scripts/e2e_stack.py +16 -0
- paperful-1.1.0/scripts/release/assemble_pages_site.sh +47 -0
- paperful-1.1.0/scripts/release/build_docs.sh +34 -0
- paperful-1.1.0/scripts/release/pre_release.sh +121 -0
- paperful-1.1.0/state +1 -0
- paperful-1.1.0/tests/conftest.py +270 -0
- paperful-1.1.0/tests/fixtures/agent_json/ask.json +17 -0
- paperful-1.1.0/tests/fixtures/agent_json/inbox_drain.json +11 -0
- paperful-1.1.0/tests/fixtures/agent_json/ingest_dois.json +11 -0
- paperful-1.1.0/tests/fixtures/agent_json/refs_gap.json +11 -0
- paperful-1.1.0/tests/fixtures/agent_json/run.json +11 -0
- paperful-1.1.0/tests/fixtures/agent_json_v1_keys.json +11 -0
- paperful-1.1.0/tests/fixtures/authorwatch/rg-follows.html +5 -0
- paperful-1.1.0/tests/fixtures/coverage_pack_v1/keys.json +8 -0
- paperful-1.1.0/tests/fixtures/coverage_pack_v1/pack.json +29 -0
- paperful-1.1.0/tests/fixtures/grey/corpus.toml +114 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/00-undocs-unga-vme.json +24 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/01-undocs-unga-vme.json +24 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/02-undocs-unga-vme-symbol.json +24 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/03-fao.json +24 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/04-fao.json +24 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/05-bbnj-doalos-prepcom.json +349 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/06-bbnj-doalos-prepcom.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/07-isa-deepdata.json +337 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/08-rfmo-docs.json +465 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/09-rfmo-docs.json +345 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/10-rfmo-docs.json +249 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/11-iucn-dosi.json +359 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/12-iucn-dosi.json +368 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/13-thinktank-ocean.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/14-thinktank-ocean.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/15-iea-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/16-irena-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/17-irena-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/18-oecd-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/19-who-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/20-unep-scrape.json +356 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/21-undp-scrape.json +16 -0
- paperful-1.1.0/tests/fixtures/grey/recorded/index.json +444 -0
- paperful-1.1.0/tests/fixtures/inbox_proposal_v1/keys.json +6 -0
- paperful-1.1.0/tests/fixtures/inbox_proposal_v1/pending.json +13 -0
- paperful-1.1.0/tests/fixtures/item_v1/empty_shell.json +46 -0
- paperful-1.1.0/tests/fixtures/item_v1/keys.json +31 -0
- paperful-1.1.0/tests/fixtures/item_v1/record.json +15 -0
- paperful-1.1.0/tests/fixtures/note_v1/block.json +8 -0
- paperful-1.1.0/tests/fixtures/note_v1/keys.json +8 -0
- paperful-1.1.0/tests/fixtures/refs_gap_pack_v1/keys.json +8 -0
- paperful-1.1.0/tests/fixtures/refs_gap_pack_v1/pack.json +31 -0
- paperful-1.1.0/tests/fixtures/run_report_v1/keys.json +64 -0
- paperful-1.1.0/tests/fixtures/run_report_v1/minimal.json +41 -0
- paperful-1.1.0/tests/fixtures/scihub_captcha.html +97 -0
- paperful-1.1.0/tests/fixtures/scihub_found.html +446 -0
- paperful-1.1.0/tests/fixtures/scihub_not_found.html +34 -0
- paperful-1.1.0/tests/fixtures/scihub_not_in_db.html +223 -0
- paperful-1.1.0/tests/fixtures/scihub_turnstile.html +13 -0
- paperful-1.1.0/tests/fixtures/springer_chapter_notes.html +14 -0
- paperful-1.1.0/tests/ragfakes.py +110 -0
- paperful-1.1.0/tests/test_acronyms.py +109 -0
- paperful-1.1.0/tests/test_agent_ops_envelopes.py +48 -0
- paperful-1.1.0/tests/test_agent_ops_mcp.py +99 -0
- paperful-1.1.0/tests/test_attach.py +223 -0
- paperful-1.1.0/tests/test_attachments.py +231 -0
- paperful-1.1.0/tests/test_author_request.py +146 -0
- paperful-1.1.0/tests/test_authors_report.py +248 -0
- paperful-1.1.0/tests/test_authorwatch.py +777 -0
- paperful-1.1.0/tests/test_bibliography.py +283 -0
- paperful-1.1.0/tests/test_book_chapter.py +443 -0
- paperful-1.1.0/tests/test_browser_agent.py +860 -0
- paperful-1.1.0/tests/test_cache_clean.py +83 -0
- paperful-1.1.0/tests/test_camofox.py +352 -0
- paperful-1.1.0/tests/test_cli.py +3016 -0
- paperful-1.1.0/tests/test_cli_runtime.py +100 -0
- paperful-1.1.0/tests/test_cli_runtime_helpers.py +132 -0
- paperful-1.1.0/tests/test_cli_smoke_extra.py +106 -0
- paperful-1.1.0/tests/test_cmd_modules.py +139 -0
- paperful-1.1.0/tests/test_collections_add.py +126 -0
- paperful-1.1.0/tests/test_config.py +323 -0
- paperful-1.1.0/tests/test_coverage.py +109 -0
- paperful-1.1.0/tests/test_coverage_badge.py +33 -0
- paperful-1.1.0/tests/test_crossref.py +119 -0
- paperful-1.1.0/tests/test_dedupe.py +992 -0
- paperful-1.1.0/tests/test_doctor.py +113 -0
- paperful-1.1.0/tests/test_download.py +145 -0
- paperful-1.1.0/tests/test_e2e_nba.py +277 -0
- paperful-1.1.0/tests/test_endnote.py +304 -0
- paperful-1.1.0/tests/test_enrich.py +341 -0
- paperful-1.1.0/tests/test_ensure_playwright.py +86 -0
- paperful-1.1.0/tests/test_export_build.py +136 -0
- paperful-1.1.0/tests/test_extracted_cmds.py +599 -0
- paperful-1.1.0/tests/test_ezproxy_scholar.py +354 -0
- paperful-1.1.0/tests/test_fetch_wins.py +227 -0
- paperful-1.1.0/tests/test_grey_probe.py +249 -0
- paperful-1.1.0/tests/test_handoff.py +326 -0
- paperful-1.1.0/tests/test_htmlpdf.py +178 -0
- paperful-1.1.0/tests/test_identity.py +48 -0
- paperful-1.1.0/tests/test_inbox.py +1055 -0
- paperful-1.1.0/tests/test_inbox_route.py +206 -0
- paperful-1.1.0/tests/test_index_jobs_unit.py +66 -0
- paperful-1.1.0/tests/test_ingest_dois.py +114 -0
- paperful-1.1.0/tests/test_interop.py +134 -0
- paperful-1.1.0/tests/test_landing.py +221 -0
- paperful-1.1.0/tests/test_library.py +389 -0
- paperful-1.1.0/tests/test_lint.py +370 -0
- paperful-1.1.0/tests/test_llm.py +553 -0
- paperful-1.1.0/tests/test_llm_embed.py +328 -0
- paperful-1.1.0/tests/test_llm_verbs.py +889 -0
- paperful-1.1.0/tests/test_local_cites.py +131 -0
- paperful-1.1.0/tests/test_login_engine.py +68 -0
- paperful-1.1.0/tests/test_mendeley.py +434 -0
- paperful-1.1.0/tests/test_metadata.py +853 -0
- paperful-1.1.0/tests/test_mirror.py +316 -0
- paperful-1.1.0/tests/test_mirror_entries.py +121 -0
- paperful-1.1.0/tests/test_mirror_first.py +436 -0
- paperful-1.1.0/tests/test_miss_surface.py +107 -0
- paperful-1.1.0/tests/test_notes.py +153 -0
- paperful-1.1.0/tests/test_ocr.py +490 -0
- paperful-1.1.0/tests/test_openalex_store.py +319 -0
- paperful-1.1.0/tests/test_operator_cmds_behavior.py +205 -0
- paperful-1.1.0/tests/test_pack_bib.py +121 -0
- paperful-1.1.0/tests/test_pdfid.py +118 -0
- paperful-1.1.0/tests/test_pipeline.py +1769 -0
- paperful-1.1.0/tests/test_playbooks.py +536 -0
- paperful-1.1.0/tests/test_pre_release.py +52 -0
- paperful-1.1.0/tests/test_progress.py +112 -0
- paperful-1.1.0/tests/test_provenance.py +43 -0
- paperful-1.1.0/tests/test_quotes.py +26 -0
- paperful-1.1.0/tests/test_rag_auto.py +262 -0
- paperful-1.1.0/tests/test_rag_batch.py +258 -0
- paperful-1.1.0/tests/test_rag_chunk.py +149 -0
- paperful-1.1.0/tests/test_rag_cli.py +399 -0
- paperful-1.1.0/tests/test_rag_extract.py +191 -0
- paperful-1.1.0/tests/test_rag_index.py +180 -0
- paperful-1.1.0/tests/test_rag_ingest.py +325 -0
- paperful-1.1.0/tests/test_rag_ledger.py +248 -0
- paperful-1.1.0/tests/test_rag_retrieve.py +293 -0
- paperful-1.1.0/tests/test_reachout.py +217 -0
- paperful-1.1.0/tests/test_refs_gap.py +63 -0
- paperful-1.1.0/tests/test_remarks.py +143 -0
- paperful-1.1.0/tests/test_resolve.py +296 -0
- paperful-1.1.0/tests/test_routing.py +356 -0
- paperful-1.1.0/tests/test_rows_6_7_14.py +265 -0
- paperful-1.1.0/tests/test_run_config.py +498 -0
- paperful-1.1.0/tests/test_run_hooks_unit.py +76 -0
- paperful-1.1.0/tests/test_runreport.py +554 -0
- paperful-1.1.0/tests/test_schema_freeze.py +165 -0
- paperful-1.1.0/tests/test_scholar_tail.py +185 -0
- paperful-1.1.0/tests/test_scihub.py +105 -0
- paperful-1.1.0/tests/test_scope.py +69 -0
- paperful-1.1.0/tests/test_screen.py +147 -0
- paperful-1.1.0/tests/test_sections.py +257 -0
- paperful-1.1.0/tests/test_serve.py +103 -0
- paperful-1.1.0/tests/test_session.py +885 -0
- paperful-1.1.0/tests/test_snapshot.py +483 -0
- paperful-1.1.0/tests/test_snowball.py +4031 -0
- paperful-1.1.0/tests/test_snowball_briefing.py +162 -0
- paperful-1.1.0/tests/test_snowball_digest.py +333 -0
- paperful-1.1.0/tests/test_snowball_europepmc.py +250 -0
- paperful-1.1.0/tests/test_snowball_hops.py +138 -0
- paperful-1.1.0/tests/test_snowball_phase7.py +531 -0
- paperful-1.1.0/tests/test_snowball_resume.py +197 -0
- paperful-1.1.0/tests/test_snowball_trends.py +66 -0
- paperful-1.1.0/tests/test_sources.py +817 -0
- paperful-1.1.0/tests/test_sphinx_docs.py +148 -0
- paperful-1.1.0/tests/test_ste.py +241 -0
- paperful-1.1.0/tests/test_store.py +352 -0
- paperful-1.1.0/tests/test_sync.py +669 -0
- paperful-1.1.0/tests/test_twenty.py +664 -0
- paperful-1.1.0/tests/test_ui_ask.py +518 -0
- paperful-1.1.0/tests/test_ui_authorwatch.py +254 -0
- paperful-1.1.0/tests/test_ui_briefs.py +569 -0
- paperful-1.1.0/tests/test_ui_commands.py +136 -0
- paperful-1.1.0/tests/test_ui_discover.py +316 -0
- paperful-1.1.0/tests/test_ui_grab.py +526 -0
- paperful-1.1.0/tests/test_ui_index_jobs.py +503 -0
- paperful-1.1.0/tests/test_ui_rag_form.py +85 -0
- paperful-1.1.0/tests/test_ui_repair.py +232 -0
- paperful-1.1.0/tests/test_ui_repair_mirror_jobs.py +465 -0
- paperful-1.1.0/tests/test_ui_routes.py +110 -0
- paperful-1.1.0/tests/test_ui_rows.py +370 -0
- paperful-1.1.0/tests/test_ui_settings.py +118 -0
- paperful-1.1.0/tests/test_ui_shell.py +459 -0
- paperful-1.1.0/tests/test_ui_snowball_form.py +39 -0
- paperful-1.1.0/tests/test_ui_status_icons.py +16 -0
- paperful-1.1.0/tests/test_ui_wanted_jobs.py +193 -0
- paperful-1.1.0/tests/test_urls_probe.py +64 -0
- paperful-1.1.0/tests/test_versions.py +284 -0
- paperful-1.1.0/tests/test_wave2.py +271 -0
- paperful-1.1.0/tests/test_witness.py +79 -0
- paperful-1.1.0/tests/test_write_through.py +406 -0
- paperful-1.1.0/tests/test_zot.py +187 -0
- paperful-1.1.0/tests/test_zot_local.py +261 -0
- paperful-1.1.0/tests/textutil.py +14 -0
- paperful-1.1.0/uv.lock +10297 -0
- paperful-1.1.0/website/CNAME +1 -0
- paperful-1.1.0/website/README.md +23 -0
- paperful-1.1.0/website/chrome/site_chrome.css +127 -0
- paperful-1.1.0/website/chrome/site_nav.js +10 -0
- paperful-1.1.0/website/cleaning-service.html +140 -0
- paperful-1.1.0/website/images/cleaning-service-og.png +0 -0
- paperful-1.1.0/website/images/favicon-32.png +0 -0
- paperful-1.1.0/website/images/favicon.ico +0 -0
- paperful-1.1.0/website/images/logo-dark.png +0 -0
- paperful-1.1.0/website/images/logo.png +0 -0
- paperful-1.1.0/website/images/og.png +0 -0
- paperful-1.1.0/website/images/workbench-discover.png +0 -0
- paperful-1.1.0/website/images/workbench-index.png +0 -0
- paperful-1.1.0/website/images/workbench-repair.png +0 -0
- paperful-1.1.0/website/images/workbench-wanted.png +0 -0
- paperful-1.1.0/website/index.html +308 -0
- paperful-1.1.0/website/sitemap.xml +18 -0
- paperful-1.1.0/website/styles.css +497 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
.git
|
|
2
|
+
.github
|
|
3
|
+
.venv
|
|
4
|
+
.cursor
|
|
5
|
+
.pytest_cache
|
|
6
|
+
.coverage
|
|
7
|
+
htmlcov
|
|
8
|
+
__pycache__
|
|
9
|
+
*.pyc
|
|
10
|
+
*.pyo
|
|
11
|
+
.DS_Store
|
|
12
|
+
.env
|
|
13
|
+
compose.override.yaml
|
|
14
|
+
docker-compose.override.yml
|
|
15
|
+
|
|
16
|
+
# Personal / runtime — never bake into the image
|
|
17
|
+
config.toml
|
|
18
|
+
out/
|
|
19
|
+
state/
|
|
20
|
+
packs/
|
|
21
|
+
/data/
|
|
22
|
+
|
|
23
|
+
# Docs site / build noise
|
|
24
|
+
docs/_build/
|
|
25
|
+
_site/
|
|
26
|
+
website/
|
|
27
|
+
*.md
|
|
28
|
+
!README.md
|
|
29
|
+
tests/
|
|
30
|
+
Makefile
|
|
31
|
+
scripts/
|
|
32
|
+
CONTRIBUTING.md
|
|
33
|
+
CHANGELOG.md
|
|
34
|
+
LICENSE
|
|
35
|
+
.readthedocs.yml
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Copy to .env (gitignored). Compose reads this for variable substitution.
|
|
2
|
+
#
|
|
3
|
+
# cp .env.example .env
|
|
4
|
+
# Host PAPERFUL_DATA → /data (config.toml, packs/, state/).
|
|
5
|
+
# Host PAPERFUL_OUT → /data/out (PDF mirror). Separate mounts by default.
|
|
6
|
+
# Zotero Storage is not a Compose volume.
|
|
7
|
+
|
|
8
|
+
# Durable data directory mounted at /data (config.toml, packs/, state/).
|
|
9
|
+
# Preferred (outside the git root):
|
|
10
|
+
PAPERFUL_DATA=../paperful-data
|
|
11
|
+
# Keep your current repo-local config/state without moving files:
|
|
12
|
+
# PAPERFUL_DATA=.
|
|
13
|
+
|
|
14
|
+
# PDF mirror mounted at /data/out (separate from PAPERFUL_DATA).
|
|
15
|
+
PAPERFUL_OUT=../paperful-out
|
|
16
|
+
# Repo-local out/ (only when PAPERFUL_DATA=.):
|
|
17
|
+
# PAPERFUL_OUT=./out
|
|
18
|
+
|
|
19
|
+
# Docker image pack (build arg). Rebuild after changing:
|
|
20
|
+
# docker compose build --no-cache
|
|
21
|
+
# light — core + [serve] (Compose default when unset; CI uses this)
|
|
22
|
+
# heavy — also [llm] [rag] [browser-agent] for a full local env
|
|
23
|
+
PAPERFUL_IMAGE_MODE=heavy
|
|
24
|
+
|
|
25
|
+
# Host where Zotero's local API listens (Docker Desktop → host.docker.internal).
|
|
26
|
+
# On Linux with network_mode: host you can use localhost instead.
|
|
27
|
+
PAPERFUL_ZOTERO_HOST=host.docker.internal
|
|
28
|
+
|
|
29
|
+
# Host Ollama for Compose (same gateway). Outside Docker, Paperful falls back to
|
|
30
|
+
# 127.0.0.1 when this is host.docker.internal. Docker Desktop: default Ollama
|
|
31
|
+
# loopback is enough. Linux Engine: OLLAMA_HOST=0.0.0.0. See docs/llm.md#docker.
|
|
32
|
+
PAPERFUL_OLLAMA_HOST=host.docker.internal
|
|
33
|
+
|
|
34
|
+
# Free key from https://openalex.org/settings/api — never commit the real value.
|
|
35
|
+
# OPENALEX_API_KEY=
|
|
36
|
+
|
|
37
|
+
# Optional. Semantic Scholar works without a key. Request one for heavy use
|
|
38
|
+
# (it arrives by email): https://www.semanticscholar.org/product/api#api-key-form
|
|
39
|
+
# SEMANTIC_SCHOLAR_API_KEY=
|
|
40
|
+
|
|
41
|
+
# Optional. Google Scholar link discovery via SerpApi. Also set [serpapi].enabled
|
|
42
|
+
# and [serpapi].max_calls (default 20; 0 = unlimited). See docs/serpapi.md.
|
|
43
|
+
# SERPAPI_API_KEY=
|
|
44
|
+
|
|
45
|
+
# Optional. Self-hosted or cloud Twenty CRM. Also set [twenty].enabled and
|
|
46
|
+
# [twenty].base_url in config.toml. Used by twenty lookup and reachout --lookup.
|
|
47
|
+
# See docs/config.md.
|
|
48
|
+
# TWENTY_API_KEY=
|
|
49
|
+
# TWENTY_BASE_URL=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: astral-sh/setup-uv@v5
|
|
13
|
+
- run: uv sync --group dev --extra serve
|
|
14
|
+
- run: uv run pytest -m "not docs" --cov=paperful --cov-report=term-missing --cov-report=json:coverage.json
|
|
15
|
+
- name: Upload coverage report
|
|
16
|
+
if: success()
|
|
17
|
+
uses: actions/upload-artifact@v4
|
|
18
|
+
with:
|
|
19
|
+
name: coverage-json
|
|
20
|
+
path: coverage.json
|
|
21
|
+
if-no-files-found: error
|
|
22
|
+
- name: Workbench API smoke (preview token path)
|
|
23
|
+
run: |
|
|
24
|
+
uv run pytest tests/test_ui_grab.py tests/test_ui_commands.py -q
|
|
25
|
+
|
|
26
|
+
docker:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
- name: Build local image
|
|
31
|
+
run: docker compose build
|
|
32
|
+
- name: Compose config
|
|
33
|
+
run: docker compose config >/dev/null
|
|
34
|
+
- name: Smoke help and doctor without Zotero
|
|
35
|
+
# Compose-first claim: this job is the proof, not pytest-only.
|
|
36
|
+
# No live Zotero on the runner → doctor exit 2 (Zotero row red).
|
|
37
|
+
# Must not fail the workflow solely because the API is missing.
|
|
38
|
+
run: |
|
|
39
|
+
data="$(mktemp -d)"
|
|
40
|
+
out="$(mktemp -d)"
|
|
41
|
+
# Image runs as uid 1000; mktemp is 0700 for the runner uid — open the mounts.
|
|
42
|
+
chmod 0777 "$data" "$out"
|
|
43
|
+
cp config.example.toml "$data/config.toml"
|
|
44
|
+
export PAPERFUL_DATA="$data"
|
|
45
|
+
export PAPERFUL_OUT="$out"
|
|
46
|
+
docker compose run --rm -T paperful --help
|
|
47
|
+
set +e
|
|
48
|
+
docker compose run --rm -T paperful doctor --no-guide
|
|
49
|
+
code=$?
|
|
50
|
+
set -e
|
|
51
|
+
test "$code" -eq 2
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Refresh badges/coverage.json after a green CI run on main.
|
|
2
|
+
# The commit message skips CI so this cannot loop.
|
|
3
|
+
name: Coverage badge
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
workflow_run:
|
|
7
|
+
workflows: ["CI"]
|
|
8
|
+
types: [completed]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
actions: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
badge:
|
|
16
|
+
if: >-
|
|
17
|
+
github.event.workflow_run.conclusion == 'success' &&
|
|
18
|
+
github.event.workflow_run.head_branch == 'main' &&
|
|
19
|
+
github.event.workflow_run.event == 'push' &&
|
|
20
|
+
github.repository == 'glen-w/Paperful'
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
with:
|
|
25
|
+
ref: main
|
|
26
|
+
- uses: actions/download-artifact@v4
|
|
27
|
+
with:
|
|
28
|
+
name: coverage-json
|
|
29
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
30
|
+
run-id: ${{ github.event.workflow_run.id }}
|
|
31
|
+
- name: Write Shields endpoint
|
|
32
|
+
run: python3 scripts/coverage_badge.py coverage.json badges/coverage.json
|
|
33
|
+
- name: Commit badge when the percentage changes
|
|
34
|
+
run: |
|
|
35
|
+
git add badges/coverage.json
|
|
36
|
+
git diff --cached --quiet && exit 0
|
|
37
|
+
git -c user.name="github-actions[bot]" \
|
|
38
|
+
-c user.email="41898282+github-actions[bot]@users.noreply.github.com" \
|
|
39
|
+
commit -m "chore: refresh coverage badge [skip ci]"
|
|
40
|
+
git push
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Advisory docs build — does not gate merges (see continue-on-error).
|
|
2
|
+
# Merge blockers live in ci.yml (pytest + Docker). Maintainers: DOCS_STRICT=1 make docs locally.
|
|
3
|
+
name: Docs
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main, master]
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: docs-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
docs:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 15
|
|
21
|
+
continue-on-error: true
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: astral-sh/setup-uv@v5
|
|
25
|
+
- run: uv sync --extra docs --group dev
|
|
26
|
+
- name: Guide corpus + Sphinx build (warnings OK)
|
|
27
|
+
run: |
|
|
28
|
+
uv run pytest tests/test_sphinx_docs.py -m docs -q
|
|
29
|
+
make docs
|
|
30
|
+
- name: Upload docs HTML
|
|
31
|
+
if: always()
|
|
32
|
+
uses: actions/upload-artifact@v4
|
|
33
|
+
with:
|
|
34
|
+
name: docs-html
|
|
35
|
+
path: docs/_build/html/
|
|
36
|
+
if-no-files-found: warn
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Deploy website + Sphinx docs to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "website/**"
|
|
8
|
+
- "docs/**"
|
|
9
|
+
- "scripts/release/build_docs.sh"
|
|
10
|
+
- "scripts/release/assemble_pages_site.sh"
|
|
11
|
+
- "scripts/release/build_docs.sh"
|
|
12
|
+
- "tests/test_sphinx_docs.py"
|
|
13
|
+
- "pyproject.toml"
|
|
14
|
+
- "Makefile"
|
|
15
|
+
- ".github/workflows/pages.yml"
|
|
16
|
+
- "website/CNAME"
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
pages: write
|
|
22
|
+
id-token: write
|
|
23
|
+
|
|
24
|
+
concurrency:
|
|
25
|
+
group: pages
|
|
26
|
+
cancel-in-progress: true
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
deploy:
|
|
30
|
+
environment:
|
|
31
|
+
name: github-pages
|
|
32
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
- uses: astral-sh/setup-uv@v5
|
|
37
|
+
- run: uv sync --extra docs --group dev
|
|
38
|
+
- name: Guide corpus check (advisory)
|
|
39
|
+
continue-on-error: true
|
|
40
|
+
run: uv run pytest tests/test_sphinx_docs.py -m docs -q
|
|
41
|
+
- name: Assemble site (Sphinx warnings do not fail deploy)
|
|
42
|
+
run: bash scripts/release/assemble_pages_site.sh
|
|
43
|
+
- uses: actions/configure-pages@v5
|
|
44
|
+
- uses: actions/upload-pages-artifact@v3
|
|
45
|
+
with:
|
|
46
|
+
path: _site
|
|
47
|
+
- id: deployment
|
|
48
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Upload release wheels to PyPI (trusted publishing).
|
|
2
|
+
# One-time setup: https://docs.pypi.org/trusted-publishers/
|
|
3
|
+
# Owner: glen-w Repo: Paperful Workflow: publish.yml Environment: pypi
|
|
4
|
+
name: Publish to PyPI
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
release:
|
|
8
|
+
types: [published]
|
|
9
|
+
push:
|
|
10
|
+
tags:
|
|
11
|
+
- "v*"
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
publish:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
environment: pypi
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
- uses: astral-sh/setup-uv@v5
|
|
24
|
+
- name: Pre-release checks
|
|
25
|
+
run: bash scripts/release/pre_release.sh
|
|
26
|
+
- name: Build packages
|
|
27
|
+
run: uv build
|
|
28
|
+
- name: Verify dist artifacts
|
|
29
|
+
run: bash scripts/release/pre_release.sh --dist-only
|
|
30
|
+
- name: Publish to PyPI
|
|
31
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
32
|
+
with:
|
|
33
|
+
skip-existing: true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
config.toml
|
|
2
|
+
.venv/
|
|
3
|
+
out/
|
|
4
|
+
state/
|
|
5
|
+
packs/
|
|
6
|
+
# repo-root scratch (tool state, one-off exports). Not paperful/data/.
|
|
7
|
+
/data/
|
|
8
|
+
docs/_build/
|
|
9
|
+
_site/
|
|
10
|
+
__pycache__/
|
|
11
|
+
*.pyc
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.coverage
|
|
14
|
+
htmlcov/
|
|
15
|
+
/coverage.json
|
|
16
|
+
dist/
|
|
17
|
+
.DS_Store
|
|
18
|
+
.cursor/commands/
|
|
19
|
+
*cookies*.txt
|
|
20
|
+
ezproxy-cookies.txt
|
|
21
|
+
.env
|
|
22
|
+
compose.override.yaml
|
|
23
|
+
docker-compose.override.yml
|
|
24
|
+
assessments/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Optional RTD mirror; production guide ships on GitHub Pages (paperful.app/guide/).
|
|
2
|
+
|
|
3
|
+
version: 2
|
|
4
|
+
|
|
5
|
+
build:
|
|
6
|
+
os: ubuntu-22.04
|
|
7
|
+
tools:
|
|
8
|
+
python: "3.11"
|
|
9
|
+
|
|
10
|
+
sphinx:
|
|
11
|
+
configuration: docs/conf.py
|
|
12
|
+
fail_on_warning: true
|
|
13
|
+
|
|
14
|
+
python:
|
|
15
|
+
install:
|
|
16
|
+
- method: pip
|
|
17
|
+
path: .
|
|
18
|
+
extra_requirements:
|
|
19
|
+
- docs
|