gapit 0.6.2__tar.gz → 0.6.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 (464) hide show
  1. {gapit-0.6.2 → gapit-0.6.4}/AGENTS.md +2 -2
  2. {gapit-0.6.2 → gapit-0.6.4}/CHANGELOG.md +32 -0
  3. {gapit-0.6.2 → gapit-0.6.4}/CITATION.cff +1 -1
  4. {gapit-0.6.2 → gapit-0.6.4}/PKG-INFO +2 -2
  5. {gapit-0.6.2 → gapit-0.6.4}/README.md +1 -1
  6. {gapit-0.6.2 → gapit-0.6.4}/SPEC.md +3 -2
  7. {gapit-0.6.2 → gapit-0.6.4}/docs/agents.md +8 -4
  8. {gapit-0.6.2 → gapit-0.6.4}/docs/agents.zh.md +7 -3
  9. {gapit-0.6.2 → gapit-0.6.4}/docs/databases.md +5 -4
  10. {gapit-0.6.2 → gapit-0.6.4}/docs/databases.zh.md +3 -4
  11. {gapit-0.6.2 → gapit-0.6.4}/docs/datadir.md +2 -2
  12. {gapit-0.6.2 → gapit-0.6.4}/docs/datadir.zh.md +2 -2
  13. {gapit-0.6.2 → gapit-0.6.4}/docs/installation.md +2 -2
  14. {gapit-0.6.2 → gapit-0.6.4}/docs/installation.zh.md +2 -2
  15. {gapit-0.6.2 → gapit-0.6.4}/docs/mcp.md +12 -8
  16. {gapit-0.6.2 → gapit-0.6.4}/docs/mcp.zh.md +12 -8
  17. {gapit-0.6.2 → gapit-0.6.4}/docs/outputs.md +6 -5
  18. {gapit-0.6.2 → gapit-0.6.4}/docs/outputs.zh.md +6 -5
  19. {gapit-0.6.2 → gapit-0.6.4}/docs/quickstart.md +1 -1
  20. {gapit-0.6.2 → gapit-0.6.4}/docs/quickstart.zh.md +1 -1
  21. {gapit-0.6.2 → gapit-0.6.4}/docs/reads.md +6 -6
  22. {gapit-0.6.2 → gapit-0.6.4}/docs/reads.zh.md +6 -6
  23. {gapit-0.6.2 → gapit-0.6.4}/docs/screen.md +6 -4
  24. {gapit-0.6.2 → gapit-0.6.4}/docs/screen.zh.md +5 -4
  25. {gapit-0.6.2 → gapit-0.6.4}/docs/summary.md +2 -2
  26. {gapit-0.6.2 → gapit-0.6.4}/docs/summary.zh.md +2 -2
  27. {gapit-0.6.2 → gapit-0.6.4}/pixi.lock +2 -2
  28. {gapit-0.6.2 → gapit-0.6.4}/pixi.toml +1 -1
  29. {gapit-0.6.2 → gapit-0.6.4}/pyproject.toml +1 -1
  30. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/__init__.py +1 -1
  31. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cli.py +2 -1
  32. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_db.py +9 -2
  33. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_screen.py +2 -0
  34. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db_ops.py +7 -3
  35. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db_query_ops.py +2 -2
  36. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/errors.py +79 -4
  37. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/json.py +6 -1
  38. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/schemas.py +5 -0
  39. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/mcp_schemas.py +10 -5
  40. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/mcp_tools.py +29 -6
  41. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/progress.py +49 -2
  42. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/report.py +3 -0
  43. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/screening.py +13 -2
  44. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/screening_reads_positional.py +6 -1
  45. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_none.json +1 -1
  46. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_none.md +1 -1
  47. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_o3k6.json +1 -1
  48. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_o3k6.md +1 -1
  49. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_exact.json +1 -1
  50. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_exact.md +1 -1
  51. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_fragmented.json +1 -1
  52. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_fragmented.md +1 -1
  53. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_ambiguous.json +1 -1
  54. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_ambiguous.md +1 -1
  55. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_cm_exact.json +1 -1
  56. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_cm_exact.md +1 -1
  57. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_exact.json +1 -1
  58. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_exact.md +1 -1
  59. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_vc_inaba.json +1 -1
  60. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_vc_inaba.md +1 -1
  61. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/fragments_merge.json +3 -2
  62. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/fragments_merge.md +1 -1
  63. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_dec_pic_astA.json +1 -1
  64. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_dec_pic_astA.md +1 -1
  65. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_doumith_4b.json +1 -1
  66. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_doumith_4b.md +1 -1
  67. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_l4b.json +1 -1
  68. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_l4b.md +1 -1
  69. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_mixed.json +1 -1
  70. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_mixed.md +1 -1
  71. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_vp_typed.json +1 -1
  72. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_serotyping_vp_typed.md +1 -1
  73. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_shigella_mixed.json +1 -1
  74. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_shigella_mixed.md +1 -1
  75. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_typing_exact.json +1 -1
  76. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/gene_typing_exact.md +1 -1
  77. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/reads_tinyamr.json +1 -1
  78. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/reads_tinyamr.md +1 -1
  79. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/screen_multi.json +1 -1
  80. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/screen_multi.md +1 -1
  81. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/summary_multi.json +1 -1
  82. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/summary_multi.md +1 -1
  83. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/typing_markers.json +1 -1
  84. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/typing_markers.md +1 -1
  85. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_fragments.py +6 -3
  86. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_schema.py +13 -0
  87. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_screen.py +2 -2
  88. {gapit-0.6.2 → gapit-0.6.4}/tests/test_error_envelope.py +41 -1
  89. {gapit-0.6.2 → gapit-0.6.4}/tests/test_mcp.py +21 -8
  90. {gapit-0.6.2 → gapit-0.6.4}/tests/test_progress.py +100 -0
  91. {gapit-0.6.2 → gapit-0.6.4}/.gitattributes +0 -0
  92. {gapit-0.6.2 → gapit-0.6.4}/.github/workflows/ci.yml +0 -0
  93. {gapit-0.6.2 → gapit-0.6.4}/.github/workflows/docs.yml +0 -0
  94. {gapit-0.6.2 → gapit-0.6.4}/.github/workflows/release.yml +0 -0
  95. {gapit-0.6.2 → gapit-0.6.4}/.gitignore +0 -0
  96. {gapit-0.6.2 → gapit-0.6.4}/CODE_QUALITY_REPORT.md +0 -0
  97. {gapit-0.6.2 → gapit-0.6.4}/CONTRIBUTING.md +0 -0
  98. {gapit-0.6.2 → gapit-0.6.4}/LICENSE +0 -0
  99. {gapit-0.6.2 → gapit-0.6.4}/PLAN.md +0 -0
  100. {gapit-0.6.2 → gapit-0.6.4}/SECURITY.md +0 -0
  101. {gapit-0.6.2 → gapit-0.6.4}/docs/custom-db.md +0 -0
  102. {gapit-0.6.2 → gapit-0.6.4}/docs/custom-db.zh.md +0 -0
  103. {gapit-0.6.2 → gapit-0.6.4}/docs/faq.md +0 -0
  104. {gapit-0.6.2 → gapit-0.6.4}/docs/faq.zh.md +0 -0
  105. {gapit-0.6.2 → gapit-0.6.4}/docs/gseek-engine.md +0 -0
  106. {gapit-0.6.2 → gapit-0.6.4}/docs/gseek-engine.zh.md +0 -0
  107. {gapit-0.6.2 → gapit-0.6.4}/docs/index.md +0 -0
  108. {gapit-0.6.2 → gapit-0.6.4}/docs/index.zh.md +0 -0
  109. {gapit-0.6.2 → gapit-0.6.4}/docs/typing.md +0 -0
  110. {gapit-0.6.2 → gapit-0.6.4}/docs/typing.zh.md +0 -0
  111. {gapit-0.6.2 → gapit-0.6.4}/mkdocs.yml +0 -0
  112. {gapit-0.6.2 → gapit-0.6.4}/scripts/cluster_calibration.py +0 -0
  113. {gapit-0.6.2 → gapit-0.6.4}/scripts/generate_vp_typing.py +0 -0
  114. {gapit-0.6.2 → gapit-0.6.4}/scripts/vp_rules_matrix.tsv +0 -0
  115. {gapit-0.6.2 → gapit-0.6.4}/scripts/vp_typing_support.py +0 -0
  116. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/blast.py +0 -0
  117. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/bundled.py +0 -0
  118. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/bundled_cluster.py +0 -0
  119. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cluster.py +0 -0
  120. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cluster_math.py +0 -0
  121. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/clusterbuild.py +0 -0
  122. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_db_build.py +0 -0
  123. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_db_install.py +0 -0
  124. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_db_outdated.py +0 -0
  125. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_db_search.py +0 -0
  126. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_screen_positionals.py +0 -0
  127. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_screen_reads_args.py +0 -0
  128. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_summary.py +0 -0
  129. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/cmd_typing.py +0 -0
  130. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/config.py +0 -0
  131. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoh/bundled.json +0 -0
  132. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoh/sequences +0 -0
  133. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoli_dec/bundled.json +0 -0
  134. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoli_dec/floors.json +0 -0
  135. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoli_dec/records.jsonl +0 -0
  136. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoli_dec/sequences +0 -0
  137. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ecoli_dec/typing.json +0 -0
  138. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/lm_doumith/bundled.json +0 -0
  139. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/lm_doumith/sequences +0 -0
  140. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/lm_doumith/typing.json +0 -0
  141. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ncbi/bundled.json +0 -0
  142. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/ncbi/sequences +0 -0
  143. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/resfinder/bundled.json +0 -0
  144. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/resfinder/sequences +0 -0
  145. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vc_serogroup/bundled.json +0 -0
  146. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vc_serogroup/floors.json +0 -0
  147. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vc_serogroup/records.jsonl +0 -0
  148. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vc_serogroup/sequences +0 -0
  149. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vc_serogroup/typing.json +0 -0
  150. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vp_ok/bundled.json +0 -0
  151. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vp_ok/features.json +0 -0
  152. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vp_ok/sequences +0 -0
  153. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/data/dbs/vp_ok/typing.json +0 -0
  154. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db.py +0 -0
  155. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db_build_meta.py +0 -0
  156. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db_build_ops.py +0 -0
  157. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/db_txn.py +0 -0
  158. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/dbbuild.py +0 -0
  159. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/dbcodec.py +0 -0
  160. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/dispatch.py +0 -0
  161. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/engines.py +0 -0
  162. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/fasta.py +0 -0
  163. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/__init__.py +0 -0
  164. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/cluster.py +0 -0
  165. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/cluster2.py +0 -0
  166. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/cluster_md.py +0 -0
  167. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/csvutil.py +0 -0
  168. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/md.py +0 -0
  169. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/reads_json.py +0 -0
  170. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/reads_tsv.py +0 -0
  171. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/summary.py +0 -0
  172. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/tsv.py +0 -0
  173. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/formats/typing_result.py +0 -0
  174. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/fragments.py +0 -0
  175. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/gbfeatures.py +0 -0
  176. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/gene_floors.py +0 -0
  177. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/gffparse.py +0 -0
  178. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/gseek_engine.py +0 -0
  179. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/hits.py +0 -0
  180. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/mcp.py +0 -0
  181. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/minimap.py +0 -0
  182. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/minimap2_run.py +0 -0
  183. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/paf.py +0 -0
  184. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/proctools.py +0 -0
  185. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/__init__.py +0 -0
  186. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ab_k.py +0 -0
  187. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ab_o.py +0 -0
  188. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/argannot.py +0 -0
  189. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/bacmet2.py +0 -0
  190. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/card.py +0 -0
  191. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/cluster_common.py +0 -0
  192. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/common.py +0 -0
  193. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ecoh.py +0 -0
  194. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ecoli_kps.py +0 -0
  195. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ecoli_vf.py +0 -0
  196. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/kosc_k.py +0 -0
  197. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/kosc_o.py +0 -0
  198. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/kpsc_k.py +0 -0
  199. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/kpsc_o.py +0 -0
  200. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/megares.py +0 -0
  201. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/ncbi.py +0 -0
  202. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/plasmidfinder.py +0 -0
  203. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/resfinder.py +0 -0
  204. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/upec_expec_vf.py +0 -0
  205. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/vfdb.py +0 -0
  206. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/providers/victors.py +0 -0
  207. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/py.typed +0 -0
  208. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/readpairs.py +0 -0
  209. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/reads.py +0 -0
  210. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/records.py +0 -0
  211. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/screening_cluster.py +0 -0
  212. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/screening_reads.py +0 -0
  213. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/seqconvert.py +0 -0
  214. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/summary.py +0 -0
  215. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_cluster2.py +0 -0
  216. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_decide.py +0 -0
  217. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_engine.py +0 -0
  218. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_gene.py +0 -0
  219. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_input.py +0 -0
  220. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_models.py +0 -0
  221. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_ops.py +0 -0
  222. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_results.py +0 -0
  223. {gapit-0.6.2 → gapit-0.6.4}/src/gapit/typing_rules.py +0 -0
  224. {gapit-0.6.2 → gapit-0.6.4}/tests/data/bundled_differential/resfinder/HEAD.zip +0 -0
  225. {gapit-0.6.2 → gapit-0.6.4}/tests/data/bundled_differential/resfinder/README.md +0 -0
  226. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/bakta_style.gbk +0 -0
  227. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/clusters.gff3 +0 -0
  228. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/clusters_gz.gff3.gz +0 -0
  229. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/clusters_sidecar.fa +0 -0
  230. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/clusters_sidecar.gff3 +0 -0
  231. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/colliding_genes.gbk +0 -0
  232. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/compound.gbk +0 -0
  233. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/gz_input.gbk.gz +0 -0
  234. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/kaptive_style.gbk +0 -0
  235. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/nofasta.gff3 +0 -0
  236. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/screening.gbk +0 -0
  237. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/typing_invalid.json +0 -0
  238. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/typing_screen.json +0 -0
  239. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/typing_screen_cm.json +0 -0
  240. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/typing_screen_v2.json +0 -0
  241. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/typing_valid.json +0 -0
  242. {gapit-0.6.2 → gapit-0.6.4}/tests/data/cluster/unnamed_cds.gbk +0 -0
  243. {gapit-0.6.2 → gapit-0.6.4}/tests/data/contigs/full.fa +0 -0
  244. {gapit-0.6.2 → gapit-0.6.4}/tests/data/contigs/gap.fa +0 -0
  245. {gapit-0.6.2 → gapit-0.6.4}/tests/data/contigs/none.fa +0 -0
  246. {gapit-0.6.2 → gapit-0.6.4}/tests/data/contigs/partial.fa +0 -0
  247. {gapit-0.6.2 → gapit-0.6.4}/tests/data/contigs/sort.fa +0 -0
  248. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.embl +0 -0
  249. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.embl.bz2 +0 -0
  250. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.fa +0 -0
  251. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.fa.gz +0 -0
  252. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.fq +0 -0
  253. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.gbk +0 -0
  254. {gapit-0.6.2 → gapit-0.6.4}/tests/data/convert/sample.gbk.gz +0 -0
  255. {gapit-0.6.2 → gapit-0.6.4}/tests/data/db/tinyamr/sequences +0 -0
  256. {gapit-0.6.2 → gapit-0.6.4}/tests/data/fragments/fragdb/sequences +0 -0
  257. {gapit-0.6.2 → gapit-0.6.4}/tests/data/fragments/split3040.fa +0 -0
  258. {gapit-0.6.2 → gapit-0.6.4}/tests/data/fragments/split4060.fa +0 -0
  259. {gapit-0.6.2 → gapit-0.6.4}/tests/data/fragments/split5050.fa +0 -0
  260. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/argannot/ARG-ANNOT_NT_V6_July2019.txt +0 -0
  261. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/bacmet2/BacMet2_EXP_database.fasta +0 -0
  262. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/card/card.json +0 -0
  263. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/ecoh/EcOH.fasta +0 -0
  264. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/ecoli_vf/repaired_ecoli_vfs_shortnames.ffn +0 -0
  265. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/megares/megares_drugs_demo.fasta +0 -0
  266. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/ncbi/AMR_CDS.fa +0 -0
  267. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/ncbi/ReferenceGeneCatalog.txt +0 -0
  268. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/plasmidfinder/plasmids_a.fsa +0 -0
  269. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/plasmidfinder/plasmids_b.fsa +0 -0
  270. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/resfinder/aminoglycoside.fsa +0 -0
  271. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/resfinder/beta-lactam.fsa +0 -0
  272. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/resfinder/phenotypes.txt +0 -0
  273. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/upec_expec_vf/UPEC_ExPEC_VF.tsv +0 -0
  274. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/vfdb/VFDB_setA_nt.fas +0 -0
  275. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/victors/gen_downloads.php +0 -0
  276. {gapit-0.6.2 → gapit-0.6.4}/tests/data/providers/victors/gen_downloads_protein.php +0 -0
  277. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/bla_partial.fq +0 -0
  278. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/junk.fq +0 -0
  279. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/s1_1.fq.gz +0 -0
  280. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/s1_2.fq.gz +0 -0
  281. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/s2_R1.fq.gz +0 -0
  282. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/s2_R2.fq.gz +0 -0
  283. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/suly_partial.fq +0 -0
  284. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_R1.fq +0 -0
  285. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_R2.fq +0 -0
  286. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_full.fq +0 -0
  287. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_full.fq.gz +0 -0
  288. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_lane1.fq +0 -0
  289. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_lane2.fq +0 -0
  290. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_pe1_R1.fq +0 -0
  291. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_pe1_R2.fq +0 -0
  292. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_pe2_R1.fq +0 -0
  293. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads/tetx_pe2_R2.fq +0 -0
  294. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads2/ont_homologs.fq +0 -0
  295. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads2/sr_homologs.fq +0 -0
  296. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads2_db/homologs/sequences +0 -0
  297. {gapit-0.6.2 → gapit-0.6.4}/tests/data/reads_db/tinyreads/sequences +0 -0
  298. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/empty.tsv +0 -0
  299. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/multi_sample.tsv +0 -0
  300. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/sample_a.csv +0 -0
  301. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/sample_a.tsv +0 -0
  302. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/sample_b.csv +0 -0
  303. {gapit-0.6.2 → gapit-0.6.4}/tests/data/summary/sample_b.tsv +0 -0
  304. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/dec_s1_aggR_pic_uidA.fasta +0 -0
  305. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/dec_s2_pic_astA_uidA.fasta +0 -0
  306. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/dec_s3_stx2a_escV_aggR_uidA.fasta +0 -0
  307. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/exact.fa +0 -0
  308. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/listeria_1c.fa +0 -0
  309. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/listeria_4b.fa +0 -0
  310. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/listeria_nogate.fa +0 -0
  311. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/markers.fa +0 -0
  312. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/mutated.fa +0 -0
  313. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/negative.fa +0 -0
  314. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/partial.fa +0 -0
  315. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/cholerae.gbk +0 -0
  316. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/cholerae.json +0 -0
  317. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/dec.fa +0 -0
  318. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/dec.json +0 -0
  319. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/doumith.fa +0 -0
  320. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/doumith.json +0 -0
  321. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/lm_doumith.fa +0 -0
  322. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/lm_doumith.json +0 -0
  323. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/meningotype.fa +0 -0
  324. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/meningotype.json +0 -0
  325. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/shigella.fa +0 -0
  326. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/shigella.json +0 -0
  327. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/vp_ok.gbk +0 -0
  328. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/schemes/vp_ok.json +0 -0
  329. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/serotyping.fa +0 -0
  330. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/typing_markers_v1.json +0 -0
  331. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/typing_markers_v2.json +0 -0
  332. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/typing_serotyping_v2.json +0 -0
  333. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/vp_mixed.fa +0 -0
  334. {gapit-0.6.2 → gapit-0.6.4}/tests/data/typing/vp_typed.fa +0 -0
  335. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_none.tsv +0 -0
  336. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster2_vp_o3k6.tsv +0 -0
  337. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_exact.tsv +0 -0
  338. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_fragmented.tsv +0 -0
  339. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_ambiguous.tsv +0 -0
  340. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_cm_exact.tsv +0 -0
  341. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_typing_exact.tsv +0 -0
  342. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/cluster_vc_inaba.tsv +0 -0
  343. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/ecoli_dec_typed.tsv +0 -0
  344. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/ecoli_dec_typing.tsv +0 -0
  345. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/features_kaptive_style.json +0 -0
  346. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/features_screening.json +0 -0
  347. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/fragments_merge.tsv +0 -0
  348. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/lm_doumith_typing.tsv +0 -0
  349. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/summary_dutch.tsv +0 -0
  350. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/summary_multi.csv +0 -0
  351. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/summary_multi.tsv +0 -0
  352. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/tinyamr_multi_nopath.csv +0 -0
  353. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/tinyamr_multi_nopath.tsv +0 -0
  354. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/typing_markers.tsv +0 -0
  355. {gapit-0.6.2 → gapit-0.6.4}/tests/golden/typing_serotyping.tsv +0 -0
  356. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/corpus/01_exact_and_junk.fa +0 -0
  357. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/corpus/02_mutated.fa +0 -0
  358. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/corpus/03_truncated.fa +0 -0
  359. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/corpus/04_reverse.fa +0 -0
  360. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/corpus/05_threshold.fa +0 -0
  361. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/make_corpus.py +0 -0
  362. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/run_parity.py +0 -0
  363. {gapit-0.6.2 → gapit-0.6.4}/tests/parity/run_summary_parity.py +0 -0
  364. {gapit-0.6.2 → gapit-0.6.4}/tests/test_blast_parse.py +0 -0
  365. {gapit-0.6.2 → gapit-0.6.4}/tests/test_blast_pipeline.py +0 -0
  366. {gapit-0.6.2 → gapit-0.6.4}/tests/test_bundled.py +0 -0
  367. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_aligner.py +0 -0
  368. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_bare_help.py +0 -0
  369. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_completion.py +0 -0
  370. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_db_build.py +0 -0
  371. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_db_build_cluster.py +0 -0
  372. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_db_fetch.py +0 -0
  373. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_db_path.py +0 -0
  374. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_db_query.py +0 -0
  375. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_reads.py +0 -0
  376. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_reads2.py +0 -0
  377. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_reads_glob.py +0 -0
  378. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_reads_glob_jobs.py +0 -0
  379. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_screen.py +0 -0
  380. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_screen_jobs.py +0 -0
  381. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_setupdb.py +0 -0
  382. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_short_options.py +0 -0
  383. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cli_summary.py +0 -0
  384. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster2_build.py +0 -0
  385. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_build_validation.py +0 -0
  386. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_calibration.py +0 -0
  387. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_db.py +0 -0
  388. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_math.py +0 -0
  389. {gapit-0.6.2 → gapit-0.6.4}/tests/test_cluster_typing.py +0 -0
  390. {gapit-0.6.2 → gapit-0.6.4}/tests/test_config.py +0 -0
  391. {gapit-0.6.2 → gapit-0.6.4}/tests/test_csv_contract.py +0 -0
  392. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db.py +0 -0
  393. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db_fetch.py +0 -0
  394. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db_field_validation.py +0 -0
  395. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db_headers.py +0 -0
  396. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db_list_extras.py +0 -0
  397. {gapit-0.6.2 → gapit-0.6.4}/tests/test_db_txn.py +0 -0
  398. {gapit-0.6.2 → gapit-0.6.4}/tests/test_dbbuild.py +0 -0
  399. {gapit-0.6.2 → gapit-0.6.4}/tests/test_dbcodec.py +0 -0
  400. {gapit-0.6.2 → gapit-0.6.4}/tests/test_fasta.py +0 -0
  401. {gapit-0.6.2 → gapit-0.6.4}/tests/test_fragments.py +0 -0
  402. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gapit_db_e2e.py +0 -0
  403. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gbfeatures.py +0 -0
  404. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gene_floors.py +0 -0
  405. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gene_floors_e2e.py +0 -0
  406. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gene_typing.py +0 -0
  407. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gene_typing2.py +0 -0
  408. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gffparse.py +0 -0
  409. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gseek_engine.py +0 -0
  410. {gapit-0.6.2 → gapit-0.6.4}/tests/test_gseek_parity.py +0 -0
  411. {gapit-0.6.2 → gapit-0.6.4}/tests/test_hits.py +0 -0
  412. {gapit-0.6.2 → gapit-0.6.4}/tests/test_json_format.py +0 -0
  413. {gapit-0.6.2 → gapit-0.6.4}/tests/test_lm_doumith.py +0 -0
  414. {gapit-0.6.2 → gapit-0.6.4}/tests/test_mcp_db_tools.py +0 -0
  415. {gapit-0.6.2 → gapit-0.6.4}/tests/test_mcp_protocol.py +0 -0
  416. {gapit-0.6.2 → gapit-0.6.4}/tests/test_mcp_reads.py +0 -0
  417. {gapit-0.6.2 → gapit-0.6.4}/tests/test_md_format.py +0 -0
  418. {gapit-0.6.2 → gapit-0.6.4}/tests/test_minimap.py +0 -0
  419. {gapit-0.6.2 → gapit-0.6.4}/tests/test_mol_type.py +0 -0
  420. {gapit-0.6.2 → gapit-0.6.4}/tests/test_oversubscription.py +0 -0
  421. {gapit-0.6.2 → gapit-0.6.4}/tests/test_paf.py +0 -0
  422. {gapit-0.6.2 → gapit-0.6.4}/tests/test_paf_identity.py +0 -0
  423. {gapit-0.6.2 → gapit-0.6.4}/tests/test_parser_fuzz.py +0 -0
  424. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_argannot.py +0 -0
  425. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_bacmet2.py +0 -0
  426. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_card.py +0 -0
  427. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_ecoh.py +0 -0
  428. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_ecoli_vf.py +0 -0
  429. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_kaptive.py +0 -0
  430. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_megares.py +0 -0
  431. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_ncbi.py +0 -0
  432. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_plasmidfinder.py +0 -0
  433. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_resfinder.py +0 -0
  434. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_upec_expec_vf.py +0 -0
  435. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_vfdb.py +0 -0
  436. {gapit-0.6.2 → gapit-0.6.4}/tests/test_provider_victors.py +0 -0
  437. {gapit-0.6.2 → gapit-0.6.4}/tests/test_providers_common.py +0 -0
  438. {gapit-0.6.2 → gapit-0.6.4}/tests/test_readpairs.py +0 -0
  439. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads2_homologs.py +0 -0
  440. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads2_model.py +0 -0
  441. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads_aggregate.py +0 -0
  442. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads_integration.py +0 -0
  443. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads_interval_union.py +0 -0
  444. {gapit-0.6.2 → gapit-0.6.4}/tests/test_reads_streaming.py +0 -0
  445. {gapit-0.6.2 → gapit-0.6.4}/tests/test_records.py +0 -0
  446. {gapit-0.6.2 → gapit-0.6.4}/tests/test_report.py +0 -0
  447. {gapit-0.6.2 → gapit-0.6.4}/tests/test_screen_integration.py +0 -0
  448. {gapit-0.6.2 → gapit-0.6.4}/tests/test_screening_reads_unit.py +0 -0
  449. {gapit-0.6.2 → gapit-0.6.4}/tests/test_seqconvert.py +0 -0
  450. {gapit-0.6.2 → gapit-0.6.4}/tests/test_seqconvert_differential.py +0 -0
  451. {gapit-0.6.2 → gapit-0.6.4}/tests/test_streaming_chunks.py +0 -0
  452. {gapit-0.6.2 → gapit-0.6.4}/tests/test_summary.py +0 -0
  453. {gapit-0.6.2 → gapit-0.6.4}/tests/test_summary_formats.py +0 -0
  454. {gapit-0.6.2 → gapit-0.6.4}/tests/test_tsv.py +0 -0
  455. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_command.py +0 -0
  456. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_engine.py +0 -0
  457. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_models.py +0 -0
  458. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_schemes.py +0 -0
  459. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_schemes_cluster.py +0 -0
  460. {gapit-0.6.2 → gapit-0.6.4}/tests/test_typing_stage2.py +0 -0
  461. {gapit-0.6.2 → gapit-0.6.4}/tests/test_vc_serogroup.py +0 -0
  462. {gapit-0.6.2 → gapit-0.6.4}/tests/test_version.py +0 -0
  463. {gapit-0.6.2 → gapit-0.6.4}/tests/test_vp_ok.py +0 -0
  464. {gapit-0.6.2 → gapit-0.6.4}/tests/test_vp_ok_acceptance.py +0 -0
