paperpush 0.2.0__tar.gz → 0.4.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.
Files changed (287) hide show
  1. paperpush-0.4.0/PKG-INFO +390 -0
  2. paperpush-0.4.0/README.md +338 -0
  3. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/__init__.py +3 -2
  4. paperpush-0.4.0/paperpush/_docs/agents.md +384 -0
  5. paperpush-0.4.0/paperpush/_skills/paperpush-add-venue/SKILL.md +180 -0
  6. paperpush-0.4.0/paperpush/_skills/paperpush-add-venue-validate/SKILL.md +157 -0
  7. paperpush-0.4.0/paperpush/_skills/paperpush-autofill/SKILL.md +197 -0
  8. paperpush-0.4.0/paperpush/_skills/paperpush-portal-debug/SKILL.md +129 -0
  9. paperpush-0.4.0/paperpush/_skills/paperpush-prepare-submission/SKILL.md +160 -0
  10. paperpush-0.4.0/paperpush/_skills/paperpush-validate/SKILL.md +112 -0
  11. paperpush-0.4.0/paperpush/ai_validate.py +362 -0
  12. paperpush-0.4.0/paperpush/anonymity.py +592 -0
  13. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/autofill.py +319 -70
  14. paperpush-0.4.0/paperpush/bibliography_check.py +404 -0
  15. paperpush-0.4.0/paperpush/citation_check.py +672 -0
  16. paperpush-0.4.0/paperpush/cli.py +2697 -0
  17. paperpush-0.4.0/paperpush/codegen/__init__.py +20 -0
  18. paperpush-0.4.0/paperpush/codegen/model.py +837 -0
  19. paperpush-0.4.0/paperpush/codegen/recorder.js +771 -0
  20. paperpush-0.4.0/paperpush/codegen/session.py +732 -0
  21. paperpush-0.4.0/paperpush/colorblind.py +595 -0
  22. paperpush-0.4.0/paperpush/common_fields.json +80 -0
  23. paperpush-0.4.0/paperpush/consistency.py +663 -0
  24. paperpush-0.4.0/paperpush/cover_letter_check.py +395 -0
  25. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/database.py +475 -43
  26. paperpush-0.4.0/paperpush/document.py +180 -0
  27. paperpush-0.4.0/paperpush/figure_check.py +833 -0
  28. paperpush-0.4.0/paperpush/filematch.py +211 -0
  29. paperpush-0.4.0/paperpush/front_matter_check.py +295 -0
  30. paperpush-0.4.0/paperpush/hidden_text.py +293 -0
  31. paperpush-0.4.0/paperpush/latex_cleaner.py +195 -0
  32. paperpush-0.4.0/paperpush/layout_check.py +929 -0
  33. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/manuscript.py +65 -2
  34. paperpush-0.4.0/paperpush/manuscript_requirements.json +18450 -0
  35. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/manuscript_requirements.schema.json +155 -0
  36. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/mcp_server.py +445 -36
  37. paperpush-0.4.0/paperpush/openreview_profiles.py +260 -0
  38. paperpush-0.4.0/paperpush/pdf_layout.py +272 -0
  39. paperpush-0.4.0/paperpush/pdf_report.py +207 -0
  40. paperpush-0.4.0/paperpush/prose_check.py +735 -0
  41. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/references.py +71 -2
  42. paperpush-0.4.0/paperpush/report.py +483 -0
  43. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/requirements.py +217 -6
  44. paperpush-0.4.0/paperpush/requirements_check.py +992 -0
  45. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/schema_models.py +65 -37
  46. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/sensitive.py +1 -1
  47. paperpush-0.4.0/paperpush/skills.py +150 -0
  48. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/subfile.py +224 -9
  49. paperpush-0.4.0/paperpush/subfile_templates/acl_arr.sub.txt +76 -0
  50. paperpush-0.4.0/paperpush/subfile_templates/ajhg.sub.txt +76 -0
  51. paperpush-0.2.0/paperpush/subfile_templates/arxiv.sub → paperpush-0.4.0/paperpush/subfile_templates/arxiv.sub.txt +49 -29
  52. paperpush-0.2.0/paperpush/subfile_templates/bioinformatics.sub → paperpush-0.4.0/paperpush/subfile_templates/bioinformatics.sub.txt +90 -62
  53. paperpush-0.2.0/paperpush/subfile_templates/biorxiv.sub → paperpush-0.4.0/paperpush/subfile_templates/biorxiv.sub.txt +64 -36
  54. paperpush-0.2.0/paperpush/subfile_templates/bmc_bioinformatics.sub → paperpush-0.4.0/paperpush/subfile_templates/bmc_bioinformatics.sub.txt +45 -21
  55. paperpush-0.4.0/paperpush/subfile_templates/bmc_biology.sub.txt +76 -0
  56. paperpush-0.4.0/paperpush/subfile_templates/bmc_genomics.sub.txt +76 -0
  57. paperpush-0.4.0/paperpush/subfile_templates/bmc_medicine.sub.txt +76 -0
  58. paperpush-0.4.0/paperpush/subfile_templates/bmj.sub.txt +76 -0
  59. paperpush-0.2.0/paperpush/subfile_templates/cell.sub → paperpush-0.4.0/paperpush/subfile_templates/cell.sub.txt +65 -33
  60. paperpush-0.2.0/paperpush/subfile_templates/cell_genomics.sub → paperpush-0.4.0/paperpush/subfile_templates/cell_genomics.sub.txt +61 -33
  61. paperpush-0.4.0/paperpush/subfile_templates/cell_reports.sub.txt +76 -0
  62. paperpush-0.4.0/paperpush/subfile_templates/cell_reports_methods.sub.txt +76 -0
  63. paperpush-0.4.0/paperpush/subfile_templates/cell_stem_cell.sub.txt +76 -0
  64. paperpush-0.2.0/paperpush/subfile_templates/cell_systems.sub → paperpush-0.4.0/paperpush/subfile_templates/cell_systems.sub.txt +65 -33
  65. paperpush-0.2.0/paperpush/subfile_templates/combinatorica.sub → paperpush-0.4.0/paperpush/subfile_templates/combinatorica.sub.txt +42 -18
  66. paperpush-0.4.0/paperpush/subfile_templates/communications_biology.sub.txt +76 -0
  67. paperpush-0.4.0/paperpush/subfile_templates/cvpr_2027.sub.txt +67 -0
  68. paperpush-0.2.0/paperpush/subfile_templates/discrete_mathematics.sub → paperpush-0.4.0/paperpush/subfile_templates/discrete_mathematics.sub.txt +54 -25
  69. paperpush-0.4.0/paperpush/subfile_templates/elife.sub.txt +76 -0
  70. paperpush-0.4.0/paperpush/subfile_templates/european_radiology.sub.txt +76 -0
  71. paperpush-0.4.0/paperpush/subfile_templates/frontiers_bioinformatics.sub.txt +76 -0
  72. paperpush-0.4.0/paperpush/subfile_templates/frontiers_genetics.sub.txt +76 -0
  73. paperpush-0.4.0/paperpush/subfile_templates/frontiers_immunology.sub.txt +76 -0
  74. paperpush-0.2.0/paperpush/subfile_templates/genome_biology.sub → paperpush-0.4.0/paperpush/subfile_templates/genome_biology.sub.txt +45 -21
  75. paperpush-0.4.0/paperpush/subfile_templates/genome_medicine.sub.txt +76 -0
  76. paperpush-0.4.0/paperpush/subfile_templates/genome_research.sub.txt +76 -0
  77. paperpush-0.4.0/paperpush/subfile_templates/ieee_tmi.sub.txt +67 -0
  78. paperpush-0.4.0/paperpush/subfile_templates/ieee_tnnls.sub.txt +76 -0
  79. paperpush-0.4.0/paperpush/subfile_templates/ieee_tpami.sub.txt +76 -0
  80. paperpush-0.4.0/paperpush/subfile_templates/iscience.sub.txt +76 -0
  81. paperpush-0.4.0/paperpush/subfile_templates/jama.sub.txt +76 -0
  82. paperpush-0.4.0/paperpush/subfile_templates/jmlr.sub.txt +67 -0
  83. paperpush-0.4.0/paperpush/subfile_templates/jnm.sub.txt +76 -0
  84. paperpush-0.4.0/paperpush/subfile_templates/lancet.sub.txt +76 -0
  85. paperpush-0.4.0/paperpush/subfile_templates/lancet_digital_health.sub.txt +76 -0
  86. paperpush-0.4.0/paperpush/subfile_templates/medical_image_analysis.sub.txt +67 -0
  87. paperpush-0.2.0/paperpush/subfile_templates/medrxiv.sub → paperpush-0.4.0/paperpush/subfile_templates/medrxiv.sub.txt +72 -44
  88. paperpush-0.4.0/paperpush/subfile_templates/molecular_cell.sub.txt +76 -0
  89. paperpush-0.4.0/paperpush/subfile_templates/nar_cancer.sub.txt +76 -0
  90. paperpush-0.4.0/paperpush/subfile_templates/nar_genomics_bioinformatics.sub.txt +67 -0
  91. paperpush-0.2.0/paperpush/subfile_templates/nature.sub → paperpush-0.4.0/paperpush/subfile_templates/nature.sub.txt +61 -33
  92. paperpush-0.4.0/paperpush/subfile_templates/nature_biomedical_engineering.sub.txt +142 -0
  93. paperpush-0.2.0/paperpush/subfile_templates/nature_biotech.sub → paperpush-0.4.0/paperpush/subfile_templates/nature_biotech.sub.txt +61 -33
  94. paperpush-0.4.0/paperpush/subfile_templates/nature_cell_biology.sub.txt +76 -0
  95. paperpush-0.4.0/paperpush/subfile_templates/nature_communications.sub.txt +76 -0
  96. paperpush-0.4.0/paperpush/subfile_templates/nature_computational_science.sub.txt +76 -0
  97. paperpush-0.4.0/paperpush/subfile_templates/nature_genetics.sub.txt +76 -0
  98. paperpush-0.4.0/paperpush/subfile_templates/nature_machine_intelligence.sub.txt +142 -0
  99. paperpush-0.4.0/paperpush/subfile_templates/nature_medicine.sub.txt +76 -0
  100. paperpush-0.2.0/paperpush/subfile_templates/nature_methods.sub → paperpush-0.4.0/paperpush/subfile_templates/nature_methods.sub.txt +56 -28
  101. paperpush-0.4.0/paperpush/subfile_templates/nature_neuroscience.sub.txt +76 -0
  102. paperpush-0.4.0/paperpush/subfile_templates/nature_structural_molecular_biology.sub.txt +76 -0
  103. paperpush-0.4.0/paperpush/subfile_templates/nejm.sub.txt +76 -0
  104. paperpush-0.4.0/paperpush/subfile_templates/neuron.sub.txt +76 -0
  105. paperpush-0.4.0/paperpush/subfile_templates/npj_digital_medicine.sub.txt +76 -0
  106. paperpush-0.2.0/paperpush/subfile_templates/nucleic_acids_research.sub → paperpush-0.4.0/paperpush/subfile_templates/nucleic_acids_research.sub.txt +101 -69
  107. paperpush-0.4.0/paperpush/subfile_templates/patterns.sub.txt +76 -0
  108. paperpush-0.4.0/paperpush/subfile_templates/plos_biology.sub.txt +76 -0
  109. paperpush-0.2.0/paperpush/subfile_templates/plos_compbio.sub → paperpush-0.4.0/paperpush/subfile_templates/plos_compbio.sub.txt +95 -63
  110. paperpush-0.4.0/paperpush/subfile_templates/plos_genetics.sub.txt +76 -0
  111. paperpush-0.4.0/paperpush/subfile_templates/plos_medicine.sub.txt +76 -0
  112. paperpush-0.4.0/paperpush/subfile_templates/plos_one.sub.txt +76 -0
  113. paperpush-0.4.0/paperpush/subfile_templates/pnas.sub.txt +76 -0
  114. paperpush-0.4.0/paperpush/subfile_templates/radiology.sub.txt +76 -0
  115. paperpush-0.4.0/paperpush/subfile_templates/radiology_ai.sub.txt +76 -0
  116. paperpush-0.2.0/paperpush/subfile_templates/science.sub → paperpush-0.4.0/paperpush/subfile_templates/science.sub.txt +63 -31
  117. paperpush-0.2.0/paperpush/subfile_templates/science_advances.sub → paperpush-0.4.0/paperpush/subfile_templates/science_advances.sub.txt +62 -30
  118. paperpush-0.2.0/paperpush/subfile_templates/science_immunology.sub → paperpush-0.4.0/paperpush/subfile_templates/science_immunology.sub.txt +62 -30
  119. paperpush-0.2.0/paperpush/subfile_templates/science_robotics.sub → paperpush-0.4.0/paperpush/subfile_templates/science_robotics.sub.txt +64 -32
  120. paperpush-0.2.0/paperpush/subfile_templates/science_signaling.sub → paperpush-0.4.0/paperpush/subfile_templates/science_signaling.sub.txt +62 -30
  121. paperpush-0.2.0/paperpush/subfile_templates/science_translational_medicine.sub → paperpush-0.4.0/paperpush/subfile_templates/science_translational_medicine.sub.txt +62 -30
  122. paperpush-0.4.0/paperpush/subfile_templates/scientific_reports.sub.txt +76 -0
  123. paperpush-0.4.0/paperpush/subfile_templates/tmlr.sub.txt +67 -0
  124. paperpush-0.2.0/paperpush/venues.json → paperpush-0.4.0/paperpush/submission_forms.json +339 -172
  125. paperpush-0.2.0/paperpush/venues.schema.json → paperpush-0.4.0/paperpush/submission_forms.schema.json +45 -38
  126. paperpush-0.4.0/paperpush/template_check.py +261 -0
  127. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/validate.py +638 -55
  128. paperpush-0.4.0/paperpush/venue_data.py +380 -0
  129. paperpush-0.4.0/paperpush/venue_select.py +719 -0
  130. paperpush-0.4.0/paperpush/venuefile.py +1079 -0
  131. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/__init__.py +1 -1
  132. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/arxiv/arxiv.py +36 -10
  133. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/base.py +23 -2
  134. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/common.py +39 -58
  135. paperpush-0.4.0/paperpush/venues/discrete_mathematics/discrete_mathematics.py +702 -0
  136. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editflow/main.py +29 -6
  137. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/main.py +182 -70
  138. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/login.py +9 -0
  139. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/nature/main.py +257 -68
  140. paperpush-0.4.0/paperpush/venues/nature/nature_biomedical_engineering.py +36 -0
  141. paperpush-0.4.0/paperpush/venues/nature/nature_machine_intelligence.py +36 -0
  142. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openreview/aaai_2027.py +29 -8
  143. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openreview/iclr_2027.py +25 -4
  144. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openrxiv/main.py +32 -4
  145. paperpush-0.4.0/paperpush/venues/recovery.py +480 -0
  146. paperpush-0.4.0/paperpush/venues/recovery_ai.py +443 -0
  147. paperpush-0.4.0/paperpush/venues/recovery_channel.py +636 -0
  148. paperpush-0.4.0/paperpush/venues/recovery_report.py +322 -0
  149. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/scholarone/bioinformatics.py +38 -10
  150. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/scholarone/main.py +36 -2
  151. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/scholarone/nucleic_acids_research.py +94 -24
  152. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/science/science.py +46 -8
  153. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/snapp/main.py +26 -2
  154. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/template/template.py +11 -2
  155. paperpush-0.4.0/paperpush/venues.json +1038 -0
  156. paperpush-0.4.0/paperpush/venues.schema.json +84 -0
  157. paperpush-0.4.0/paperpush/web/__init__.py +12 -0
  158. paperpush-0.4.0/paperpush/web/app.py +1506 -0
  159. paperpush-0.4.0/paperpush/web/shared.py +243 -0
  160. paperpush-0.4.0/paperpush/web/static/add-venue.html +147 -0
  161. paperpush-0.4.0/paperpush/web/static/add-venue.js +649 -0
  162. paperpush-0.4.0/paperpush/web/static/app.js +2543 -0
  163. paperpush-0.4.0/paperpush/web/static/checks.js +306 -0
  164. paperpush-0.4.0/paperpush/web/static/fonts/OFL-STIXTwoText.txt +93 -0
  165. paperpush-0.4.0/paperpush/web/static/fonts/OFL-SourceSans3.txt +93 -0
  166. paperpush-0.4.0/paperpush/web/static/fonts/source-sans-3-latin-ext.woff2 +0 -0
  167. paperpush-0.4.0/paperpush/web/static/fonts/source-sans-3-latin.woff2 +0 -0
  168. paperpush-0.4.0/paperpush/web/static/fonts/stix-two-text-italic-latin-ext.woff2 +0 -0
  169. paperpush-0.4.0/paperpush/web/static/fonts/stix-two-text-italic-latin.woff2 +0 -0
  170. paperpush-0.4.0/paperpush/web/static/fonts/stix-two-text-latin-ext.woff2 +0 -0
  171. paperpush-0.4.0/paperpush/web/static/fonts/stix-two-text-latin.woff2 +0 -0
  172. paperpush-0.4.0/paperpush/web/static/index.html +216 -0
  173. paperpush-0.4.0/paperpush/web/static/shared.js +67 -0
  174. paperpush-0.4.0/paperpush/web/static/style.css +670 -0
  175. paperpush-0.4.0/paperpush/web/static/subfile.js +209 -0
  176. paperpush-0.4.0/paperpush/web/static/viewer.js +199 -0
  177. paperpush-0.4.0/paperpush.egg-info/PKG-INFO +390 -0
  178. paperpush-0.4.0/paperpush.egg-info/SOURCES.txt +273 -0
  179. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush.egg-info/entry_points.txt +1 -0
  180. paperpush-0.4.0/paperpush.egg-info/requires.txt +45 -0
  181. {paperpush-0.2.0 → paperpush-0.4.0}/pyproject.toml +17 -6
  182. paperpush-0.4.0/tests/test_anonymity.py +287 -0
  183. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_autofill.py +301 -22
  184. paperpush-0.4.0/tests/test_bibliography_check.py +166 -0
  185. paperpush-0.4.0/tests/test_check_guidelines.py +167 -0
  186. paperpush-0.4.0/tests/test_check_submit_walkthrough.py +125 -0
  187. paperpush-0.4.0/tests/test_cli_web.py +126 -0
  188. paperpush-0.4.0/tests/test_codegen.py +691 -0
  189. paperpush-0.4.0/tests/test_colorblind.py +222 -0
  190. paperpush-0.4.0/tests/test_cover_letter_and_counts.py +311 -0
  191. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_editorialmanager_login.py +41 -1
  192. paperpush-0.4.0/tests/test_filematch.py +78 -0
  193. paperpush-0.4.0/tests/test_front_matter_check.py +185 -0
  194. paperpush-0.4.0/tests/test_hidden_text.py +196 -0
  195. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_internals.py +54 -29
  196. paperpush-0.4.0/tests/test_latex_cleaner.py +134 -0
  197. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_login.py +562 -3
  198. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_mcp_server.py +217 -5
  199. paperpush-0.4.0/tests/test_nature_biomedical_engineering.py +101 -0
  200. paperpush-0.4.0/tests/test_nature_machine_intelligence.py +125 -0
  201. paperpush-0.4.0/tests/test_openreview_profiles.py +154 -0
  202. paperpush-0.4.0/tests/test_pick_venue.py +529 -0
  203. paperpush-0.4.0/tests/test_prose_check.py +253 -0
  204. paperpush-0.4.0/tests/test_recovery.py +287 -0
  205. paperpush-0.4.0/tests/test_recovery_ai.py +309 -0
  206. paperpush-0.4.0/tests/test_recovery_channel.py +388 -0
  207. paperpush-0.4.0/tests/test_recovery_coverage.py +64 -0
  208. paperpush-0.4.0/tests/test_recovery_report.py +174 -0
  209. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_references.py +70 -0
  210. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_requirements.py +9 -4
  211. paperpush-0.4.0/tests/test_skills.py +104 -0
  212. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_subfile.py +233 -15
  213. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_submit.py +65 -7
  214. paperpush-0.4.0/tests/test_template_check.py +173 -0
  215. paperpush-0.4.0/tests/test_unattended_sign_in.py +133 -0
  216. paperpush-0.4.0/tests/test_update_guidelines.py +110 -0
  217. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_validate.py +56 -20
  218. paperpush-0.4.0/tests/test_validate_only_venue.py +239 -0
  219. paperpush-0.4.0/tests/test_validate_report.py +1020 -0
  220. paperpush-0.4.0/tests/test_venue_consistency.py +173 -0
  221. paperpush-0.4.0/tests/test_venue_data.py +570 -0
  222. paperpush-0.4.0/tests/test_venuefile.py +159 -0
  223. paperpush-0.4.0/tests/test_web.py +1061 -0
  224. paperpush-0.2.0/PKG-INFO +0 -155
  225. paperpush-0.2.0/README.md +0 -123
  226. paperpush-0.2.0/paperpush/_docs/agents.md +0 -206
  227. paperpush-0.2.0/paperpush/cli.py +0 -1207
  228. paperpush-0.2.0/paperpush/manuscript_requirements.json +0 -5211
  229. paperpush-0.2.0/paperpush/requirements_check.py +0 -513
  230. paperpush-0.2.0/paperpush/subfile_templates/iclr_2027.sub +0 -74
  231. paperpush-0.2.0/paperpush/venues/discrete_mathematics/discrete_mathematics.py +0 -431
  232. paperpush-0.2.0/paperpush.egg-info/PKG-INFO +0 -155
  233. paperpush-0.2.0/paperpush.egg-info/SOURCES.txt +0 -127
  234. paperpush-0.2.0/paperpush.egg-info/requires.txt +0 -19
  235. paperpush-0.2.0/tests/test_portal_drift.py +0 -459
  236. {paperpush-0.2.0 → paperpush-0.4.0}/LICENSE +0 -0
  237. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/__main__.py +0 -0
  238. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/_logging.py +0 -0
  239. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/credentials.py +0 -0
  240. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/orcid.py +0 -0
  241. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/aaai_2027_countries.txt +0 -0
  242. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/aaai_2027_topics.txt +0 -0
  243. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/arxiv_categories.txt +0 -0
  244. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/bioinformatics_keywords.txt +0 -0
  245. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/genome_biology_institution_countries.txt +0 -0
  246. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/iclr_2027_primary_areas.txt +0 -0
  247. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/nature_biotech_categories.json +0 -0
  248. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/nature_categories.json +0 -0
  249. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/nature_methods_categories.json +0 -0
  250. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/plos_compbio_classifications.txt +0 -0
  251. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/plos_compbio_funding_countries.txt +0 -0
  252. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_advances_subjects.txt +0 -0
  253. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_immunology_subjects.txt +0 -0
  254. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_robotics_subjects.txt +0 -0
  255. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_signaling_subjects.txt +0 -0
  256. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_subjects.txt +0 -0
  257. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/_assets/science_translational_medicine_subjects.txt +0 -0
  258. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/arxiv/__init__.py +0 -0
  259. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/discrete_mathematics/__init__.py +0 -0
  260. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editflow/__init__.py +0 -0
  261. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editflow/combinatorica.py +0 -0
  262. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/__init__.py +0 -0
  263. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/cell.py +0 -0
  264. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/cell_genomics.py +0 -0
  265. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/cell_systems.py +0 -0
  266. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/editorialmanager/plos_compbio.py +0 -0
  267. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/nature/__init__.py +0 -0
  268. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/nature/nature.py +0 -0
  269. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/nature/nature_biotech.py +0 -0
  270. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/nature/nature_methods.py +0 -0
  271. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openreview/__init__.py +0 -0
  272. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openreview/main.py +0 -0
  273. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openrxiv/__init__.py +0 -0
  274. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openrxiv/biorxiv.py +0 -0
  275. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/openrxiv/medrxiv.py +0 -0
  276. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/scholarone/__init__.py +0 -0
  277. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/science/__init__.py +0 -0
  278. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/snapp/__init__.py +0 -0
  279. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/snapp/bmc_bioinformatics.py +0 -0
  280. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/snapp/genome_biology.py +0 -0
  281. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush/venues/template/__init__.py +0 -0
  282. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush.egg-info/dependency_links.txt +0 -0
  283. {paperpush-0.2.0 → paperpush-0.4.0}/paperpush.egg-info/top_level.txt +0 -0
  284. {paperpush-0.2.0 → paperpush-0.4.0}/setup.cfg +0 -0
  285. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_logging.py +0 -0
  286. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_sensitive.py +0 -0
  287. {paperpush-0.2.0 → paperpush-0.4.0}/tests/test_venue_interface.py +0 -0
