ellf-cli 20.0.6__tar.gz → 21.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ellf_cli-20.0.6/ellf_cli.egg-info → ellf_cli-21.0.0}/PKG-INFO +1 -1
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/README.md +1 -1
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/agents.py +19 -5
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/init_values.py +3 -2
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf.json +3 -3
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/helm.py +23 -2
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/messages.py +2 -2
- ellf_cli-21.0.0/ellf_cli/version/20.0.6_2026-10-15-14-17-40_patch_df3a5d3c-f0e0-46cb-aeaf-15b51c8a0f13 +3 -0
- ellf_cli-21.0.0/ellf_cli/version/20.0.7_2026-10-16-07-09-40_major_3e5dfba3-2810-47b4-85a9-938bfff72a04 +3 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/SOURCES.txt +2 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_agents.py +26 -2
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_start_fixes.py +7 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/LICENSE +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/MANIFEST.in +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/__main__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/about.json +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/about.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/auth.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/cli.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_project_scope.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/_usage.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/_config_io.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/configure.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/hibernate.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/init.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/pause.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/mcp.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/services.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/sessions.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/commands/users.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/config.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/render.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_prodigy_recipes.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/scripts.coding/check_training.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ops/references.coding/data_infra_cli.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ops/scripts.coding/run_job.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_service_recipe.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/references/annotation_agents.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/references/consulting_patterns.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/references/explosion_strategy.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/config_advanced.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/config_architectures.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/config_training.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/diagnostics.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/evaluation_guide.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/experiment_patterns.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/model_selection.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/training_paradigms.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/training_troubleshooting.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.assistant.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.coding.md +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-train/scripts.coding/ellf_logger.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/errors.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/interactivity.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/main.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/mcp_proxy.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/pypi_auth.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/query.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ty.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ui.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/url.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/util.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.10_2026-10-02-12-56-52_patch_14e97576-73ca-44b8-82c9-7dad6f1789ab +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.11_2026-10-04-10-31-19_patch_088eb371-1799-4949-a119-286cf1cd55d1 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.12_2026-10-06-18-00-25_patch_36554bed-49c5-41cb-9fd4-48cc6af74c09 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.13_2026-10-07-12-24-08_patch_a540a364-3a0d-4960-b278-06ba2c7cc258 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.14_2026-10-07-12-52-39_patch_e3a6fc5c-2ee4-414c-a2dd-4910a655a7dd +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.15_2026-10-09-04-15-56_patch_bd7a9b06-867b-4fea-9678-973a05e3022d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.16_2026-10-09-16-11-56_patch_a1135435-7dea-4f00-8c98-203ba3974382 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.17_2026-10-09-17-44-55_patch_faeacad8-541a-40f2-ab9c-abcd66fcd00e +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.18_2026-10-10-07-29-38_major_02601a1e-9bdb-45bf-ad67-a07b7dcd0002 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.3_2026-09-29-14-16-00_patch_3cb60272-95cf-4311-8897-721e1b5c2c88 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.4_2026-09-29-16-24-53_patch_9fe8ad2b-e3ec-4558-a5fc-9c44c5c266dc +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.5_2026-09-29-17-13-16_patch_e48d2dd2-f41a-402e-a441-756b23c01dcb +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.6_2026-09-29-17-22-11_patch_3b1c79e9-9002-4e96-ba78-10668c33be6a +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.7_2026-09-30-07-50-58_patch_e8b1f046-d819-499c-9cd5-3e1a20fc9acf +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.8_2026-10-01-13-41-44_patch_7d63af18-e0af-4127-ab58-aede2407490f +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/19.0.9_2026-10-01-15-57-35_patch_143863cb-8f63-4ef7-bd78-c1114fc93a2d +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.0_2026-10-10-09-36-17_patch_d2618f39-cdc9-4d3a-ba40-1a0ad6265f3b +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.1_2026-10-11-10-24-33_patch_e29a8713-eecb-4eb1-9641-789d3cfab21a +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.2_2026-10-12-07-22-24_patch_f4053ad1-8fcd-4591-a68d-bf1e23485ba7 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.3_2026-10-14-14-29-16_patch_070af1c4-f9d9-4f97-8112-058de90d3ea8 +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.4_2026-10-14-16-20-24_patch_c6672844-8227-4e0a-9fb5-36af7e7141dc +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/20.0.5_2026-10-15-08-53-28_patch_10154146-8afd-4632-b250-9b4b9f5bf67c +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/__init__.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/version/read_version.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/pyproject.toml +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/setup.cfg +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/setup.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_agents_info_stats.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_appdirs.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_auth.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_clusters_info_stats.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_config.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_datasets_export.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_errors.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_files_cp.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_helm.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_import_export.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_info.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_config_io.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_configure.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_deploy_node_labels.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_destroy.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_get_terraform.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_hibernate.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_init.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_pause.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_provision.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_start_validation.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_state_bucket.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_infra_terraform_init.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_job_list_project_filter.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_jobs_info_hides_creator.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_jobs_list_unmatched.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_key_pair.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_login.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_logout.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_main.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_mcp_proxy.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_org_select.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_plans.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_projects.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_projects_delete_confirm.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_publish_build_poll.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_publish_data.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_publish_import_root.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_publish_requirements.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_publish_versions.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_pypi_auth.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_query.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_recipe_file.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_recipe_required_args.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_recipes.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_sessions.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_state.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_support.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_todos.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_ty.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_ui.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_ui_extras.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_usage_counts.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_users_assign.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_users_info_stats.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_users_list.py +0 -0
- {ellf_cli-20.0.6 → ellf_cli-21.0.0}/tests/test_util.py +0 -0
|
@@ -1679,7 +1679,7 @@ Log in to your Ellf account. You normally don't need to call this manually. It w
|
|
|
1679
1679
|
| `--org` | `str` | Name or ID of the organization to log into. If omitted: auto-select when only one is available, or prompt interactively | `None` |
|
|
1680
1680
|
| `--cluster` | `str` | Name or ID of the cluster to log into. If omitted: auto-select when only one is available, or prompt interactively | `None` |
|
|
1681
1681
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1682
|
-
| `--agent` | `str` | Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex,
|
|
1682
|
+
| `--agent` | `str` | Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex, copilot, junie, opencode; repeat the option or comma-separate them for several | `None` |
|
|
1683
1683
|
| `--claude` | `bool` | Shortcut for --agent claude | `False` |
|
|
1684
1684
|
|
|
1685
1685
|
### `ellf logout`
|
|
@@ -12,12 +12,13 @@ from pathlib import Path
|
|
|
12
12
|
from types import ModuleType
|
|
13
13
|
from typing import Any, Callable, Optional, Union
|
|
14
14
|
|
|
15
|
-
AGENTS = ("claude", "codex", "
|
|
15
|
+
AGENTS = ("claude", "codex", "copilot", "junie", "opencode")
|
|
16
16
|
AGENT_NAMES = {
|
|
17
17
|
"claude": "Claude Code",
|
|
18
18
|
"codex": "Codex",
|
|
19
|
-
"opencode": "OpenCode",
|
|
20
19
|
"copilot": "GitHub Copilot",
|
|
20
|
+
"junie": "Junie",
|
|
21
|
+
"opencode": "OpenCode",
|
|
21
22
|
}
|
|
22
23
|
MCP_SERVER_NAME = "ellf-kb"
|
|
23
24
|
|
|
@@ -39,6 +40,10 @@ def _copilot_home() -> Path:
|
|
|
39
40
|
return _env_dir("COPILOT_HOME", _home() / ".copilot")
|
|
40
41
|
|
|
41
42
|
|
|
43
|
+
def _junie_home() -> Path:
|
|
44
|
+
return _env_dir("JUNIE_HOME", _home() / ".junie")
|
|
45
|
+
|
|
46
|
+
|
|
42
47
|
def _opencode_config_dir() -> Path:
|
|
43
48
|
return _env_dir("XDG_CONFIG_HOME", _home() / ".config") / "opencode"
|
|
44
49
|
|
|
@@ -55,7 +60,7 @@ def skills_dirs(agent: str) -> list[Path]:
|
|
|
55
60
|
"""The user-level skill directories an agent reads ellf skills from."""
|
|
56
61
|
if agent == "claude":
|
|
57
62
|
return [_home() / ".claude" / "skills"]
|
|
58
|
-
# Codex,
|
|
63
|
+
# Codex, Copilot (CLI and VS Code), Junie and OpenCode all read ~/.agents/skills.
|
|
59
64
|
dirs = [_home() / ".agents" / "skills"]
|
|
60
65
|
if agent == "copilot" and os.environ.get("COPILOT_HOME"):
|
|
61
66
|
# Copilot CLI stops reading ~/.agents/skills when COPILOT_HOME is set.
|
|
@@ -271,6 +276,14 @@ def _configure_copilot_cli(command: list[str]) -> Path:
|
|
|
271
276
|
return path
|
|
272
277
|
|
|
273
278
|
|
|
279
|
+
def _configure_junie(command: list[str]) -> Path:
|
|
280
|
+
# The Junie CLI and the JetBrains IDE plugin share this file.
|
|
281
|
+
path = _junie_home() / "mcp" / "mcp.json"
|
|
282
|
+
entry = {"command": command[0], "args": command[1:]}
|
|
283
|
+
_set_json_entry(path, ("mcpServers", MCP_SERVER_NAME), entry)
|
|
284
|
+
return path
|
|
285
|
+
|
|
286
|
+
|
|
274
287
|
def _configure_vscode(command: list[str]) -> Optional[Path]:
|
|
275
288
|
# VS Code keeps its own user mcp.json; only touch it when VS Code is there.
|
|
276
289
|
vscode_dir = _vscode_user_dir()
|
|
@@ -285,8 +298,9 @@ def _configure_vscode(command: list[str]) -> Optional[Path]:
|
|
|
285
298
|
_MCP_CONFIGURERS: dict[str, list[Callable[[list[str]], Optional[Path]]]] = {
|
|
286
299
|
"claude": [_configure_claude],
|
|
287
300
|
"codex": [_configure_codex],
|
|
288
|
-
"opencode": [_configure_opencode],
|
|
289
301
|
"copilot": [_configure_copilot_cli, _configure_vscode],
|
|
302
|
+
"junie": [_configure_junie],
|
|
303
|
+
"opencode": [_configure_opencode],
|
|
290
304
|
}
|
|
291
305
|
|
|
292
306
|
|
|
@@ -328,7 +342,7 @@ _SESSION_ENV_VARS = (
|
|
|
328
342
|
|
|
329
343
|
def current_session() -> Optional[AgentSession]:
|
|
330
344
|
"""The agent session this process runs in, from the variables agents set
|
|
331
|
-
for the commands they run. OpenCode
|
|
345
|
+
for the commands they run. Junie and OpenCode set none.
|
|
332
346
|
|
|
333
347
|
An agent started from another agent's shell inherits the outer agent's
|
|
334
348
|
variables too, and nothing says which one is running this command. Rather
|
|
@@ -101,8 +101,9 @@ def init_values(
|
|
|
101
101
|
values["cluster"]["nodeSelector"] = {"ellf/role": "system"}
|
|
102
102
|
# registries.upstream (from credentials) is Explosion's registry —
|
|
103
103
|
# read-only for user clusters. Publishing custom recipe code needs a
|
|
104
|
-
# registry this cluster can push to:
|
|
105
|
-
|
|
104
|
+
# registry this cluster can push to: the chart's local one, unless
|
|
105
|
+
# registries.user names one of your own.
|
|
106
|
+
values["localRegistry"] = {"enabled": True}
|
|
106
107
|
values["postgresql"] = {
|
|
107
108
|
"enabled": True,
|
|
108
109
|
"auth": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prog": "ellf",
|
|
3
3
|
"help": "Ellf Command Line Interface.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "21.0.0",
|
|
5
5
|
"extra_key": "_extra",
|
|
6
6
|
"commands": {
|
|
7
7
|
"actions": {
|
|
@@ -289,9 +289,9 @@
|
|
|
289
289
|
"id": "agent",
|
|
290
290
|
"option": "--agent",
|
|
291
291
|
"short": null,
|
|
292
|
-
"orig_help": "Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex,
|
|
292
|
+
"orig_help": "Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex, copilot, junie, opencode; repeat the option or comma-separate them for several",
|
|
293
293
|
"default": null,
|
|
294
|
-
"help": "Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex,
|
|
294
|
+
"help": "Set up coding agents to work with Ellf: install the Ellf skills and the knowledge base MCP server. One of claude, codex, copilot, junie, opencode; repeat the option or comma-separate them for several (str)",
|
|
295
295
|
"action": "append",
|
|
296
296
|
"choices": null,
|
|
297
297
|
"has_converter": false,
|
|
@@ -197,6 +197,13 @@ class HelmChartValues(_StrictModel):
|
|
|
197
197
|
upstream: str
|
|
198
198
|
user: str
|
|
199
199
|
|
|
200
|
+
class LocalRegistry(_StrictModel):
|
|
201
|
+
# A registry the chart runs on the node, for single-node clusters
|
|
202
|
+
# without one of their own; used when registries.user is empty.
|
|
203
|
+
enabled: bool
|
|
204
|
+
port: int
|
|
205
|
+
image: str
|
|
206
|
+
|
|
200
207
|
class Image(_StrictModel):
|
|
201
208
|
# Legacy key for registries.upstream; still honored by the chart
|
|
202
209
|
# when registries.upstream is unset.
|
|
@@ -380,6 +387,7 @@ class HelmChartValues(_StrictModel):
|
|
|
380
387
|
cost_view_table: Annotated[str, Field(alias="costViewTable")]
|
|
381
388
|
cloud_storage: Annotated[CloudStorage, Field(alias="cloudStorage")]
|
|
382
389
|
registries: Registries
|
|
390
|
+
local_registry: Annotated[LocalRegistry, Field(alias="localRegistry")]
|
|
383
391
|
image: Image
|
|
384
392
|
broker: Broker
|
|
385
393
|
ingress: Ingress
|
|
@@ -430,6 +438,11 @@ class HelmChartOverrides(_StrictModel):
|
|
|
430
438
|
upstream: str | None = None
|
|
431
439
|
user: str | None = None
|
|
432
440
|
|
|
441
|
+
class LocalRegistry(_StrictModel):
|
|
442
|
+
enabled: bool | None = None
|
|
443
|
+
port: int | None = None
|
|
444
|
+
image: str | None = None
|
|
445
|
+
|
|
433
446
|
class Image(_StrictModel):
|
|
434
447
|
registry: str | None = None
|
|
435
448
|
broker_version: Annotated[str | None, Field(alias="brokerVersion")] = None
|
|
@@ -637,6 +650,7 @@ class HelmChartOverrides(_StrictModel):
|
|
|
637
650
|
cost_view_table: Annotated[str | None, Field(alias="costViewTable")] = None
|
|
638
651
|
cloud_storage: Annotated[CloudStorage | None, Field(alias="cloudStorage")] = None
|
|
639
652
|
registries: Registries | None = None
|
|
653
|
+
local_registry: Annotated[LocalRegistry | None, Field(alias="localRegistry")] = None
|
|
640
654
|
image: Image | None = None
|
|
641
655
|
broker: Broker | None = None
|
|
642
656
|
ingress: Ingress | None = None
|
|
@@ -828,11 +842,18 @@ def user_registry_of(values: HelmChartOverrides) -> str:
|
|
|
828
842
|
"""The user's own writable registry from the values.
|
|
829
843
|
|
|
830
844
|
Prefers the canonical ``registries.user``; falls back to the legacy
|
|
831
|
-
``cluster.containerRegistry`` key,
|
|
845
|
+
``cluster.containerRegistry`` key, then to the chart's local registry,
|
|
846
|
+
mirroring the chart's own fallback.
|
|
832
847
|
"""
|
|
833
848
|
if values.registries and values.registries.user:
|
|
834
849
|
return values.registries.user
|
|
835
|
-
|
|
850
|
+
legacy = values.cluster.container_registry if values.cluster else None
|
|
851
|
+
if legacy:
|
|
852
|
+
return legacy
|
|
853
|
+
local = values.local_registry
|
|
854
|
+
if local and local.enabled:
|
|
855
|
+
return f"localhost:{local.port or 5000}"
|
|
856
|
+
return ""
|
|
836
857
|
|
|
837
858
|
|
|
838
859
|
def build_values(
|
|
@@ -219,8 +219,8 @@ ellf secret create my-credentials OPENAI_API_KEY="sk-..." CUSTOM_SECRET=-
|
|
|
219
219
|
login_org = "Name or ID of the organization to log into. If omitted: auto-select when only one is available, or prompt interactively"
|
|
220
220
|
login_agent = (
|
|
221
221
|
"Set up coding agents to work with Ellf: install the Ellf skills and the "
|
|
222
|
-
"knowledge base MCP server. One of claude, codex,
|
|
223
|
-
"the option or comma-separate them for several"
|
|
222
|
+
"knowledge base MCP server. One of claude, codex, copilot, junie, opencode; "
|
|
223
|
+
"repeat the option or comma-separate them for several"
|
|
224
224
|
)
|
|
225
225
|
claude = "Shortcut for --agent claude"
|
|
226
226
|
use_active_venv = "Use the currently active virtualenv, instead of making a temporary one"
|
|
@@ -335,6 +335,8 @@ ellf_cli/version/20.0.2_2026-10-12-07-22-24_patch_f4053ad1-8fcd-4591-a68d-bf1e23
|
|
|
335
335
|
ellf_cli/version/20.0.3_2026-10-14-14-29-16_patch_070af1c4-f9d9-4f97-8112-058de90d3ea8
|
|
336
336
|
ellf_cli/version/20.0.4_2026-10-14-16-20-24_patch_c6672844-8227-4e0a-9fb5-36af7e7141dc
|
|
337
337
|
ellf_cli/version/20.0.5_2026-10-15-08-53-28_patch_10154146-8afd-4632-b250-9b4b9f5bf67c
|
|
338
|
+
ellf_cli/version/20.0.6_2026-10-15-14-17-40_patch_df3a5d3c-f0e0-46cb-aeaf-15b51c8a0f13
|
|
339
|
+
ellf_cli/version/20.0.7_2026-10-16-07-09-40_major_3e5dfba3-2810-47b4-85a9-938bfff72a04
|
|
338
340
|
ellf_cli/version/__init__.py
|
|
339
341
|
ellf_cli/version/read_version.py
|
|
340
342
|
tests/test_agents.py
|
|
@@ -19,14 +19,20 @@ SESSION_VARS = (
|
|
|
19
19
|
@pytest.fixture(autouse=True)
|
|
20
20
|
def home(tmp_path, monkeypatch) -> Path:
|
|
21
21
|
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
|
22
|
-
for var in (
|
|
22
|
+
for var in (
|
|
23
|
+
*SESSION_VARS,
|
|
24
|
+
"CODEX_HOME",
|
|
25
|
+
"COPILOT_HOME",
|
|
26
|
+
"JUNIE_HOME",
|
|
27
|
+
"XDG_CONFIG_HOME",
|
|
28
|
+
):
|
|
23
29
|
monkeypatch.delenv(var, raising=False)
|
|
24
30
|
return tmp_path
|
|
25
31
|
|
|
26
32
|
|
|
27
33
|
def test_skills_dirs(home, monkeypatch):
|
|
28
34
|
assert agents.skills_dirs("claude") == [home / ".claude" / "skills"]
|
|
29
|
-
for agent in ("codex", "opencode", "copilot"):
|
|
35
|
+
for agent in ("codex", "opencode", "copilot", "junie"):
|
|
30
36
|
assert agents.skills_dirs(agent) == [home / ".agents" / "skills"]
|
|
31
37
|
monkeypatch.setenv("COPILOT_HOME", str(home / "cp"))
|
|
32
38
|
assert agents.skills_dirs("copilot") == [
|
|
@@ -210,6 +216,24 @@ class TestCopilotConfig:
|
|
|
210
216
|
assert "ellf-kb" in json.loads(target.read_text())["mcpServers"]
|
|
211
217
|
|
|
212
218
|
|
|
219
|
+
class TestJunieConfig:
|
|
220
|
+
def test_writes_stdio_server(self, home):
|
|
221
|
+
path = home / ".junie" / "mcp" / "mcp.json"
|
|
222
|
+
path.parent.mkdir(parents=True)
|
|
223
|
+
path.write_text(json.dumps({"mcpServers": {"other": {"url": "x"}}}))
|
|
224
|
+
assert agents.configure_mcp("junie", CMD) == [path]
|
|
225
|
+
servers = json.loads(path.read_text())["mcpServers"]
|
|
226
|
+
assert servers["other"] == {"url": "x"}
|
|
227
|
+
assert servers["ellf-kb"] == {
|
|
228
|
+
"command": "/venv/bin/ellf",
|
|
229
|
+
"args": ["mcp", "kb"],
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
def test_honours_junie_home(self, home, monkeypatch):
|
|
233
|
+
monkeypatch.setenv("JUNIE_HOME", str(home / "jn"))
|
|
234
|
+
assert agents.configure_mcp("junie", CMD) == [home / "jn" / "mcp" / "mcp.json"]
|
|
235
|
+
|
|
236
|
+
|
|
213
237
|
class TestSessions:
|
|
214
238
|
def test_no_session_outside_agents(self):
|
|
215
239
|
assert agents.current_session() is None
|
|
@@ -27,6 +27,7 @@ from ellf_cli.helm import (
|
|
|
27
27
|
HelmChartOverrides,
|
|
28
28
|
HelmChartValues,
|
|
29
29
|
build_values,
|
|
30
|
+
user_registry_of,
|
|
30
31
|
)
|
|
31
32
|
from ellf_pam_sdk.errors import ClusterNotFound
|
|
32
33
|
from ellf_pam_sdk.models import ClusterCredentials, Image, Secrets
|
|
@@ -101,6 +102,12 @@ def test_init_values_output_parses_for_deploy(tmp_path, cloud_provider):
|
|
|
101
102
|
overrides = HelmChartOverrides(**values_dict)
|
|
102
103
|
assert overrides.cluster is not None
|
|
103
104
|
assert overrides.cluster.scheme in ("http", "https")
|
|
105
|
+
if cloud_provider == "k3s":
|
|
106
|
+
# Publishing custom code works out of the box: a placeholder
|
|
107
|
+
# registry name only failed at the first push.
|
|
108
|
+
assert overrides.local_registry is not None
|
|
109
|
+
assert overrides.local_registry.enabled
|
|
110
|
+
assert user_registry_of(overrides) == "localhost:5000"
|
|
104
111
|
|
|
105
112
|
|
|
106
113
|
def test_ensure_cluster_record_preserves_existing_name():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-ops/scripts.coding/run_job.py
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-20.0.6 → ellf_cli-21.0.0}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|