gapit 0.5.3__tar.gz → 0.5.4__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 (420) hide show
  1. {gapit-0.5.3 → gapit-0.5.4}/CHANGELOG.md +13 -0
  2. {gapit-0.5.3 → gapit-0.5.4}/PKG-INFO +1 -1
  3. {gapit-0.5.3 → gapit-0.5.4}/docs/agents.md +1 -1
  4. {gapit-0.5.3 → gapit-0.5.4}/docs/agents.zh.md +1 -1
  5. {gapit-0.5.3 → gapit-0.5.4}/docs/databases.md +1 -1
  6. {gapit-0.5.3 → gapit-0.5.4}/docs/databases.zh.md +1 -1
  7. {gapit-0.5.3 → gapit-0.5.4}/docs/installation.md +2 -2
  8. {gapit-0.5.3 → gapit-0.5.4}/docs/installation.zh.md +2 -2
  9. {gapit-0.5.3 → gapit-0.5.4}/docs/mcp.md +4 -4
  10. {gapit-0.5.3 → gapit-0.5.4}/docs/mcp.zh.md +4 -4
  11. {gapit-0.5.3 → gapit-0.5.4}/docs/outputs.md +4 -4
  12. {gapit-0.5.3 → gapit-0.5.4}/docs/outputs.zh.md +4 -4
  13. {gapit-0.5.3 → gapit-0.5.4}/docs/quickstart.md +1 -1
  14. {gapit-0.5.3 → gapit-0.5.4}/docs/quickstart.zh.md +1 -1
  15. {gapit-0.5.3 → gapit-0.5.4}/docs/reads.md +14 -6
  16. {gapit-0.5.3 → gapit-0.5.4}/docs/reads.zh.md +13 -6
  17. {gapit-0.5.3 → gapit-0.5.4}/docs/screen.md +12 -2
  18. {gapit-0.5.3 → gapit-0.5.4}/docs/screen.zh.md +12 -2
  19. {gapit-0.5.3 → gapit-0.5.4}/docs/summary.md +2 -2
  20. {gapit-0.5.3 → gapit-0.5.4}/docs/summary.zh.md +2 -2
  21. {gapit-0.5.3 → gapit-0.5.4}/pixi.lock +2 -2
  22. {gapit-0.5.3 → gapit-0.5.4}/pixi.toml +1 -1
  23. {gapit-0.5.3 → gapit-0.5.4}/pyproject.toml +1 -1
  24. {gapit-0.5.3 → gapit-0.5.4}/recipe/meta.yaml +3 -3
  25. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/__init__.py +1 -1
  26. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/db_ops.py +12 -3
  27. gapit-0.5.4/src/gapit/progress.py +119 -0
  28. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/screening.py +37 -27
  29. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/screening_reads_positional.py +46 -36
  30. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_exact.json +1 -1
  31. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_exact.md +1 -1
  32. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_fragmented.json +1 -1
  33. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_fragmented.md +1 -1
  34. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.json +1 -1
  35. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.md +1 -1
  36. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.json +1 -1
  37. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.md +1 -1
  38. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_exact.json +1 -1
  39. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_exact.md +1 -1
  40. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.json +1 -1
  41. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.md +1 -1
  42. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/fragments_merge.json +1 -1
  43. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/fragments_merge.md +1 -1
  44. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_dec_pic_astA.json +1 -1
  45. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_dec_pic_astA.md +1 -1
  46. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_doumith_4b.json +1 -1
  47. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_doumith_4b.md +1 -1
  48. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_l4b.json +1 -1
  49. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_l4b.md +1 -1
  50. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_mixed.json +1 -1
  51. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_mixed.md +1 -1
  52. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_vp_typed.json +1 -1
  53. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_serotyping_vp_typed.md +1 -1
  54. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_shigella_mixed.json +1 -1
  55. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_shigella_mixed.md +1 -1
  56. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_typing_exact.json +1 -1
  57. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/gene_typing_exact.md +1 -1
  58. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/reads_tinyamr.json +1 -1
  59. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/reads_tinyamr.md +1 -1
  60. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/screen_multi.json +1 -1
  61. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/screen_multi.md +1 -1
  62. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/summary_multi.json +1 -1
  63. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/summary_multi.md +1 -1
  64. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/typing_markers.json +1 -1
  65. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/typing_markers.md +1 -1
  66. gapit-0.5.4/tests/test_progress.py +271 -0
  67. {gapit-0.5.3 → gapit-0.5.4}/.gitattributes +0 -0
  68. {gapit-0.5.3 → gapit-0.5.4}/.github/workflows/ci.yml +0 -0
  69. {gapit-0.5.3 → gapit-0.5.4}/.github/workflows/docs.yml +0 -0
  70. {gapit-0.5.3 → gapit-0.5.4}/.github/workflows/release.yml +0 -0
  71. {gapit-0.5.3 → gapit-0.5.4}/.gitignore +0 -0
  72. {gapit-0.5.3 → gapit-0.5.4}/AGENTS.md +0 -0
  73. {gapit-0.5.3 → gapit-0.5.4}/LICENSE +0 -0
  74. {gapit-0.5.3 → gapit-0.5.4}/PLAN.md +0 -0
  75. {gapit-0.5.3 → gapit-0.5.4}/README.md +0 -0
  76. {gapit-0.5.3 → gapit-0.5.4}/SPEC.md +0 -0
  77. {gapit-0.5.3 → gapit-0.5.4}/docs/custom-db.md +0 -0
  78. {gapit-0.5.3 → gapit-0.5.4}/docs/custom-db.zh.md +0 -0
  79. {gapit-0.5.3 → gapit-0.5.4}/docs/faq.md +0 -0
  80. {gapit-0.5.3 → gapit-0.5.4}/docs/faq.zh.md +0 -0
  81. {gapit-0.5.3 → gapit-0.5.4}/docs/index.md +0 -0
  82. {gapit-0.5.3 → gapit-0.5.4}/docs/index.zh.md +0 -0
  83. {gapit-0.5.3 → gapit-0.5.4}/docs/typing.md +0 -0
  84. {gapit-0.5.3 → gapit-0.5.4}/docs/typing.zh.md +0 -0
  85. {gapit-0.5.3 → gapit-0.5.4}/mkdocs.yml +0 -0
  86. {gapit-0.5.3 → gapit-0.5.4}/scripts/cluster_calibration.py +0 -0
  87. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/blast.py +0 -0
  88. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/bundled.py +0 -0
  89. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cli.py +0 -0
  90. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cluster.py +0 -0
  91. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cluster_math.py +0 -0
  92. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/clusterbuild.py +0 -0
  93. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_db.py +0 -0
  94. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_db_build.py +0 -0
  95. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_db_install.py +0 -0
  96. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_db_outdated.py +0 -0
  97. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_db_search.py +0 -0
  98. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_screen.py +0 -0
  99. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_screen_positionals.py +0 -0
  100. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_screen_reads_args.py +0 -0
  101. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_summary.py +0 -0
  102. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/cmd_typing.py +0 -0
  103. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/config.py +0 -0
  104. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoh/bundled.json +0 -0
  105. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoh/sequences +0 -0
  106. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/bundled.json +0 -0
  107. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/floors.json +0 -0
  108. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/records.jsonl +0 -0
  109. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/sequences +0 -0
  110. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ecoli_dec/typing.json +0 -0
  111. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/bundled.json +0 -0
  112. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/sequences +0 -0
  113. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/lm_doumith/typing.json +0 -0
  114. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ncbi/bundled.json +0 -0
  115. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/ncbi/sequences +0 -0
  116. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/resfinder/bundled.json +0 -0
  117. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/resfinder/sequences +0 -0
  118. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/upec_expec_vf/bundled.json +0 -0
  119. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/data/dbs/upec_expec_vf/sequences +0 -0
  120. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/db.py +0 -0
  121. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/db_build_meta.py +0 -0
  122. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/db_build_ops.py +0 -0
  123. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/db_query_ops.py +0 -0
  124. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/dbbuild.py +0 -0
  125. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/dbcodec.py +0 -0
  126. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/dispatch.py +0 -0
  127. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/engines.py +0 -0
  128. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/errors.py +0 -0
  129. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/fasta.py +0 -0
  130. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/__init__.py +0 -0
  131. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/cluster.py +0 -0
  132. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/cluster_md.py +0 -0
  133. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/json.py +0 -0
  134. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/md.py +0 -0
  135. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/reads_json.py +0 -0
  136. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/reads_tsv.py +0 -0
  137. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/schemas.py +0 -0
  138. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/summary.py +0 -0
  139. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/tsv.py +0 -0
  140. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/formats/typing_result.py +0 -0
  141. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/fragments.py +0 -0
  142. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/gbfeatures.py +0 -0
  143. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/gene_floors.py +0 -0
  144. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/gffparse.py +0 -0
  145. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/hits.py +0 -0
  146. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/mcp.py +0 -0
  147. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/mcp_schemas.py +0 -0
  148. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/mcp_tools.py +0 -0
  149. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/minimap.py +0 -0
  150. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/minimap2_run.py +0 -0
  151. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/paf.py +0 -0
  152. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/proctools.py +0 -0
  153. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/__init__.py +0 -0
  154. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ab_k.py +0 -0
  155. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ab_o.py +0 -0
  156. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/argannot.py +0 -0
  157. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/bacmet2.py +0 -0
  158. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/card.py +0 -0
  159. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/cluster_common.py +0 -0
  160. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/common.py +0 -0
  161. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ecoh.py +0 -0
  162. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ecoli_kps.py +0 -0
  163. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ecoli_vf.py +0 -0
  164. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/kosc_k.py +0 -0
  165. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/kosc_o.py +0 -0
  166. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/kpsc_k.py +0 -0
  167. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/kpsc_o.py +0 -0
  168. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/megares.py +0 -0
  169. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/ncbi.py +0 -0
  170. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/plasmidfinder.py +0 -0
  171. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/resfinder.py +0 -0
  172. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/upec_expec_vf.py +0 -0
  173. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/vfdb.py +0 -0
  174. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/providers/victors.py +0 -0
  175. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/py.typed +0 -0
  176. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/readpairs.py +0 -0
  177. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/reads.py +0 -0
  178. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/records.py +0 -0
  179. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/report.py +0 -0
  180. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/screening_cluster.py +0 -0
  181. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/screening_reads.py +0 -0
  182. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/seqconvert.py +0 -0
  183. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/summary.py +0 -0
  184. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_decide.py +0 -0
  185. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_engine.py +0 -0
  186. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_gene.py +0 -0
  187. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_input.py +0 -0
  188. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_models.py +0 -0
  189. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_ops.py +0 -0
  190. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_results.py +0 -0
  191. {gapit-0.5.3 → gapit-0.5.4}/src/gapit/typing_rules.py +0 -0
  192. {gapit-0.5.3 → gapit-0.5.4}/tests/data/bundled_differential/resfinder/HEAD.zip +0 -0
  193. {gapit-0.5.3 → gapit-0.5.4}/tests/data/bundled_differential/resfinder/README.md +0 -0
  194. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/bakta_style.gbk +0 -0
  195. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/clusters.gff3 +0 -0
  196. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/clusters_gz.gff3.gz +0 -0
  197. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/clusters_sidecar.fa +0 -0
  198. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/clusters_sidecar.gff3 +0 -0
  199. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/compound.gbk +0 -0
  200. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/gz_input.gbk.gz +0 -0
  201. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/kaptive_style.gbk +0 -0
  202. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/nofasta.gff3 +0 -0
  203. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/screening.gbk +0 -0
  204. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/typing_invalid.json +0 -0
  205. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/typing_screen.json +0 -0
  206. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/typing_screen_cm.json +0 -0
  207. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/typing_screen_v2.json +0 -0
  208. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/typing_valid.json +0 -0
  209. {gapit-0.5.3 → gapit-0.5.4}/tests/data/cluster/unnamed_cds.gbk +0 -0
  210. {gapit-0.5.3 → gapit-0.5.4}/tests/data/contigs/full.fa +0 -0
  211. {gapit-0.5.3 → gapit-0.5.4}/tests/data/contigs/gap.fa +0 -0
  212. {gapit-0.5.3 → gapit-0.5.4}/tests/data/contigs/none.fa +0 -0
  213. {gapit-0.5.3 → gapit-0.5.4}/tests/data/contigs/partial.fa +0 -0
  214. {gapit-0.5.3 → gapit-0.5.4}/tests/data/contigs/sort.fa +0 -0
  215. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.embl +0 -0
  216. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.embl.bz2 +0 -0
  217. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.fa +0 -0
  218. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.fa.gz +0 -0
  219. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.fq +0 -0
  220. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.gbk +0 -0
  221. {gapit-0.5.3 → gapit-0.5.4}/tests/data/convert/sample.gbk.gz +0 -0
  222. {gapit-0.5.3 → gapit-0.5.4}/tests/data/db/tinyamr/sequences +0 -0
  223. {gapit-0.5.3 → gapit-0.5.4}/tests/data/fragments/fragdb/sequences +0 -0
  224. {gapit-0.5.3 → gapit-0.5.4}/tests/data/fragments/split3040.fa +0 -0
  225. {gapit-0.5.3 → gapit-0.5.4}/tests/data/fragments/split4060.fa +0 -0
  226. {gapit-0.5.3 → gapit-0.5.4}/tests/data/fragments/split5050.fa +0 -0
  227. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/argannot/ARG-ANNOT_NT_V6_July2019.txt +0 -0
  228. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/bacmet2/BacMet2_EXP_database.fasta +0 -0
  229. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/card/card.json +0 -0
  230. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/ecoh/EcOH.fasta +0 -0
  231. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/ecoli_vf/repaired_ecoli_vfs_shortnames.ffn +0 -0
  232. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/megares/megares_drugs_demo.fasta +0 -0
  233. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/ncbi/AMR_CDS.fa +0 -0
  234. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/ncbi/ReferenceGeneCatalog.txt +0 -0
  235. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/plasmidfinder/plasmids_a.fsa +0 -0
  236. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/plasmidfinder/plasmids_b.fsa +0 -0
  237. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/resfinder/aminoglycoside.fsa +0 -0
  238. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/resfinder/beta-lactam.fsa +0 -0
  239. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/resfinder/phenotypes.txt +0 -0
  240. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/upec_expec_vf/UPEC_ExPEC_VF.tsv +0 -0
  241. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/vfdb/VFDB_setA_nt.fas +0 -0
  242. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/victors/gen_downloads.php +0 -0
  243. {gapit-0.5.3 → gapit-0.5.4}/tests/data/providers/victors/gen_downloads_protein.php +0 -0
  244. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/bla_partial.fq +0 -0
  245. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/junk.fq +0 -0
  246. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/s1_1.fq.gz +0 -0
  247. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/s1_2.fq.gz +0 -0
  248. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/s2_R1.fq.gz +0 -0
  249. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/s2_R2.fq.gz +0 -0
  250. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/suly_partial.fq +0 -0
  251. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_R1.fq +0 -0
  252. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_R2.fq +0 -0
  253. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_full.fq +0 -0
  254. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_full.fq.gz +0 -0
  255. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_lane1.fq +0 -0
  256. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_lane2.fq +0 -0
  257. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_pe1_R1.fq +0 -0
  258. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_pe1_R2.fq +0 -0
  259. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_pe2_R1.fq +0 -0
  260. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads/tetx_pe2_R2.fq +0 -0
  261. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads2/ont_homologs.fq +0 -0
  262. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads2/sr_homologs.fq +0 -0
  263. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads2_db/homologs/sequences +0 -0
  264. {gapit-0.5.3 → gapit-0.5.4}/tests/data/reads_db/tinyreads/sequences +0 -0
  265. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/empty.tsv +0 -0
  266. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/multi_sample.tsv +0 -0
  267. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/sample_a.csv +0 -0
  268. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/sample_a.tsv +0 -0
  269. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/sample_b.csv +0 -0
  270. {gapit-0.5.3 → gapit-0.5.4}/tests/data/summary/sample_b.tsv +0 -0
  271. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/dec_s1_aggR_pic_uidA.fasta +0 -0
  272. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/dec_s2_pic_astA_uidA.fasta +0 -0
  273. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/dec_s3_stx2a_escV_aggR_uidA.fasta +0 -0
  274. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/exact.fa +0 -0
  275. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/listeria_1c.fa +0 -0
  276. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/listeria_4b.fa +0 -0
  277. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/listeria_nogate.fa +0 -0
  278. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/markers.fa +0 -0
  279. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/mutated.fa +0 -0
  280. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/negative.fa +0 -0
  281. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/partial.fa +0 -0
  282. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/cholerae.gbk +0 -0
  283. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/cholerae.json +0 -0
  284. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/dec.fa +0 -0
  285. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/dec.json +0 -0
  286. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/doumith.fa +0 -0
  287. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/doumith.json +0 -0
  288. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/lm_doumith.fa +0 -0
  289. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/lm_doumith.json +0 -0
  290. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/meningotype.fa +0 -0
  291. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/meningotype.json +0 -0
  292. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/shigella.fa +0 -0
  293. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/shigella.json +0 -0
  294. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/vp_ok.gbk +0 -0
  295. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/schemes/vp_ok.json +0 -0
  296. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/serotyping.fa +0 -0
  297. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/typing_markers_v1.json +0 -0
  298. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/typing_markers_v2.json +0 -0
  299. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/typing_serotyping_v2.json +0 -0
  300. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/vp_mixed.fa +0 -0
  301. {gapit-0.5.3 → gapit-0.5.4}/tests/data/typing/vp_typed.fa +0 -0
  302. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_exact.tsv +0 -0
  303. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_fragmented.tsv +0 -0
  304. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_ambiguous.tsv +0 -0
  305. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_cm_exact.tsv +0 -0
  306. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_typing_exact.tsv +0 -0
  307. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/cluster_vc_inaba.tsv +0 -0
  308. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/ecoli_dec_typed.tsv +0 -0
  309. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/ecoli_dec_typing.tsv +0 -0
  310. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/fragments_merge.tsv +0 -0
  311. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/lm_doumith_typing.tsv +0 -0
  312. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/summary_dutch.tsv +0 -0
  313. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/summary_multi.csv +0 -0
  314. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/summary_multi.tsv +0 -0
  315. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/tinyamr_multi_nopath.csv +0 -0
  316. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/tinyamr_multi_nopath.tsv +0 -0
  317. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/typing_markers.tsv +0 -0
  318. {gapit-0.5.3 → gapit-0.5.4}/tests/golden/typing_serotyping.tsv +0 -0
  319. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/corpus/01_exact_and_junk.fa +0 -0
  320. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/corpus/02_mutated.fa +0 -0
  321. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/corpus/03_truncated.fa +0 -0
  322. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/corpus/04_reverse.fa +0 -0
  323. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/corpus/05_threshold.fa +0 -0
  324. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/make_corpus.py +0 -0
  325. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/run_parity.py +0 -0
  326. {gapit-0.5.3 → gapit-0.5.4}/tests/parity/run_summary_parity.py +0 -0
  327. {gapit-0.5.3 → gapit-0.5.4}/tests/test_blast_parse.py +0 -0
  328. {gapit-0.5.3 → gapit-0.5.4}/tests/test_blast_pipeline.py +0 -0
  329. {gapit-0.5.3 → gapit-0.5.4}/tests/test_bundled.py +0 -0
  330. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_aligner.py +0 -0
  331. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_bare_help.py +0 -0
  332. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_completion.py +0 -0
  333. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_db_build.py +0 -0
  334. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_db_build_cluster.py +0 -0
  335. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_db_fetch.py +0 -0
  336. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_db_query.py +0 -0
  337. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_fragments.py +0 -0
  338. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_reads.py +0 -0
  339. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_reads2.py +0 -0
  340. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_reads_glob.py +0 -0
  341. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_reads_glob_jobs.py +0 -0
  342. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_schema.py +0 -0
  343. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_screen.py +0 -0
  344. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_screen_jobs.py +0 -0
  345. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_setupdb.py +0 -0
  346. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_short_options.py +0 -0
  347. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cli_summary.py +0 -0
  348. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cluster_calibration.py +0 -0
  349. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cluster_db.py +0 -0
  350. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cluster_math.py +0 -0
  351. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cluster_screen.py +0 -0
  352. {gapit-0.5.3 → gapit-0.5.4}/tests/test_cluster_typing.py +0 -0
  353. {gapit-0.5.3 → gapit-0.5.4}/tests/test_config.py +0 -0
  354. {gapit-0.5.3 → gapit-0.5.4}/tests/test_db.py +0 -0
  355. {gapit-0.5.3 → gapit-0.5.4}/tests/test_db_fetch.py +0 -0
  356. {gapit-0.5.3 → gapit-0.5.4}/tests/test_db_headers.py +0 -0
  357. {gapit-0.5.3 → gapit-0.5.4}/tests/test_db_list_extras.py +0 -0
  358. {gapit-0.5.3 → gapit-0.5.4}/tests/test_dbbuild.py +0 -0
  359. {gapit-0.5.3 → gapit-0.5.4}/tests/test_dbcodec.py +0 -0
  360. {gapit-0.5.3 → gapit-0.5.4}/tests/test_error_envelope.py +0 -0
  361. {gapit-0.5.3 → gapit-0.5.4}/tests/test_fasta.py +0 -0
  362. {gapit-0.5.3 → gapit-0.5.4}/tests/test_fragments.py +0 -0
  363. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gapit_db_e2e.py +0 -0
  364. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gbfeatures.py +0 -0
  365. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gene_floors.py +0 -0
  366. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gene_floors_e2e.py +0 -0
  367. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gene_typing.py +0 -0
  368. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gene_typing2.py +0 -0
  369. {gapit-0.5.3 → gapit-0.5.4}/tests/test_gffparse.py +0 -0
  370. {gapit-0.5.3 → gapit-0.5.4}/tests/test_hits.py +0 -0
  371. {gapit-0.5.3 → gapit-0.5.4}/tests/test_json_format.py +0 -0
  372. {gapit-0.5.3 → gapit-0.5.4}/tests/test_lm_doumith.py +0 -0
  373. {gapit-0.5.3 → gapit-0.5.4}/tests/test_mcp.py +0 -0
  374. {gapit-0.5.3 → gapit-0.5.4}/tests/test_mcp_db_tools.py +0 -0
  375. {gapit-0.5.3 → gapit-0.5.4}/tests/test_mcp_protocol.py +0 -0
  376. {gapit-0.5.3 → gapit-0.5.4}/tests/test_mcp_reads.py +0 -0
  377. {gapit-0.5.3 → gapit-0.5.4}/tests/test_md_format.py +0 -0
  378. {gapit-0.5.3 → gapit-0.5.4}/tests/test_minimap.py +0 -0
  379. {gapit-0.5.3 → gapit-0.5.4}/tests/test_mol_type.py +0 -0
  380. {gapit-0.5.3 → gapit-0.5.4}/tests/test_oversubscription.py +0 -0
  381. {gapit-0.5.3 → gapit-0.5.4}/tests/test_paf.py +0 -0
  382. {gapit-0.5.3 → gapit-0.5.4}/tests/test_paf_identity.py +0 -0
  383. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_argannot.py +0 -0
  384. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_bacmet2.py +0 -0
  385. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_card.py +0 -0
  386. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_ecoh.py +0 -0
  387. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_ecoli_vf.py +0 -0
  388. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_kaptive.py +0 -0
  389. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_megares.py +0 -0
  390. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_ncbi.py +0 -0
  391. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_plasmidfinder.py +0 -0
  392. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_resfinder.py +0 -0
  393. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_upec_expec_vf.py +0 -0
  394. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_vfdb.py +0 -0
  395. {gapit-0.5.3 → gapit-0.5.4}/tests/test_provider_victors.py +0 -0
  396. {gapit-0.5.3 → gapit-0.5.4}/tests/test_providers_common.py +0 -0
  397. {gapit-0.5.3 → gapit-0.5.4}/tests/test_readpairs.py +0 -0
  398. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads2_homologs.py +0 -0
  399. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads2_model.py +0 -0
  400. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads_aggregate.py +0 -0
  401. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads_integration.py +0 -0
  402. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads_interval_union.py +0 -0
  403. {gapit-0.5.3 → gapit-0.5.4}/tests/test_reads_streaming.py +0 -0
  404. {gapit-0.5.3 → gapit-0.5.4}/tests/test_records.py +0 -0
  405. {gapit-0.5.3 → gapit-0.5.4}/tests/test_report.py +0 -0
  406. {gapit-0.5.3 → gapit-0.5.4}/tests/test_screen_integration.py +0 -0
  407. {gapit-0.5.3 → gapit-0.5.4}/tests/test_screening_reads_unit.py +0 -0
  408. {gapit-0.5.3 → gapit-0.5.4}/tests/test_seqconvert.py +0 -0
  409. {gapit-0.5.3 → gapit-0.5.4}/tests/test_seqconvert_differential.py +0 -0
  410. {gapit-0.5.3 → gapit-0.5.4}/tests/test_streaming_chunks.py +0 -0
  411. {gapit-0.5.3 → gapit-0.5.4}/tests/test_summary.py +0 -0
  412. {gapit-0.5.3 → gapit-0.5.4}/tests/test_summary_formats.py +0 -0
  413. {gapit-0.5.3 → gapit-0.5.4}/tests/test_tsv.py +0 -0
  414. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_command.py +0 -0
  415. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_engine.py +0 -0
  416. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_models.py +0 -0
  417. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_schemes.py +0 -0
  418. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_schemes_cluster.py +0 -0
  419. {gapit-0.5.3 → gapit-0.5.4}/tests/test_typing_stage2.py +0 -0
  420. {gapit-0.5.3 → gapit-0.5.4}/tests/test_version.py +0 -0