@@ -178,7 +178,7 @@ This is what distinguishes gapit from abricate. Treat it as a public API.
178
178
 
179
179
  - **Formats**: `--format tsv|csv|json|md` (default `tsv` for abricate compatibility).
180
180
  - **JSON**: top-level `"schema": "gapit.report/1"`; schema introspectable via
181
- `gapit schema report | reads | reads2 | summary | list | error | version` (plus
181
+ `gapit schema report | reads | reads2 | summary | cluster | cluster2 | dblist | dboutdated | datadir | error | version` (plus
182
182
  `cluster | cluster2 | features | typing | typing_result | floors`). Keys are snake_case,
183
183
  units explicit (`identity_pct`, `coverage_pct`). Semver the schema; never rename or
184
184
  retype a field in a minor bump.
@@ -220,7 +220,7 @@ This is what distinguishes gapit from abricate. Treat it as a public API.
220
220
  `gapit db path [--json]` introspects it without creating, while `db list`/`setupdb`
221
221
  bootstrap a missing root. See `docs/datadir.md` for the database anatomy, sharing and
222
222
  Docker policy.
223
- - **MCP** `[gapit-extension]`: `gapit mcp` / `gapit-mcp` stdio server exposing nine tools:
223
+ - **MCP** `[gapit-extension]`: `gapit mcp` / `gapit-mcp` stdio server exposing ten tools:
224
224
  read-only `screen` (incl. `aligner minimap2` assembly survey), `screen_reads` (FASTQ via
225
225
  minimap2), `summary`, `schema`, `db_search`, `db_outdated`, plus `db_list` (may create the
226
226
  empty datadir on first use), and the datadir-mutating `db_fetch` (installs databases from
@@ -5,6 +5,38 @@ 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.6.4] - 2026-10-27
9
+
10
+ ### Fixed
11
+
12
+ - **Batch progress vs stdout data.** The progress bar now uses the gside/gmlst
13
+ hand-off: `transient=True`, stdout chunks go through `BatchProgress.write`
14
+ (stop -> `sys.stdout.write` + flush -> start), and stderr notices have a
15
+ `notice()` hand-off. The bar is inactive for a single input. On a shared TTY
16
+ data rows no longer start inside the bar line; stdout bytes are unchanged when
17
+ output is piped. Applies to contig batches and positional FASTQ samples;
18
+ `db fetch` receipts use the same suspend/restore path.
19
+
20
+ ## [0.6.3] - 2026-10-26
21
+
22
+ ### Added
23
+
24
+ - **Complete agent JSON surface.** `gapit.report/1` params now record
25
+ `merge_fragments`; `gapit.dblist/1`, `gapit.dboutdated/1`, and
26
+ `gapit.datadir/1` are registered in `gapit schema`; `gapit.error/1` exposes the
27
+ full machine-readable error-code enum.
28
+ - **MCP `db_path`.** The stdio server exposes the resolved datadir document, and
29
+ `screen` now uses canonical snake_case parameters (`merge_fragments`,
30
+ `min_gene_cov`, `min_gene_id`, `min_cluster_cov`). Legacy camelCase names remain
31
+ accepted as aliases.
32
+
33
+ ### Changed
34
+
35
+ - **0.6.3 is the provenance-clean republish.** 0.6.2 was uploaded manually and
36
+ therefore has no PyPI provenance attestation; 0.6.3 is published by the GitHub
37
+ Actions release workflow through PyPI Trusted Publishing. The historical 0.6.2
38
+ release should be yanked/deleted in the PyPI UI.
39
+
8
40
  ## [0.6.2] - 2026-10-26
9
41
 
10
42
  ### Changed
@@ -7,7 +7,7 @@ authors:
7
7
  repository-code: "https://github.com/indexofire/gapit"
8
8
  url: "https://indexofire.github.io/gapit/"
9
9
  license: MIT
10
- version: "0.6.2"
10
+ version: "0.6.4"
11
11
  date-released: "2026-10-26"
12
12
  keywords:
13
13
  - bioinformatics
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gapit
3
- Version: 0.6.2
3
+ Version: 0.6.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/
@@ -195,7 +195,7 @@ surfaces each provider's content license where one is pinned.
195
195
  gapit ships an MCP (Model Context Protocol) stdio server so agent runtimes can
196
196
  screen assemblies without parsing CLI output: `gapit mcp` or the `gapit-mcp`
197
197
  console script speaks newline-delimited JSON-RPC 2.0 on stdin/stdout (no extra
198
- dependencies — the protocol is hand-rolled). It exposes nine tools:
198
+ dependencies — the protocol is hand-rolled). It exposes ten tools:
199
199
  `screen` (gapit.report/1 by default; `aligner minimap2` for a fast assembly
200
200
  survey), `screen_reads` (FASTQ via minimap2, gapit.reads/1), `summary`
