ellf-cli 6.0.2__tar.gz → 6.0.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 (185) hide show
  1. {ellf_cli-6.0.2/ellf_cli.egg-info → ellf_cli-6.0.4}/PKG-INFO +1 -1
  2. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/README.md +62 -62
  3. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/about.json +1 -1
  4. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/auth.py +20 -6
  5. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/actions.py +10 -10
  6. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/agents.py +12 -12
  7. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/assets.py +5 -5
  8. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/config.py +6 -6
  9. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/datasets.py +3 -3
  10. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/general.py +11 -8
  11. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/packages.py +2 -2
  12. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/paths.py +2 -2
  13. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/plans.py +29 -13
  14. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/recipes.py +1 -1
  15. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/secrets.py +3 -3
  16. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/support.py +13 -6
  17. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/tasks.py +12 -12
  18. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf.json +312 -312
  19. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/messages.py +2 -2
  20. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/query.py +68 -29
  21. {ellf_cli-6.0.2 → ellf_cli-6.0.4/ellf_cli.egg-info}/PKG-INFO +1 -1
  22. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_login.py +83 -1
  23. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_plans.py +96 -0
  24. ellf_cli-6.0.4/tests/test_query.py +121 -0
  25. ellf_cli-6.0.2/tests/test_query.py +0 -35
  26. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/LICENSE +0 -0
  27. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/MANIFEST.in +0 -0
  28. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/__init__.py +0 -0
  29. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/__main__.py +0 -0
  30. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/about.py +0 -0
  31. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/appdirs.py +0 -0
  32. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/cli.py +0 -0
  33. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/cloud/__init__.py +0 -0
  34. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/cloud/gcp.py +0 -0
  35. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/cluster_config.py +0 -0
  36. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/__init__.py +0 -0
  37. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/_cluster_select.py +0 -0
  38. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/_org_select.py +0 -0
  39. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/_recipe_file.py +0 -0
  40. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/_recipe_subcommand.py +0 -0
  41. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/_state.py +0 -0
  42. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/auth.py +0 -0
  43. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/clusters.py +0 -0
  44. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/__init__.py +0 -0
  45. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/cp.py +0 -0
  46. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/ls.py +0 -0
  47. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/rm.py +0 -0
  48. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/rsync.py +0 -0
  49. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/files/stats.py +0 -0
  50. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/import_export.py +0 -0
  51. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/__init__.py +0 -0
  52. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/_helpers.py +0 -0
  53. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/deploy.py +0 -0
  54. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/init_values.py +0 -0
  55. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/provision.py +0 -0
  56. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/register.py +0 -0
  57. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/setup.py +0 -0
  58. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/start.py +0 -0
  59. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/terraform.py +0 -0
  60. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/infra/tls.py +0 -0
  61. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/jobs.py +0 -0
  62. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/projects.py +0 -0
  63. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/publish_code.py +0 -0
  64. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/publish_data.py +0 -0
  65. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/commands/todos.py +0 -0
  66. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/config.py +0 -0
  67. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
  68. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/.gitignore +0 -0
  69. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skill_variants.json +0 -0
  70. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +0 -0
  71. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +0 -0
  72. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +0 -0
  73. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +0 -0
  74. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +0 -0
  75. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +0 -0
  76. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
  77. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
  78. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
  79. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
  80. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
  81. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
  82. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
  83. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
  84. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
  85. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
  86. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
  87. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
  88. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +0 -0
  89. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
  90. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
  91. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
  92. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
  93. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
  94. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
  95. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
  96. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
  97. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
  98. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
  99. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
  100. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
  101. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
  102. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
  103. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
  104. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
  105. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
  106. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
  107. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
  108. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +0 -0
  109. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
  110. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
  111. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -0
  112. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +0 -0
  113. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
  114. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
  115. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -0
  116. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
  117. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
  118. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
  119. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
  120. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
  121. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
  122. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
  123. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
  124. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
  125. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
  126. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
  127. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
  128. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
  129. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
  130. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
  131. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
  132. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
  133. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
  134. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
  135. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
  136. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
  137. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/errors.py +0 -0
  138. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/helm.py +0 -0
  139. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/key_pair.py +0 -0
  140. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/main.py +0 -0
  141. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
  142. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
  143. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
  144. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
  145. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
  146. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
  147. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
  148. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
  149. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
  150. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
  151. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/testing/__init__.py +0 -0
  152. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ty.py +0 -0
  153. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/ui.py +0 -0
  154. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/url.py +0 -0
  155. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli/util.py +0 -0
  156. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/SOURCES.txt +0 -0
  157. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/dependency_links.txt +0 -0
  158. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/entry_points.txt +0 -0
  159. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/not-zip-safe +0 -0
  160. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/requires.txt +0 -0
  161. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/ellf_cli.egg-info/top_level.txt +0 -0
  162. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/pyproject.toml +0 -0
  163. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/setup.cfg +0 -0
  164. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/setup.py +0 -0
  165. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_appdirs.py +0 -0
  166. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_auth.py +0 -0
  167. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_config.py +0 -0
  168. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_errors.py +0 -0
  169. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_files_cp.py +0 -0
  170. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_files_cp_helpers.py +0 -0
  171. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_info.py +0 -0
  172. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_invalid_secrets.py +0 -0
  173. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_key_pair.py +0 -0
  174. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_logout.py +0 -0
  175. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_main.py +0 -0
  176. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_org_select.py +0 -0
  177. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_projects.py +0 -0
  178. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_recipe_file.py +0 -0
  179. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_recipes.py +0 -0
  180. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_state.py +0 -0
  181. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_support.py +0 -0
  182. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_ty.py +0 -0
  183. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_ui.py +0 -0
  184. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_ui_extras.py +0 -0
  185. {ellf_cli-6.0.2 → ellf_cli-6.0.4}/tests/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ellf-cli