@@ -5,6 +5,19 @@ All notable changes to gapit are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
6
6
  project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.5.4] - 2026-10-03
9
+
10
+ ### Added
11
+
12
+ - **Rich progress bar on long batch runs** (stderr only; modeled on the gmlst UX).
13
+ Multi-file contig screening, the positional-FASTQ wildcard batch, and
14
+ `gapit db fetch all` now show a spinner + bar + M/N + percent + elapsed bar on an
15
+ interactive stderr, with the description tracking the current file/sample/database and
16
+ replacing the per-file stderr notes while it runs. Under `--quiet` or a non-TTY stderr
17
+ (pipes, CI) the bar is disabled and today's plain notes print byte-identically; stdout
18
+ data streams are untouched in every case (the bar never captures stdout — rich's Live
19
+ redirection is pinned off), so output bytes are identical with the bar on or off.
20
+
8
21
  ## [0.5.3] - 2026-10-03
9
22
 
10
23
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gapit
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: Mass screening of contigs and reads for known genes — agent-first Python reimplementation of abricate
5
5
  Project-URL: Homepage, https://github.com/indexofire/gapit
6
6
  Project-URL: Documentation, https://indexofire.github.io/gapit/
@@ -13,7 +13,7 @@ Version, as one JSON line:
13
13
 