@@ -0,0 +1,390 @@
1
+ Metadata-Version: 2.4
2
+ Name: paperpush
3
+ Version: 0.4.0
4
+ Summary: A Python library for automating the submission of manuscripts to academic venues.
5
+ Author-email: Joseph Rich <josephrich98@gmail.com>
6
+ Maintainer-email: Joseph Rich <josephrich98@gmail.com>
7
+ License-Expression: BSD-2-Clause
8
+ Project-URL: Homepage, https://github.com/pachterlab/paperpush
9
+ Project-URL: Repository, https://github.com/pachterlab/paperpush
10
+ Project-URL: Documentation, https://github.com/pachterlab/paperpush#readme
11
+ Project-URL: Issues, https://github.com/pachterlab/paperpush/issues
12
+ Requires-Python: >=3.10
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: playwright>=1.40
16
+ Requires-Dist: keyring>=24.0
17
+ Requires-Dist: pydantic>=2.0
18
+ Requires-Dist: pypdf>=6.0.0
19
+ Requires-Dist: pillow>=10.0
20
+ Requires-Dist: rich>=13.0
21
+ Provides-Extra: ai-anthropic
22
+ Requires-Dist: anthropic>=0.40; extra == "ai-anthropic"
23
+ Provides-Extra: ai-openai
24
+ Requires-Dist: openai>=2.0; extra == "ai-openai"
25
+ Provides-Extra: ai-google
26
+ Requires-Dist: google-genai>=2.3.0; extra == "ai-google"
27
+ Provides-Extra: mcp
28
+ Requires-Dist: mcp>=1.2; extra == "mcp"
29
+ Provides-Extra: ai
30
+ Requires-Dist: paperpush[ai-anthropic,ai-google,ai-openai,mcp]; extra == "ai"
31
+ Provides-Extra: web
32
+ Requires-Dist: fastapi>=0.115; extra == "web"
33
+ Requires-Dist: uvicorn>=0.30; extra == "web"
34
+ Requires-Dist: python-multipart>=0.0.9; extra == "web"
35
+ Requires-Dist: psycopg[binary]>=3.1; extra == "web"
36
+ Provides-Extra: validate
37
+ Requires-Dist: pdfminer.six>=20240706; extra == "validate"
38
+ Requires-Dist: arxiv_latex_cleaner>=0.1.0; extra == "validate"
39
+ Requires-Dist: codespell>=2.2; extra == "validate"
40
+ Requires-Dist: tqdm>=4.60; extra == "validate"
41
+ Provides-Extra: all
42
+ Requires-Dist: paperpush[ai,validate,web]; extra == "all"
43
+ Provides-Extra: dev
44
+ Requires-Dist: paperpush[mcp,validate,web]; extra == "dev"
45
+ Requires-Dist: pytest>=7.0; extra == "dev"
46
+ Requires-Dist: bandit; extra == "dev"
47
+ Requires-Dist: black; extra == "dev"
48
+ Requires-Dist: jsonschema>=4.18; extra == "dev"
49
+ Requires-Dist: sphinx; extra == "dev"
50
+ Requires-Dist: isort; extra == "dev"
51
+ Dynamic: license-file
52
+
53
+ # PaperPush: Automated manuscript submission to journals, conferences, and preprint servers
54
+
55
+ <!-- [![Documentation Status](https://readthedocs.org/projects/paperpush/badge/?version=latest)](https://paperpush.readthedocs.io/en/latest/?badge=latest) -->
56
+
57
+ Prepare manuscripts for submission to preprint servers, journals, and conferences with just a few commands. No need to spend hours verifying manuscript files for journal compliance and filling out submission portal forms manually. Just provide a manuscript directory and submission venue of interest, and PaperPush will validate the documents and fill out the submission portal for you.
58
+
59
+ PaperPush provides the following services:
60
+ - A standardized system to share all data submitted to a journal/conference
61
+ - Extensive venue-specific manuscript guideline checking including section lengths, reference hallucination, figure resolution, link validation, anonymization, and much much more — up to 100 checks!
62
+ - A central database of journal/conference manuscript requirements
63
+ - Automated and fast submission portal filling with deterministic scripts
64
+ - Free, open-source, actively-maintained, and never stores your data
65
+
66
+ ## tl;dr
67
+
68
+ Workflow to create the manuscript metadata (.sub) file, validate against author guidelines, and fill out the submission portal. Follow your favorite path:
69
+
70
+ ### Claude Code (other AI agents listed below):
71
+ - `/plugin marketplace add pachterlab/paperpush`
72
+ - `/plugin install paperpush@paperpush`
73
+ - `/paperpush-prepare-submission Prepare my manuscript in /PATH/TO/MANUSCRIPT/DIRECTORY for submission to VENUE with PaperPush.`
74
+
75
+ ### Website:
76
+ - Visit [paperpush.onrender.com](https://paperpush.onrender.com)
77
+ - Select the VENUE (or upload a .sub file)
78
+ - Upload manuscript files and fill out the metadata fields
79
+ - Click the blue "Validate" button to validate the files and metadata against author guidelines
80
+ - Click the blue "Share" button to share the editable form with co-authors (or download and share the .sub file)
81
+ - (If available) Click the "Fill out submission portal automatically" button and follow the instructions
82
+
83
+ ### CLI:
84
+ - `paperpush subfile VENUE` # create a .sub file
85
+ - Fill out VENUE.sub.txt
86
+ - `paperpush validate VENUE.sub.txt` # validate the files and data in VENUE.sub.txt
87
+ - Share VENUE.sub.txt with co-authors (it can be viewed in a text editor, with `paperpush web VENUE.sub.txt`, or via upload onto [paperpush.onrender.com](https://paperpush.onrender.com))
88
+ - (If available) `paperpush login VENUE` # log in to the VENUE submission portal
89
+ - (If available) `paperpush submit VENUE.sub.txt` # fill out the VENUE submission portal with information in VENUE.sub.txt
90
+
91
+ ## Website
92
+
93
+ [paperpush.onrender.com](https://paperpush.onrender.com): prepare a submission in your browser, validate it, and share the editable form with co-authors — no install needed.
94
+
95
+ ## Install
96
+
97
+ ```bash
98
+ pip install paperpush["all"] # Recommended — for AI API usage, MCP server, local web deployment, and additional manuscript validation checks
99
+ pip install paperpush # basic CLI usage
100
+ ```
101
+
102
+ (Required for `submit`): To install the playwright dependency and the required chromium browser, run:
103
+
104
+ ```bash
105
+ playwright install chromium
106
+ ```
107
+
108
+ ## Use with AI
109
+
110
+ Install the paperpush skills for your agent, so it knows how to autofill, validate, and submit:
111
+
112
+ **Claude Code** (two separate prompts):
113
+
114
+ ```
115
+ /plugin marketplace add pachterlab/paperpush
116
+ ```
117
+ ```
118
+ /plugin install paperpush@paperpush
119
+ ```
120
+
121
+ **Codex:**
122
+
123
+ ```bash
124
+ codex plugin marketplace add pachterlab/paperpush
125
+ codex plugin add paperpush@paperpush
126
+ ```
127
+
128
+ **From a pip install** (any agent):
129
+
130
+ ```bash
131
+ paperpush install-skills # Claude Code, every project (~/.claude/skills)
132
+ paperpush install-skills --agent codex # Codex (~/.codex/skills)
133
+ paperpush install-skills --dest DIR # any other agent's skills directory
134
+ ```
135
+
136
+ Then ask:
137
+
138
+ ```LLM
139
+ /paperpush-prepare-submission Prepare my manuscript in /PATH/TO/MANUSCRIPT/DIRECTORY for submission to VENUE with PaperPush.
140
+ ```
141
+
142
+ See [`docs/example-session.md`](docs/example-session.md) for a full worked example of this flow.
143
+
144
+ ## Quickstart
145
+ 1. `paperpush subfile VENUE`: creates a file VENUE.sub.txt that is a template for the VENUE submission. Fields are grouped into the same sections for every venue (manuscript type, files, details, authors, reviewers, declarations, additional); add `--venue-order` to list them in the order the venue's portal asks for them instead.
146
+ 2. **fill out VENUE.sub.txt:** Open VENUE.sub.txt in a text editor to edit manually, or run `paperpush web VENUE.sub.txt` to edit in a web browser. Use the agent skill `/paperpush-autofill My manuscript files are in /PATH/TO/MANUSCRIPT/DIRECTORY. Fill out VENUE.sub.txt` or the command `paperpush autofill --engine api -p /PATH/TO/MANUSCRIPT/DIRECTORY ... VENUE.sub.txt` (API) to automatically fill from the manuscript directory with AI. `paperpush autofill` requires the provider's API key. The AI agent may not be able to fill out all fields if some information is not in the manuscript directory.
147
+ 3. `paperpush validate VENUE.sub.txt`: run the pre-submission checks on the filled `VENUE.sub.txt`. Use the agent skill `/paperpush-validate` or the CLI flag `--ai` (API) to run checks with AI. The AI checks require the provider's API key.
148
+ 4. `paperpush login VENUE`: log in to the VENUE submission portal.
149
+ 5. `paperpush submit VENUE.sub.txt`: Fill out the VENUE submission portal. Will not actually submit the manuscript. We highly recommend reviewing the submission form in the venue portal before clicking submit. Use the agent skill `/paperpush-portal-debug` or the CLI flag `--ai` (API) to have AI fix any issues that may arise. Ignore validation checks with the `--skip-validate` flag.
150
+
151
+ Helper commands:
152
+ - `paperpush venues`: List supported venues. Filters combine:
153
+ - `--validate`: only venues paperpush can validate a manuscript against.
154
+ - `--submit`: only venues that also support automated submission portal filling.
155
+ - `-k/--keywords KW[,KW...]`: only venues tagged with any of these subject keywords (e.g. `biology,genetics`).
156
+ - `-t/--type TYPE`: only venues of this kind (`preprint`, `journal`, or `conference`; repeatable).
157
+ - `--columns COL[,COL...]` / `--hide-columns COL[,COL...]`: choose which columns to show (`slug`, `venue`, `keywords`, `type`, `link`, `validate`, `submit`).
158
+
159
+ For example, `paperpush venues --submit -t journal -k biology` lists the biology journals paperpush can submit to.
160
+ - `paperpush pick-venue`: List supported venues that are a good thematic fit for your manuscript. Give it the manuscript's keywords (`pick-venue hippocampus, place cells`; a keyword can be a venue subject such as `immunology`), the manuscript itself (`pick-venue manuscript.pdf`), or its `--title` and `--abstract`, which are matched against each venue's subject keywords (`--venue-name` searches by name instead); add `--ai` (API) for an LLM's ranking with a reason for each venue. Note that this only searches the venues supported in PaperPush; and it only checks for thematic fit, not impact or likelihood of acceptance.
161
+ - `paperpush update-venues`: Update the venue data (venues.json, submission_forms.json, manuscript_requirements.json) from the remote venue-data branch.
162
+ - `paperpush requirements VENUE`: print VENUE's author guidelines, if available.
163
+ - `paperpush options VENUE.FIELD`: print the allowed values for FIELD in VENUE's submission form.
164
+ - `paperpush web VENUE.sub.txt`: open a sub file in a local deployment of the web application
165
+
166
+ See the YouTube tutorial [PaperPush Tutorial](https://youtu.be/ChCYoud0uBk)
167
+
168
+ ## Documentation
169
+
170
+ [paperpush.readthedocs.io](https://paperpush.readthedocs.io)
171
+
172
+ ## Supported venues
173
+
174
+ <!-- BEGIN SUPPORTED VENUES -->
175
+ **Preprint servers**
176
+
177
+ | Venue | Slug | Validate + basic .sub | Submit + full .sub |
178
+ | --- | --- | :---: | :---: |
179
+ | [arXiv](https://arxiv.org) | `arxiv` | ✅ | ✅ |
180
+ | [bioRxiv](https://www.biorxiv.org) | `biorxiv` | ✅ | ✅ |
181
+ | [medRxiv](https://www.medrxiv.org) | `medrxiv` | ✅ | ✅ |
182
+
183
+ **Journals**
184
+
185
+ | Venue | Slug | Validate + basic .sub | Submit + full .sub |
186
+ | --- | --- | :---: | :---: |
187
+ | [AJHG](https://www.cell.com/ajhg) | `ajhg` | ✅ | |
188
+ | [Bioinformatics](https://academic.oup.com/bioinformatics) | `bioinformatics` | ✅ | ✅ |
189
+ | [BMC Bioinformatics](https://link.springer.com/journal/12859) | `bmc_bioinformatics` | ✅ | ✅ |
190
+ | [BMC Biology](https://bmcbiol.biomedcentral.com) | `bmc_biology` | ✅ | |
191
+ | [BMC Genomics](https://bmcgenomics.biomedcentral.com) | `bmc_genomics` | ✅ | |
192
+ | [BMC Medicine](https://bmcmedicine.biomedcentral.com) | `bmc_medicine` | ✅ | |
193
+ | [The BMJ](https://www.bmj.com) | `bmj` | ✅ | |
194
+ | [Cell](https://www.cell.com/cell/home) | `cell` | ✅ | ✅ |
195
+ | [Cell Genomics](https://www.cell.com/cell-genomics/home) | `cell_genomics` | ✅ | ✅ |
196
+ | [Cell Reports](https://www.cell.com/cell-reports) | `cell_reports` | ✅ | |
197
+ | [Cell Reports Methods](https://www.cell.com/cell-reports-methods) | `cell_reports_methods` | ✅ | |
198
+ | [Cell Stem Cell](https://www.cell.com/cell-stem-cell) | `cell_stem_cell` | ✅ | |
199
+ | [Cell Systems](https://www.cell.com/cell-systems/home) | `cell_systems` | ✅ | ✅ |
200
+ | [Combinatorica](https://link.springer.com/journal/493) | `combinatorica` | ✅ | ✅ |
201
+ | [Communications Biology](https://www.nature.com/commsbio) | `communications_biology` | ✅ | |
202
+ | [Discrete Mathematics](https://www.sciencedirect.com/journal/discrete-mathematics) | `discrete_mathematics` | ✅ | ✅ |
203
+ | [eLife](https://elifesciences.org) | `elife` | ✅ | |
204
+ | [European Radiology](https://link.springer.com/journal/330) | `european_radiology` | ✅ | |
205
+ | [Frontiers in Bioinformatics](https://www.frontiersin.org/journals/bioinformatics) | `frontiers_bioinformatics` | ✅ | |
206
+ | [Frontiers in Genetics](https://www.frontiersin.org/journals/genetics) | `frontiers_genetics` | ✅ | |
207
+ | [Frontiers in Immunology](https://www.frontiersin.org/journals/immunology) | `frontiers_immunology` | ✅ | |
208
+ | [Genome Biology](https://genomebiology.biomedcentral.com) | `genome_biology` | ✅ | ✅ |
209
+ | [Genome Medicine](https://genomemedicine.biomedcentral.com) | `genome_medicine` | ✅ | |
210
+ | [Genome Research](https://genome.cshlp.org) | `genome_research` | ✅ | |
211
+ | [IEEE TMI](https://ieeetmi.org/) | `ieee_tmi` | ✅ | |
212
+ | [IEEE TNNLS](https://cis.ieee.org/publications/t-neural-networks-and-learning-systems) | `ieee_tnnls` | ✅ | |
213
+ | [IEEE TPAMI](https://www.computer.org/csdl/journal/tp) | `ieee_tpami` | ✅ | |
214
+ | [iScience](https://www.cell.com/iscience) | `iscience` | ✅ | |
215
+ | [JAMA](https://jamanetwork.com/journals/jama) | `jama` | ✅ | |
216
+ | [JMLR](https://www.jmlr.org) | `jmlr` | ✅ | |
217
+ | [JNM](https://jnm.snmjournals.org) | `jnm` | ✅ | |
218
+ | [The Lancet](https://www.thelancet.com/journals/lancet/home) | `lancet` | ✅ | |
219
+ | [Lancet Digital Health](https://www.thelancet.com/journals/landig/home) | `lancet_digital_health` | ✅ | |
220
+ | [Medical Image Analysis](https://www.sciencedirect.com/journal/medical-image-analysis) | `medical_image_analysis` | ✅ | |
221
+ | [Molecular Cell](https://www.cell.com/molecular-cell) | `molecular_cell` | ✅ | |
222
+ | [NAR Cancer](https://academic.oup.com/narcancer) | `nar_cancer` | ✅ | |
223
+ | [NAR Genomics and Bioinformatics](https://academic.oup.com/nargab) | `nar_genomics_bioinformatics` | ✅ | |
224
+ | [Nature](https://www.nature.com) | `nature` | ✅ | ✅ |
225
+ | [Nature Biomedical Engineering](https://www.nature.com/natbiomedeng) | `nature_biomedical_engineering` | ✅ | ✅ |
226
+ | [Nature Biotechnology](https://www.nature.com/nbt) | `nature_biotech` | ✅ | ✅ |
227
+ | [Nature Cell Biology](https://www.nature.com/ncb) | `nature_cell_biology` | ✅ | |
228
+ | [Nature Communications](https://www.nature.com/ncomms) | `nature_communications` | ✅ | |
229
+ | [Nature Computational Science](https://www.nature.com/natcomputsci) | `nature_computational_science` | ✅ | |
230
+ | [Nature Genetics](https://www.nature.com/ng) | `nature_genetics` | ✅ | |
231
+ | [Nature Machine Intelligence](https://www.nature.com/natmachintell) | `nature_machine_intelligence` | ✅ | ✅ |
232
+ | [Nature Medicine](https://www.nature.com/nm) | `nature_medicine` | ✅ | |
233
+ | [Nature Methods](https://www.nature.com/nmeth) | `nature_methods` | ✅ | ✅ |
234
+ | [Nature Neuroscience](https://www.nature.com/neuro) | `nature_neuroscience` | ✅ | |
235
+ | [Nature Structural & Molecular Biology](https://www.nature.com/nsmb) | `nature_structural_molecular_biology` | ✅ | |
236
+ | [NEJM](https://www.nejm.org) | `nejm` | ✅ | |
237
+ | [Neuron](https://www.cell.com/neuron) | `neuron` | ✅ | |
238
+ | [npj Digital Medicine](https://www.nature.com/npjdigitalmed) | `npj_digital_medicine` | ✅ | |
239
+ | [Nucleic Acids Research](https://academic.oup.com/nar) | `nucleic_acids_research` | ✅ | ✅ |
240
+ | [Patterns](https://www.cell.com/patterns) | `patterns` | ✅ | |
241
+ | [PLOS Biology](https://journals.plos.org/plosbiology/) | `plos_biology` | ✅ | |
242
+ | [PLOS Computational Biology](https://journal.plos.org/ploscompbiol/) | `plos_compbio` | ✅ | ✅ |
243
+ | [PLOS Genetics](https://journals.plos.org/plosgenetics/) | `plos_genetics` | ✅ | |
244
+ | [PLOS Medicine](https://journals.plos.org/plosmedicine/) | `plos_medicine` | ✅ | |
245
+ | [PLOS ONE](https://journals.plos.org/plosone/) | `plos_one` | ✅ | |
246
+ | [PNAS](https://www.pnas.org) | `pnas` | ✅ | |
247
+ | [Radiology](https://pubs.rsna.org/journal/radiology) | `radiology` | ✅ | |
248
+ | [Radiology: Artificial Intelligence](https://pubs.rsna.org/journal/ai) | `radiology_ai` | ✅ | |
249
+ | [Science](https://www.science.org/journal/science) | `science` | ✅ | ✅ |
250
+ | [Science Advances](https://www.science.org/journal/sciadv) | `science_advances` | ✅ | ✅ |
251
+ | [Science Immunology](https://www.science.org/journal/sciimmunol) | `science_immunology` | ✅ | ✅ |
252
+ | [Science Robotics](https://www.science.org/journal/scirobotics) | `science_robotics` | ✅ | ✅ |
253
+ | [Science Signaling](https://www.science.org/journal/signaling) | `science_signaling` | ✅ | ✅ |
254
+ | [Science Translational Medicine](https://www.science.org/journal/stm) | `science_translational_medicine` | ✅ | ✅ |
255
+ | [Scientific Reports](https://www.nature.com/srep) | `scientific_reports` | ✅ | |
256
+ | [TMLR](https://jmlr.org/tmlr/) | `tmlr` | ✅ | |
257
+
258
+ **Conferences**
259
+
260
+ | Venue | Slug | Validate + basic .sub | Submit + full .sub |
261
+ | --- | --- | :---: | :---: |
262
+ | [ACL Rolling Review](https://aclrollingreview.org) | `acl_arr` | ✅ | |
263
+ | [CVPR 2027](https://cvpr.thecvf.com/Conferences/2027) | `cvpr_2027` | ✅ | |
264
+ <!-- END SUPPORTED VENUES -->
265
+
266
+ View the list on the command line with `paperpush venues`.
267
+
268
+ Venues are added (for validate) and updated (for validate and submit) daily. `paperpush update-venues` updates immediately.
269
+
270
+ New venues are added for submit with paperpush releases - `pip install -U paperpush`.
271
+
272
+ ## Adding new venues
273
+
274
+ Each venue is listed in `paperpush/venues.json` (the master list of venues and their general metadata), `paperpush/manuscript_requirements.json` (the manuscript guidelines), and `paperpush/submission_forms.json` (the fields the portal asks for). The script for automatic venue login and submission lives in `/paperpush/venues/PLATFORM/VENUE.py` in a VENUE class with methods `login` and `submit`. See [`CONTRIBUTING.md`](CONTRIBUTING.md) and [`DEVELOPMENT.md`](DEVELOPMENT.md) for more details.
275
+
276
+ ## What is a .sub file
277
+
278
+ The .sub file is the yaml-like text file that contains all metadata and file paths required to upload a manuscript onto a venue's submission portal. An example snippet is shown below. In this case, you would provide "/PATH/TO/MANUSCRIPT.pdf", "TITLE", and "HERE IS THE ABSTRACT".
279
+
280
+ ```venue.sub.txt
281
+ @venue: venue
282
+
283
+ # Manuscript file (file, REQUIRED)
284
+ # Path to the submission.
285
+ manuscript_file: /PATH/TO/MANUSCRIPT.pdf
286
+
287
+ # Title (text, REQUIRED)
288
+ # The full title of the article.
289
+ title: TITLE
290
+
291
+ # Abstract (textarea, REQUIRED)
292
+ # Plain-text abstract, at least 20 characters
293
+ abstract: |
294
+ HERE IS THE ABSTRACT
295
+ ```
296
+
297
+ ## MCP server
298
+
299
+ To drive paperpush from any MCP client — Claude Desktop, an IDE extension — run
300
+ it as an MCP server:
301
+
302
+ ```bash
303
+ pip install 'paperpush[mcp]'
304
+ ```
305
+
306
+ ```json
307
+ {
308
+ "mcpServers": {
309
+ "paperpush": {
310
+ "command": "paperpush-mcp"
311
+ }
312
+ }
313
+ }
314
+ ```
315
+
316
+ The server exposes the whole pipeline as tools. See [`AGENTS.md`](AGENTS.md) for
317
+ the tool list and the contract agents should follow.
318
+
319
+ ## AI Skills
320
+
321
+ | Skill | Use it to |
322
+ | --- | --- |
323
+ | `/paperpush-prepare-submission` | go from a manuscript directory to a filled-in portal (autofill, validate, submit) |
324
+ | `/paperpush-autofill` | fill a `.sub` from the manuscript files |
325
+ | `/paperpush-validate` | run every check, including the ones that need a reader |
326
+ | `/paperpush-portal-debug` | get a stalled `paperpush submit` run unstuck |
327
+ | `/paperpush-add-venue-validate` | add or refresh a venue's author guidelines (contributors) |
328
+ | `/paperpush-add-venue` | run `/paperpush-add-venue-validate` and add `login` and `submit` support for a venue, with tests (contributors) |
329
+
330
+ ## For AI agents
331
+
332
+ If you are an AI agent asked to submit a manuscript on the user's behalf, read
333
+ [`AGENTS.md`](AGENTS.md) — or, if you are working from a `pip install` rather
334
+ than a clone of this repo, run `paperpush --agent-guide`, which prints the same
335
+ document from the copy that shipped with the installed version. It describes how to run the full pipeline while doing
336
+ your **own** field extraction (reading the manuscript and writing a
337
+ `values.json` for the default `--engine manual`) rather than relying on the
338
+ API-backed engine. It also asks the agent to check `paperpush login --list`
339
+ before it starts, and to tell you right away if you still need to run
340
+ `paperpush login <venue>` yourself — that sign-in is interactive and belongs in
341
+ your terminal. Agents that support skills should install them (see
342
+ [Use with AI](#use-with-ai)); `AGENTS.md` lists what each skill does and when
343
+ to use it.
344
+
345
+ ## FAQ
346
+
347
+ *How does PaperPush work?*
348
+
349
+ Supported venues are listed in `paperpush/venues.json`, their submission form data are in `paperpush/submission_forms.json`, and their author guidelines are in `paperpush/manuscript_requirements.json`. `paperpush subfile` generates a file from the form for the specified venue. The file can be filled out manually, or with the help of an LLM via `paperpush autofill`. The manuscript documents are validated with `paperpush validate`. The submission portal for a selected venue is filled out with the information from this file with a `paperpush submit`. This runs a Playwright script that is written specifically for each supported venue.
350
+
351
+
352
+ *The repository says that it supports a given venue, but it fails when I try. Why is that?*
353
+
354
+ Here are a few possibilities, in order of decreasing ease of resolution:
355
+ - Sometimes, submission portals can be a bit funny, and the solution can be as simple as retrying the command 1-2 more times.
356
+ - The submission portal is having server issues. You can try logging in to the portal manually to see if it is working, as well as on a different browser and at a different time.
357
+ - The sub file has an option that we did not anticipate. You can try running the unit test for the venue with `pytest tests/test_submit.py --run-portal -s --venue VENUE`. If this passes, then it indicates an option in the sub file is not being handled correctly. If this fails, then it indicates that the submission portal has changed since the last time the venue was tested. In either case, please open an issue with the error message.
358
+ - The submission portal has changed since the last time the venue was tested. You can run the unit test listed above to see if this is the case. If so, please open an issue with the error message.
359
+
360
+
361
+ *I do not see my venue in the supported list. Is it possible to add a venue?*
362
+
363
+ Yes! See [`CONTRIBUTING.md`](CONTRIBUTING.md) if you would like to add a journal yourself, and feel free to ask any questions in the Discussion forum.
364
+
365
+
366
+ *Does PaperPush press submit for me?*
367
+
368
+ No. PaperPush will bring you to one of the final steps on your venue of interest, but it will never actually press submit. I always recommend viewing any compiled PDFs and entered information to ensure accuracy and acknowledgment of guidelines.
369
+
370
+
371
+ *Does every venue have a unique submission portal?*
372
+
373
+ No — in fact, many share the same type of platform. PaperPush has a unique Playwright script for each supported venue, but many venues share the same submission platform. The big ones are Editorial Manager (including the Cell family and PLOS family), ScholarOne Manuscripts, eJournalPress, Snapp, and OpenReview (for many computer science conferences). The submission script may be highly similar for venues that share the same platform, so check the folders within `paperpush/venues` to see which venues share the same submission platform. See screenshots of each of the major supported venues in [`docs/portal_screenshots`](docs/portal_screenshots) to see what each submission portal looks like.
374
+
375
+
376
+ *How long does it take to add a new journal?*
377
+
378
+ It depends on the complexity of the submission portal and your comfort with coding, but I would say roughly 1-3 hours manually. AI tools with the paperpush skills can potentially do this in under 20 minutes.
379
+
380
+
381
+ *Can I vibe code a new journal?*
382
+
383
+ Yes, with `/paperpush-add-venue` (see [`CONTRIBUTING.md`](CONTRIBUTING.md)). AI agents can navigate submission portals and write the Venue class for login and submit, but it can take a lot of tokens and may stall at times, so some human oversight helps. In my experience, LLMs can make the code a bit verbose and abstract away some of the action names, which may be harder to read/maintain in my opinion, but this is just stylistic. My favorite code style is in `arxiv.py`.
384
+
385
+
386
+ ## License
387
+
388
+ This project is licensed under the BSD-2 License - see the [LICENSE](LICENSE) file for details.
389
+
390
+ Developed by Joe Rich