3
- Version: 6.0.2
3
+ Version: 6.0.4
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -40,8 +40,8 @@ Print information about an action on the cluster
40
40
  | Argument | Type | Description | Default |
41
41
  | --- | --- | --- | --- |
42
42
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the action | |
43
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
44
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
43
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
44
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
45
45
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'stats', 'recipe_name', 'recipe_title', 'evaluation', 'project_name', 'error', 'executions', 'last_execution_id', 'url_logs', 'url', 'related_tasks', 'created_by_user'] | `None` |
46
46
  | `--json` | `bool` | Output the result as JSON | `False` |
47
47
 
@@ -52,8 +52,8 @@ Get logs for an action on the cluster
52
52
  | Argument | Type | Description | Default |
53
53
  | --- | --- | --- | --- |
54
54
  | `name_or_id` | `str` | Name or ID of the action (or the last action if not set) | `None` |
55
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
56
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
55
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
56
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
57
57
  | `--json` | `bool` | Output the result as JSON | `False` |
58
58
  | `--errors` | `bool` | Show structured error information instead of full logs | `False` |
59
59
  | `--query` | `str` | Filter log lines matching this text (requires Loki) | `None` |
@@ -65,8 +65,8 @@ Start an action on the cluster
65
65
  | Argument | Type | Description | Default |
66
66
  | --- | --- | --- | --- |
67
67
  | `name_or_id` | `str` | Name or ID of the action (or the last action if not set) | `None` |
68
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
69
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
68
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
69
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
70
70
  | `--worker-class` | `str` | Worker class to launch the action on. Generally one of: ['medium', 'large', 'gpu'] | `None` |
71
71
  | `--no-wait` | `bool` | Don't wait for the action to be ready after starting | `False` |
72
72
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -78,8 +78,8 @@ Stop an action on the cluster
78
78
  | Argument | Type | Description | Default |
79
79
  | --- | --- | --- | --- |
80
80
  | `name_or_id` | `str` | Name or ID of the action (or the last action if not set) | `None` |
81
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
82
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
81
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
82
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
83
83
  | `--json` | `bool` | Output the result as JSON | `False` |
84
84
 
85
85
  #### `ellf actions delete`
@@ -89,8 +89,8 @@ Delete an Action by name or ID
89
89
  | Argument | Type | Description | Default |
90
90
  | --- | --- | --- | --- |
91
91
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the action | |
92
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
93
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
92
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
93
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
94
94
  | `--json` | `bool` | Output the result as JSON | `False` |
95
95
 
96
96
  ### `ellf todo`
@@ -189,8 +189,8 @@ Assign an agent to a task as an annotator
189
189
  | --- | --- | --- | --- |
190
190
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the agent | |
191
191
  | `--task` | `Union[str, UUID]` | Task name or ID to assign the agent to | |
192
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
193
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
192
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
193
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
194
194
  | `--json` | `bool` | Output the result as JSON | `False` |
195
195
 
196
196
  #### `ellf agents list`
@@ -209,8 +209,8 @@ Print information about an agent on the cluster
209
209
  | Argument | Type | Description | Default |
210
210
  | --- | --- | --- | --- |
211
211
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the agent | |
212
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
213
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
212
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
213
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
214
214
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user'] | `None` |
215
215
  | `--json` | `bool` | Output the result as JSON | `False` |
216
216
 
@@ -221,8 +221,8 @@ Get logs for an agent on the cluster
221
221
  | Argument | Type | Description | Default |
222
222
  | --- | --- | --- | --- |
223
223
  | `name_or_id` | `str` | Name or ID of the agent (or the last agent if not set) | `None` |
224
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
225
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
224
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
225
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
226
226
  | `--json` | `bool` | Output the result as JSON | `False` |
227
227
  | `--errors` | `bool` | Show structured error information instead of full logs | `False` |