14
14
  ```console
15
15
  $ gapit --version --json
16
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
16
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
17
17
  ```
18
18
 
19
19
  Output schemas. Eleven documents are introspectable: `report`, `typing_result`, `reads`,
@@ -12,7 +12,7 @@ gapit 生来就是被程序驱动的。每个输出都以机器可读为设计
12
12
 
13
13
  ```console
14
14
  $ gapit --version --json
15
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
15
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
16
16
  ```
17
17
 
18
18
  输出 schema。十一个文档可自省:`report`、`typing_result`、`reads`、`reads2`、`cluster`、
@@ -496,7 +496,7 @@ versions. A real one, from the plasmidfinder database:
496
496
  "upstream_version": "",
497
497
  "tool": {
498
498
  "name": "gapit",
499
- "version": "0.5.3"
499
+ "version": "0.5.4"
500
500
  },
501
501
  "makeblastdb_version": "blastn: 2.17.0+",
502
502
  "minimap2_version": "2.31-r1302"
@@ -474,7 +474,7 @@ manifest,来自 plasmidfinder 数据库:
474
474
  "upstream_version": "",
475
475
  "tool": {
476
476
  "name": "gapit",
477
- "version": "0.5.3"
477
+ "version": "0.5.4"
478
478
  },
479
479
  "makeblastdb_version": "blastn: 2.17.0+",