201
201
  (gapit.summary/1), `schema`, `db_list`, plus the database tools `db_fetch`,
@@ -166,7 +166,7 @@ surfaces each provider's content license where one is pinned.
166
166
  gapit ships an MCP (Model Context Protocol) stdio server so agent runtimes can
167
167
  screen assemblies without parsing CLI output: `gapit mcp` or the `gapit-mcp`
168
168
  console script speaks newline-delimited JSON-RPC 2.0 on stdin/stdout (no extra
169
- dependencies — the protocol is hand-rolled). It exposes nine tools:
169
+ dependencies — the protocol is hand-rolled). It exposes ten tools:
170
170
  `screen` (gapit.report/1 by default; `aligner minimap2` for a fast assembly
171
171
  survey), `screen_reads` (FASTQ via minimap2, gapit.reads/1), `summary`
172
172
  (gapit.summary/1), `schema`, `db_list`, plus the database tools `db_fetch`,
@@ -421,8 +421,9 @@ path and is not exercised by the offline suite.
421
421
  table (NAME = the `--db` value, PROVIDER = upstream maintainer org; `installed (N)`
422
422
  iff `<datadir>/<name>/gapit-manifest.json` exists, else `available`),
423
423
  or `gapit.dblist/1` JSON (`providers[]`: `name`, `vendor`, `description`, `dbtype`,
424
- `installed`, `records` omitted when unset). Module-local schema, deliberately NOT in
425
- `gapit schema`. A missing datadir is bootstrapped (created) before listing, so a fresh
424
+ `installed`, `indexed`, `records` omitted when unset). Registered as
425
+ `gapit schema dblist`; `gapit schema dboutdated`/`datadir` expose the sibling
426
+ listings. A missing datadir is bootstrapped (created) before listing, so a fresh
426
427
  installation can inspect the catalog; `setupdb` bootstraps it too.