228
228
  | `--query` | `str` | Filter log lines matching this text (requires Loki) | `None` |
@@ -234,8 +234,8 @@ Start an agent on the cluster
234
234
  | Argument | Type | Description | Default |
235
235
  | --- | --- | --- | --- |
236
236
  | `name_or_id` | `str` | Name or ID of the agent (or the last agent if not set) | `None` |
237
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
238
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
237
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
238
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
239
239
  | `--worker-class` | `str` | Worker class to launch the agent on. Generally one of: ['medium', 'large', 'gpu'] | `None` |
240
240
  | `--no-wait` | `bool` | Don't wait for the agent to be ready after starting | `False` |
241
241
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -247,8 +247,8 @@ Stop an agent on the cluster
247
247
  | Argument | Type | Description | Default |
248
248
  | --- | --- | --- | --- |
249
249
  | `name_or_id` | `str` | Name or ID of the agent (or the last agent if not set) | `None` |
250
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
251
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
250
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
251
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
252
252
  | `--json` | `bool` | Output the result as JSON | `False` |
253
253
 
254
254
  #### `ellf agents delete`
@@ -258,8 +258,8 @@ Delete an agent by name or ID
258
258
  | Argument | Type | Description | Default |
259
259
  | --- | --- | --- | --- |
260
260
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the agent | |
261
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
262
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
261
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
262
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
263
263
  | `--json` | `bool` | Output the result as JSON | `False` |
264
264
 
265
265
  ### `ellf assets`
@@ -272,7 +272,7 @@ List all assets on the cluster registered with Ellf
272
272
 
273
273
  | Argument | Type | Description | Default |
274
274
  | --- | --- | --- | --- |
275
- | `--cluster-id` | `UUID` | ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
275
+ | `--cluster-id` | `str` | Name, slug, or ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
276
276
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'version', 'kind', 'path', 'meta'] | `['id', 'name', 'kind']` |
277
277
  | `--json` | `bool` | Output the result as JSON | `False` |
278
278
 
@@ -283,8 +283,8 @@ Get detailed info for an asset uploaded to the cluster and registered with Ellf
283
283
  | Argument | Type | Description | Default |
284
284
  | --- | --- | --- | --- |
285
285
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the asset | |
286
- | `project_id` | `UUID` | ID of asset's project (or the last project if not set) | `None` |
287
- | `cluster_id` | `UUID` | ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
286
+ | `project_id` | `str` | Name, slug, or ID of asset's project (or the last project if not set) | `None` |
287
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
288
288
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'version', 'kind', 'path', 'meta', 'tasks', 'actions'] | `None` |
289
289
  | `--json` | `bool` | Output the result as JSON | `False` |
290
290
 
@@ -309,8 +309,8 @@ Delete an asset registered with Ellf
309
309
  | Argument | Type | Description | Default |
310
310
  | --- | --- | --- | --- |
311
311
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the asset | |
312
- | `project_id` | `UUID` | ID of asset's project (or the last project if not set) | `None` |
313
- | `cluster_id` | `UUID` | ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
312
+ | `project_id` | `str` | Name, slug, or ID of asset's project (or the last project if not set) | `None` |
313
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for asset name (or the last cluster if not set) | `None` |
314
314
  | `--json` | `bool` | Output the result as JSON | `False` |
315
315
 
316
316
  ### `ellf clusters`
@@ -456,8 +456,8 @@ Set the default task.
456
456
  | Argument | Type | Description | Default |
457
457
  | --- | --- | --- | --- |
458
458
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
459
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
460
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
459
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
460
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
461
461
  | `--json` | `bool` | Output the result as JSON | `False` |
462
462
 
463
463
  #### `ellf config action`
@@ -467,8 +467,8 @@ Set the default action.
467
467
  | Argument | Type | Description | Default |
468
468
  | --- | --- | --- | --- |
469
469
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the action | |
470
- | `project_id` | `UUID` | ID of action's project (or the last project if not set) | `None` |
471
- | `cluster_id` | `UUID` | ID of the cluster to search for action name (or the last cluster if not set) | `None` |
470
+ | `project_id` | `str` | Name, slug, or ID of action's project (or the last project if not set) | `None` |
471
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for action name (or the last cluster if not set) | `None` |
472
472
  | `--json` | `bool` | Output the result as JSON | `False` |
473
473
 
474
474
  #### `ellf config agent`
@@ -478,8 +478,8 @@ Set the default agent.
478
478
  | Argument | Type | Description | Default |
479
479
  | --- | --- | --- | --- |
480
480
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the agent | |
481
- | `project_id` | `UUID` | ID of agent's project (or the last project if not set) | `None` |
482
- | `cluster_id` | `UUID` | ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
481
+ | `project_id` | `str` | Name, slug, or ID of agent's project (or the last project if not set) | `None` |
482
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
483
483
  | `--json` | `bool` | Output the result as JSON | `False` |
