amina-cli 0.4.1__tar.gz → 0.4.2__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 (105) hide show
  1. {amina_cli-0.4.1 → amina_cli-0.4.2}/PKG-INFO +1 -1
  2. {amina_cli-0.4.1 → amina_cli-0.4.2}/pyproject.toml +1 -1
  3. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/__init__.py +1 -1
  4. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/jobs_cmd.py +23 -13
  5. {amina_cli-0.4.1 → amina_cli-0.4.2}/.gitignore +0 -0
  6. {amina_cli-0.4.1 → amina_cli-0.4.2}/LICENSE +0 -0
  7. {amina_cli-0.4.1 → amina_cli-0.4.2}/README.md +0 -0
  8. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/auth.py +0 -0
  9. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/client.py +0 -0
  10. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/__init__.py +0 -0
  11. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/auth_cmd.py +0 -0
  12. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/run_cmd.py +0 -0
  13. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/__init__.py +0 -0
  14. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/__init__.py +0 -0
  15. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/hydrophobicity.yaml +0 -0
  16. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/mmseqs2_cluster.yaml +0 -0
  17. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/residue_accessibility.yaml +0 -0
  18. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/rmsd.yaml +0 -0
  19. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/sasa.yaml +0 -0
  20. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/simple_rmsd.yaml +0 -0
  21. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/surface_charge.yaml +0 -0
  22. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/docs/usalign.yaml +0 -0
  23. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/hydrophobicity.py +0 -0
  24. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/mmseqs2_cluster.py +0 -0
  25. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/residue_accessibility.py +0 -0
  26. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/rmsd.py +0 -0
  27. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/sasa.py +0 -0
  28. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/simple_rmsd.py +0 -0
  29. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/surface_charge.py +0 -0
  30. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/analysis/usalign.py +0 -0
  31. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/__init__.py +0 -0
  32. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/docs/esm_if1.yaml +0 -0
  33. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/docs/protein_mc.yaml +0 -0
  34. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/docs/proteinmpnn.yaml +0 -0
  35. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/docs/rfdiffusion.yaml +0 -0
  36. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/esm_if1.py +0 -0
  37. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/protein_mc.py +0 -0
  38. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/proteinmpnn.py +0 -0
  39. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/design/rfdiffusion.py +0 -0
  40. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/display.py +0 -0
  41. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/doccard.py +0 -0
  42. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/__init__.py +0 -0
  43. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/boltz2.py +0 -0
  44. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/docs/boltz2.yaml +0 -0
  45. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/docs/esmfold.yaml +0 -0
  46. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/docs/openfold3.yaml +0 -0
  47. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/docs/protenix.yaml +0 -0
  48. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/esmfold.py +0 -0
  49. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/openfold3.py +0 -0
  50. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/folding/protenix.py +0 -0
  51. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/__init__.py +0 -0
  52. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/autodock_vina.py +0 -0
  53. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/diffdock.py +0 -0
  54. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/dockq.py +0 -0
  55. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/autodock_vina.yaml +0 -0
  56. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/diffdock.yaml +0 -0
  57. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/dockq.yaml +0 -0
  58. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/emngly.yaml +0 -0
  59. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/glycosylation_ensemble.yaml +0 -0
  60. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/interface_identifier.yaml +0 -0
  61. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/isoglyp.yaml +0 -0
  62. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/lmngly.yaml +0 -0
  63. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/p2rank.yaml +0 -0
  64. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/docs/pesto.yaml +0 -0
  65. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/emngly.py +0 -0
  66. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/glycosylation_ensemble.py +0 -0
  67. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/interface_identifier.py +0 -0
  68. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/isoglyp.py +0 -0
  69. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/lmngly.py +0 -0
  70. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/p2rank.py +0 -0
  71. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/interactions/pesto.py +0 -0
  72. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/__init__.py +0 -0
  73. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/aminosol.py +0 -0
  74. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/docs/aminosol.yaml +0 -0
  75. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/docs/esm1v.yaml +0 -0
  76. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/docs/esm2_embedding.yaml +0 -0
  77. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/esm1v.py +0 -0
  78. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/properties/esm2_embedding.py +0 -0
  79. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/__init__.py +0 -0
  80. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/activesite_verifier.py +0 -0
  81. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/chain_select.py +0 -0
  82. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/distance_calculator.py +0 -0
  83. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/activesite_verifier.yaml +0 -0
  84. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/chain_select.yaml +0 -0
  85. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/distance_calculator.yaml +0 -0
  86. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/maxit_convert.yaml +0 -0
  87. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/mol_size_calculator.yaml +0 -0
  88. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/obabel_convert.yaml +0 -0
  89. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/pdb_bfactor_overwrite.yaml +0 -0
  90. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/pdb_cleaner.yaml +0 -0
  91. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/pdb_quality_assessment.yaml +0 -0
  92. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/pdb_to_fasta.yaml +0 -0
  93. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/docs/protein_relaxer.yaml +0 -0
  94. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/maxit_convert.py +0 -0
  95. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/mol_size_calculator.py +0 -0
  96. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/obabel_convert.py +0 -0
  97. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/pdb_bfactor_overwrite.py +0 -0
  98. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/pdb_cleaner.py +0 -0
  99. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/pdb_quality_assessment.py +0 -0
  100. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/pdb_to_fasta.py +0 -0
  101. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools/utilities/protein_relaxer.py +0 -0
  102. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/commands/tools_cmd.py +0 -0
  103. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/main.py +0 -0
  104. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/registry.py +0 -0
  105. {amina_cli-0.4.1 → amina_cli-0.4.2}/src/amina_cli/storage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amina-cli
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: CLI for AminoAnalytica protein engineering platform
5
5
  Project-URL: Homepage, https://aminoanalytica.com