427
428
  - `gapit db install SOURCE --sha256 HASH --output TARGET` — verified LOCAL-FILE install
428
429
  only (no network, no providers, no archives): streaming SHA256, atomic replace after the
@@ -13,12 +13,13 @@ Version, as one JSON line:
13
13
 
14
14
  ```console
15
15
  $ gapit --version --json
16
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
16
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
17
17
  ```
18
18
 
19
- Output schemas. Twelve documents are introspectable: `report`, `typing_result`, `reads`,
20
- `reads2`, `cluster`, `cluster2`, `summary`, `error`, `version`, plus the database-side
21
- documents `features`, `typing`, and `floors`. Each prints its full JSON Schema:
19
+ Output schemas. Fifteen documents are introspectable: `report`, `typing_result`,
20
+ `reads`, `reads2`, `cluster`, `cluster2`, `summary`, `error`, `version`, `dblist`,
21
+ `dboutdated`, `datadir`, plus the database-side documents `features`, `typing`, and
22
+ `floors`. Each prints its full JSON Schema:
22
23
 
23
24
  ```console
24
25
  $ gapit schema report # gapit.report/1 (contig screening)
@@ -30,6 +31,9 @@ $ gapit schema cluster2 # gapit.cluster/2 (multi-scheme cluster screening
30
31
  $ gapit schema summary # gapit.summary/1
31
32
  $ gapit schema error # gapit.error/1
32
33
  $ gapit schema version # gapit.version/1
34
+ $ gapit schema dblist # gapit.dblist/1 (database catalog)
35
+ $ gapit schema dboutdated # gapit.dboutdated/1 (staleness report)
36
+ $ gapit schema datadir # gapit.datadir/1 (resolved path/source)
33
37
  $ gapit schema features # gapit.features/1 (cluster db feature table)
34
38
  $ gapit schema typing # gapit.typing/2 (db scoring spec; /1 still reads)
35
39
  $ gapit schema floors # gapit.floors/1 (per-gene identity floors, reads mode)
@@ -12,11 +12,12 @@ gapit 生来就是被程序驱动的。每个输出都以机器可读为设计
12
12
 
13
13
  ```console