484
484
 
485
485
  #### `ellf config set-pam-host`
@@ -511,7 +511,7 @@ List all Datasets
511
511
 
512
512
  | Argument | Type | Description | Default |
513
513
  | --- | --- | --- | --- |
514
- | `--cluster-id` | `UUID` | ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
514
+ | `--cluster-id` | `str` | Name, slug, or ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
515
515
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'cluster_id', 'kind'] | `['id', 'name', 'kind']` |
516
516
  | `--json` | `bool` | Output the result as JSON | `False` |
517
517
 
@@ -522,7 +522,7 @@ Get detailed info for a Dataset
522
522
  | Argument | Type | Description | Default |
523
523
  | --- | --- | --- | --- |
524
524
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the dataset | |
525
- | `cluster_id` | `UUID` | ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
525
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
526
526
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'cluster_id', 'kind', 'tasks', 'actions'] | `None` |
527
527
  | `--json` | `bool` | Output the result as JSON | `False` |
528
528
 
@@ -544,7 +544,7 @@ Delete a dataset
544
544
  | Argument | Type | Description | Default |
545
545
  | --- | --- | --- | --- |
546
546
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the dataset | |
547
- | `cluster_id` | `UUID` | ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
547
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for dataset name (or the last cluster if not set) | `None` |
548
548
  | `--json` | `bool` | Output the result as JSON | `False` |
549
549
 
550
550
  #### `ellf datasets export`
@@ -655,7 +655,7 @@ Get detailed info for a package
655
655
  | Argument | Type | Description | Default |
656
656
  | --- | --- | --- | --- |
657
657
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the package | |
658
- | `cluster_id` | `UUID` | ID of the cluster to search for package name (or the last cluster if not set) | `None` |
658
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for package name (or the last cluster if not set) | `None` |
659
659
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'version', 'container', 'recipe_count', 'org_id', 'cluster_id', 'filename', 'meta', 'tasks', 'actions', 'author'] | `None` |
660
660
  | `--json` | `bool` | Output the result as JSON | `False` |
661
661
 
@@ -677,7 +677,7 @@ Delete a package
677
677
  | Argument | Type | Description | Default |
678
678
  | --- | --- | --- | --- |
679
679
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the package | |
680
- | `cluster_id` | `UUID` | ID of the cluster to search for package name (or the last cluster if not set) | `None` |
680
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for package name (or the last cluster if not set) | `None` |
681
681
  | `--force` | `bool` | Delete related actions or tasks as well | `False` |
682
682
  | `--json` | `bool` | Output the result as JSON | `False` |
683
683
 
@@ -691,7 +691,7 @@ List all plans for a project
691
691
 
692
692
  | Argument | Type | Description | Default |
693
693
  | --- | --- | --- | --- |
694
- | `project_id` | `UUID` | ID of plan's project (or the last project if not set) | |
694
+ | `project_id` | `str` | Project name, slug, or UUID (defaults to saved project) | `None` |
695
695
  | `--name` | `str` | Filter by name (substring) | `None` |
696
696
  | `--json` | `bool` | Output the result as JSON | `False` |
697
697
 
@@ -702,7 +702,7 @@ Read a plan for a project
702
702
  | Argument | Type | Description | Default |
703
703
  | --- | --- | --- | --- |
704
704
  | `name_or_id` | `str` | Plan name or UUID (defaults to 'project_plan') | `None` |
705
- | `project_id` | `UUID` | ID of plan's project (or the last project if not set) | `None` |
705
+ | `project_id` | `str` | Project name, slug, or UUID (defaults to saved project) | `None` |
706
706
  | `--version` | `int` | Specific revision to read (default: head) | `None` |
707
707
  | `--json` | `bool` | Output the result as JSON | `False` |
708
708
 
@@ -713,7 +713,7 @@ Create or update a plan for a project (upsert)
713
713
  | Argument | Type | Description | Default |
714
714
  | --- | --- | --- | --- |
715
715
  | `name_or_id` | `str` | Plan name or UUID (defaults to 'project_plan') | `None` |
716
- | `project_id` | `UUID` | ID of plan's project (or the last project if not set) | `None` |
716
+ | `project_id` | `str` | Project name, slug, or UUID (defaults to saved project) | `None` |
717
717
  | `--content` | `str` | Plan content (markdown). Use --file to read from a file. | `None` |
718
718
  | `--file` | `Path` | Path to a file containing the plan content | `None` |
719
719
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -725,7 +725,7 @@ List revisions for a plan, newest first
725
725
  | Argument | Type | Description | Default |
726
726
  | --- | --- | --- | --- |
727
727
  | `name_or_id` | `Union[str, UUID]` | Plan name or UUID | |