6
6
  Project-URL: Documentation, https://docs.aminoanalytica.com
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "amina-cli"
3
- version = "0.4.1"
3
+ version = "0.4.2"
4
4
  description = "CLI for AminoAnalytica protein engineering platform"
5
5
  readme = "README.md"
6
6
  license = {text = "Apache-2.0"}
@@ -9,4 +9,4 @@ Quick start:
9
9
  amina run esmfold --sequence "MKFLILLFNILCLFPVLAADNH"
10
10
  """
11
11
 
12
- __version__ = "0.4.1"
12
+ __version__ = "0.4.2"
@@ -958,19 +958,20 @@ def reconcile(
958
958
  per_job.append(entry)
959
959
  continue
960
960
 
961
- local_status = job_info.get("status", "")
962
- if local_status not in TERMINAL_STATUSES:
963
- # Local cache (now fresh) says this job hasn't terminated yet.
964
- # Don't waste a per-job HTTP roundtrip just to confirm.
965
- summary["still_running"] += 1
966
- entry["action"] = "still_running"
967
- entry["status"] = local_status
968
- per_job.append(entry)
969
- continue
970
-
971
- # Terminal: fetch the full payload (signed_urls, output_files) so the
972
- # response.json we write matches the shape `amina jobs download`
973
- # produces.
961
+ # Always go to the server for the truth, even if the local cache says
962
+ # non-terminal. Reason: the bulk /list_jobs refresh above can return
963
+ # stale data when the worker's completion callback dropped (Supabase
964
+ # blip, gateway crash mid-handler) — a 300-job campaign reported 197
965
+ # jobs still_running while all 300 had finished on Modal. The CLI
966
+ # used to early-return on local non-terminal status, which made this
967
+ # bug unrecoverable from the client. Now reconcile mirrors what
968
+ # `amina jobs status` does: ask Modal directly via call_id.
969
+ #
970
+ # Cost: O(pending) HTTP calls per cycle. Bounded by jobs the user is
971
+ # actively waiting on (response.json-present dirs short-circuit
972
+ # above), and the gateway's heal-on-read upgrade makes the post-merge
973
+ # local cache mostly fresh anyway, so this fall-through is rarely hit
974
+ # in practice. It exists as a defence-in-depth for gateway brownouts.
974
975
  try:
975
976
  status_result = _resolve_job_status(job_info)
976
977
  except ToolExecutionError as fetch_err:
@@ -981,6 +982,15 @@ def reconcile(
981
982
  continue
982
983
  _persist_terminal_status(job_info, status_result)
983
984
 
985
+ if not status_result.get("terminal", False) and status_result.get("status") not in TERMINAL_STATUSES:
986
+ # Genuinely still running on the server. Count, record the
987
+ # FRESH status (not the stale-cache one we started with), move on.
988
+ summary["still_running"] += 1
989
+ entry["action"] = "still_running"
990
+ entry["status"] = status_result.get("status", "running")
991
+ per_job.append(entry)
992
+ continue
993
+
984
994
  # Build the response payload. For completed jobs the gateway hands us
985
995
  # a full `result` dict (output_files, signed_urls, data, ...). For
986
996
  # failed/cancelled jobs Modal often returns only an error string with
File without changes
File without changes
File without changes