480
480
  "minimap2_version": "2.31-r1302"
@@ -48,9 +48,9 @@ gapit --version
48
48
 
49
49
  ```console
50
50
  $ gapit --version
51
- gapit 0.5.3
51
+ gapit 0.5.4
52
52
  $ gapit --version --json
53
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
53
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
54
54
  ```
55
55
 
56
56
  ## External binaries
@@ -46,9 +46,9 @@ gapit --version
46
46
 
47
47
  ```console
48
48
  $ gapit --version
49
- gapit 0.5.3
49
+ gapit 0.5.4
50
50
  $ gapit --version --json
51
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
51
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
52
52
  ```
53
53
 
54
54
  ## 外部二进制
@@ -94,7 +94,7 @@ EOF
94
94
  Response line 1, verbatim:
95
95
 
96
96
  ```text
97
- {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.5.3"}}}
97
+ {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.5.4"}}}
98
98
  ```
99
99
 
100
100
  Response line 2 (real output, elided in the middle; each tool carries its full
@@ -117,7 +117,7 @@ the same run):
117
117
  ```json
118
118
  {
119
119
  "schema": "gapit.report/1",
120
- "tool": {"name": "gapit", "version": "0.5.3"},
120
+ "tool": {"name": "gapit", "version": "0.5.4"},
121
121
  "created_at": "2026-09-19T01:15:44Z",
122
122
  "params": {"db": "tinyamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
123
123
  "files": [
@@ -173,7 +173,7 @@ the same run):
173
173
  ```json