728
- | `project_id` | `UUID` | ID of plan's project (or the last project if not set) | `None` |
728
+ | `project_id` | `str` | Project name, slug, or UUID (defaults to saved project) | `None` |
729
729
  | `--size` | `int` | Page size (1-100) | `50` |
730
730
  | `--after` | `UUID` | Cursor returned by a previous page | `None` |
731
731
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -737,7 +737,7 @@ Delete a plan
737
737
  | Argument | Type | Description | Default |
738
738
  | --- | --- | --- | --- |
739
739
  | `name_or_id` | `Union[str, UUID]` | Plan name or UUID | |
740
- | `project_id` | `UUID` | ID of plan's project (or the last project if not set) | `None` |
740
+ | `project_id` | `str` | Project name, slug, or UUID (defaults to saved project) | `None` |
741
741
  | `--json` | `bool` | Output the result as JSON | `False` |
742
742
 
743
743
  ### `ellf paths`
@@ -760,7 +760,7 @@ Get detailed info for a path alias
760
760
  | Argument | Type | Description | Default |
761
761
  | --- | --- | --- | --- |
762
762
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the path | |
763
- | `cluster_id` | `UUID` | ID of the cluster to search for path name (or the last cluster if not set) | `None` |
763
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for path name (or the last cluster if not set) | `None` |
764
764
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'path'] | `None` |
765
765
  | `--json` | `bool` | Output the result as JSON | `False` |
766
766
 
@@ -782,7 +782,7 @@ Delete a path alias
782
782
  | Argument | Type | Description | Default |
783
783
  | --- | --- | --- | --- |
784
784
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the path | |
785
- | `cluster_id` | `UUID` | ID of the cluster to search for path name (or the last cluster if not set) | `None` |
785
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for path name (or the last cluster if not set) | `None` |
786
786
  | `--json` | `bool` | Output the result as JSON | `False` |
787
787
 
788
788
  ### `ellf projects`
@@ -871,7 +871,7 @@ Show info about a recipe
871
871
  | Argument | Type | Description | Default |
872
872
  | --- | --- | --- | --- |
873
873
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the recipe | |
874
- | `cluster_id` | `UUID` | ID of the cluster to search for recipe name (or the last cluster if not set) | `None` |
874
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for recipe name (or the last cluster if not set) | `None` |
875
875
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'package_id', 'name', 'title', 'description', 'job_type', 'is_action', 'is_latest', 'entry_point', 'form_schema', 'cli_schema', 'meta', 'tasks', 'actions', 'package'] | `None` |
876
876
  | `--json` | `bool` | Output the result as JSON | `False` |
877
877
 
@@ -900,7 +900,7 @@ List all named pointers to secrets on the cluster
900
900
 
901
901
  | Argument | Type | Description | Default |
902
902
  | --- | --- | --- | --- |
903
- | `--cluster-id` | `UUID` | ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
903
+ | `--cluster-id` | `str` | Name, slug, or ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
904
904
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'cluster_id'] | `['created', 'id', 'name']` |
905
905
  | `--json` | `bool` | Output the result as JSON | `False` |
906
906
 
@@ -911,7 +911,7 @@ Show info about a secret on the cluster
911
911
  | Argument | Type | Description | Default |
912
912
  | --- | --- | --- | --- |
913
913
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the secret | |
914
- | `cluster_id` | `UUID` | ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
914
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
915
915
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'cluster_id'] | `None` |
916
916
  | `--json` | `bool` | Output the result as JSON | `False` |
917
917
 
@@ -933,7 +933,7 @@ Delete a secret by name or ID
933
933
  | Argument | Type | Description | Default |
934
934
  | --- | --- | --- | --- |
935
935
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the secret | |
936
- | `cluster_id` | `UUID` | ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
936
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for secret name (or the last cluster if not set) | `None` |
937
937
  | `--json` | `bool` | Output the result as JSON | `False` |
938
938
 
939
939
  ### `ellf tasks`
@@ -968,8 +968,8 @@ Print information about a task on the cluster
968
968
  | Argument | Type | Description | Default |
969
969
  | --- | --- | --- | --- |
970
970
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
971
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
972
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
971
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
972
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
973
973
  | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_id', 'related_actions', 'url_logs', 'url', 'created_by_user'] | `None` |
974
974
  | `--json` | `bool` | Output the result as JSON | `False` |
975
975
 
@@ -980,8 +980,8 @@ Get logs for a task on the cluster
980
980
  | Argument | Type | Description | Default |
981
981
  | --- | --- | --- | --- |
982
982
  | `name_or_id` | `str` | Name or ID of the task (or the last task if not set) | `None` |
983
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
984
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
983
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
984
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
985
985
  | `--json` | `bool` | Output the result as JSON | `False` |
986
986
  | `--errors` | `bool` | Show structured error information instead of full logs | `False` |
987
987
  | `--query` | `str` | Filter log lines matching this text (requires Loki) | `None` |
@@ -993,8 +993,8 @@ Start a task on the cluster
993
993
  | Argument | Type | Description | Default |
994
994
  | --- | --- | --- | --- |
995
995
  | `name_or_id` | `str` | Name or ID of the task (or the last task if not set) | `None` |
996
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
997
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
996
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
997
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
998
998
  | `--worker-class` | `str` | Worker class to launch the task on. Generally one of: ['medium', 'large', 'gpu'] | `None` |
999
999
  | `--no-wait` | `bool` | Don't wait for the task to be ready after starting | `False` |
1000
1000
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -1006,8 +1006,8 @@ Stop a task on the cluster
1006
1006
  | Argument | Type | Description | Default |
1007
1007
  | --- | --- | --- | --- |
1008
1008
  | `name_or_id` | `str` | Name or ID of the task (or the last task if not set) | `None` |
1009
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
1010
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1009
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
1010
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1011
1011
  | `--json` | `bool` | Output the result as JSON | `False` |
1012
1012
 
1013
1013
  #### `ellf tasks delete`
@@ -1017,8 +1017,8 @@ Delete a task by name or ID
1017
1017
  | Argument | Type | Description | Default |
1018
1018
  | --- | --- | --- | --- |
1019
1019
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
1020
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
1021
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1020
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
1021
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1022
1022
  | `--json` | `bool` | Output the result as JSON | `False` |
1023
1023
 
1024
1024
  #### `ellf tasks questions`
@@ -1028,8 +1028,8 @@ Fetch a batch of questions from a running annotation task. Mirrors the web app:
1028
1028
  | Argument | Type | Description | Default |
1029
1029
  | --- | --- | --- | --- |
1030
1030
  | `name_or_id` | `str` | Name or ID of the task (or the last task if not set) | `None` |
1031
- | `project_id` | `UUID` | ID of task's project (or the last project if not set) | `None` |
1032
- | `cluster_id` | `UUID` | ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1031
+ | `project_id` | `str` | Name, slug, or ID of task's project (or the last project if not set) | `None` |
1032
+ | `cluster_id` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1033
1033
  | `--json` | `bool` | Output the result as JSON | `False` |
1034
1034
 
1035
1035
  ### `ellf publish`
@@ -1258,7 +1258,7 @@ Send a support request to the Ellf team.
1258
1258
  | --- | --- | --- | --- |
1259
1259
  | `--message` | `str` | The user's support request or issue description | |
1260
1260
  | `--summary` | `str` | Optional support-ready summary of the issue and current state | `None` |
1261
- | `--project` | `UUID` | ID of support request's project (or the last project if not set) | `None` |
1261
+ | `--project` | `str` | Name, slug, or ID of support request's project (or the last project if not set) | `None` |
1262
1262
  | `--no-project` | `bool` | Explicitly send the request without any project association | `False` |
1263
1263
  | `--conversation` | `UUID` | Conversation ID to attach from PAM when available | `None` |
1264
1264
  | `--session-id` | `str` | Claude Code session ID to use for transcript/debug attachment lookup | `None` |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "title": "Ellf CLI",
3
3
  "name": "ellf-cli",
4
- "version": "6.0.2",
4
+ "version": "6.0.4",
5
5
  "summary": "Ellf Command Line Interface",
6
6
  "uri": "https://prodi.gy",
7
7
  "prog": "ellf",
@@ -210,10 +210,11 @@ class AuthStateImpl:
210
210
  # PAM lookup-by-address every time the user runs an ellf command.
211
211
  # `auth.cluster_id` falls back to the address lookup only if this is None.
212
212
  self._cluster_id = settings.cluster_id
213
- # Seed org_id from saved settings too: the user's api_token already
214
- # carries the org_id in its `oid` claim, but we don't decode the JWT
215
- # here. The saved setting reflects whatever was chosen at the last
216
- # `ellf login` and stays in sync via set_active_org.
213
+ # Seed org_id from saved-defaults as a fallback only. The ``org_id``
214
+ # property reads from the api_token's ``oid`` claim which is what
215
+ # PAM authorizes against and overwrites this value on first access.
216
+ # The seed is just here to satisfy callers that read ``_org_id``
217
+ # before any token is fetched.
217
218
  self._org_id = settings.org_id
218
219
  self._secrets_path = ctx.secrets_path
219
220
  self._saved_settings_path = ctx.saved_settings_path
@@ -269,9 +270,22 @@ class AuthStateImpl:
269
270
 
270
271
  @property
271
272
  def org_id(self) -> UUID:
273
+ # PAM authorizes against the api_token's ``oid`` claim, so the JWT
274
+ # is the source of truth. The saved-defaults pointer (seeded into
275
+ # ``_org_id`` in __init__) can drift — e.g. when secrets.json is
276
+ # restored from backup, when a switch updates the pointer without
277
+ # re-minting the token, or when an ELLF_API_TOKEN env var injects
278
+ # a token from a different org. Reading from the JWT keeps every
279
+ # caller (server-side request bodies, display strings) aligned
280
+ # with what PAM will actually authorize against.
281
+ oid = self.get_api_token().header.get("oid")
282
+ if oid is not None:
283
+ self._org_id = UUID(oid)
284
+ return self._org_id
272
285
  if self._org_id is None:
273
- # Exploits that the login should only have the user's
274
- # own org accessible
286
+ # Token missing the oid claim (older PAM tokens, or an
287
+ # externally-supplied ELLF_API_TOKEN). Fall back to listing —
288
+ # the login should only have the user's own org accessible.
275
289
  orgs = list(self.client.org.all())
276
290
  if not orgs:
277
291
  raise EllfError(message="Could not fetch orgs")
@@ -153,8 +153,8 @@ def list(
153
153
  )
154
154
  def info(
155
155
  name_or_id: Union[str, UUID],
156
- cluster_id: Optional[UUID] = None,
157
- project_id: Optional[UUID] = None,
156
+ cluster_id: Optional[Union[str, UUID]] = None,
157
+ project_id: Optional[Union[str, UUID]] = None,
158
158
  select: Optional[builtins.list[str]] = None,
159
159
  as_json: bool = False,
160
160
  ) -> ActionDetail:
@@ -184,8 +184,8 @@ def info(
184
184
  )
185
185
  def logs(
186
186
  name_or_id: Optional[Union[str, UUID]] = None,
187
- project_id: Optional[UUID] = None,
188
- cluster_id: Optional[UUID] = None,
187
+ project_id: Optional[Union[str, UUID]] = None,
188
+ cluster_id: Optional[Union[str, UUID]] = None,
189
189
  as_json: bool = False,
190
190
  show_errors: bool = False,
191
191
  query: Optional[str] = None,
@@ -239,8 +239,8 @@ def logs(
239
239
  )
240
240
  def start(
241
241
  name_or_id: Optional[Union[str, UUID]] = None,
242
- project_id: Optional[UUID] = None,
243
- cluster_id: Optional[UUID] = None,
242
+ project_id: Optional[Union[str, UUID]] = None,
243
+ cluster_id: Optional[Union[str, UUID]] = None,
244
244
  worker_class: Optional[str] = None,
245
245
  no_wait: bool = False,
246
246
  as_json: bool = False,
@@ -272,8 +272,8 @@ def start(
272
272
  )
273
273
  def stop(
274
274
  name_or_id: Optional[Union[str, UUID]] = None,
275
- project_id: Optional[UUID] = None,
276
- cluster_id: Optional[UUID] = None,
275
+ project_id: Optional[Union[str, UUID]] = None,
276
+ cluster_id: Optional[Union[str, UUID]] = None,
277
277
  as_json: bool = False,
278
278
  ) -> UUID:
279
279
  """Stop an action on the cluster"""
@@ -297,8 +297,8 @@ def stop(
297
297
  )
298
298
  def delete(
299
299
  name_or_id: Union[str, UUID],
300
- project_id: Optional[UUID] = None,
301
- cluster_id: Optional[UUID] = None,
300
+ project_id: Optional[Union[str, UUID]] = None,
301
+ cluster_id: Optional[Union[str, UUID]] = None,
302
302
  as_json: bool = False,
303
303
  ) -> UUID:
304
304
  """Delete an Action by name or ID"""
@@ -117,8 +117,8 @@ def create(
117
117
  def assign(
118
118
  name_or_id: Union[str, UUID],
119
119
  task: Union[str, UUID],
120
- project_id: Optional[UUID] = None,
121
- cluster_id: Optional[UUID] = None,
120
+ project_id: Optional[Union[str, UUID]] = None,
121
+ cluster_id: Optional[Union[str, UUID]] = None,
122
122
  as_json: bool = False,
123
123
  ) -> None:
124
124
  """Assign an agent to a task as an annotator"""
@@ -188,8 +188,8 @@ def list(
188
188
  )
189
189
  def info(
190
190
  name_or_id: Union[str, UUID],
191
- cluster_id: Optional[UUID] = None,
192
- project_id: Optional[UUID] = None,
191
+ cluster_id: Optional[Union[str, UUID]] = None,
192
+ project_id: Optional[Union[str, UUID]] = None,
193
193
  select: Optional[builtins.list[str]] = None,
194
194
  as_json: bool = False,
195
195
  ) -> AgentDetail:
@@ -219,8 +219,8 @@ def info(
219
219
  )
220
220
  def logs(
221
221
  name_or_id: Optional[Union[str, UUID]] = None,
222
- project_id: Optional[UUID] = None,
223
- cluster_id: Optional[UUID] = None,
222
+ project_id: Optional[Union[str, UUID]] = None,
223
+ cluster_id: Optional[Union[str, UUID]] = None,
224
224
  as_json: bool = False,
225
225
  show_errors: bool = False,
226
226
  query: Optional[str] = None,
@@ -274,8 +274,8 @@ def logs(
274
274
  )
275
275
  def start(
276
276
  name_or_id: Optional[Union[str, UUID]] = None,
277
- project_id: Optional[UUID] = None,
278
- cluster_id: Optional[UUID] = None,
277
+ project_id: Optional[Union[str, UUID]] = None,
278
+ cluster_id: Optional[Union[str, UUID]] = None,
279
279
  worker_class: Optional[str] = None,
280
280
  no_wait: bool = False,
281
281
  as_json: bool = False,
@@ -306,8 +306,8 @@ def start(
306
306
  )
307
307
  def stop(
308
308
  name_or_id: Optional[Union[str, UUID]] = None,
309
- project_id: Optional[UUID] = None,
310
- cluster_id: Optional[UUID] = None,
309
+ project_id: Optional[Union[str, UUID]] = None,
310
+ cluster_id: Optional[Union[str, UUID]] = None,
311
311
  as_json: bool = False,
312
312
  ) -> UUID:
313
313
  """Stop an agent on the cluster"""
@@ -330,8 +330,8 @@ def stop(
330
330
  )
331
331
  def delete(
332
332
  name_or_id: Union[str, UUID],
333
- project_id: Optional[UUID] = None,
334
- cluster_id: Optional[UUID] = None,
333
+ project_id: Optional[Union[str, UUID]] = None,
334
+ cluster_id: Optional[Union[str, UUID]] = None,
335
335
  as_json: bool = False,
336
336
  ) -> UUID:
337
337
  """Delete an agent by name or ID"""
@@ -31,7 +31,7 @@ from ._state import get_auth_state
31
31
  # fmt: on
32
32
  )
33
33
  def list(
34
- cluster_id: Optional[UUID] = None,
34
+ cluster_id: Optional[Union[str, UUID]] = None,
35
35
  select: builtins.list[str] = ["id", "name", "kind"],
36
36
  as_json: bool = False,
37
37
  ) -> Sequence[AssetSummary]:
@@ -58,8 +58,8 @@ def list(
58
58
  )
59
59
  def info(
60
60
  name_or_id: Union[str, UUID],
61
- project_id: Optional[UUID] = None,
62
- cluster_id: Optional[UUID] = None,
61
+ project_id: Optional[Union[str, UUID]] = None,
62
+ cluster_id: Optional[Union[str, UUID]] = None,
63
63
  select: Optional[builtins.list[str]] = None,
64
64
  as_json: bool = False,
65
65
  ) -> AssetDetail:
@@ -140,8 +140,8 @@ def create(
140
140
  )
141
141
  def delete(
142
142
  name_or_id: Union[str, UUID],
143
- cluster_id: Optional[UUID] = None,
144
- project_id: Optional[UUID] = None,
143
+ cluster_id: Optional[Union[str, UUID]] = None,
144
+ project_id: Optional[Union[str, UUID]] = None,
145
145
  as_json: bool = False,
146
146
  ) -> UUID:
147
147
  """Delete an asset registered with Ellf"""
@@ -75,8 +75,8 @@ def project(name_or_id: Union[str, UUID], as_json: bool = False) -> UUID:
75
75
  )
76
76
  def task(
77
77
  name_or_id: Union[str, UUID],
78
- cluster_id: Optional[UUID] = None,
79
- project_id: Optional[UUID] = None,
78
+ cluster_id: Optional[Union[str, UUID]] = None,
79
+ project_id: Optional[Union[str, UUID]] = None,
80
80
  as_json: bool = False,
81
81
  ) -> UUID:
82
82
  """Set the default task."""
@@ -103,8 +103,8 @@ def task(
103
103
  )
104
104
  def action(
105
105
  name_or_id: Union[str, UUID],
106
- cluster_id: Optional[UUID] = None,
107
- project_id: Optional[UUID] = None,
106
+ cluster_id: Optional[Union[str, UUID]] = None,
107
+ project_id: Optional[Union[str, UUID]] = None,
108
108
  as_json: bool = False,
109
109
  ) -> UUID:
110
110
  """Set the default action."""
@@ -133,8 +133,8 @@ def action(
133
133
  )
134
134
  def agent(
135
135
  name_or_id: Union[str, UUID],
136
- cluster_id: Optional[UUID] = None,
137
- project_id: Optional[UUID] = None,
136
+ cluster_id: Optional[Union[str, UUID]] = None,
137
+ project_id: Optional[Union[str, UUID]] = None,
138
138
  as_json: bool = False,
139
139
  ) -> UUID:
140
140
  """Set the default agent."""