gapit 0.2.2__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gapit-0.2.2 → gapit-0.3.0}/AGENTS.md +2 -2
- {gapit-0.2.2 → gapit-0.3.0}/CHANGELOG.md +8 -0
- {gapit-0.2.2 → gapit-0.3.0}/PKG-INFO +10 -4
- {gapit-0.2.2 → gapit-0.3.0}/PLAN.md +9 -2
- {gapit-0.2.2 → gapit-0.3.0}/README.md +9 -3
- {gapit-0.2.2 → gapit-0.3.0}/docs/agents.md +21 -12
- {gapit-0.2.2 → gapit-0.3.0}/docs/custom-db.md +3 -3
- {gapit-0.2.2 → gapit-0.3.0}/docs/databases.md +5 -3
- {gapit-0.2.2 → gapit-0.3.0}/docs/index.md +2 -3
- {gapit-0.2.2 → gapit-0.3.0}/docs/installation.md +21 -7
- {gapit-0.2.2 → gapit-0.3.0}/docs/mcp.md +5 -5
- {gapit-0.2.2 → gapit-0.3.0}/docs/outputs.md +4 -35
- {gapit-0.2.2 → gapit-0.3.0}/docs/quickstart.md +11 -5
- {gapit-0.2.2 → gapit-0.3.0}/docs/reads.md +6 -6
- {gapit-0.2.2 → gapit-0.3.0}/docs/screen.md +2 -2
- {gapit-0.2.2 → gapit-0.3.0}/docs/summary.md +2 -2
- {gapit-0.2.2 → gapit-0.3.0}/pixi.lock +2 -2
- {gapit-0.2.2 → gapit-0.3.0}/pixi.toml +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/pyproject.toml +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/recipe/meta.yaml +2 -2
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/__init__.py +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cli.py +2 -35
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/json.py +1 -19
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/schemas.py +0 -2
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/reads_tinyamr.json +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/reads_tinyamr.md +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/screen_multi.json +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/screen_multi.md +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/summary_multi.json +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/summary_multi.md +1 -1
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_schema.py +5 -4
- gapit-0.3.0/tests/test_cli_setupdb.py +92 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_error_envelope.py +2 -2
- gapit-0.2.2/tests/test_cli_list.py +0 -153
- {gapit-0.2.2 → gapit-0.3.0}/.gitattributes +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/.github/workflows/ci.yml +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/.github/workflows/docs.yml +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/.github/workflows/release.yml +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/.github/workflows/snapshot-refresh.yml +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/.gitignore +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/LICENSE +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/SPEC.md +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/docs/faq.md +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/mkdocs.yml +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/blast.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_db.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_db_build.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_db_install.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_db_outdated.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_db_search.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_screen.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/cmd_summary.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/config.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/data/snapshots/card.tar.gz +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/data/snapshots/vfdb.tar.gz +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/db.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/db_build_ops.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/db_ops.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/db_query_ops.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/dbbuild.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/dbcodec.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/dispatch.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/errors.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/fasta.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/__init__.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/md.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/summary.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/formats/tsv.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/hits.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/mcp.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/mcp_schemas.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/mcp_tools.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/minimap.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/minimap2_run.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/paf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/proctools.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/__init__.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/argannot.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/bacmet2.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/card.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/common.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/ecoh.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/ecoli_vf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/megares.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/ncbi.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/plasmidfinder.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/resfinder.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/snapshots.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/upec_expec_vf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/vfdb.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/providers/victors.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/py.typed +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/reads.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/records.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/report.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/screening.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/screening_reads.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/seqconvert.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/src/gapit/summary.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/contigs/full.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/contigs/gap.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/contigs/none.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/contigs/partial.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/contigs/sort.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.embl +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.embl.bz2 +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.fa.gz +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.gbk +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/convert/sample.gbk.gz +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/db/tinyamr/sequences +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/argannot/ARG-ANNOT_NT_V6_July2019.txt +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/bacmet2/BacMet2_EXP_database.fasta +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/card/card.json +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/ecoh/EcOH.fasta +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/ecoli_vf/repaired_ecoli_vfs_shortnames.ffn +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/megares/megares_drugs_demo.fasta +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/ncbi/AMR_CDS.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/ncbi/ReferenceGeneCatalog.txt +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/plasmidfinder/plasmids_a.fsa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/plasmidfinder/plasmids_b.fsa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/resfinder/aminoglycoside.fsa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/resfinder/beta-lactam.fsa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/resfinder/phenotypes.txt +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/upec_expec_vf/UPEC_ExPEC_VF.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/vfdb/VFDB_setA_nt.fas +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/victors/gen_downloads.php +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/providers/victors/gen_downloads_protein.php +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/bla_partial.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/junk.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/suly_partial.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_R1.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_R2.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_full.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_full.fq.gz +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_lane1.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_lane2.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_pe1_R1.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_pe1_R2.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_pe2_R1.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads/tetx_pe2_R2.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads2/ont_homologs.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads2/sr_homologs.fq +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads2_db/homologs/sequences +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/reads_db/tinyreads/sequences +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/empty.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/multi_sample.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/sample_a.csv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/sample_a.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/sample_b.csv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/data/summary/sample_b.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/summary_dutch.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/summary_multi.csv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/summary_multi.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/tinyamr_multi_nopath.csv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/golden/tinyamr_multi_nopath.tsv +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/corpus/01_exact_and_junk.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/corpus/02_mutated.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/corpus/03_truncated.fa +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/make_corpus.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/run_parity.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/parity/run_summary_parity.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_blast_parse.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_blast_pipeline.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_aligner.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_completion.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_db_build.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_db_fetch.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_db_query.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_reads.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_reads2.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_screen.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_screen_jobs.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_cli_summary.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_config.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_db.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_db_fetch.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_db_headers.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_dbbuild.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_dbcodec.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_fasta.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_gapit_db_e2e.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_hits.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_json_format.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_mcp.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_mcp_db_tools.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_mcp_protocol.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_mcp_reads.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_md_format.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_minimap.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_mol_type.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_oversubscription.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_paf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_paf_identity.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_argannot.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_bacmet2.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_card.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_ecoh.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_ecoli_vf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_megares.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_ncbi.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_plasmidfinder.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_resfinder.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_upec_expec_vf.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_vfdb.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_provider_victors.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_providers_common.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads2_homologs.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads2_model.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads_aggregate.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads_integration.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads_interval_union.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_reads_streaming.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_records.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_report.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_screen_integration.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_screening_reads_unit.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_seqconvert.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_seqconvert_differential.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_snapshots.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_summary.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_summary_formats.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_tsv.py +0 -0
- {gapit-0.2.2 → gapit-0.3.0}/tests/test_version.py +0 -0
|
@@ -60,7 +60,7 @@ gapit/
|
|
|
60
60
|
│ └── ci.yml # gates matrix 3.11/3.13/3.14 + parity job
|
|
61
61
|
├── src/gapit/
|
|
62
62
|
│ ├── __init__.py
|
|
63
|
-
│ ├── cli.py # typer entrypoint: screen / summary / db /
|
|
63
|
+
│ ├── cli.py # typer entrypoint: screen / summary / db / setupdb / schema / mcp
|
|
64
64
|
│ ├── config.py # datadir resolution, defaults, env vars
|
|
65
65
|
│ ├── dispatch.py # shared CLI dispatch (error envelope → exit codes) + --datadir option
|
|
66
66
|
│ ├── proctools.py # external-tool plumbing: argv subprocess runner + stderr notes
|
|
@@ -149,7 +149,7 @@ This is what distinguishes gapit from abricate. Treat it as a public API.
|
|
|
149
149
|
`db_fetch` (installs provider databases; may download) and `db_build` (writes a custom db);
|
|
150
150
|
tool failures carry the `gapit.error/1` envelope.
|
|
151
151
|
- **stdout purity**: data on stdout, diagnostics on stderr, always. `--quiet` only affects stderr.
|
|
152
|
-
- **Self-description**: `gapit --version --json`, `gapit list --json`, `gapit schema` — an agent
|
|
152
|
+
- **Self-description**: `gapit --version --json`, `gapit db list --json`, `gapit schema` — an agent
|
|
153
153
|
must be able to discover everything without reading docs.
|
|
154
154
|
|
|
155
155
|
## 6. Testing strategy
|
|
@@ -5,6 +5,14 @@ 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.3.0] - 2026-09-28
|
|
9
|
+
|
|
10
|
+
### Removed
|
|
11
|
+
|
|
12
|
+
- `gapit list` command and the `gapit.list/1` schema (breaking; rightsholder decision to
|
|
13
|
+
drop abricate `--list` strict parity for this surface). `gapit db list` / `gapit.dblist/1`
|
|
14
|
+
is the single listing surface; `gapit schema` now introspects six documents.
|
|
15
|
+
|
|
8
16
|
## [0.2.2] - 2026-09-24
|
|
9
17
|
|
|
10
18
|
### Security
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gapit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Mass screening of contigs for antimicrobial resistance and virulence 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/
|
|
@@ -49,8 +49,15 @@ byte-compatible TSV plus first-class JSON and Markdown.
|
|
|
49
49
|
|
|
50
50
|
## Install
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
(
|
|
52
|
+
From PyPI (external BLAST+ and minimap2 binaries required on PATH — see
|
|
53
|
+
[docs/installation.md](docs/installation.md)):
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install gapit
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or from a git clone with [pixi](https://pixi.sh), which manages the environment including
|
|
60
|
+
the external binaries:
|
|
54
61
|
|
|
55
62
|
```bash
|
|
56
63
|
git clone https://github.com/indexofire/gapit.git
|
|
@@ -87,7 +94,6 @@ gapit db search "tet(M)" # look up genes across every installed database
|
|
|
87
94
|
gapit db build mydb my_genes.fa --tsv my_meta.tsv # custom db from any FASTA
|
|
88
95
|
|
|
89
96
|
# Introspection
|
|
90
|
-
gapit list # installed databases (abricate --list compatible)
|
|
91
97
|
gapit schema report # JSON Schema of gapit.report/1
|
|
92
98
|
```
|
|
93
99
|
|
|
@@ -142,8 +142,15 @@ consumes abricate-built datadirs.
|
|
|
142
142
|
`run_screen_reads`/`run_screen_assemblies` use-cases. Additive `gapit.mcp` contract
|
|
143
143
|
(9 tools; the other 8 entries byte-identical), no output-schema version bump. See
|
|
144
144
|
docs/mcp.md.
|
|
145
|
-
- **
|
|
146
|
-
|
|
145
|
+
- **PyPI published (first release 0.2.2, 2026-09-27):** `pip install gapit`; passwordless
|
|
146
|
+
releases via `.github/workflows/release.yml` (OIDC trusted publishing, `workflow_dispatch`
|
|
147
|
+
or `v*` tag). **Deferred by decision (2026-09-18, still open):** bioconda submission —
|
|
148
|
+
recipe remains in-repo; sha256 placeholder to be replaced at submission time.
|
|
149
|
+
- **Contract change (2026-09-27, rightsholder decision):** `gapit list` and its
|
|
150
|
+
`gapit.list/1` document removed; `gapit db list` (`gapit.dblist/1`) is the single
|
|
151
|
+
listing surface and abricate `--list` byte-parity is intentionally dropped for it.
|
|
152
|
+
Schema registry is now six documents (report, reads, reads2, summary, error, version).
|
|
153
|
+
Breaking; recorded under \[Unreleased\] in CHANGELOG.md for the next minor bump.
|
|
147
154
|
|
|
148
155
|
## Milestones
|
|
149
156
|
|
|
@@ -19,8 +19,15 @@ byte-compatible TSV plus first-class JSON and Markdown.
|
|
|
19
19
|
|
|
20
20
|
## Install
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
(
|
|
22
|
+
From PyPI (external BLAST+ and minimap2 binaries required on PATH — see
|
|
23
|
+
[docs/installation.md](docs/installation.md)):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install gapit
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or from a git clone with [pixi](https://pixi.sh), which manages the environment including
|
|
30
|
+
the external binaries:
|
|
24
31
|
|
|
25
32
|
```bash
|
|
26
33
|
git clone https://github.com/indexofire/gapit.git
|
|
@@ -57,7 +64,6 @@ gapit db search "tet(M)" # look up genes across every installed database
|
|
|
57
64
|
gapit db build mydb my_genes.fa --tsv my_meta.tsv # custom db from any FASTA
|
|
58
65
|
|
|
59
66
|
# Introspection
|
|
60
|
-
gapit list # installed databases (abricate --list compatible)
|
|
61
67
|
gapit schema report # JSON Schema of gapit.report/1
|
|
62
68
|
```
|
|
63
69
|
|
|
@@ -13,17 +13,17 @@ Version, as one JSON line:
|
|
|
13
13
|
|
|
14
14
|
```console
|
|
15
15
|
$ gapit --version --json
|
|
16
|
-
{"schema":"gapit.version/1","name":"gapit","version":"0.
|
|
16
|
+
{"schema":"gapit.version/1","name":"gapit","version":"0.3.0"}
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Output schemas. Six documents are introspectable: `report`, `reads`,
|
|
20
|
-
`
|
|
20
|
+
`reads2`, `summary`, `error`, `version`. Each prints its full JSON Schema:
|
|
21
21
|
|
|
22
22
|
```console
|
|
23
23
|
$ gapit schema report # gapit.report/1 (contig screening)
|
|
24
24
|
$ gapit schema reads # gapit.reads/1 (FASTQ screening)
|
|
25
|
+
$ gapit schema reads2 # gapit.reads/2 (filtered FASTQ screening)
|
|
25
26
|
$ gapit schema summary # gapit.summary/1
|
|
26
|
-
$ gapit schema list # gapit.list/1
|
|
27
27
|
$ gapit schema error # gapit.error/1
|
|
28
28
|
$ gapit schema version # gapit.version/1
|
|
29
29
|
```
|
|
@@ -56,18 +56,27 @@ For example, `gapit schema version` (real output):
|
|
|
56
56
|
}
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Databases: the provider catalog and install state (`gapit db list --json`; real output,
|
|
60
|
+
first two of twelve shown, trimmed):
|
|
60
61
|
|
|
61
62
|
```console
|
|
62
|
-
$ gapit list --json
|
|
63
|
+
$ gapit db list --json
|
|
63
64
|
{
|
|
64
|
-
"schema": "gapit.
|
|
65
|
-
"
|
|
65
|
+
"schema": "gapit.dblist/1",
|
|
66
|
+
"providers": [
|
|
66
67
|
{
|
|
67
|
-
"name": "
|
|
68
|
-
"
|
|
68
|
+
"name": "argannot",
|
|
69
|
+
"description": "ARG-ANNOT acquired resistance genes",
|
|
69
70
|
"dbtype": "nucl",
|
|
70
|
-
"
|
|
71
|
+
"installed": true,
|
|
72
|
+
"records": 2224
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "bacmet2",
|
|
76
|
+
"description": "BacMet2 experimentally confirmed biocide/resistance genes (protein)",
|
|
77
|
+
"dbtype": "prot",
|
|
78
|
+
"installed": true,
|
|
79
|
+
"records": 746
|
|
71
80
|
}
|
|
72
81
|
]
|
|
73
82
|
}
|
|
@@ -103,7 +112,7 @@ Envelope details and error codes: `./outputs.md`.
|
|
|
103
112
|
## JSON stability policy
|
|
104
113
|
|
|
105
114
|
- Every document self-identifies with a version string: `gapit.report/1`,
|
|
106
|
-
`gapit.reads/1`, `gapit.summary/1`, `gapit.
|
|
115
|
+
`gapit.reads/1`, `gapit.summary/1`, `gapit.error/1`,
|
|
107
116
|
`gapit.version/1`. Check `schema` first, dispatch on it.
|
|
108
117
|
- Schemas follow semver. A minor bump never renames or retypes an existing
|
|
109
118
|
field; new fields may appear, so ignore unknown keys rather than rejecting
|
|
@@ -148,7 +157,7 @@ Parsing guidance:
|
|
|
148
157
|
Discover, screen, parse, summarize. Session below run against the repo's test
|
|
149
158
|
fixture datadir (setup recipe in `./mcp.md`).
|
|
150
159
|
|
|
151
|
-
1. Discover available databases (`gapit list --json`, or the `db_list` MCP
|
|
160
|
+
1. Discover available databases (`gapit db list --json`, or the `db_list` MCP
|
|
152
161
|
tool), pick a `db` name.
|
|
153
162
|
|
|
154
163
|
2. Screen each sample as JSON and parse hits straight out of the document:
|
|
@@ -271,9 +271,9 @@ gapit: generated /tmp/opencode/customdb-default/db/labenv/sequences
|
|
|
271
271
|
gapit: self-check passed for labenv
|
|
272
272
|
gapit: BLAST index built (nucl)
|
|
273
273
|
{"db":"labenv","records":2,"dbtype":"nucl","destination":"/tmp/opencode/customdb-default/db/labenv"}
|
|
274
|
-
$ gapit
|
|
275
|
-
|
|
276
|
-
labenv
|
|
274
|
+
$ gapit db outdated
|
|
275
|
+
NAME FETCHED_AT AGE_DAYS STATUS
|
|
276
|
+
labenv 2026-09-27T14:46:27Z 0.00 ok
|
|
277
277
|
```
|
|
278
278
|
|
|
279
279
|
Unlike screening, a build creates a missing datadir instead of failing, so a fresh machine bootstraps on the first build. The scratch datadir was deleted after this capture.
|
|
@@ -85,8 +85,10 @@ $ gapit db list --json
|
|
|
85
85
|
| `providers[].installed` | boolean | True when a manifest exists in the datadir |
|
|
86
86
|
| `providers[].records` | integer | Record count, omitted when the database isn't installed |
|
|
87
87
|
|
|
88
|
-
`gapit list`
|
|
89
|
-
|
|
88
|
+
`gapit db list` is the single listing surface: the provider catalog above, with `--json`
|
|
89
|
+
returning the `gapit.dblist/1` document. (The former standalone listing command and its
|
|
90
|
+
schema were removed; abricate `--list` byte-parity is intentionally dropped for this
|
|
91
|
+
surface.) See [outputs.md](./outputs.md).
|
|
90
92
|
|
|
91
93
|
## Checking database freshness
|
|
92
94
|
|
|
@@ -343,7 +345,7 @@ versions. A real one, from the plasmidfinder database:
|
|
|
343
345
|
"upstream_version": "",
|
|
344
346
|
"tool": {
|
|
345
347
|
"name": "gapit",
|
|
346
|
-
"version": "0.
|
|
348
|
+
"version": "0.3.0"
|
|
347
349
|
},
|
|
348
350
|
"makeblastdb_version": "blastn: 2.17.0+",
|
|
349
351
|
"minimap2_version": "2.31-r1302"
|
|
@@ -9,7 +9,7 @@ first-class JSON and Markdown outputs with versioned schemas.
|
|
|
9
9
|
|
|
10
10
|
| Page | Contents |
|
|
11
11
|
|---|---|
|
|
12
|
-
| [Installation](./installation.md) |
|
|
12
|
+
| [Installation](./installation.md) | PyPI wheel and pixi paths, external binaries, verification, database bootstrap, shell completions |
|
|
13
13
|
| [Quickstart](./quickstart.md) | A complete first session on the bundled test fixture, offline |
|
|
14
14
|
| [Screening contigs](./screen.md) | `gapit screen` on FASTA/GBK/EMBL inputs: thresholds, filters, formats |
|
|
15
15
|
| [Screening reads](./reads.md) | FASTQ and assembly FASTA through minimap2: `--r1`/`--r2`, presets, breadth-based presence, two-stage survey |
|
|
@@ -30,9 +30,8 @@ first-class JSON and Markdown outputs with versioned schemas.
|
|
|
30
30
|
| `gapit db fetch` | Fetch and build provider database(s) into the datadir | [Databases](./databases.md) |
|
|
31
31
|
| `gapit db list` | List database providers and their installed state | [Databases](./databases.md) |
|
|
32
32
|
| `gapit db install` | Install a local file after verifying its SHA256 | [Databases](./databases.md) |
|
|
33
|
-
| `gapit list` | List installed databases (abricate `--list` compatible) | here |
|
|
34
33
|
| `gapit setupdb` | Build BLAST indices for all databases under the datadir | here |
|
|
35
|
-
| `gapit schema` | Print the JSON Schema of a gapit output document (`report`, `reads`, `
|
|
34
|
+
| `gapit schema` | Print the JSON Schema of a gapit output document (`report`, `reads`, `reads2`, `summary`, `error`, `version`) | [Outputs](./outputs.md) |
|
|
36
35
|
| `gapit mcp` | Run the MCP stdio server (also installed as the `gapit-mcp` console script) | [MCP server](./mcp.md) |
|
|
37
36
|
|
|
38
37
|
## Project documents
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
# Installing gapit
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Two install paths: the PyPI wheel (you provide the external binaries) or a git clone with
|
|
4
|
+
[pixi](https://pixi.sh) (binaries managed for you).
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## From PyPI
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
pip install gapit
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The wheel bundles the Python package, the `gapit`/`gapit-mcp` console scripts, and the
|
|
13
|
+
offline `card`/`vfdb` snapshots. It does **not** bundle BLAST+ or minimap2 — install them
|
|
14
|
+
first ([External binaries](#external-binaries), e.g. `conda create -n gapit-env -c
|
|
15
|
+
bioconda blast minimap2`).
|
|
16
|
+
|
|
17
|
+
## From source (pixi)
|
|
18
|
+
|
|
19
|
+
### Prerequisites
|
|
7
20
|
|
|
8
21
|
- [git](https://git-scm.com) and [pixi](https://pixi.sh). On macOS/Linux:
|
|
9
22
|
`curl -fsSL https://pixi.sh/install.sh | bash`
|
|
10
23
|
- Python 3.11+ if you install the package outside pixi (pip/pyproject). With pixi this is
|
|
11
24
|
moot: the environment ships its own Python (the dev env pins 3.14).
|
|
12
25
|
|
|
13
|
-
|
|
26
|
+
### Install
|
|
14
27
|
|
|
15
28
|
```bash
|
|
16
29
|
git clone https://github.com/indexofire/gapit.git
|
|
@@ -31,9 +44,9 @@ gapit --version
|
|
|
31
44
|
|
|
32
45
|
```console
|
|
33
46
|
$ gapit --version
|
|
34
|
-
gapit 0.
|
|
47
|
+
gapit 0.3.0
|
|
35
48
|
$ gapit --version --json
|
|
36
|
-
{"schema":"gapit.version/1","name":"gapit","version":"0.
|
|
49
|
+
{"schema":"gapit.version/1","name":"gapit","version":"0.3.0"}
|
|
37
50
|
```
|
|
38
51
|
|
|
39
52
|
## External binaries
|
|
@@ -71,7 +84,8 @@ gapit: BLAST index built (nucl)
|
|
|
71
84
|
{"db":"vfdb","records":4769,"dbtype":"nucl","destination":"/tmp/gapit-docs/dd/vfdb"}
|
|
72
85
|
```
|
|
73
86
|
|
|
74
|
-
Confirm what's installed any time with `gapit list` (or
|
|
87
|
+
Confirm the provider catalog and what's installed any time with `gapit db list` (or
|
|
88
|
+
`gapit db list --json`).
|
|
75
89
|
|
|
76
90
|
## Shell completions
|
|
77
91
|
|
|
@@ -40,7 +40,7 @@ transcribed from the live `tools/list` `inputSchema` objects.
|
|
|
40
40
|
| `screen` | `files` (array of strings, required), `db` (string, default `ncbi`), `minid` (number), `mincov` (number), `format` (string: `json` \| `tsv` \| `md`, default `json`), `aligner` (string: `blastn` \| `minimap2`, default `blastn`), `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), `datadir` (string) | Report text: `gapit.report/1` JSON by default, TSV or Markdown per `format`; `aligner minimap2` runs the reads engine and emits `gapit.reads/1` |
|
|
41
41
|
| `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`), `format` (string: `json` \| `md`, default `json`), `db` (string, default `ncbi`), `datadir` (string) | `gapit.reads/1` JSON by default or Markdown per `format`; `min_identity`/`min_mapq` > 0 switches to `gapit.reads/2` |
|
|
42
42
|
| `summary` | `files` (array of report table paths, required), `identity` (boolean), `nopath` (boolean) | `gapit.summary/1` JSON |
|
|
43
|
-
| `schema` | `name` (string, required, one of `error`, `
|
|
43
|
+
| `schema` | `name` (string, required, one of `error`, `reads`, `reads2`, `report`, `summary`, `version`) | The JSON Schema of that output document |
|
|
44
44
|
| `db_list` | none | `gapit.dblist/1`: provider names, install state, record counts |
|
|
45
45
|
| `db_fetch` | `name` (string), `datadir` (string), `force` (boolean, default `false`) | One JSON receipt line per database (`db`, `records`, `dbtype`, `destination`). Name omitted: the card+vfdb default set from bundled snapshots. Network installs can take minutes |
|
|
46
46
|
| `db_build` | `name` (string, required), `fasta` (string, required — a LOCAL filesystem path), `tsv` (string), `dbtype` (string: `nucl` \| `prot`), `description` (string), `datadir` (string), `force` (boolean, default `false`) | One JSON receipt line (`db`, `records`, `dbtype`, `destination`) |
|
|
@@ -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.
|
|
97
|
+
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"gapit","version":"0.3.0"}}}
|
|
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.
|
|
120
|
+
"tool": {"name": "gapit", "version": "0.3.0"},
|
|
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.
|
|
176
|
+
"tool": {"name": "gapit", "version": "0.3.0"},
|
|
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.
|
|
251
|
+
"tool": {"name": "gapit", "version": "0.3.0"},
|
|
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": [
|
|
@@ -115,7 +115,7 @@ Real document, same run as the TSV above:
|
|
|
115
115
|
"schema": "gapit.report/1",
|
|
116
116
|
"tool": {
|
|
117
117
|
"name": "gapit",
|
|
118
|
-
"version": "0.
|
|
118
|
+
"version": "0.3.0"
|
|
119
119
|
},
|
|
120
120
|
"created_at": "2026-09-19T01:12:20Z",
|
|
121
121
|
"params": {
|
|
@@ -246,7 +246,7 @@ summarizing two report files, one with a `tetA` hit and one with none:
|
|
|
246
246
|
"schema": "gapit.summary/1",
|
|
247
247
|
"tool": {
|
|
248
248
|
"name": "gapit",
|
|
249
|
-
"version": "0.
|
|
249
|
+
"version": "0.3.0"
|
|
250
250
|
},
|
|
251
251
|
"created_at": "2026-09-19T01:11:09Z",
|
|
252
252
|
"params": {
|
|
@@ -364,42 +364,11 @@ An agent can discover the whole contract from the binary alone.
|
|
|
364
364
|
|
|
365
365
|
```console
|
|
366
366
|
$ gapit --version --json
|
|
367
|
-
{"schema":"gapit.version/1","name":"gapit","version":"0.
|
|
367
|
+
{"schema":"gapit.version/1","name":"gapit","version":"0.3.0"}
|
|
368
368
|
```
|
|
369
369
|
|
|
370
|
-
`gapit list --json` describes installed databases (`gapit.list/1`, first two of twelve
|
|
371
|
-
shown, trimmed):
|
|
372
|
-
|
|
373
|
-
```json
|
|
374
|
-
{
|
|
375
|
-
"schema": "gapit.list/1",
|
|
376
|
-
"databases": [
|
|
377
|
-
{
|
|
378
|
-
"name": "argannot",
|
|
379
|
-
"sequences": 2224,
|
|
380
|
-
"dbtype": "nucl",
|
|
381
|
-
"date": "2026-Sep-18"
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
"name": "bacmet2",
|
|
385
|
-
"sequences": 746,
|
|
386
|
-
"dbtype": "prot",
|
|
387
|
-
"date": "2026-Sep-18"
|
|
388
|
-
}
|
|
389
|
-
]
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
| Field | Type | Meaning |
|
|
394
|
-
|---|---|---|
|
|
395
|
-
| `schema` | string | Always `gapit.list/1` |
|
|
396
|
-
| `databases[].name` | string | Database name, usable as `--db` |
|
|
397
|
-
| `databases[].sequences` | integer | Sequence count in the database |
|
|
398
|
-
| `databases[].dbtype` | string | `nucl` or `prot` |
|
|
399
|
-
| `databases[].date` | string | Build date, abricate `%d-%b-%Y` format |
|
|
400
|
-
|
|
401
370
|
`gapit schema <name>` prints the JSON Schema for each document. The six names: `report`,
|
|
402
|
-
`reads`, `
|
|
371
|
+
`reads`, `reads2`, `summary`, `error`, `version`. A trimmed fragment of `gapit schema report`:
|
|
403
372
|
|
|
404
373
|
```json
|
|
405
374
|
{
|
|
@@ -22,14 +22,20 @@ makeblastdb -in /tmp/gapit-quickstart/db/tinyamr/sequences \
|
|
|
22
22
|
export GAPIT_DATADIR=/tmp/gapit-quickstart/db
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
`gapit list`
|
|
25
|
+
`gapit db list` shows the provider catalog and install state (trimmed below; `--json`
|
|
26
|
+
returns the `gapit.dblist/1` document). The fixture `tinyamr` is a plain custom database,
|
|
27
|
+
not a provider, so it does not appear there — the screen in the next section confirms it
|
|
28
|
+
is usable:
|
|
26
29
|
|
|
27
30
|
```console
|
|
28
|
-
$ gapit list
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
$ gapit db list
|
|
32
|
+
PROVIDER STATUS DBTYPE DESCRIPTION
|
|
33
|
+
argannot available nucl ARG-ANNOT acquired resistance genes
|
|
34
|
+
ncbi available nucl NCBI AMRFinderPlus (reference finder) curated AMR
|
|
31
35
|
```
|
|
32
36
|
|
|
37
|
+
(twelve providers in total, all `available` in this throwaway datadir)
|
|
38
|
+
|
|
33
39
|
## 2. Screen a contig file
|
|
34
40
|
|
|
35
41
|
```console
|
|
@@ -73,7 +79,7 @@ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
|
|
|
73
79
|
"schema": "gapit.report/1",
|
|
74
80
|
"tool": {
|
|
75
81
|
"name": "gapit",
|
|
76
|
-
"version": "0.
|
|
82
|
+
"version": "0.3.0"
|
|
77
83
|
},
|
|
78
84
|
"created_at": "2026-09-19T01:11:06Z",
|
|
79
85
|
"params": {
|
|
@@ -28,7 +28,7 @@ gapit screen --r1 R1[,R1b,...] [--r2 R2[,R2b,...]] --db NAME [--read-type sr|map
|
|
|
28
28
|
## Options
|
|
29
29
|
|
|
30
30
|
Reads mode runs through the same `gapit screen` command; these are the flags that apply
|
|
31
|
-
(transcribed from `gapit screen --help`, gapit 0.
|
|
31
|
+
(transcribed from `gapit screen --help`, gapit 0.3.0). Contig-mode flags not listed here
|
|
32
32
|
(`--minid`, `--mincov`, `--jobs`, `--fofn`, `--noheader`, `--nopath`) do not apply.
|
|
33
33
|
|
|
34
34
|
| Flag | Type | Default | Description |
|
|
@@ -223,7 +223,7 @@ The short-read fixture behaves the same with one calibration: `sr` soft-clipping
|
|
|
223
223
|
$ gapit screen --r1 ont_homologs.fq --db homologs --read-type map-ont --min-identity 95 --format md --quiet
|
|
224
224
|
---
|
|
225
225
|
schema: gapit.reads/2
|
|
226
|
-
tool: gapit 0.
|
|
226
|
+
tool: gapit 0.3.0
|
|
227
227
|
created_at: 2026-09-20T14:23:33Z
|
|
228
228
|
db: homologs
|
|
229
229
|
read_type: map-ont
|
|
@@ -262,7 +262,7 @@ Detected 1 present genes in tetx_full.fq
|
|
|
262
262
|
"schema": "gapit.reads/1",
|
|
263
263
|
"tool": {
|
|
264
264
|
"name": "gapit",
|
|
265
|
-
"version": "0.
|
|
265
|
+
"version": "0.3.0"
|
|
266
266
|
},
|
|
267
267
|
"created_at": "2026-09-19T01:12:25Z",
|
|
268
268
|
"params": {
|
|
@@ -359,7 +359,7 @@ $ gapit screen --r1 tetx_lane1.fq,tetx_lane2.fq --db tinyreads --quiet
|
|
|
359
359
|
$ gapit screen --r1 tetx_full.fq --db tinyreads --format md
|
|
360
360
|
---
|
|
361
361
|
schema: gapit.reads/1
|
|
362
|
-
tool: gapit 0.
|
|
362
|
+
tool: gapit 0.3.0
|
|
363
363
|
created_at: 2026-09-19T01:12:25Z
|
|
364
364
|
db: tinyreads
|
|
365
365
|
read_type: sr
|
|
@@ -455,7 +455,7 @@ Detected 2 present genes in /tmp/gapit-demo/assembly.fa
|
|
|
455
455
|
"schema": "gapit.reads/1",
|
|
456
456
|
"tool": {
|
|
457
457
|
"name": "gapit",
|
|
458
|
-
"version": "0.
|
|
458
|
+
"version": "0.3.0"
|
|
459
459
|
},
|
|
460
460
|
"created_at": "2026-09-19T14:23:00Z",
|
|
461
461
|
"params": {
|
|
@@ -514,7 +514,7 @@ cost of allele-level precision. That trade suggests a two-stage workflow over ma
|
|
|
514
514
|
pipeline, which applies the identity and coverage floors at abricate parity.
|
|
515
515
|
|
|
516
516
|
Real numbers, one K. pneumoniae RefSeq assembly (GCF_000240185.1, 5.3 Mb, `--db ncbi`,
|
|
517
|
-
single-threaded, gapit 0.
|
|
517
|
+
single-threaded, gapit 0.3.0):
|
|
518
518
|
|
|
519
519
|
```console
|
|
520
520
|
$ # 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.
|
|
12
|
+
Transcribed from `gapit screen --help` (gapit 0.3.0). 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
|
| Flag | Type | Default | Description |
|
|
@@ -86,7 +86,7 @@ $ gapit screen tests/data/contigs/full.fa --db tinyamr --format json
|
|
|
86
86
|
"schema": "gapit.report/1",
|
|
87
87
|
"tool": {
|
|
88
88
|
"name": "gapit",
|
|
89
|
-
"version": "0.
|
|
89
|
+
"version": "0.3.0"
|
|
90
90
|
},
|
|
91
91
|
"created_at": "2026-09-19T01:12:04Z",
|
|
92
92
|
"params": {
|
|
@@ -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.
|
|
13
|
+
Transcribed from `gapit summary --help` (gapit 0.3.0):
|
|
14
14
|
|
|
15
15
|
| Flag | Type | Default | Description |
|
|
16
16
|
|---|---|---|---|
|
|
@@ -110,7 +110,7 @@ $ gapit summary tests/data/summary/sample_a.tsv tests/data/summary/sample_b.tsv
|
|
|
110
110
|
"schema": "gapit.summary/1",
|
|
111
111
|
"tool": {
|
|
112
112
|
"name": "gapit",
|
|
113
|
-
"version": "0.
|
|
113
|
+
"version": "0.3.0"
|
|
114
114
|
},
|
|
115
115
|
"created_at": "2026-09-19T01:12:48Z",
|
|
116
116
|
"params": {
|
|
@@ -1135,8 +1135,8 @@ packages:
|
|
|
1135
1135
|
timestamp: 1694615932610
|
|
1136
1136
|
- pypi: ./
|
|
1137
1137
|
name: gapit
|
|
1138
|
-
version: 0.
|
|
1139
|
-
sha256:
|
|
1138
|
+
version: 0.3.0
|
|
1139
|
+
sha256: 079317f27b81dd25126368906a19acb3934a200b6fcdf3f2ac1490e9e60d4c46
|
|
1140
1140
|
requires_dist:
|
|
1141
1141
|
- typer>=0.12
|
|
1142
1142
|
- pydantic>=2.7
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gapit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Mass screening of contigs for antimicrobial resistance and virulence genes — agent-first Python reimplementation of abricate"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "indexofire", email = "indexofire@gmail.com" }]
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# version/license/python/deps mirror pyproject.toml exactly; the external
|
|
5
5
|
# binaries mirror pixi.toml's conda dependencies.
|
|
6
6
|
{% set name = "gapit" %}
|
|
7
|
-
{% set version = "0.
|
|
7
|
+
{% set version = "0.3.0" %}
|
|
8
8
|
|
|
9
9
|
package:
|
|
10
10
|
name: {{ name|lower }}
|
|
@@ -13,7 +13,7 @@ package:
|
|
|
13
13
|
source:
|
|
14
14
|
# gapit is not on PyPI yet. This is the standard noarch-python source URL;
|
|
15
15
|
# replace the sha256 with the PyPI sdist hash at submission time.
|
|
16
|
-
# The value below hashes the LOCAL hatchling sdist (dist/gapit-0.
|
|
16
|
+
# The value below hashes the LOCAL hatchling sdist (dist/gapit-0.3.0.tar.gz)
|
|
17
17
|
# — local and PyPI sdists are not byte-identical (gzip), do not trust it.
|
|
18
18
|
url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz
|
|
19
19
|
sha256: 24df143ed9647fc784fa29c776babfd880d3730d22004b997ed0aea3f105f5e3
|