14
14
  $ gapit --version --json
15
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
15
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
16
16
  ```
17
17
 
18
- 输出 schema。十二个文档可自省:`report`、`typing_result`、`reads`、`reads2`、`cluster`、`cluster2`、
19
- `summary`、`error`、`version`,外加数据库侧文档 `features`、`typing` 和 `floors`。每个都打印完整的
18
+ 输出 schema。十五个文档可自省:`report`、`typing_result`、`reads`、`reads2`、
19
+ `cluster`、`cluster2`、`summary`、`error`、`version`、`dblist`、`dboutdated`、
20
+ `datadir`,外加数据库侧文档 `features`、`typing` 和 `floors`。每个都打印完整的
20
21
  JSON Schema:
21
22
 
22
23
  ```console
@@ -29,6 +30,9 @@ $ gapit schema cluster2 # gapit.cluster/2 (multi-scheme cluster screening
29
30
  $ gapit schema summary # gapit.summary/1
30
31
  $ gapit schema error # gapit.error/1
31
32
  $ gapit schema version # gapit.version/1
33
+ $ gapit schema dblist # gapit.dblist/1(数据库目录)
34
+ $ gapit schema dboutdated # gapit.dboutdated/1(过期报告)
35
+ $ gapit schema datadir # gapit.datadir/1(解析路径/来源)
32
36
  $ gapit schema features # gapit.features/1 (cluster db feature table)
33
37
  $ gapit schema typing # gapit.typing/2 (db scoring spec; /1 still reads)
34
38
  $ gapit schema floors # gapit.floors/1 (per-gene identity floors, reads mode)
@@ -308,8 +308,8 @@ databases; an unparseable `fetched_at` is `MANIFEST_MALFORMED` (exit 5). For bun
308
308
  databases the report is manifest-based as everywhere else: a materialized bundle ages
309
309
  from its materialization time, and no bundled-vs-upstream comparison happens in v1