174
174
  {
175
175
  "schema": "gapit.reads/1",
176
- "tool": {"name": "gapit", "version": "0.5.3"},
176
+ "tool": {"name": "gapit", "version": "0.5.4"},
177
177
  "created_at": "2026-09-22T00:07:35Z",
178
178
  "params": {
179
179
  "db": "tinyreads",
@@ -248,7 +248,7 @@ hit is the gene the agent just built the database from (real output):
248
248
  ```json
249
249
  {
250
250
  "schema": "gapit.report/1",
251
- "tool": {"name": "gapit", "version": "0.5.3"},
251
+ "tool": {"name": "gapit", "version": "0.5.4"},
252
252
  "created_at": "2026-09-20T13:38:39Z",
253
253
  "params": {"db": "myamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
254
254
  "files": [
@@ -88,7 +88,7 @@ EOF
88
88
  响应第 1 行,原样:
89
89
 
90
90
  ```text
91
- {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.5.3"}}}
91
+ {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.5.4"}}}
92
92
  ```
93
93
 
94
94
  响应第 2 行(真实输出,中段省略;每个工具携带完整的 `inputSchema`):
@@ -109,7 +109,7 @@ EOF
109
109
  ```json
110
110
  {
111
111
  "schema": "gapit.report/1",
112
- "tool": {"name": "gapit", "version": "0.5.3"},
112
+ "tool": {"name": "gapit", "version": "0.5.4"},
113
113
  "created_at": "2026-09-19T01:15:44Z",
114
114
  "params": {"db": "tinyamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
115
115
  "files": [
@@ -163,7 +163,7 @@ EOF
163
163
  ```json
164
164
  {
165
165
  "schema": "gapit.reads/1",
166
- "tool": {"name": "gapit", "version": "0.5.3"},
166
+ "tool": {"name": "gapit", "version": "0.5.4"},
167
167
  "created_at": "2026-09-22T00:07:35Z",
168
168
  "params": {
169
169
  "db": "tinyreads",
@@ -236,7 +236,7 @@ export GAPIT_DATADIR=/tmp/gapit-mcp-demo/datadir
236
236
  ```json
237
237
  {
238
238
  "schema": "gapit.report/1",
239
- "tool": {"name": "gapit", "version": "0.5.3"},
239
+ "tool": {"name": "gapit", "version": "0.5.4"},
240
240
  "created_at": "2026-09-20T13:38:39Z",
241
241
  "params": {"db": "myamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
242
242
  "files": [
@@ -141,7 +141,7 @@ Real document, same run as the TSV above:
141
141
  "schema": "gapit.report/1",
142
142
  "tool": {
143
143
  "name": "gapit",
144
- "version": "0.5.3"
144
+ "version": "0.5.4"
145
145
  },
146
146
  "created_at": "2026-09-19T01:12:20Z",
147
147
  "params": {
@@ -232,7 +232,7 @@ row by `(%IDENTITY, %COVERAGE)`. Real document (trimmed):
232
232
  ```json
233
233
  {
234
234
  "schema": "gapit.typing_result/1",
235
- "tool": {"name": "gapit", "version": "0.5.3"},
235
+ "tool": {"name": "gapit", "version": "0.5.4"},
236
236
  "created_at": "2026-10-02T10:04:55Z",
237
237
  "source": ["dec.tsv"],
238
238
  "db": "ecoli_dec",
@@ -419,7 +419,7 @@ summarizing two report files, one with a `tetA` hit and one with none:
419
419
  "schema": "gapit.summary/1",
420
420
  "tool": {
421
421
  "name": "gapit",
422
- "version": "0.5.3"
422
+ "version": "0.5.4"
423
423
  },
424
424
  "created_at": "2026-09-19T01:11:09Z",
425
425
  "params": {
@@ -539,7 +539,7 @@ An agent can discover the whole contract from the binary alone.
539
539
 
540
540
  ```console
541
541
  $ gapit --version --json
542
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
542
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
543
543
  ```
544
544
 
545
545
  `gapit schema <name>` prints the JSON Schema for each document. The eleven names: `report`,
@@ -130,7 +130,7 @@ non-DEC。零命中文件不产生筛查行,因此不会出现在判定输出
130
130
  "schema": "gapit.report/1",
131
131
  "tool": {
132
132
  "name": "gapit",
133
- "version": "0.5.3"
133
+ "version": "0.5.4"
134
134
  },
135
135
  "created_at": "2026-09-19T01:12:20Z",
136
136
  "params": {
@@ -219,7 +219,7 @@ non-DEC。零命中文件不产生筛查行,因此不会出现在判定输出
219
219
  ```json
220
220
  {
221
221
  "schema": "gapit.typing_result/1",
222
- "tool": {"name": "gapit", "version": "0.5.3"},
222
+ "tool": {"name": "gapit", "version": "0.5.4"},
223
223
  "created_at": "2026-10-02T10:04:55Z",
224
224
  "source": ["dec.tsv"],
225
225
  "db": "ecoli_dec",
@@ -402,7 +402,7 @@ typing 的数据库是同一个表头去掉 `PHENOTYPE`。没有位点判定的
402
402
  "schema": "gapit.summary/1",
403
403
  "tool": {
404
404
  "name": "gapit",
405
- "version": "0.5.3"
405
+ "version": "0.5.4"
406
406
  },
407
407
  "created_at": "2026-09-19T01:11:09Z",
408
408
  "params": {
@@ -521,7 +521,7 @@ agent 只凭二进制就能发现整个契约。
521
521
 
522
522
  ```console
523
523
  $ gapit --version --json
524
- {"schema":"gapit.version/1","name":"gapit","version":"0.5.3"}
524
+ {"schema":"gapit.version/1","name":"gapit","version":"0.5.4"}
525
525
  ```
526
526
 
527
527
  `gapit schema <name>` 打印每个文档的 JSON Schema。十一个名字:`report`、
@@ -94,7 +94,7 @@ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
94
94
  "schema": "gapit.report/1",
95
95
  "tool": {
96
96
  "name": "gapit",
97
- "version": "0.5.3"
97
+ "version": "0.5.4"
98
98
  },
99
99
  "created_at": "2026-09-19T01:11:06Z",
100
100
  "params": {
@@ -89,7 +89,7 @@ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
89
89
  "schema": "gapit.report/1",
90
90
  "tool": {
91
91
  "name": "gapit",
92
- "version": "0.5.3"
92
+ "version": "0.5.4"
93
93
  },
94
94
  "created_at": "2026-09-19T01:11:06Z",
95
95
  "params": {
@@ -108,6 +108,14 @@ Output streams per completed sample, head-of-line in sample order under `--jobs`
108
108
  file — the json variant renders nothing at all, since its single document only exists
109
109
  at the end.
110
110
 
111
+ On an interactive terminal (stderr is a TTY, no `--quiet`) the batch shows a rich progress
112
+ bar on **stderr** — spinner, the current sample's name, bar, M/N count, percent, elapsed
113
+ time — replacing the per-sample `Screening sample …`/`Detected N present genes` notes while
114
+ it runs. Piped or redirected stderr and `--quiet` keep the plain notes byte-identically.
115
+ The bar never touches stdout: streaming bytes are identical with it on or off, and the
116
+ lazy `#SAMPLE` header still leads. The contig path ([./screen.md](./screen.md)) and
117
+ `gapit db fetch all` carry the same bar.
118
+
111
119
  The single-sample `--r1`/`--r2` path differs on two points: no `--jobs`, and its Markdown
112
120
  frontmatter keeps the `files:`/`genes_found:` totals (its tsv default renders the same
113
121
  table, one chunk for the one sample).
@@ -115,7 +123,7 @@ table, one chunk for the one sample).
115
123
  ## Options
116
124
 
117
125
  Reads mode runs through the same `gapit screen` command; these are the flags that apply
118
- (transcribed from `gapit screen --help`, gapit 0.5.3). Contig-mode flags not listed here
126
+ (transcribed from `gapit screen --help`, gapit 0.5.4). Contig-mode flags not listed here
119
127
  (`--minid`, `--mincov`, `--fofn`, `--noheader`, `--nopath`) do not apply; `--jobs` applies
120
128
  to the wildcard path only.
121
129
 
@@ -329,7 +337,7 @@ The short-read fixture behaves the same with one calibration: `sr` soft-clipping
329
337
  $ gapit screen --r1 ont_homologs.fq --db homologs --read-type map-ont --min-identity 95 --format md --quiet
330
338
  ---
331
339
  schema: gapit.reads/2
332
- tool: gapit 0.5.3
340
+ tool: gapit 0.5.4
333
341
  created_at: 2026-09-20T14:23:33Z
334
342
  db: homologs
335
343
  read_type: map-ont
@@ -425,7 +433,7 @@ $ gapit screen --r1 tetx_full.fq --db tinyreads --format json
425
433
  "schema": "gapit.reads/1",
426
434
  "tool": {
427
435
  "name": "gapit",
428
- "version": "0.5.3"
436
+ "version": "0.5.4"
429
437
  },
430
438
  "created_at": "2026-09-19T01:12:25Z",
431
439
  "params": {
@@ -520,7 +528,7 @@ $ gapit screen --r1 tetx_lane1.fq,tetx_lane2.fq --db tinyreads --format json --q
520
528
  $ gapit screen --r1 tetx_full.fq --db tinyreads --format md
521
529
  ---
522
530
  schema: gapit.reads/1
523
- tool: gapit 0.5.3
531
+ tool: gapit 0.5.4
524
532
  created_at: 2026-09-19T01:12:25Z
525
533
  db: tinyreads
526
534
  read_type: sr
@@ -622,7 +630,7 @@ Detected 2 present genes in /tmp/gapit-demo/assembly.fa
622
630
  "schema": "gapit.reads/1",
623
631
  "tool": {
624
632
  "name": "gapit",
625
- "version": "0.5.3"
633
+ "version": "0.5.4"
626
634
  },
627
635
  "created_at": "2026-09-19T14:23:00Z",
628
636
  "params": {
@@ -681,7 +689,7 @@ cost of allele-level precision. That trade suggests a two-stage workflow over ma
681
689
  pipeline, which applies the identity and coverage floors at abricate parity.
682
690
 
683
691
  Real numbers, one K. pneumoniae RefSeq assembly (GCF_000240185.1, 5.3 Mb, `--db ncbi`,
684
- single-threaded, gapit 0.5.3):
692
+ single-threaded, gapit 0.5.4):
685
693
 
686
694
  ```console
687
695
  $ # Stage 1: survey, ~0.9 s
@@ -99,6 +99,13 @@ $ gapit screen -d ecoli_dec *.gz
99
99
  *k* 个样本批量中途失败,已流式写出的样本 1..*k-1* 会保留在文件里 —— json 变体
100
100
  什么都不写,因为它的单文档只在结尾才存在。
101
101
 
102
+ 在交互式终端上(stderr 为 TTY 且未用 `--quiet`)批量会在 **stderr** 上显示 rich 进度
103
+ 条 —— 转轮、当前样本名、进度条、M/N 计数、百分比、已用时间 —— 并在其运行期间取代
104
+ 逐样本的 `Screening sample …`/`Detected N present genes` 提示。stderr 被管道或重定向、
105
+ 以及 `--quiet` 时,保持与今天逐字节相同的纯文本提示。进度条绝不触碰 stdout:开与关的
106
+ 流式字节完全一致,惰性的 `#SAMPLE` 表头依然最先发出。contig 路径
107
+ ([./screen.zh.md](./screen.zh.md))与 `gapit db fetch all` 使用同一条进度条。
108
+
102
109
  单样本的 `--r1`/`--r2` 路径在两点上不同:不接受 `--jobs`,其 Markdown
103
110
  frontmatter 保留 `files:`/`genes_found:` 运行总计(它的 tsv 默认渲染同一张表,
104
111
  单个样本一个分块)。
@@ -106,7 +113,7 @@ frontmatter 保留 `files:`/`genes_found:` 运行总计(它的 tsv 默认渲
106
113
  ## 选项
107
114
 
108
115
  reads 模式走同一条 `gapit screen` 命令;以下是适用的参数(转写自 `gapit screen
109
- --help`,gapit 0.5.3)。这里未列出的 contig 模式参数(`--minid`、`--mincov`、
116
+ --help`,gapit 0.5.4)。这里未列出的 contig 模式参数(`--minid`、`--mincov`、
110
117
  `--fofn`、`--noheader`、`--nopath`)不适用;`--jobs` 只适用于通配符路径(见上文)。
111
118
 
112
119
  | 参数 | 类型 | 默认值 | 说明 |
@@ -311,7 +318,7 @@ Markdown 形式:
311
318
  $ gapit screen --r1 ont_homologs.fq --db homologs --read-type map-ont --min-identity 95 --format md --quiet
312
319
  ---
313
320
  schema: gapit.reads/2
314
- tool: gapit 0.5.3
321
+ tool: gapit 0.5.4
315
322
  created_at: 2026-09-20T14:23:33Z
316
323
  db: homologs
317
324
  read_type: map-ont
@@ -403,7 +410,7 @@ $ gapit screen --r1 tetx_full.fq --db tinyreads --format json
403
410
  "schema": "gapit.reads/1",
404
411
  "tool": {
405
412
  "name": "gapit",
406
- "version": "0.5.3"
413
+ "version": "0.5.4"
407
414
  },
408
415
  "created_at": "2026-09-19T01:12:25Z",
409
416
  "params": {
@@ -498,7 +505,7 @@ $ gapit screen --r1 tetx_lane1.fq,tetx_lane2.fq --db tinyreads --format json --q
498
505
  $ gapit screen --r1 tetx_full.fq --db tinyreads --format md
499
506
  ---
500
507
  schema: gapit.reads/1
501
- tool: gapit 0.5.3
508
+ tool: gapit 0.5.4
502
509
  created_at: 2026-09-19T01:12:25Z
503
510
  db: tinyreads
504
511
  read_type: sr
@@ -598,7 +605,7 @@ Detected 2 present genes in /tmp/gapit-demo/assembly.fa
598
605
  "schema": "gapit.reads/1",
599
606
  "tool": {
600
607
  "name": "gapit",
601
- "version": "0.5.3"
608
+ "version": "0.5.4"
602
609
  },
603
610
  "created_at": "2026-09-19T14:23:00Z",
604
611
  "params": {
@@ -656,7 +663,7 @@ minimap2 一段完全跳过 BLAST 索引,把 assembly 送进 minimap2 引擎
656
663
  性应用一致性与覆盖度下限。
657
664
 
658
665
  真实数字,一株 K. pneumoniae RefSeq assembly(GCF_000240185.1,5.3 Mb,`--db ncbi`,
659
- 单线程,gapit 0.5.3):
666
+ 单线程,gapit 0.5.4):
660
667
 
661
668
  ```console
662
669
  $ # Stage 1: survey, ~0.9 s
@@ -9,7 +9,7 @@ Database setup is covered in [./databases.md](./databases.md); a full walk-throu
9
9
 
10
10
  ## Options
11
11
 
12
- Transcribed from `gapit screen --help` (gapit 0.5.3). Flags marked *reads mode* apply only when
12
+ Transcribed from `gapit screen --help` (gapit 0.5.4). Flags marked *reads mode* apply only when
13
13
  you pass `--r1`/`--r2`; they are documented in [./reads.md](./reads.md).
14
14
 
15
15
  Every option also accepts the single-dash short form listed in the **Short** column (e.g.
@@ -107,7 +107,7 @@ $ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
107
107
  "schema": "gapit.report/1",
108
108
  "tool": {
109
109
  "name": "gapit",
110
- "version": "0.5.3"
110
+ "version": "0.5.4"
111
111
  },
112
112
  "created_at": "2026-09-19T01:12:04Z",
113
113
  "params": {
@@ -192,6 +192,16 @@ tests/data/contigs/gap.fa contig1 1 97 + sul1 1-94/94 ========/====== 1/3 100.00
192
192
  With `--jobs 2` the two files are screened concurrently but stdout stays in input order, so the
193
193
  output is identical to the sequential run.
194
194
 
195
+ ### Progress bar on long batch runs
196
+
197
+ On an interactive terminal (stderr is a TTY, no `--quiet`) a multi-file batch shows a rich
198
+ progress bar on **stderr** — spinner, the current file's basename, bar, M/N count, percent,
199
+ elapsed time — replacing the per-file `Processing:`/`Found N genes` notes while it runs (the
200
+ `--jobs × --threads` oversubscription note still prints). Piped or redirected stderr and
201
+ `--quiet` keep the plain notes byte-identically — progress bars in logs are noise. The bar
202
+ lives entirely on stderr: stdout bytes are identical with it on or off. The positional-FASTQ
203
+ wildcard batch ([./reads.md](./reads.md)) and `gapit db fetch all` carry the same bar.
204
+
195
205
  ### Typed gene databases: designation is a second command
196
206
 
197
207
  When `--db` names a gene database built with a `typing.json` (the bundled `ecoli_dec`, or
@@ -9,7 +9,7 @@
9
9
 
10
10
  ## 选项
11
11
 
12
- 转写自 `gapit screen --help`(gapit 0.5.3)。标记为 *reads 模式* 的参数只在传入
12
+ 转写自 `gapit screen --help`(gapit 0.5.4)。标记为 *reads 模式* 的参数只在传入
13
13
  `--r1`/`--r2` 时生效,记录在 [./reads.md](./reads.md)。
14
14
 
15
15
  每个选项都接受 **短** 列给出的单横线短形式(例如 `--db` 的 `-d`);长形式仍是规范写法,
@@ -104,7 +104,7 @@ $ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
104
104
  "schema": "gapit.report/1",
105
105
  "tool": {
106
106
  "name": "gapit",
107
- "version": "0.5.3"
107
+ "version": "0.5.4"
108
108
  },
109
109
  "created_at": "2026-09-19T01:12:04Z",
110
110
  "params": {
@@ -189,6 +189,16 @@ tests/data/contigs/gap.fa contig1 1 97 + sul1 1-94/94 ========/====== 1/3 100.00
189
189
  用 `--jobs 2` 时两个文件并发筛查,但 stdout 仍按输入顺序排列,输出与串行运行完全
190
190
  一致。
191
191
 
192
+ ### 长批量任务的进度条
193
+
194
+ 在交互式终端上(stderr 为 TTY 且未用 `--quiet`)多文件批量筛查会在 **stderr** 上显示
195
+ rich 进度条 —— 转轮、当前文件基名、进度条、M/N 计数、百分比、已用时间 —— 并在其运行
196
+ 期间取代逐文件的 `Processing:`/`Found N genes` 提示(`--jobs × --threads` 超订用提示
197
+ 仍然打印)。stderr 被管道或重定向、以及 `--quiet` 时,保持与今天逐字节相同的纯文本
198
+ 提示 —— 日志里的进度条只是噪音。进度条完全生存在 stderr 一侧:开与关的 stdout 字节
199
+ 完全一致。位置参数 FASTQ 通配符批量([./reads.zh.md](./reads.zh.md))与
200
+ `gapit db fetch all` 使用同一条进度条。
201
+
192
202
  ### typed 基因数据库:判定是第二条命令
193
203
 
194
204
  当 `--db` 指向带 `typing.json` 构建的基因数据库(捆绑的 `ecoli_dec`,或任何
@@ -10,7 +10,7 @@ exactly what `gapit screen` writes. See [./screen.md](./screen.md) for producing
10
10
 
11
11
  ## Options
12
12
 
13
- Transcribed from `gapit summary --help` (gapit 0.5.3):
13
+ Transcribed from `gapit summary --help` (gapit 0.5.4):
14
14
 
15
15
  | Flag | Type | Default | Description |
16
16
  |---|---|---|---|
@@ -150,7 +150,7 @@ $ gapit summary tests/data/summary/sample_a.tsv tests/data/summary/sample_b.tsv
150
150
  "schema": "gapit.summary/1",
151
151
  "tool": {
152
152
  "name": "gapit",
153
- "version": "0.5.3"
153
+ "version": "0.5.4"
154
154
  },
155
155
  "created_at": "2026-09-19T01:12:48Z",
156
156
  "params": {
@@ -10,7 +10,7 @@ screen` 写出的格式。如何产生报告见 [./screen.md](./screen.md);输
10
10
 
11
11
  ## 选项
12
12
 
13
- 转写自 `gapit summary --help`(gapit 0.5.3):
13
+ 转写自 `gapit summary --help`(gapit 0.5.4):
14
14
 
15
15
  | 参数 | 类型 | 默认值 | 说明 |
16
16
  |---|---|---|---|
@@ -143,7 +143,7 @@ $ gapit summary tests/data/summary/sample_a.tsv tests/data/summary/sample_b.tsv
143
143
  "schema": "gapit.summary/1",
144
144
  "tool": {
145
145
  "name": "gapit",
146
- "version": "0.5.3"
146
+ "version": "0.5.4"
147
147
  },
148
148
  "created_at": "2026-09-19T01:12:48Z",
149
149
  "params": {
@@ -1136,8 +1136,8 @@ packages:
1136
1136
  timestamp: 1694615932610
1137
1137
  - pypi: ./
1138
1138
  name: gapit
1139
- version: 0.5.3
1140
- sha256: 05a60639a36ad46653768cc89bc37fc2c49baa91e992a1d1ff516f1fd45fd9e9
1139
+ version: 0.5.4
1140
+ sha256: 3aa9e1214291caa3a95976acca90fd7aa1faf072c27d09cd1a377d0d53e618ba
1141
1141
  requires_dist:
1142
1142
  - typer>=0.12
1143
1143
  - pydantic>=2.7
@@ -3,7 +3,7 @@ authors = ["indexofire <indexofire@gmail.com>"]
3
3
  channels = ["conda-forge", "bioconda"]
4
4
  name = "gapit"
5
5
  platforms = ["linux-64"]
6
- version = "0.5.3"
6
+ version = "0.5.4"
7
7
 
8
8
  [tasks]
9
9
  lint = "ruff check"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "gapit"
7
- version = "0.5.3"
7
+ version = "0.5.4"
8
8
  description = "Mass screening of contigs and reads for known genes — agent-first Python reimplementation of abricate"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "indexofire", email = "indexofire@gmail.com" }]
@@ -2,10 +2,10 @@
2
2
  # Field sources: version/license/python/deps mirror pyproject.toml exactly; the
3
3
  # external binaries mirror pixi.toml's conda dependencies. sha256 below hashes
4
4
  # the official PyPI sdist (verified against the release-workflow upload log).
5
- # NOTE: the sha256 is still the 0.3.1 sdist hash — replace it with the 0.5.3
6
- # sdist hash (dist/gapit-0.5.3.tar.gz) at bioconda submission time.
5
+ # NOTE: the sha256 is still the 0.3.1 sdist hash — replace it with the 0.5.4
6
+ # sdist hash (dist/gapit-0.5.4.tar.gz) at bioconda submission time.
7
7
  {% set name = "gapit" %}
8
- {% set version = "0.5.3" %}
8
+ {% set version = "0.5.4" %}
9
9
 
10
10
  package:
11
11
  name: {{ name|lower }}
@@ -1,3 +1,3 @@
1
1
  """gapit — agent-first Python reimplementation of abricate."""
2
2
 
3
- __version__ = "0.5.3"
3
+ __version__ = "0.5.4"
@@ -21,6 +21,7 @@ from gapit.bundled import BundledDatabase, bundled_databases
21
21
  from gapit.db import Database, discover_databases, mol_type
22
22
  from gapit.errors import UsageError
23
23
  from gapit.fasta import iter_fasta
24
+ from gapit.progress import screen_progress
24
25
  from gapit.providers import REGISTRY
25
26
  from gapit.providers.cluster_common import ClusterProvider, fetch_cluster_provider
26
27
  from gapit.providers.common import Dbtype, fetch_provider
@@ -97,7 +98,9 @@ def perform_fetch(
97
98
  """Fetch database(s) into <datadir>/NAME — the shared CLI + MCP
98
99
  path. NAME ``all`` installs every database in DEFAULT_DBS order; each
99
100
  receipt yields as its install completes (streaming, like the CLI's
100
- per-db stdout lines).
101
+ per-db stdout lines). On an interactive stderr the batch rides the
102
+ shared progress bar; under --quiet / non-TTY stderr the no-op shim
103
+ keeps today's byte-identical behavior.
101
104
  """
102
105
 
103
106
  def fetch_one(provider_name: str) -> ProviderReceipt:
@@ -135,8 +138,14 @@ def perform_fetch(
135
138
  destination=str(db_dir),
136
139
  )
137
140
 
138
- for provider_name in DEFAULT_DBS if name == FETCH_ALL else (name,):
139
- yield fetch_one(provider_name)
141
+ names = DEFAULT_DBS if name == FETCH_ALL else (name,)
142
+ with screen_progress(names, quiet=quiet, description="Fetching") as (bar, task_id):
143
+ for provider_name in names:
144
+ if task_id is not None:
145
+ bar.describe(provider_name)
146
+ receipt = fetch_one(provider_name)
147
+ bar.advance()
148
+ yield receipt
140
149
 
141
150
 
142
151
  def _detected_dbtype(database: Database) -> str: