ellf-cli 21.0.8__tar.gz → 21.0.9__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.
- {ellf_cli-21.0.8/ellf_cli.egg-info → ellf_cli-21.0.9}/PKG-INFO +1 -1
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/README.md +4 -4
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_recipe_subcommand.py +49 -12
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/actions.py +16 -6
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/agents.py +16 -6
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/services.py +16 -6
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/tasks.py +16 -6
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf.json +9 -9
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/messages.py +0 -1
- ellf_cli-21.0.9/ellf_cli/recipes_cookiecutter/cookiecutter.json +11 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -1
- ellf_cli-21.0.9/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +78 -0
- ellf_cli-21.0.9/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +2 -0
- ellf_cli-21.0.9/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +1 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +3 -2
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +7 -3
- ellf_cli-21.0.9/ellf_cli/version/21.0.8_2026-10-29-13-48-18_patch_bdab3ee6-fba8-4625-9243-c4cbe839ba32 +3 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/SOURCES.txt +3 -0
- ellf_cli-21.0.9/tests/test_recipe_help.py +75 -0
- ellf_cli-21.0.9/tests/test_recipes_init.py +49 -0
- ellf_cli-21.0.8/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -7
- ellf_cli-21.0.8/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -97
- ellf_cli-21.0.8/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -8
- ellf_cli-21.0.8/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -1
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/LICENSE +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/MANIFEST.in +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/__main__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/about.json +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/about.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/agents.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/auth.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/cli.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_project_scope.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/_usage.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/_config_io.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/configure.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/hibernate.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/init.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/pause.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/mcp.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/sessions.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/commands/users.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/config.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/render.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_prodigy_recipes.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor/scripts.coding/check_training.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-ops/references.coding/data_infra_cli.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-ops/scripts.coding/run_job.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_service_recipe.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/annotation_agents.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/consulting_patterns.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/explosion_strategy.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/jev.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-template/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-template/references/template_format.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-template/scripts/placeholders.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/config_advanced.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/config_architectures.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/config_training.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/diagnostics.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/evaluation_guide.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/experiment_patterns.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/model_selection.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/training_paradigms.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/training_troubleshooting.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.assistant.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.coding.md +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ellf_skills/skills/ellf-train/scripts.coding/ellf_logger.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/errors.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/helm.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/interactivity.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/main.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/mcp_proxy.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/pypi_auth.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/query.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ty.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/ui.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/url.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/util.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.10_2026-10-02-12-56-52_patch_14e97576-73ca-44b8-82c9-7dad6f1789ab +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.11_2026-10-04-10-31-19_patch_088eb371-1799-4949-a119-286cf1cd55d1 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.12_2026-10-06-18-00-25_patch_36554bed-49c5-41cb-9fd4-48cc6af74c09 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.13_2026-10-07-12-24-08_patch_a540a364-3a0d-4960-b278-06ba2c7cc258 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.14_2026-10-07-12-52-39_patch_e3a6fc5c-2ee4-414c-a2dd-4910a655a7dd +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.15_2026-10-09-04-15-56_patch_bd7a9b06-867b-4fea-9678-973a05e3022d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.16_2026-10-09-16-11-56_patch_a1135435-7dea-4f00-8c98-203ba3974382 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.17_2026-10-09-17-44-55_patch_faeacad8-541a-40f2-ab9c-abcd66fcd00e +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.18_2026-10-10-07-29-38_major_02601a1e-9bdb-45bf-ad67-a07b7dcd0002 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.3_2026-09-29-14-16-00_patch_3cb60272-95cf-4311-8897-721e1b5c2c88 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.4_2026-09-29-16-24-53_patch_9fe8ad2b-e3ec-4558-a5fc-9c44c5c266dc +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.5_2026-09-29-17-13-16_patch_e48d2dd2-f41a-402e-a441-756b23c01dcb +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.6_2026-09-29-17-22-11_patch_3b1c79e9-9002-4e96-ba78-10668c33be6a +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.7_2026-09-30-07-50-58_patch_e8b1f046-d819-499c-9cd5-3e1a20fc9acf +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.8_2026-10-01-13-41-44_patch_7d63af18-e0af-4127-ab58-aede2407490f +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/19.0.9_2026-10-01-15-57-35_patch_143863cb-8f63-4ef7-bd78-c1114fc93a2d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.0_2026-10-10-09-36-17_patch_d2618f39-cdc9-4d3a-ba40-1a0ad6265f3b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.1_2026-10-11-10-24-33_patch_e29a8713-eecb-4eb1-9641-789d3cfab21a +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.2_2026-10-12-07-22-24_patch_f4053ad1-8fcd-4591-a68d-bf1e23485ba7 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.3_2026-10-14-14-29-16_patch_070af1c4-f9d9-4f97-8112-058de90d3ea8 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.4_2026-10-14-16-20-24_patch_c6672844-8227-4e0a-9fb5-36af7e7141dc +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.5_2026-10-15-08-53-28_patch_10154146-8afd-4632-b250-9b4b9f5bf67c +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.6_2026-10-15-14-17-40_patch_df3a5d3c-f0e0-46cb-aeaf-15b51c8a0f13 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/20.0.7_2026-10-16-07-09-40_major_3e5dfba3-2810-47b4-85a9-938bfff72a04 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.0_2026-10-16-10-44-29_patch_1058e453-613f-492b-a3c7-f3ca2abe8c2d +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.1_2026-10-16-16-06-10_patch_e20b4ad2-b87f-478e-b4f4-323c8bcc5ea9 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.2_2026-10-19-13-54-31_patch_bf091df4-00bb-43c8-9117-51047944e305 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.3_2026-10-19-14-58-29_patch_9b985381-1b1d-4531-b242-b02cea2484c5 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.4_2026-10-20-17-08-51_patch_38d02583-cb5c-4adc-b5d7-614b483acf19 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.5_2026-10-21-09-28-47_patch_fabd5cfe-2d04-4215-abf1-58fba226acb7 +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.6_2026-10-22-16-07-37_patch_d2bb27d7-6304-4c99-abbc-46d3dd7e363b +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/21.0.7_2026-10-27-11-41-55_patch_6b50567f-209d-42c9-a2cd-d251a2bc8fbf +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/__init__.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli/version/read_version.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/pyproject.toml +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/setup.cfg +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/setup.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_agents.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_agents_info_stats.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_appdirs.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_auth.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_clusters_info_stats.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_config.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_datasets_export.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_errors.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_files_cp.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_helm.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_import_export.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_info.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_config_io.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_configure.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_deploy_node_labels.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_deploy_preflight.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_destroy.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_get_terraform.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_hibernate.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_init.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_pause.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_provision.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_start_fixes.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_start_validation.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_state_bucket.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_infra_terraform_init.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_job_list_project_filter.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_jobs_info_hides_creator.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_jobs_list_unmatched.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_key_pair.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_login.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_logout.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_main.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_mcp_proxy.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_org_select.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_plans.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_projects.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_projects_delete_confirm.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_publish_build_poll.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_publish_data.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_publish_import_root.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_publish_requirements.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_publish_versions.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_pypi_auth.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_query.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_recipe_file.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_recipe_required_args.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_recipes.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_sessions.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_state.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_support.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_todos.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_ty.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_ui.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_ui_extras.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_usage_counts.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_users_assign.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_users_info_stats.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_users_list.py +0 -0
- {ellf_cli-21.0.8 → ellf_cli-21.0.9}/tests/test_util.py +0 -0
|
@@ -19,7 +19,7 @@ Create a new action. The available action recipes are fetched from your cluster
|
|
|
19
19
|
| Argument | Type | Description | Default |
|
|
20
20
|
| --- | --- | --- | --- |
|
|
21
21
|
| `--exists-ok` | `bool` | Don't raise an error if it already exists | `False` |
|
|
22
|
-
| `--no-start` | `bool` | Don't start
|
|
22
|
+
| `--no-start` | `bool` | Don't start action after creation | `False` |
|
|
23
23
|
| `--no-wait` | `bool` | Don't wait for the action to be ready after starting | `False` |
|
|
24
24
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
25
25
|
| `--help`, `-h` | `bool` | Show help message | `False` |
|
|
@@ -178,7 +178,7 @@ Create a new agent. The available agent recipes are fetched from your cluster an
|
|
|
178
178
|
| Argument | Type | Description | Default |
|
|
179
179
|
| --- | --- | --- | --- |
|
|
180
180
|
| `--exists-ok` | `bool` | Don't raise an error if it already exists | `False` |
|
|
181
|
-
| `--no-start` | `bool` | Don't start
|
|
181
|
+
| `--no-start` | `bool` | Don't start agent after creation | `False` |
|
|
182
182
|
| `--no-wait` | `bool` | Don't wait for the agent to be ready after starting | `False` |
|
|
183
183
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
184
184
|
| `--help`, `-h` | `bool` | Show help message | `False` |
|
|
@@ -1262,7 +1262,7 @@ Create a new service. The available service recipes are fetched from your cluste
|
|
|
1262
1262
|
| Argument | Type | Description | Default |
|
|
1263
1263
|
| --- | --- | --- | --- |
|
|
1264
1264
|
| `--exists-ok` | `bool` | Don't raise an error if it already exists | `False` |
|
|
1265
|
-
| `--no-start` | `bool` | Don't start
|
|
1265
|
+
| `--no-start` | `bool` | Don't start service after creation | `False` |
|
|
1266
1266
|
| `--no-wait` | `bool` | Don't wait for the service to be ready after starting | `False` |
|
|
1267
1267
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1268
1268
|
| `--help`, `-h` | `bool` | Show help message | `False` |
|
|
@@ -1425,7 +1425,7 @@ Create a new task. The available task recipes are fetched from your cluster and
|
|
|
1425
1425
|
| Argument | Type | Description | Default |
|
|
1426
1426
|
| --- | --- | --- | --- |
|
|
1427
1427
|
| `--exists-ok` | `bool` | Don't raise an error if it already exists | `False` |
|
|
1428
|
-
| `--no-start` | `bool` | Don't start
|
|
1428
|
+
| `--no-start` | `bool` | Don't start task after creation | `False` |
|
|
1429
1429
|
| `--no-wait` | `bool` | Don't wait for the task to be ready after starting | `False` |
|
|
1430
1430
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1431
1431
|
| `--help`, `-h` | `bool` | Show help message | `False` |
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from argparse import SUPPRESS
|
|
3
4
|
from collections.abc import Callable
|
|
4
5
|
from typing import cast
|
|
5
6
|
from uuid import UUID
|
|
@@ -52,6 +53,19 @@ def get_converter(arg_type: type) -> ConverterType | None:
|
|
|
52
53
|
return CONVERTERS.get(arg_type, None)
|
|
53
54
|
|
|
54
55
|
|
|
56
|
+
def create_options(noun: str) -> dict[str, Arg]:
|
|
57
|
+
"""Flags of the `<jobs> create` commands themselves. Radicli parses these
|
|
58
|
+
before the recipe arguments, so they're also passed to the recipe's
|
|
59
|
+
parser to show up in `<jobs> create <recipe> --help`.
|
|
60
|
+
"""
|
|
61
|
+
return {
|
|
62
|
+
"exists_ok": Arg("--exists-ok", help=Messages.exists_ok),
|
|
63
|
+
"no_start": Arg("--no-start", help=Messages.no_start.format(noun=noun)),
|
|
64
|
+
"no_wait": Arg("--no-wait", help=Messages.no_wait.format(noun=noun)),
|
|
65
|
+
"as_json": Arg("--json", help=Messages.as_json),
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
55
69
|
def _get_noun(recipe: RecipeDetail | RecipeSummary) -> str:
|
|
56
70
|
"""A recipe's job type: one of task, action, agent, service. Prefer job_type
|
|
57
71
|
and fall back to is_action only when it is absent.
|
|
@@ -111,6 +125,7 @@ def create_from_recipe(
|
|
|
111
125
|
command: str,
|
|
112
126
|
show_help: bool,
|
|
113
127
|
exists_ok: bool = False,
|
|
128
|
+
options: dict[str, Arg] | None = None,
|
|
114
129
|
) -> tuple[UUID, RecipePlanCreating]:
|
|
115
130
|
# There's a few steps here:
|
|
116
131
|
# 1. Parse the CLI string into arguments
|
|
@@ -124,6 +139,7 @@ def create_from_recipe(
|
|
|
124
139
|
parser_prog=f"{cli.prog} {command} create {recipe.name.lower()}",
|
|
125
140
|
show_help=show_help,
|
|
126
141
|
get_project_id=_get_default_project_id,
|
|
142
|
+
options=options,
|
|
127
143
|
)
|
|
128
144
|
except ShowHelp as e:
|
|
129
145
|
print(e.help_text)
|
|
@@ -163,17 +179,18 @@ def _parse_plan(
|
|
|
163
179
|
parser_prog: str,
|
|
164
180
|
show_help: bool,
|
|
165
181
|
get_project_id: Callable[[], UUID | None],
|
|
182
|
+
options: dict[str, Arg] | None = None,
|
|
166
183
|
) -> tuple[str | None, UUID, RecipePlanCreating]:
|
|
167
184
|
# This function works hard to be pure and not rely on
|
|
168
185
|
# external state. This way we'll be able to work with it in
|
|
169
186
|
# the compatibility tests more easily.
|
|
170
187
|
noun = _get_noun(recipe)
|
|
171
188
|
ap_args = _get_argparse_args(recipe)
|
|
172
|
-
parser = _get_argparse_parser(parser_prog, recipe, ap_args)
|
|
189
|
+
parser = _get_argparse_parser(parser_prog, recipe, ap_args, options=options)
|
|
173
190
|
if not args or show_help:
|
|
174
191
|
raise ShowHelp(parser.format_help())
|
|
175
192
|
task_or_action_name, project_id, worker_class, plan_args = _parse_cli_args(
|
|
176
|
-
parser, args
|
|
193
|
+
parser, args, options=options
|
|
177
194
|
)
|
|
178
195
|
missing = _check_missing(recipe, ap_args, plan_args)
|
|
179
196
|
if missing:
|
|
@@ -204,8 +221,11 @@ def _get_default_project_id() -> UUID | None:
|
|
|
204
221
|
def _parse_cli_args(
|
|
205
222
|
parser: ArgumentParser,
|
|
206
223
|
args: list[str],
|
|
224
|
+
*,
|
|
225
|
+
options: dict[str, Arg] | None = None,
|
|
207
226
|
) -> tuple[str | None, UUID | None, str | None, dict[str, Arg]]:
|
|
208
227
|
parsed = vars(parser.parse_args(args))
|
|
228
|
+
_pop_non_recipe_args(parsed, options)
|
|
209
229
|
task_or_action_name = parsed.pop("name", None)
|
|
210
230
|
assert isinstance(task_or_action_name, (str, type(None)))
|
|
211
231
|
project_ref = parsed.pop("project_id")
|
|
@@ -216,10 +236,19 @@ def _parse_cli_args(
|
|
|
216
236
|
# project reference, so it stays consistent.
|
|
217
237
|
project_id = resolve_project_id(project_ref)
|
|
218
238
|
worker_class = parsed.pop("worker_class", None)
|
|
219
|
-
parsed.pop("runtime", None) # legacy field, ignored
|
|
220
239
|
return (task_or_action_name, project_id, worker_class, parsed)
|
|
221
240
|
|
|
222
241
|
|
|
242
|
+
def _pop_non_recipe_args(
|
|
243
|
+
parsed: dict[str, object], options: dict[str, Arg] | None
|
|
244
|
+
) -> None:
|
|
245
|
+
# The create options are consumed by radicli before the recipe parser
|
|
246
|
+
# runs, and --runtime is a legacy flag that's accepted but ignored
|
|
247
|
+
parsed.pop("runtime", None)
|
|
248
|
+
for key in options or {}:
|
|
249
|
+
parsed.pop(key, None)
|
|
250
|
+
|
|
251
|
+
|
|
223
252
|
def _check_missing(recipe: RecipeDetail, ap_args, parsed) -> list[str]:
|
|
224
253
|
optional = get_field_optional(recipe.form_schema) # type: ignore[arg-type]
|
|
225
254
|
# Arg ids are CLI names, which can rename a union variant to its union's
|
|
@@ -256,7 +285,11 @@ def _get_argparse_args(recipe: RecipeDetail) -> list[ArgparseArg]:
|
|
|
256
285
|
|
|
257
286
|
|
|
258
287
|
def _get_argparse_parser(
|
|
259
|
-
prog: str,
|
|
288
|
+
prog: str,
|
|
289
|
+
recipe: RecipeDetail,
|
|
290
|
+
ap_args: list[ArgparseArg],
|
|
291
|
+
*,
|
|
292
|
+
options: dict[str, Arg] | None = None,
|
|
260
293
|
) -> ArgumentParser:
|
|
261
294
|
noun = _get_noun(recipe)
|
|
262
295
|
# To get argument parsing and consistent help docs out-of-the-box we create
|
|
@@ -285,13 +318,12 @@ def _get_argparse_parser(
|
|
|
285
318
|
worker_class = get_arg("worker_class", worker_class_arg, str, default=None)
|
|
286
319
|
worker_class_args, worker_class_kwargs = worker_class.to_argparse()
|
|
287
320
|
p.add_argument(*worker_class_args, **worker_class_kwargs)
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
p.add_argument(*runtime_args, **runtime_kwargs)
|
|
321
|
+
p.add_argument("--runtime", dest="runtime", default=None, help=SUPPRESS)
|
|
322
|
+
if options:
|
|
323
|
+
group = p.add_argument_group("create options")
|
|
324
|
+
for key, arg in options.items():
|
|
325
|
+
assert arg.option is not None
|
|
326
|
+
group.add_argument(arg.option, dest=key, action="store_true", help=arg.help)
|
|
295
327
|
return p
|
|
296
328
|
|
|
297
329
|
|
|
@@ -433,6 +465,7 @@ def create_from_recipe_file(
|
|
|
433
465
|
command: str,
|
|
434
466
|
show_help: bool,
|
|
435
467
|
job_type: str,
|
|
468
|
+
options: dict[str, Arg] | None = None,
|
|
436
469
|
) -> broker_models.JobSpec:
|
|
437
470
|
"""Parse CLI args and build a JobSpec directly, bypassing PAM.
|
|
438
471
|
|
|
@@ -440,12 +473,16 @@ def create_from_recipe_file(
|
|
|
440
473
|
"""
|
|
441
474
|
ap_args = _get_argparse_args(recipe)
|
|
442
475
|
parser = _get_argparse_parser(
|
|
443
|
-
f"{cli.prog} {command} create {recipe.name.lower()}",
|
|
476
|
+
f"{cli.prog} {command} create {recipe.name.lower()}",
|
|
477
|
+
recipe,
|
|
478
|
+
ap_args,
|
|
479
|
+
options=options,
|
|
444
480
|
)
|
|
445
481
|
if not args or show_help:
|
|
446
482
|
print(parser.format_help())
|
|
447
483
|
raise SystemExit(0)
|
|
448
484
|
parsed = vars(parser.parse_args(args))
|
|
485
|
+
_pop_non_recipe_args(parsed, options)
|
|
449
486
|
job_name = parsed.pop("name", None)
|
|
450
487
|
parsed.pop("project_id", None)
|
|
451
488
|
parsed.pop("worker_class", None)
|
|
@@ -36,18 +36,18 @@ from ._project_scope import resolve_list_project_id
|
|
|
36
36
|
from ._recipe_subcommand import (
|
|
37
37
|
create_from_recipe,
|
|
38
38
|
create_from_recipe_file,
|
|
39
|
+
create_options,
|
|
39
40
|
request_recipes,
|
|
40
41
|
)
|
|
41
42
|
from ._state import get_auth_state, get_saved_settings
|
|
42
43
|
|
|
44
|
+
CREATE_OPTIONS = create_options("action")
|
|
45
|
+
|
|
43
46
|
|
|
44
47
|
@cli.subcommand_with_extra(
|
|
45
48
|
"actions",
|
|
46
49
|
"create",
|
|
47
|
-
|
|
48
|
-
no_start=Arg("--no-start", help=Messages.no_start),
|
|
49
|
-
no_wait=Arg("--no-wait", help=Messages.no_wait.format(noun="action")),
|
|
50
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
50
|
+
**CREATE_OPTIONS,
|
|
51
51
|
_show_help=Arg("--help", "-h", help=Messages.help),
|
|
52
52
|
)
|
|
53
53
|
def create(
|
|
@@ -84,7 +84,12 @@ def create(
|
|
|
84
84
|
if is_file_mode:
|
|
85
85
|
schema = action_schemas[name]
|
|
86
86
|
job_spec = create_from_recipe_file(
|
|
87
|
-
schema,
|
|
87
|
+
schema,
|
|
88
|
+
args,
|
|
89
|
+
command="actions",
|
|
90
|
+
show_help=_show_help,
|
|
91
|
+
job_type="action",
|
|
92
|
+
options=CREATE_OPTIONS,
|
|
88
93
|
)
|
|
89
94
|
print_mutation_result(
|
|
90
95
|
{"id": str(job_spec.job_id), "name": job_spec.name},
|
|
@@ -109,7 +114,12 @@ def create(
|
|
|
109
114
|
return job_spec.job_id
|
|
110
115
|
schema = resolve_recipe(name, cluster_id=auth.cluster_id)
|
|
111
116
|
action_id, plan = create_from_recipe(
|
|
112
|
-
schema,
|
|
117
|
+
schema,
|
|
118
|
+
args,
|
|
119
|
+
command="actions",
|
|
120
|
+
show_help=_show_help,
|
|
121
|
+
exists_ok=exists_ok,
|
|
122
|
+
options=CREATE_OPTIONS,
|
|
113
123
|
)
|
|
114
124
|
print_mutation_result(
|
|
115
125
|
{"id": str(action_id)},
|
|
@@ -39,18 +39,18 @@ from ._project_scope import resolve_list_project_id
|
|
|
39
39
|
from ._recipe_subcommand import (
|
|
40
40
|
create_from_recipe,
|
|
41
41
|
create_from_recipe_file,
|
|
42
|
+
create_options,
|
|
42
43
|
request_recipes,
|
|
43
44
|
)
|
|
44
45
|
from ._state import get_auth_state, get_saved_settings
|
|
45
46
|
|
|
47
|
+
CREATE_OPTIONS = create_options("agent")
|
|
48
|
+
|
|
46
49
|
|
|
47
50
|
@cli.subcommand_with_extra(
|
|
48
51
|
"agents",
|
|
49
52
|
"create",
|
|
50
|
-
|
|
51
|
-
no_start=Arg("--no-start", help=Messages.no_start),
|
|
52
|
-
no_wait=Arg("--no-wait", help=Messages.no_wait.format(noun="agent")),
|
|
53
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
53
|
+
**CREATE_OPTIONS,
|
|
54
54
|
_show_help=Arg("--help", "-h", help=Messages.help),
|
|
55
55
|
)
|
|
56
56
|
def create(
|
|
@@ -87,7 +87,12 @@ def create(
|
|
|
87
87
|
if is_file_mode:
|
|
88
88
|
schema = schemas[name]
|
|
89
89
|
job_spec = create_from_recipe_file(
|
|
90
|
-
schema,
|
|
90
|
+
schema,
|
|
91
|
+
args,
|
|
92
|
+
command="agents",
|
|
93
|
+
show_help=_show_help,
|
|
94
|
+
job_type="agent",
|
|
95
|
+
options=CREATE_OPTIONS,
|
|
91
96
|
)
|
|
92
97
|
print_mutation_result(
|
|
93
98
|
{"id": str(job_spec.job_id), "name": job_spec.name},
|
|
@@ -112,7 +117,12 @@ def create(
|
|
|
112
117
|
return job_spec.job_id
|
|
113
118
|
schema = resolve_recipe(name, cluster_id=auth.cluster_id)
|
|
114
119
|
agent_id, plan = create_from_recipe(
|
|
115
|
-
schema,
|
|
120
|
+
schema,
|
|
121
|
+
args,
|
|
122
|
+
command="agents",
|
|
123
|
+
show_help=_show_help,
|
|
124
|
+
exists_ok=exists_ok,
|
|
125
|
+
options=CREATE_OPTIONS,
|
|
116
126
|
)
|
|
117
127
|
print_mutation_result(
|
|
118
128
|
{"id": str(agent_id)},
|
|
@@ -36,18 +36,18 @@ from ._project_scope import resolve_list_project_id
|
|
|
36
36
|
from ._recipe_subcommand import (
|
|
37
37
|
create_from_recipe,
|
|
38
38
|
create_from_recipe_file,
|
|
39
|
+
create_options,
|
|
39
40
|
request_recipes,
|
|
40
41
|
)
|
|
41
42
|
from ._state import get_auth_state, get_saved_settings
|
|
42
43
|
|
|
44
|
+
CREATE_OPTIONS = create_options("service")
|
|
45
|
+
|
|
43
46
|
|
|
44
47
|
@cli.subcommand_with_extra(
|
|
45
48
|
"services",
|
|
46
49
|
"create",
|
|
47
|
-
|
|
48
|
-
no_start=Arg("--no-start", help=Messages.no_start),
|
|
49
|
-
no_wait=Arg("--no-wait", help=Messages.no_wait.format(noun="service")),
|
|
50
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
50
|
+
**CREATE_OPTIONS,
|
|
51
51
|
_show_help=Arg("--help", "-h", help=Messages.help),
|
|
52
52
|
)
|
|
53
53
|
def create(
|
|
@@ -84,7 +84,12 @@ def create(
|
|
|
84
84
|
if is_file_mode:
|
|
85
85
|
schema = schemas[name]
|
|
86
86
|
job_spec = create_from_recipe_file(
|
|
87
|
-
schema,
|
|
87
|
+
schema,
|
|
88
|
+
args,
|
|
89
|
+
command="services",
|
|
90
|
+
show_help=_show_help,
|
|
91
|
+
job_type="service",
|
|
92
|
+
options=CREATE_OPTIONS,
|
|
88
93
|
)
|
|
89
94
|
print_mutation_result(
|
|
90
95
|
{"id": str(job_spec.job_id), "name": job_spec.name},
|
|
@@ -109,7 +114,12 @@ def create(
|
|
|
109
114
|
return job_spec.job_id
|
|
110
115
|
schema = resolve_recipe(name, cluster_id=auth.cluster_id)
|
|
111
116
|
service_id, plan = create_from_recipe(
|
|
112
|
-
schema,
|
|
117
|
+
schema,
|
|
118
|
+
args,
|
|
119
|
+
command="services",
|
|
120
|
+
show_help=_show_help,
|
|
121
|
+
exists_ok=exists_ok,
|
|
122
|
+
options=CREATE_OPTIONS,
|
|
113
123
|
)
|
|
114
124
|
print_mutation_result(
|
|
115
125
|
{"id": str(service_id)},
|
|
@@ -40,18 +40,18 @@ from ._project_scope import resolve_list_project_id
|
|
|
40
40
|
from ._recipe_subcommand import (
|
|
41
41
|
create_from_recipe,
|
|
42
42
|
create_from_recipe_file,
|
|
43
|
+
create_options,
|
|
43
44
|
request_recipes,
|
|
44
45
|
)
|
|
45
46
|
from ._state import get_auth_state, get_saved_settings
|
|
46
47
|
|
|
48
|
+
CREATE_OPTIONS = create_options("task")
|
|
49
|
+
|
|
47
50
|
|
|
48
51
|
@cli.subcommand_with_extra(
|
|
49
52
|
"tasks",
|
|
50
53
|
"create",
|
|
51
|
-
|
|
52
|
-
no_start=Arg("--no-start", help=Messages.no_start),
|
|
53
|
-
no_wait=Arg("--no-wait", help=Messages.no_wait.format(noun="task")),
|
|
54
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
54
|
+
**CREATE_OPTIONS,
|
|
55
55
|
_show_help=Arg("--help", "-h", help=Messages.help),
|
|
56
56
|
)
|
|
57
57
|
def create(
|
|
@@ -94,7 +94,12 @@ def create(
|
|
|
94
94
|
if is_file_mode:
|
|
95
95
|
schema = schemas[name]
|
|
96
96
|
job_spec = create_from_recipe_file(
|
|
97
|
-
schema,
|
|
97
|
+
schema,
|
|
98
|
+
args,
|
|
99
|
+
command="tasks",
|
|
100
|
+
show_help=_show_help,
|
|
101
|
+
job_type="task",
|
|
102
|
+
options=CREATE_OPTIONS,
|
|
98
103
|
)
|
|
99
104
|
print_mutation_result(
|
|
100
105
|
{"id": str(job_spec.job_id), "name": job_spec.name},
|
|
@@ -119,7 +124,12 @@ def create(
|
|
|
119
124
|
return job_spec.job_id
|
|
120
125
|
schema = resolve_recipe(name, cluster_id=auth.cluster_id)
|
|
121
126
|
task_id, plan = create_from_recipe(
|
|
122
|
-
schema,
|
|
127
|
+
schema,
|
|
128
|
+
args,
|
|
129
|
+
command="tasks",
|
|
130
|
+
show_help=_show_help,
|
|
131
|
+
exists_ok=exists_ok,
|
|
132
|
+
options=CREATE_OPTIONS,
|
|
123
133
|
)
|
|
124
134
|
print_mutation_result(
|
|
125
135
|
{"id": str(task_id)},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prog": "ellf",
|
|
3
3
|
"help": "Ellf Command Line Interface.",
|
|
4
|
-
"version": "21.0.
|
|
4
|
+
"version": "21.0.9",
|
|
5
5
|
"extra_key": "_extra",
|
|
6
6
|
"commands": {
|
|
7
7
|
"actions": {
|
|
@@ -542,9 +542,9 @@
|
|
|
542
542
|
"id": "no_start",
|
|
543
543
|
"option": "--no-start",
|
|
544
544
|
"short": null,
|
|
545
|
-
"orig_help": "Don't start
|
|
545
|
+
"orig_help": "Don't start action after creation",
|
|
546
546
|
"default": false,
|
|
547
|
-
"help": "Don't start
|
|
547
|
+
"help": "Don't start action after creation (bool)",
|
|
548
548
|
"action": "store_true",
|
|
549
549
|
"choices": null,
|
|
550
550
|
"has_converter": false,
|
|
@@ -1049,9 +1049,9 @@
|
|
|
1049
1049
|
"id": "no_start",
|
|
1050
1050
|
"option": "--no-start",
|
|
1051
1051
|
"short": null,
|
|
1052
|
-
"orig_help": "Don't start
|
|
1052
|
+
"orig_help": "Don't start agent after creation",
|
|
1053
1053
|
"default": false,
|
|
1054
|
-
"help": "Don't start
|
|
1054
|
+
"help": "Don't start agent after creation (bool)",
|
|
1055
1055
|
"action": "store_true",
|
|
1056
1056
|
"choices": null,
|
|
1057
1057
|
"has_converter": false,
|
|
@@ -7118,9 +7118,9 @@
|
|
|
7118
7118
|
"id": "no_start",
|
|
7119
7119
|
"option": "--no-start",
|
|
7120
7120
|
"short": null,
|
|
7121
|
-
"orig_help": "Don't start
|
|
7121
|
+
"orig_help": "Don't start service after creation",
|
|
7122
7122
|
"default": false,
|
|
7123
|
-
"help": "Don't start
|
|
7123
|
+
"help": "Don't start service after creation (bool)",
|
|
7124
7124
|
"action": "store_true",
|
|
7125
7125
|
"choices": null,
|
|
7126
7126
|
"has_converter": false,
|
|
@@ -8024,9 +8024,9 @@
|
|
|
8024
8024
|
"id": "no_start",
|
|
8025
8025
|
"option": "--no-start",
|
|
8026
8026
|
"short": null,
|
|
8027
|
-
"orig_help": "Don't start
|
|
8027
|
+
"orig_help": "Don't start task after creation",
|
|
8028
8028
|
"default": false,
|
|
8029
|
-
"help": "Don't start
|
|
8029
|
+
"help": "Don't start task after creation (bool)",
|
|
8030
8030
|
"action": "store_true",
|
|
8031
8031
|
"choices": null,
|
|
8032
8032
|
"has_converter": false,
|
|
@@ -233,7 +233,6 @@ ellf secret create my-credentials OPENAI_API_KEY="sk-..." CUSTOM_SECRET=-
|
|
|
233
233
|
remote_path = "Remote location path"
|
|
234
234
|
recipe_project_id = "Project ID to add {noun} to"
|
|
235
235
|
recipe_worker_class = "Worker class to launch the {noun} on, as configured on your cluster. Omit to use the cluster default; passing an unknown name returns the list of available ones."
|
|
236
|
-
recipe_runtime = "Runtime to launch the {noun} on"
|
|
237
236
|
check_s3_bucket = "Run checks involving the S3 storage"
|
|
238
237
|
check_nfs_path = "Run checks involving the NFS storage"
|
|
239
238
|
check_recipe = "Run checks that need to operate over a recipe. This argument only makes sense when used with --recipe-args"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Custom Recipes",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"short_description": "Custom Recipes Package for Ellf",
|
|
5
|
+
"author": "",
|
|
6
|
+
"email": "",
|
|
7
|
+
"url": "",
|
|
8
|
+
"license": "",
|
|
9
|
+
"package_dir": "",
|
|
10
|
+
"package_name": "{{ cookiecutter.name|lower|replace(' ', '_') }}"
|
|
11
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Ellf Recipes - {{cookiecutter.name}}
|
|
2
|
+
|
|
3
|
+
This project contains a Python package with custom Ellf recipes.
|
|
4
|
+
|
|
5
|
+
{{cookiecutter.short_description}}
|
|
6
|
+
|
|
7
|
+
## Python environment
|
|
8
|
+
|
|
9
|
+
Create and activate a virtual environment with Python 3.10 or above. Your
|
|
10
|
+
cluster runs recipes on Python 3.13, so using the same version locally avoids
|
|
11
|
+
surprises.
|
|
12
|
+
|
|
13
|
+
```console
|
|
14
|
+
$ python3 -m venv .venv
|
|
15
|
+
$ source .venv/bin/activate
|
|
16
|
+
$ python -m pip install --upgrade pip
|
|
17
|
+
$ python -m pip install -r requirements.in
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Then run `ellf login` with the environment active. Besides signing you in, this
|
|
21
|
+
points the environment's `pip` at the private index that hosts Prodigy, so you
|
|
22
|
+
can install it later. If you use `uv` instead of `pip`, `ellf login` prints the
|
|
23
|
+
`UV_EXTRA_INDEX_URL` and `UV_KEYRING_PROVIDER` variables to set.
|
|
24
|
+
|
|
25
|
+
## Edit
|
|
26
|
+
|
|
27
|
+
The recipes live in `{{cookiecutter.package_name}}/recipes/`. `example_task.py`
|
|
28
|
+
shows a minimal annotation task. Each recipe is a function decorated with one of
|
|
29
|
+
`task_recipe`, `action_recipe`, `agent_recipe` or `service_recipe` from
|
|
30
|
+
`ellf_recipes_sdk`.
|
|
31
|
+
|
|
32
|
+
To add a recipe, create a new module in `{{cookiecutter.package_name}}/recipes/`
|
|
33
|
+
and import it from `{{cookiecutter.package_name}}/recipes/__init__.py`. Only
|
|
34
|
+
imported modules are published, and the import order sets the order recipes
|
|
35
|
+
are shown in the app.
|
|
36
|
+
|
|
37
|
+
Import types such as `RecipeSettingsType` from `ellf_recipes_sdk`, not from
|
|
38
|
+
`prodigy`. Publishing imports your package locally to read the recipe
|
|
39
|
+
definitions, and it doesn't need Prodigy installed unless your modules import
|
|
40
|
+
it at the top level. Put any other `prodigy` imports inside the recipe
|
|
41
|
+
functions.
|
|
42
|
+
|
|
43
|
+
## Test locally (optional)
|
|
44
|
+
|
|
45
|
+
To run or test recipes on your machine you need Prodigy. After `ellf login`
|
|
46
|
+
has configured the environment, install it with the development requirements:
|
|
47
|
+
|
|
48
|
+
```console
|
|
49
|
+
$ python -m pip install -r requirements-dev.in
|
|
50
|
+
$ python -m pytest tests
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Publish
|
|
54
|
+
|
|
55
|
+
Publish the package to your cluster from the package directory:
|
|
56
|
+
|
|
57
|
+
```console
|
|
58
|
+
$ ellf publish code .
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This builds the package, reads the recipe definitions from it and builds a
|
|
62
|
+
container image on your cluster. Dependencies listed in `requirements.in` are
|
|
63
|
+
installed into the image. You can't publish the same version twice, so
|
|
64
|
+
increase `__version__` in `{{cookiecutter.package_name}}/about.py` before
|
|
65
|
+
publishing changes.
|
|
66
|
+
|
|
67
|
+
## Run
|
|
68
|
+
|
|
69
|
+
Once published, the recipes appear in the app and in the CLI:
|
|
70
|
+
|
|
71
|
+
```console
|
|
72
|
+
$ ellf tasks create example_task --help
|
|
73
|
+
$ ellf tasks create example_task --name "My first task" --dataset my_dataset --no-start
|
|
74
|
+
$ ellf tasks start "My first task"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`--no-start` creates the task without starting it, so you can review its
|
|
78
|
+
settings first.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ellf-recipes-sdk
|
|
@@ -19,10 +19,11 @@ def setup():
|
|
|
19
19
|
about = {}
|
|
20
20
|
exec(f.read(), about)
|
|
21
21
|
|
|
22
|
-
# Read in requirements
|
|
22
|
+
# Read in requirements, skipping blank lines and comments
|
|
23
23
|
requirements_path = root / "requirements.in"
|
|
24
24
|
with requirements_path.open("r", encoding="utf8") as f:
|
|
25
|
-
|
|
25
|
+
lines = [line.strip() for line in f]
|
|
26
|
+
requirements = [line for line in lines if line and not line.startswith("#")]
|
|
26
27
|
|
|
27
28
|
setuptools.setup(
|
|
28
29
|
name=package_name,
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
from typing import Literal
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
from ellf_recipes_sdk import (
|
|
4
|
+
Dataset,
|
|
5
|
+
IntProps,
|
|
6
|
+
RecipeSettingsType,
|
|
7
|
+
props,
|
|
8
|
+
task_recipe,
|
|
9
|
+
)
|
|
6
10
|
|
|
7
11
|
|
|
8
12
|
@task_recipe(
|
|
@@ -349,6 +349,7 @@ ellf_cli/version/21.0.4_2026-10-20-17-08-51_patch_38d02583-cb5c-4adc-b5d7-614b48
|
|
|
349
349
|
ellf_cli/version/21.0.5_2026-10-21-09-28-47_patch_fabd5cfe-2d04-4215-abf1-58fba226acb7
|
|
350
350
|
ellf_cli/version/21.0.6_2026-10-22-16-07-37_patch_d2bb27d7-6304-4c99-abbc-46d3dd7e363b
|
|
351
351
|
ellf_cli/version/21.0.7_2026-10-27-11-41-55_patch_6b50567f-209d-42c9-a2cd-d251a2bc8fbf
|
|
352
|
+
ellf_cli/version/21.0.8_2026-10-29-13-48-18_patch_bdab3ee6-fba8-4625-9243-c4cbe839ba32
|
|
352
353
|
ellf_cli/version/__init__.py
|
|
353
354
|
ellf_cli/version/read_version.py
|
|
354
355
|
tests/test_agents.py
|
|
@@ -399,8 +400,10 @@ tests/test_publish_versions.py
|
|
|
399
400
|
tests/test_pypi_auth.py
|
|
400
401
|
tests/test_query.py
|
|
401
402
|
tests/test_recipe_file.py
|
|
403
|
+
tests/test_recipe_help.py
|
|
402
404
|
tests/test_recipe_required_args.py
|
|
403
405
|
tests/test_recipes.py
|
|
406
|
+
tests/test_recipes_init.py
|
|
404
407
|
tests/test_sessions.py
|
|
405
408
|
tests/test_state.py
|
|
406
409
|
tests/test_support.py
|