310
310
  (see [Bundled databases](#bundled-databases-install-time-ready) — future work). For
311
- agents, `--json` emits a `gapit.dboutdated/1` document (a CLI listing like `gapit.dblist/1`, not registered with
312
- `gapit schema`):
311
+ agents, `--json` emits a `gapit.dboutdated/1` document (introspectable via
312
+ `gapit schema dboutdated`):
313
313
 
314
314
  ```console
315
315
  $ gapit db outdated --days 3 --json
@@ -564,7 +564,7 @@ versions. A real one, from the plasmidfinder database:
564
564
  "upstream_version": "",
565
565
  "tool": {
566
566
  "name": "gapit",
567
- "version": "0.6.2"
567
+ "version": "0.6.4"
568
568
  },
569
569
  "makeblastdb_version": "blastn: 2.17.0+",
570
570
  "minimap2_version": "2.31-r1302"
@@ -589,7 +589,8 @@ versions. A real one, from the plasmidfinder database:
589
589
  | `minimap2_version` | string | minimap2 version in the build environment (reads mode indexes in memory; no `.mmi` is built) |
590
590
 
591
591
  `records.jsonl` and the manifest are file contracts. They never appear on stdout and are
592
- not registered with `gapit schema`.
592
+ not registered with `gapit schema` (the stdio/listing documents `dblist`, `dboutdated`,
593
+ and `datadir` are).
593
594
 
594
595
  ### floors.json — per-gene identity floors
595
596
 
@@ -281,8 +281,7 @@ card 2020-01-01T00:00:00Z 2454.55 stale
281
281
  目录;无法解析的 `fetched_at` 是 `MANIFEST_MALFORMED`(退出码 5)。内置数据库的
282
282
  报告与其他库一样以 manifest 为准:已物化的内置库从物化时刻起算年龄,v1 不做
283
283
  内置-vs-上游比较(见"内置数据库(即装即用)"一节 —— 属未来工作)。面向 agent,
284
- `--json` 输出 `gapit.dboutdated/1` 文档(形如 `gapit.dblist/1` 的 CLI 列表,未注册
285
- 到 `gapit schema`):
284
+ `--json` 输出 `gapit.dboutdated/1` 文档(可用 `gapit schema dboutdated` 内省):
286
285
 
287
286
  ```console
288
287
  $ gapit db outdated --days 3 --json
@@ -527,7 +526,7 @@ manifest,来自 plasmidfinder 数据库:
527
526
  "upstream_version": "",
528
527
  "tool": {
529
528
  "name": "gapit",
530
- "version": "0.6.2"
529
+ "version": "0.6.4"
531
530
  },
532
531
  "makeblastdb_version": "blastn: 2.17.0+",
533
532
  "minimap2_version": "2.31-r1302"
@@ -552,7 +551,7 @@ manifest,来自 plasmidfinder 数据库:
552
551
  | `minimap2_version` | string | 构建环境中的 minimap2 版本(reads 模式在内存中建索引,不生成 `.mmi`) |
553
552
 
554
553
  `records.jsonl` 和 manifest 是文件契约。它们从不出现在 stdout,也未注册到
555
- `gapit schema`。
554
+ `gapit schema`(stdio/列表文档 `dblist`、`dboutdated`、`datadir` 已注册)。
556
555
 
557
556
  ### floors.json — 按基因设置一致性下限 {#floorsjson}
558
557
 
@@ -180,7 +180,7 @@ docker run --rm -it \
180
180
  --user "$(id -u):$(id -g)" \
181
181
  -v gapit-data:/data/gapit \
182
182
  -e GAPIT_DATADIR=/data/gapit \
183
- gapit:0.6.2 gapit db list
183
+ gapit:0.6.4 gapit db list
184
184
  ```
185
185
 
186
186
  For CI, mount or cache a workspace directory and pin versions:
@@ -189,7 +189,7 @@ For CI, mount or cache a workspace directory and pin versions:
189
189
  docker run --rm \
190
190
  -v "$PWD/.gapit-db:/data/gapit" \
191
191
  -e GAPIT_DATADIR=/data/gapit \
192
- gapit:0.6.2 gapit screen sample.fna --db ecoli_dec
192
+ gapit:0.6.4 gapit screen sample.fna --db ecoli_dec
193
193
  ```
194
194
 
195
195
  You can bake reference databases into an image for **read-only** screening:
@@ -164,7 +164,7 @@ docker run --rm -it \
164
164
  --user "$(id -u):$(id -g)" \
165
165
  -v gapit-data:/data/gapit \
166
166
  -e GAPIT_DATADIR=/data/gapit \
167
- gapit:0.6.2 gapit db list
167
+ gapit:0.6.4 gapit db list
168
168
  ```
169
169
 
170
170
  CI 中挂载或缓存 workspace 目录,并固定版本:
@@ -173,7 +173,7 @@ CI 中挂载或缓存 workspace 目录,并固定版本:
173
173
  docker run --rm \
174
174
  -v "$PWD/.gapit-db:/data/gapit" \
175
175
  -e GAPIT_DATADIR=/data/gapit \
176
- gapit:0.6.2 gapit screen sample.fna --db ecoli_dec
176
+ gapit:0.6.4 gapit screen sample.fna --db ecoli_dec
177
177
  ```
178
178
 
179
179
  可以为**只读**筛查把参考库烤进镜像:
@@ -48,9 +48,9 @@ gapit --version
48
48
 
49
49
  ```console
50
50
  $ gapit --version
51
- gapit 0.6.2
51
+ gapit 0.6.4
52
52
  $ gapit --version --json
53
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
53
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
54
54
  ```
55
55
 
56
56
  ## Optional gseek engine
@@ -46,9 +46,9 @@ gapit --version
46
46
 
47
47
  ```console
48
48
  $ gapit --version
49
- gapit 0.6.2
49
+ gapit 0.6.4
50
50
  $ gapit --version --json
51
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
51
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
52
52
  ```
53
53
 
54
54
  ## 可选 gseek 引擎
@@ -30,8 +30,8 @@ the module CLI as `{"command": "gapit", "args": ["mcp"]}`.
30
30
 
31
31
  ## Tools
32
32
 
33
- Nine tools: four analysis tools (`screen`, `screen_reads`, `summary`, `schema`)
34
- and five database tools (`db_list`, `db_fetch`, `db_build`, `db_search`,
33
+ Ten tools: four analysis tools (`screen`, `screen_reads`, `summary`, `schema`)
34
+ and six database tools (`db_list`, `db_path`, `db_fetch`, `db_build`, `db_search`,
35
35
  `db_outdated`) that mirror `gapit db ...` exactly. `db_list`/`db_search`/
36
36
  `db_outdated` are read-only (`db_list` may create an empty datadir on first
37
37
  use); `db_fetch`/`db_build` mutate the datadir. Argument lists below are
@@ -39,11 +39,12 @@ transcribed from the live `tools/list` `inputSchema` objects.
39
39
 
40
40
  | Tool | Arguments | Returns |
41
41
  |---|---|---|
42
- | `screen` | `files` (array of strings, required), `db` (string, required — no default), `minid` (number), `mincov` (number), `format` (string: `json` \| `tsv` \| `csv` \| `md`, default `json`), `aligner` (string: `blastn` \| `minimap2`, default `blastn`), `mergeFragments` (boolean, default `false`; blastn only — cross-contig fragment merging), `min_breadth` (number 0–100, default `90`; minimap2 only), `min_identity` (number 0–100, default `0`; minimap2 only), `min_mapq` (integer ≥ 0, default `0`; minimap2 only), `all_genes` (boolean; minimap2 only), `minGeneCov` (number 0–100, default `90`; cluster dbs only), `minGeneId` (number 0–100, default `90`; cluster dbs only), `minClusterCov` (number 0–100, default `96`; cluster dbs only), `datadir` (string) | Report text: `gapit.report/1` JSON by default, TSV/CSV/Markdown per `format`; `aligner minimap2` runs the reads engine and emits `gapit.reads/1`. A cluster-kind `db` emits `gapit.cluster/1`: best-locus call, per-gene verdicts, and — when the database carries a single-scheme `typing.json` — the phenotype call with its `phenotype_detail` score breakdown; a multi-scheme `typing.json` emits `gapit.cluster/2` with a `phenotypes` map of every scheme's call |
42
+ | `screen` | `files` (array of strings, required), `db` (string, required — no default), `minid` (number), `mincov` (number), `format` (string: `json` \| `tsv` \| `csv` \| `md`, default `json`), `aligner` (string: `blastn` \| `minimap2`, default `blastn`), `merge_fragments` (boolean, default `false`; blastn only — cross-contig fragment merging), `min_breadth` (number 0–100, default `90`; minimap2 only), `min_identity` (number 0–100, default `0`; minimap2 only), `min_mapq` (integer ≥ 0, default `0`; minimap2 only), `all_genes` (boolean; minimap2 only), `min_gene_cov` (number 0–100, default `90`; cluster dbs only), `min_gene_id` (number 0–100, default `90`; cluster dbs only), `min_cluster_cov` (number 0–100, default `96`; cluster dbs only), `datadir` (string) | Report text: `gapit.report/1` JSON by default, TSV/CSV/Markdown per `format`; `aligner minimap2` runs the reads engine and emits `gapit.reads/1`. A cluster-kind `db` emits `gapit.cluster/1`: best-locus call, per-gene verdicts, and — when the database carries a single-scheme `typing.json` — the phenotype call with its `phenotype_detail` score breakdown; a multi-scheme `typing.json` emits `gapit.cluster/2` with a `phenotypes` map of every scheme's call |
43
43
  | `screen_reads` | `r1` (array of strings, required — one path per lane), `r2` (array of strings, same count as `r1`), `read_type` (string: `sr` \| `map-ont` \| `map-hifi`, default `sr`), `min_breadth` (number 0–100, default `90`), `min_identity` (number 0–100, default `0`), `min_mapq` (integer ≥ 0, default `0`), `all_genes` (boolean), `format` (string: `json` \| `tsv` \| `csv` \| `md`, default `json`), `db` (string, required — no default), `datadir` (string) | `gapit.reads/1` JSON by default or TSV/CSV/Markdown per `format`; `min_identity`/`min_mapq` > 0 switches to `gapit.reads/2` |
44
44
  | `summary` | `files` (array of report table paths, required), `identity` (boolean), `nopath` (boolean) | `gapit.summary/1` JSON |
45
45
  | `schema` | `name` (string, required, one of `cluster`, `error`, `features`, `floors`, `reads`, `reads2`, `report`, `summary`, `typing`, `typing_result`, `version`) | The JSON Schema of that output document |
46
- | `db_list` | `datadir` (string) | `gapit.dblist/1`: database names, install state, record counts |
46
+ | `db_list` | `datadir` (string) | `gapit.dblist/1`: database names, install state, record counts, indexed flag |
47
+ | `db_path` | `datadir` (string) | `gapit.datadir/1`: resolved datadir, existence, and source |
47
48
  | `db_fetch` | `name` (string, required — a database NAME, or `all` for the card+vfdb default set), `datadir` (string), `force` (boolean, default `false`) | One JSON receipt line per database (`db`, `records`, `dbtype`, `destination`). Every database downloads from its upstream provider, so installs need network and can take minutes |
48
49
  | `db_build` | `name` (string, required), `fasta` (string, required — a LOCAL filesystem path), `tsv` (string), `dbtype` (string: `nucl` \| `prot`), `description` (string), `kind` (string: `gene` \| `cluster`), `typing` (string), `floors` (string), `datadir` (string), `force` (boolean, default `false`) | One JSON receipt line (`db`, `records`, `dbtype`, `destination`) |
49
50
  | `db_search` | `term` (string, required), `db` (string), `field` (string: `gene` \| `accession` \| `function` \| `product` \| `any`, default `any`), `exact` (boolean, default `false`), `limit` (integer ≥ 0, default `100`; `0` = unlimited), `datadir` (string) | TSV hit rows with columns `DB`, `GENE`, `ACCESSION`, `FUNCTION`, `PRODUCT`, `LENGTH` |
@@ -57,6 +58,9 @@ reads-engine parameters); `minid`/`mincov` are ignored by `minimap2`.
57
58
 
58
59
  Notes:
59
60
 
61
+ - Screen parameters use snake_case (`merge_fragments`, `min_gene_cov`,
62
+ `min_gene_id`, `min_cluster_cov`). The pre-0.6.4 camelCase spellings are still
63
+ accepted as aliases for compatibility, but new clients should use snake_case.
60
64
  - File paths resolve relative to the server's working directory; absolute
61
65
  paths are safest.
62
66
  - The datadir comes from `--datadir` (where available), then `$GAPIT_DATADIR`, then
@@ -98,7 +102,7 @@ EOF
98
102
  Response line 1, verbatim:
99
103
 
100
104
  ```text
101
- {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.6.2"}}}
105
+ {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.6.4"}}}
102
106
  ```
103
107
 
104
108
  Response line 2 (real output, elided in the middle; each tool carries its full
@@ -121,7 +125,7 @@ the same run):
121
125
  ```json
122
126
  {
123
127
  "schema": "gapit.report/1",
124
- "tool": {"name": "gapit", "version": "0.6.2"},
128
+ "tool": {"name": "gapit", "version": "0.6.4"},
125
129
  "created_at": "2026-09-19T01:15:44Z",
126
130
  "params": {"db": "tinyamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
127
131
  "files": [
@@ -177,7 +181,7 @@ the same run):
177
181
  ```json
178
182
  {
179
183
  "schema": "gapit.reads/1",
180
- "tool": {"name": "gapit", "version": "0.6.2"},
184
+ "tool": {"name": "gapit", "version": "0.6.4"},
181
185
  "created_at": "2026-09-22T00:07:35Z",
182
186
  "params": {
183
187
  "db": "tinyreads",
@@ -252,7 +256,7 @@ hit is the gene the agent just built the database from (real output):
252
256
  ```json
253
257
  {
254
258
  "schema": "gapit.report/1",
255
- "tool": {"name": "gapit", "version": "0.6.2"},
259
+ "tool": {"name": "gapit", "version": "0.6.4"},
256
260
  "created_at": "2026-09-20T13:38:39Z",
257
261
  "params": {"db": "myamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
258
262
  "files": [
@@ -28,8 +28,8 @@ shell 外调或解析终端输出。协议是手写的换行分隔 JSON-RPC 2.0
28
28
 
29
29
  ## 工具
30
30
 
31
- 九个工具:四个分析工具(`screen`、`screen_reads`、`summary`、`schema`)和五个
32
- 数据库工具(`db_list`、`db_fetch`、`db_build`、`db_search`、`db_outdated`),与
31
+ 十个工具:四个分析工具(`screen`、`screen_reads`、`summary`、`schema`)和六个
32
+ 数据库工具(`db_list`、`db_path`、`db_fetch`、`db_build`、`db_search`、`db_outdated`),与
33
33
  `gapit db ...` 完全对应。`db_list`/`db_search`/`db_outdated` 是只读的
34
34
  (`db_list` 首次使用可能创建空 datadir);`db_fetch`/`db_build` 会修改 datadir。
35
35
  下表参数列表转写自线上的
@@ -37,11 +37,12 @@ shell 外调或解析终端输出。协议是手写的换行分隔 JSON-RPC 2.0
37
37
 
38
38
  | 工具 | 参数 | 返回 |
39
39
  |---|---|---|
40
- | `screen` | `files`(字符串数组,必填)、`db`(string,必填 —— 无默认值)、`minid`(number)、`mincov`(number)、`format`(string:`json` \| `tsv` \| `csv` \| `md`,默认 `json`)、`aligner`(string:`blastn` \| `minimap2`,默认 `blastn`)、`mergeFragments`(boolean,默认 `false`;仅 blastn:跨 contig 片段合并)、`min_breadth`(number 0-100,默认 `90`;仅 minimap2)、`min_identity`(number 0-100,默认 `0`;仅 minimap2)、`min_mapq`(integer ≥ 0,默认 `0`;仅 minimap2)、`all_genes`(boolean;仅 minimap2)、`minGeneCov`(number 0-100,默认 `90`;仅 cluster 数据库)、`minGeneId`(number 0-100,默认 `90`;仅 cluster 数据库)、`minClusterCov`(number 0-100,默认 `96`;仅 cluster 数据库)、`datadir`(string) | 报告文本:默认 `gapit.report/1` JSON,按 `format` 也可为 TSV、CSV 或 Markdown;`aligner minimap2` 跑 reads 引擎并输出 `gapit.reads/1`。cluster 类型的 `db` 输出 `gapit.cluster/1`:最佳位点判定、逐基因判定,数据库携带单 scheme `typing.json` 时还有带 `phenotype_detail` 分数分解的表型判定;多 scheme `typing.json` 则输出 `gapit.cluster/2`,携带每个 scheme 判定的 `phenotypes` 映射 |
40
+ | `screen` | `files`(字符串数组,必填)、`db`(string,必填 —— 无默认值)、`minid`(number)、`mincov`(number)、`format`(string:`json` \| `tsv` \| `csv` \| `md`,默认 `json`)、`aligner`(string:`blastn` \| `minimap2`,默认 `blastn`)、`merge_fragments`(boolean,默认 `false`;仅 blastn:跨 contig 片段合并)、`min_breadth`(number 0-100,默认 `90`;仅 minimap2)、`min_identity`(number 0-100,默认 `0`;仅 minimap2)、`min_mapq`(integer ≥ 0,默认 `0`;仅 minimap2)、`all_genes`(boolean;仅 minimap2)、`min_gene_cov`(number 0-100,默认 `90`;仅 cluster 数据库)、`min_gene_id`(number 0-100,默认 `90`;仅 cluster 数据库)、`min_cluster_cov`(number 0-100,默认 `96`;仅 cluster 数据库)、`datadir`(string) | 报告文本:默认 `gapit.report/1` JSON,按 `format` 也可为 TSV、CSV 或 Markdown;`aligner minimap2` 跑 reads 引擎并输出 `gapit.reads/1`。cluster 类型的 `db` 输出 `gapit.cluster/1`:最佳位点判定、逐基因判定,数据库携带单 scheme `typing.json` 时还有带 `phenotype_detail` 分数分解的表型判定;多 scheme `typing.json` 则输出 `gapit.cluster/2`,携带每个 scheme 判定的 `phenotypes` 映射 |
41
41
  | `screen_reads` | `r1`(字符串数组,必填,每条 lane 一个路径)、`r2`(字符串数组,数量与 `r1` 相同)、`read_type`(string:`sr` \| `map-ont` \| `map-hifi`,默认 `sr`)、`min_breadth`(number 0-100,默认 `90`)、`min_identity`(number 0-100,默认 `0`)、`min_mapq`(integer ≥ 0,默认 `0`)、`all_genes`(boolean)、`format`(string:`json` \| `tsv` \| `csv` \| `md`,默认 `json`)、`db`(string,必填 —— 无默认值)、`datadir`(string) | 默认 `gapit.reads/1` JSON,按 `format` 可为 TSV、CSV 或 Markdown;`min_identity`/`min_mapq` > 0 切换为 `gapit.reads/2` |
42
42
  | `summary` | `files`(报告表路径数组,必填)、`identity`(boolean)、`nopath`(boolean) | `gapit.summary/1` JSON |
43
43
  | `schema` | `name`(string,必填,取值 `cluster`、`error`、`features`、`floors`、`reads`、`reads2`、`report`、`summary`、`typing`、`typing_result`、`version` 之一) | 该输出文档的 JSON Schema |
44
- | `db_list` | `datadir`(string) | `gapit.dblist/1`:数据库名、安装状态、记录数 |
44
+ | `db_list` | `datadir`(string) | `gapit.dblist/1`:数据库名、安装状态、记录数、索引状态 |
45
+ | `db_path` | `datadir`(string) | `gapit.datadir/1`:解析后的数据目录、是否存在、来源 |
45
46
  | `db_fetch` | `name`(string,必填——数据库名,或 `all` 表示 card+vfdb 默认集合)、`datadir`(string)、`force`(boolean,默认 `false`) | 每个数据库一行 JSON 回执(`db`、`records`、`dbtype`、`destination`)。每个数据库都从其上游提供商下载,安装需要网络且可能耗时数分钟 |
46
47
  | `db_build` | `name`(string,必填)、`fasta`(string,必填,本地文件系统路径)、`tsv`(string)、`dbtype`(string:`nucl` \| `prot`)、`description`(string)、`kind`(string:`gene` \| `cluster`)、`typing`(string)、`floors`(string)、`datadir`(string)、`force`(boolean,默认 `false`) | 一行 JSON 回执(`db`、`records`、`dbtype`、`destination`) |
47
48
  | `db_search` | `term`(string,必填)、`db`(string)、`field`(string:`gene` \| `accession` \| `function` \| `product` \| `any`,默认 `any`)、`exact`(boolean,默认 `false`)、`limit`(integer ≥ 0,默认 `100`;`0` = 不限)、`datadir`(string) | TSV 命中行,列为 `DB`、`GENE`、`ACCESSION`、`FUNCTION`、`PRODUCT`、`LENGTH` |
@@ -54,6 +55,9 @@ shell 外调或解析终端输出。协议是手写的换行分隔 JSON-RPC 2.0
54
55
 
55
56
  注意事项:
56
57
 
58
+ - screen 参数使用 snake_case(`merge_fragments`、`min_gene_cov`、`min_gene_id`、
59
+ `min_cluster_cov`);0.6.4 之前的 camelCase 拼写仍作为兼容别名接受,新客户端
60
+ 应使用 snake_case。
57
61
  - 文件路径相对服务器的工作目录解析;绝对路径最稳妥。
58
62
  - 数据目录来自 `--datadir`(可用时),然后 `$GAPIT_DATADIR`,然后
59
63
  `$XDG_DATA_HOME/gapit/db`,最后 `~/.local/share/gapit/db`(见 `./datadir.md`)。
@@ -94,7 +98,7 @@ EOF
94
98
  响应第 1 行,原样:
95
99
 
96
100
  ```text
97
- {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.6.2"}}}
101
+ {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.6.4"}}}
98
102
  ```
99
103
 
100
104
  响应第 2 行(真实输出,中段省略;每个工具携带完整的 `inputSchema`):
@@ -115,7 +119,7 @@ EOF
115
119
  ```json
116
120
  {
117
121
  "schema": "gapit.report/1",
118
- "tool": {"name": "gapit", "version": "0.6.2"},
122
+ "tool": {"name": "gapit", "version": "0.6.4"},
119
123
  "created_at": "2026-09-19T01:15:44Z",
120
124
  "params": {"db": "tinyamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
121
125
  "files": [
@@ -169,7 +173,7 @@ EOF
169
173
  ```json
170
174
  {
171
175
  "schema": "gapit.reads/1",
172
- "tool": {"name": "gapit", "version": "0.6.2"},
176
+ "tool": {"name": "gapit", "version": "0.6.4"},
173
177
  "created_at": "2026-09-22T00:07:35Z",
174
178
  "params": {
175
179
  "db": "tinyreads",
@@ -242,7 +246,7 @@ export GAPIT_DATADIR=/tmp/gapit-mcp-demo/datadir
242
246
  ```json
243
247
  {
244
248
  "schema": "gapit.report/1",
245
- "tool": {"name": "gapit", "version": "0.6.2"},
249
+ "tool": {"name": "gapit", "version": "0.6.4"},
246
250
  "created_at": "2026-09-20T13:38:39Z",
247
251
  "params": {"db": "myamr", "minid": 80.0, "mincov": 80.0, "threads": 1},
248
252
  "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.6.2"
144
+ "version": "0.6.4"
145
145
  },
146
146
  "created_at": "2026-09-19T01:12:20Z",
147
147
  "params": {
@@ -186,6 +186,7 @@ Real document, same run as the TSV above:
186
186
  | `params.minid` | number | Minimum identity threshold |
187
187
  | `params.mincov` | number | Minimum coverage threshold |
188
188
  | `params.threads` | integer | BLAST thread count |
189
+ | `params.merge_fragments` | boolean | Present (true) only for `--merge-fragments` runs |
189
190
  | `files` | array | One entry per input file, zero-hit files included |
190
191
  | `files[].file` | string | Input path as given |
191
192
  | `files[].hits` | array | Surviving hits, empty list when none |
@@ -232,7 +233,7 @@ row by `(%IDENTITY, %COVERAGE)`. Real document (trimmed):
232
233
  ```json
233
234
  {
234
235
  "schema": "gapit.typing_result/1",
235
- "tool": {"name": "gapit", "version": "0.6.2"},
236
+ "tool": {"name": "gapit", "version": "0.6.4"},
236
237
  "created_at": "2026-10-02T10:04:55Z",
237
238
  "source": ["dec.tsv"],
238
239
  "db": "ecoli_dec",
@@ -419,7 +420,7 @@ summarizing two report files, one with a `tetA` hit and one with none:
419
420
  "schema": "gapit.summary/1",
420
421
  "tool": {
421
422
  "name": "gapit",
422
- "version": "0.6.2"
423
+ "version": "0.6.4"
423
424
  },
424
425
  "created_at": "2026-09-19T01:11:09Z",
425
426
  "params": {
@@ -495,7 +496,7 @@ Any failure prints one line of JSON to stderr:
495
496
  | Field | Type | Meaning |
496
497
  |---|---|---|
497
498
  | `schema` | string | Always `gapit.error/1` |
498
- | `code` | string | Machine-stable error code, SCREAMING_SNAKE_CASE |
499
+ | `code` | string | Machine-stable error code, SCREAMING_SNAKE_CASE; the enum is exposed by `gapit schema error` |
499
500
  | `message` | string | Human-readable description |
500
501
  | `context` | object | String-valued details (file paths, digests, db names) |
501
502
 
@@ -543,7 +544,7 @@ An agent can discover the whole contract from the binary alone.
543
544
 
544
545
  ```console
545
546
  $ gapit --version --json
546
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
547
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
547
548
  ```
548
549
 
549
550
  `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.6.2"
133
+ "version": "0.6.4"
134
134
  },
135
135
  "created_at": "2026-09-19T01:12:20Z",
136
136
  "params": {
@@ -175,6 +175,7 @@ non-DEC。零命中文件不产生筛查行,因此不会出现在判定输出
175
175
  | `params.minid` | number | 最小一致性阈值 |
176
176
  | `params.mincov` | number | 最小覆盖度阈值 |
177
177
  | `params.threads` | integer | BLAST 线程数 |
178
+ | `params.merge_fragments` | boolean | 仅 `--merge-fragments` 运行时出现(true) |
178
179
  | `files` | array | 每个输入文件一项,含零命中文件 |
179
180
  | `files[].file` | string | 按原样的输入路径 |
180
181
  | `files[].hits` | array | 幸存命中,无命中时为空列表 |
@@ -219,7 +220,7 @@ non-DEC。零命中文件不产生筛查行,因此不会出现在判定输出
219
220
  ```json
220
221
  {
221
222
  "schema": "gapit.typing_result/1",
222
- "tool": {"name": "gapit", "version": "0.6.2"},
223
+ "tool": {"name": "gapit", "version": "0.6.4"},
223
224
  "created_at": "2026-10-02T10:04:55Z",
224
225
  "source": ["dec.tsv"],
225
226
  "db": "ecoli_dec",
@@ -402,7 +403,7 @@ typing 的数据库是同一个表头去掉 `PHENOTYPE`。没有位点判定的
402
403
  "schema": "gapit.summary/1",
403
404
  "tool": {
404
405
  "name": "gapit",
405
- "version": "0.6.2"
406
+ "version": "0.6.4"
406
407
  },
407
408
  "created_at": "2026-09-19T01:11:09Z",
408
409
  "params": {
@@ -477,7 +478,7 @@ frontmatter 在第一个文件之前即可知,因此 md 与 tsv 行一样逐
477
478
  | 字段 | 类型 | 含义 |
478
479
  |---|---|---|
479
480
  | `schema` | string | 恒为 `gapit.error/1` |
480
- | `code` | string | 机器稳定的错误码,SCREAMING_SNAKE_CASE |
481
+ | `code` | string | 机器稳定的错误码,SCREAMING_SNAKE_CASE;枚举由 `gapit schema error` 暴露 |
481
482
  | `message` | string | 人类可读的描述 |
482
483
  | `context` | object | 字符串值的细节(文件路径、摘要、数据库名) |
483
484
 
@@ -525,7 +526,7 @@ agent 只凭二进制就能发现整个契约。
525
526
 
526
527
  ```console
527
528
  $ gapit --version --json
528
- {"schema":"gapit.version/1","name":"gapit","version":"0.6.2"}
529
+ {"schema":"gapit.version/1","name":"gapit","version":"0.6.4"}
529
530
  ```
530
531
 
531
532
  `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.6.2"
97
+ "version": "0.6.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.6.2"
92
+ "version": "0.6.4"
93
93
  },
94
94
  "created_at": "2026-09-19T01:11:06Z",
95
95
  "params": {
@@ -123,7 +123,7 @@ table, one chunk for the one sample).
123
123
  ## Options
124
124
 
125
125
  Reads mode runs through the same `gapit screen` command; these are the flags that apply
126
- (transcribed from `gapit screen --help`, gapit 0.6.2). Contig-mode flags not listed here
126
+ (transcribed from `gapit screen --help`, gapit 0.6.4). Contig-mode flags not listed here
127
127
  (`--minid`, `--mincov`, `--fofn`, `--noheader`, `--nopath`) do not apply; `--jobs` applies
128
128
  to the wildcard path only.
129
129
 
@@ -337,7 +337,7 @@ The short-read fixture behaves the same with one calibration: `sr` soft-clipping
337
337
  $ gapit screen --r1 ont_homologs.fq --db homologs --read-type map-ont --min-identity 95 --format md --quiet
338
338
  ---
339
339
  schema: gapit.reads/2
340
- tool: gapit 0.6.2
340
+ tool: gapit 0.6.4
341
341
  created_at: 2026-09-20T14:23:33Z
342
342
  db: homologs
343
343
  read_type: map-ont
@@ -433,7 +433,7 @@ $ gapit screen --r1 tetx_full.fq --db tinyreads --format json
433
433
  "schema": "gapit.reads/1",
434
434
  "tool": {
435
435
  "name": "gapit",
436
- "version": "0.6.2"
436
+ "version": "0.6.4"
437
437
  },
438
438
  "created_at": "2026-09-19T01:12:25Z",
439
439
  "params": {
@@ -528,7 +528,7 @@ $ gapit screen --r1 tetx_lane1.fq,tetx_lane2.fq --db tinyreads --format json --q
528
528
  $ gapit screen --r1 tetx_full.fq --db tinyreads --format md
529
529
  ---
530
530
  schema: gapit.reads/1
531
- tool: gapit 0.6.2
531
+ tool: gapit 0.6.4
532
532
  created_at: 2026-09-19T01:12:25Z
533
533
  db: tinyreads
534
534
  read_type: sr
@@ -630,7 +630,7 @@ Detected 2 present genes in /tmp/gapit-demo/assembly.fa
630
630
  "schema": "gapit.reads/1",
631
631
  "tool": {
632
632
  "name": "gapit",
633
- "version": "0.6.2"
633
+ "version": "0.6.4"
634
634
  },
635
635
  "created_at": "2026-09-19T14:23:00Z",
636
636
  "params": {
@@ -689,7 +689,7 @@ cost of allele-level precision. That trade suggests a two-stage workflow over ma
689
689
  pipeline, which applies the identity and coverage floors at abricate parity.
690
690
 
691
691
  Real numbers, one K. pneumoniae RefSeq assembly (GCF_000240185.1, 5.3 Mb, `--db ncbi`,
692
- single-threaded, gapit 0.6.2):
692
+ single-threaded, gapit 0.6.4):
693
693
 
694
694
  ```console
695
695
  $ # Stage 1: survey, ~0.9 s