nextmv 1.2.3.dev3__tar.gz → 1.2.3.dev4__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.
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/PKG-INFO +1 -1
- nextmv-1.2.3.dev4/nextmv/__about__.py +1 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/_helpers.py +18 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/local.py +41 -6
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/run.py +41 -8
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_mcp.py +112 -0
- nextmv-1.2.3.dev3/nextmv/__about__.py +0 -1
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/.python-version +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/CONTRIBUTING.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/LICENSE +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/__entrypoint__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/_serialization.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/base_model.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/exists.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/push.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/upload.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/exists.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/cancel.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/logs.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/track.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/start.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/stop.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/disable.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/enable.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/start.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/stop.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/exists.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/clone.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/config.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/init.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/delete.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/register.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/registered.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/sync.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/update.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/create.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/get.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/list.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/logs.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/metadata.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/visuals.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/main.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/init.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/validate.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/serve.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/server.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/acceptance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/account.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/app.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/batch.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/community.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/ensemble.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/input_set.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/instance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/managed_input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/profile.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/scenario.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/secrets.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/shadow.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/sso.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/switchback.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/message.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/options.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/acceptance_test.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/account.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_acceptance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_batch_scenario.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_ensemble.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_input_set.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_instance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_managed_input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_run.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_secrets.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_shadow.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_switchback.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_utils.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/assets.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/batch_experiment.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/client.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/community.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/ensemble.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/input_set.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/instance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/integration.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/marketplace.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/package.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/scenario.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/secrets.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/shadow.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/sso.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/switchback.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/url.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/content_format.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/main.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/requirements.txt +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/src/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/src/visuals.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/deprecated.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/application.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/executor.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/geojson_handler.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/local.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/plotly_handler.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/registry.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/runner.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/logger.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/manifest.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/model.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/options.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/output.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/polling.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/run.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/safe.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/status.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/binary_json_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/binary_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/go.mod +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/main.go +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/go.mod +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/main.go +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/Main.java +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/pom.xml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/Main.java +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/pom.xml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/main.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/requirements.txt +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/main.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/requirements.txt +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/pyproject.toml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_configuration.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_main.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/app.yaml +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_client.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_instance.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_package.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_scenario.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_cloud.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_marketplace.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_application.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_executor.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_registry.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_runner.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options1.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options2.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options3.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options4.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options5.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options6.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options7.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_base_model.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_entrypoint/__init__.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_entrypoint/test_entrypoint.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_input.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.csv +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.json +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.txt +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_logger.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_manifest.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_model.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_options.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_output.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_polling.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_run.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_safe.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_serialization.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_version.py +0 -0
- {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v1.2.3.dev4"
|
|
@@ -73,6 +73,24 @@ def _get_local_app(app_dir: str, app_id: str | None = None) -> local.Application
|
|
|
73
73
|
return app
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _build_run_configuration(content_format: str | None):
|
|
77
|
+
"""Build a RunConfiguration for the given content format string, or None."""
|
|
78
|
+
|
|
79
|
+
if content_format is None:
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
from nextmv.input import InputFormat
|
|
83
|
+
from nextmv.run import Format, FormatInput, RunConfiguration
|
|
84
|
+
|
|
85
|
+
config = RunConfiguration()
|
|
86
|
+
config.format = Format(
|
|
87
|
+
format_input=FormatInput(
|
|
88
|
+
input_type=InputFormat(content_format),
|
|
89
|
+
),
|
|
90
|
+
)
|
|
91
|
+
return config
|
|
92
|
+
|
|
93
|
+
|
|
76
94
|
def _save_to_file(data: Any, prefix: str) -> str:
|
|
77
95
|
"""Serialize data to a temp JSON file and return a message with the path.
|
|
78
96
|
|
|
@@ -55,7 +55,9 @@ def _local_run_logs_impl(
|
|
|
55
55
|
|
|
56
56
|
def local_run(
|
|
57
57
|
app_dir: str,
|
|
58
|
-
input: dict[str, Any],
|
|
58
|
+
input: dict[str, Any] | None = None,
|
|
59
|
+
input_dir_path: str | None = None,
|
|
60
|
+
content_format: str | None = None,
|
|
59
61
|
run_options: dict[str, str] | None = None,
|
|
60
62
|
) -> str:
|
|
61
63
|
"""Run a local Nextmv application and wait for the result.
|
|
@@ -65,16 +67,32 @@ def local_run(
|
|
|
65
67
|
``{app_dir}/.nextmv/runs/{run_id}/``. Use file-reading tools to
|
|
66
68
|
inspect the result file.
|
|
67
69
|
|
|
70
|
+
For JSON apps, provide ``input`` as a JSON object. For multi-file
|
|
71
|
+
or CSV archive apps, provide ``input_dir_path`` pointing to a
|
|
72
|
+
directory of input files and set ``content_format`` accordingly
|
|
73
|
+
(e.g. ``"multi-file"`` or ``"csv-archive"``).
|
|
74
|
+
|
|
68
75
|
Args:
|
|
69
76
|
app_dir: Absolute path to the local application directory
|
|
70
77
|
containing an app.yaml manifest.
|
|
71
|
-
input: The input data (JSON object) for the
|
|
78
|
+
input: The input data (JSON object) for the run. Used for
|
|
79
|
+
JSON apps. Ignored when ``input_dir_path`` is provided.
|
|
80
|
+
input_dir_path: Path to a directory containing input files.
|
|
81
|
+
Use for multi-file or CSV archive apps. When provided,
|
|
82
|
+
``content_format`` must also be set.
|
|
83
|
+
content_format: Content format of the input. Required when
|
|
84
|
+
``input_dir_path`` is set. Allowed values:
|
|
85
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
72
86
|
run_options: Optional solver options passed to the application,
|
|
73
87
|
e.g. ``{"solve.duration": "10s"}``.
|
|
74
88
|
"""
|
|
75
89
|
|
|
76
90
|
app = _helpers._get_local_app(app_dir=app_dir)
|
|
77
|
-
|
|
91
|
+
config = _helpers._build_run_configuration(content_format)
|
|
92
|
+
if input_dir_path is not None:
|
|
93
|
+
run_id = app.new_run(input_dir_path=input_dir_path, options=run_options, configuration=config)
|
|
94
|
+
else:
|
|
95
|
+
run_id = app.new_run(input=input, options=run_options, configuration=config)
|
|
78
96
|
app.run_result_with_polling(
|
|
79
97
|
run_id=run_id,
|
|
80
98
|
polling_options=default_polling_options(),
|
|
@@ -89,7 +107,9 @@ def local_run(
|
|
|
89
107
|
|
|
90
108
|
def local_run_submit(
|
|
91
109
|
app_dir: str,
|
|
92
|
-
input: dict[str, Any],
|
|
110
|
+
input: dict[str, Any] | None = None,
|
|
111
|
+
input_dir_path: str | None = None,
|
|
112
|
+
content_format: str | None = None,
|
|
93
113
|
run_options: dict[str, str] | None = None,
|
|
94
114
|
) -> str:
|
|
95
115
|
"""Submit a local run without waiting for completion.
|
|
@@ -98,16 +118,31 @@ def local_run_submit(
|
|
|
98
118
|
ID immediately. Use ``local_run_poll_result`` or
|
|
99
119
|
``local_run_status`` to check on the run later.
|
|
100
120
|
|
|
121
|
+
For JSON apps, provide ``input`` as a JSON object. For multi-file
|
|
122
|
+
or CSV archive apps, provide ``input_dir_path`` pointing to a
|
|
123
|
+
directory of input files and set ``content_format`` accordingly
|
|
124
|
+
(e.g. ``"multi-file"`` or ``"csv-archive"``).
|
|
125
|
+
|
|
101
126
|
Args:
|
|
102
127
|
app_dir: Absolute path to the local application directory
|
|
103
128
|
containing an app.yaml manifest.
|
|
104
|
-
input: The input data (JSON object) for the run.
|
|
129
|
+
input: The input data (JSON object) for the run. Used for
|
|
130
|
+
JSON apps. Ignored when ``input_dir_path`` is provided.
|
|
131
|
+
input_dir_path: Path to a directory containing input files.
|
|
132
|
+
Use for multi-file or CSV archive apps. When provided,
|
|
133
|
+
``content_format`` must also be set.
|
|
134
|
+
content_format: Content format of the input. Required when
|
|
135
|
+
``input_dir_path`` is set. Allowed values:
|
|
136
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
105
137
|
run_options: Optional solver options passed to the application,
|
|
106
138
|
e.g. ``{"solve.duration": "10s"}``.
|
|
107
139
|
"""
|
|
108
140
|
|
|
109
141
|
app = _helpers._get_local_app(app_dir=app_dir)
|
|
110
|
-
|
|
142
|
+
config = _helpers._build_run_configuration(content_format)
|
|
143
|
+
if input_dir_path is not None:
|
|
144
|
+
return app.new_run(input_dir_path=input_dir_path, options=run_options, configuration=config)
|
|
145
|
+
return app.new_run(input=input, options=run_options, configuration=config)
|
|
111
146
|
|
|
112
147
|
|
|
113
148
|
def local_run_status(
|
|
@@ -45,7 +45,9 @@ def register(mcp: FastMCP) -> None:
|
|
|
45
45
|
@mcp.tool()
|
|
46
46
|
def cloud_run(
|
|
47
47
|
app_id: str,
|
|
48
|
-
input: dict[str, Any],
|
|
48
|
+
input: dict[str, Any] | None = None,
|
|
49
|
+
input_dir_path: str | None = None,
|
|
50
|
+
content_format: str | None = None,
|
|
49
51
|
instance_id: str | None = None,
|
|
50
52
|
run_options: dict[str, str] | None = None,
|
|
51
53
|
managed_input_id: str | None = None,
|
|
@@ -57,10 +59,22 @@ def register(mcp: FastMCP) -> None:
|
|
|
57
59
|
statistics) to a local temp file. Use file-reading tools to
|
|
58
60
|
inspect the contents.
|
|
59
61
|
|
|
62
|
+
For JSON apps, provide ``input`` as a JSON object. For
|
|
63
|
+
multi-file or CSV archive apps, provide ``input_dir_path``
|
|
64
|
+
pointing to a local directory of input files and set
|
|
65
|
+
``content_format`` accordingly (e.g. ``"multi-file"``).
|
|
66
|
+
|
|
60
67
|
Args:
|
|
61
68
|
app_id: The application ID.
|
|
62
|
-
input: The input data (JSON object) for the
|
|
63
|
-
|
|
69
|
+
input: The input data (JSON object) for the run. Used for
|
|
70
|
+
JSON apps. Ignored when ``input_dir_path`` or
|
|
71
|
+
``managed_input_id`` is provided.
|
|
72
|
+
input_dir_path: Path to a local directory containing input
|
|
73
|
+
files. Use for multi-file or CSV archive apps. When
|
|
74
|
+
provided, ``content_format`` must also be set.
|
|
75
|
+
content_format: Content format of the input. Required when
|
|
76
|
+
``input_dir_path`` is set. Allowed values:
|
|
77
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
64
78
|
instance_id: Instance to run against. Uses the application's
|
|
65
79
|
default instance if omitted.
|
|
66
80
|
run_options: Solver options passed to the application, e.g.
|
|
@@ -70,8 +84,11 @@ def register(mcp: FastMCP) -> None:
|
|
|
70
84
|
"""
|
|
71
85
|
|
|
72
86
|
app = _helpers._get_app(app_id)
|
|
87
|
+
config = _helpers._build_run_configuration(content_format)
|
|
73
88
|
result = app.new_run_with_result(
|
|
74
89
|
input=input,
|
|
90
|
+
input_dir_path=input_dir_path,
|
|
91
|
+
configuration=config,
|
|
75
92
|
instance_id=instance_id,
|
|
76
93
|
run_options=run_options or {},
|
|
77
94
|
polling_options=default_polling_options(),
|
|
@@ -82,7 +99,9 @@ def register(mcp: FastMCP) -> None:
|
|
|
82
99
|
@mcp.tool()
|
|
83
100
|
def cloud_run_submit(
|
|
84
101
|
app_id: str,
|
|
85
|
-
input: dict[str, Any],
|
|
102
|
+
input: dict[str, Any] | None = None,
|
|
103
|
+
input_dir_path: str | None = None,
|
|
104
|
+
content_format: str | None = None,
|
|
86
105
|
instance_id: str | None = None,
|
|
87
106
|
run_options: dict[str, str] | None = None,
|
|
88
107
|
managed_input_id: str | None = None,
|
|
@@ -92,10 +111,22 @@ def register(mcp: FastMCP) -> None:
|
|
|
92
111
|
Returns the run ID immediately. Use ``cloud_run_status`` or
|
|
93
112
|
``cloud_run_result`` to check on the run later.
|
|
94
113
|
|
|
114
|
+
For JSON apps, provide ``input`` as a JSON object. For
|
|
115
|
+
multi-file or CSV archive apps, provide ``input_dir_path``
|
|
116
|
+
pointing to a local directory of input files and set
|
|
117
|
+
``content_format`` accordingly (e.g. ``"multi-file"``).
|
|
118
|
+
|
|
95
119
|
Args:
|
|
96
120
|
app_id: The application ID.
|
|
97
|
-
input: The input data (JSON object) for the run.
|
|
98
|
-
when ``
|
|
121
|
+
input: The input data (JSON object) for the run. Used for
|
|
122
|
+
JSON apps. Ignored when ``input_dir_path`` or
|
|
123
|
+
``managed_input_id`` is provided.
|
|
124
|
+
input_dir_path: Path to a local directory containing input
|
|
125
|
+
files. Use for multi-file or CSV archive apps. When
|
|
126
|
+
provided, ``content_format`` must also be set.
|
|
127
|
+
content_format: Content format of the input. Required when
|
|
128
|
+
``input_dir_path`` is set. Allowed values:
|
|
129
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
99
130
|
instance_id: Instance to run against. Uses the application's
|
|
100
131
|
default instance if omitted.
|
|
101
132
|
run_options: Solver options passed to the application, e.g.
|
|
@@ -105,13 +136,15 @@ def register(mcp: FastMCP) -> None:
|
|
|
105
136
|
"""
|
|
106
137
|
|
|
107
138
|
app = _helpers._get_app(app_id)
|
|
108
|
-
|
|
139
|
+
config = _helpers._build_run_configuration(content_format)
|
|
140
|
+
return app.new_run(
|
|
109
141
|
input=input,
|
|
142
|
+
input_dir_path=input_dir_path,
|
|
143
|
+
configuration=config,
|
|
110
144
|
instance_id=instance_id,
|
|
111
145
|
options=run_options or {},
|
|
112
146
|
managed_input_id=managed_input_id,
|
|
113
147
|
)
|
|
114
|
-
return run_id
|
|
115
148
|
|
|
116
149
|
@mcp.tool()
|
|
117
150
|
def cloud_run_status(app_id: str, run_id: str) -> dict[str, Any]:
|
|
@@ -931,3 +931,115 @@ class TestBugFixes(unittest.TestCase):
|
|
|
931
931
|
run_numbers = [r["run_number"] for r in runs]
|
|
932
932
|
self.assertEqual(run_numbers, ["1", "2"])
|
|
933
933
|
|
|
934
|
+
|
|
935
|
+
class TestMultiFileRunSupport(unittest.TestCase):
|
|
936
|
+
"""Tests for multi-file run support in local and cloud run tools."""
|
|
937
|
+
|
|
938
|
+
def test_build_run_configuration_none(self):
|
|
939
|
+
"""_build_run_configuration returns None when content_format is None."""
|
|
940
|
+
from nextmv.cli.mcp.tools._helpers import _build_run_configuration
|
|
941
|
+
|
|
942
|
+
self.assertIsNone(_build_run_configuration(None))
|
|
943
|
+
|
|
944
|
+
def test_build_run_configuration_multi_file(self):
|
|
945
|
+
"""_build_run_configuration builds a RunConfiguration for 'multi-file'."""
|
|
946
|
+
from nextmv.cli.mcp.tools._helpers import _build_run_configuration
|
|
947
|
+
from nextmv.input import InputFormat
|
|
948
|
+
|
|
949
|
+
config = _build_run_configuration("multi-file")
|
|
950
|
+
self.assertIsNotNone(config)
|
|
951
|
+
self.assertEqual(
|
|
952
|
+
config.format.format_input.input_type,
|
|
953
|
+
InputFormat.MULTI_FILE,
|
|
954
|
+
)
|
|
955
|
+
|
|
956
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_local_app")
|
|
957
|
+
def test_local_run_submit_json_input(self, mock_get_local_app):
|
|
958
|
+
"""local_run_submit passes input dict to new_run for JSON apps."""
|
|
959
|
+
from nextmv.cli.mcp.server import create_server
|
|
960
|
+
|
|
961
|
+
mock_app = MagicMock()
|
|
962
|
+
mock_app.new_run.return_value = "run-123"
|
|
963
|
+
mock_get_local_app.return_value = mock_app
|
|
964
|
+
|
|
965
|
+
server = create_server()
|
|
966
|
+
tool = server._tool_manager._tools["local_run_submit"]
|
|
967
|
+
asyncio.run(tool.run({
|
|
968
|
+
"app_dir": "/some/app",
|
|
969
|
+
"input": {"stops": []},
|
|
970
|
+
}))
|
|
971
|
+
mock_app.new_run.assert_called_once()
|
|
972
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
973
|
+
self.assertEqual(call_kwargs["input"], {"stops": []})
|
|
974
|
+
self.assertIsNone(call_kwargs.get("input_dir_path"))
|
|
975
|
+
self.assertIsNone(call_kwargs.get("configuration"))
|
|
976
|
+
|
|
977
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_local_app")
|
|
978
|
+
def test_local_run_submit_multifile_input(self, mock_get_local_app):
|
|
979
|
+
"""local_run_submit passes input_dir_path + configuration for multi-file apps."""
|
|
980
|
+
from nextmv.cli.mcp.server import create_server
|
|
981
|
+
from nextmv.input import InputFormat
|
|
982
|
+
|
|
983
|
+
mock_app = MagicMock()
|
|
984
|
+
mock_app.new_run.return_value = "run-456"
|
|
985
|
+
mock_get_local_app.return_value = mock_app
|
|
986
|
+
|
|
987
|
+
server = create_server()
|
|
988
|
+
tool = server._tool_manager._tools["local_run_submit"]
|
|
989
|
+
asyncio.run(tool.run({
|
|
990
|
+
"app_dir": "/some/app",
|
|
991
|
+
"input_dir_path": "/some/input-dir",
|
|
992
|
+
"content_format": "multi-file",
|
|
993
|
+
}))
|
|
994
|
+
mock_app.new_run.assert_called_once()
|
|
995
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
996
|
+
self.assertEqual(call_kwargs["input_dir_path"], "/some/input-dir")
|
|
997
|
+
config = call_kwargs.get("configuration")
|
|
998
|
+
self.assertIsNotNone(config)
|
|
999
|
+
self.assertEqual(config.format.format_input.input_type, InputFormat.MULTI_FILE)
|
|
1000
|
+
|
|
1001
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_app")
|
|
1002
|
+
def test_cloud_run_submit_json_input(self, mock_get_app):
|
|
1003
|
+
"""cloud_run_submit passes input dict to new_run for JSON apps."""
|
|
1004
|
+
from nextmv.cli.mcp.server import create_server
|
|
1005
|
+
|
|
1006
|
+
mock_app = MagicMock()
|
|
1007
|
+
mock_app.new_run.return_value = "run-789"
|
|
1008
|
+
mock_get_app.return_value = mock_app
|
|
1009
|
+
|
|
1010
|
+
server = create_server()
|
|
1011
|
+
tool = server._tool_manager._tools["cloud_run_submit"]
|
|
1012
|
+
asyncio.run(tool.run({
|
|
1013
|
+
"app_id": "my-app",
|
|
1014
|
+
"input": {"stops": []},
|
|
1015
|
+
}))
|
|
1016
|
+
mock_app.new_run.assert_called_once()
|
|
1017
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
1018
|
+
self.assertEqual(call_kwargs["input"], {"stops": []})
|
|
1019
|
+
self.assertIsNone(call_kwargs.get("input_dir_path"))
|
|
1020
|
+
self.assertIsNone(call_kwargs.get("configuration"))
|
|
1021
|
+
|
|
1022
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_app")
|
|
1023
|
+
def test_cloud_run_submit_multifile_input(self, mock_get_app):
|
|
1024
|
+
"""cloud_run_submit passes input_dir_path + configuration for multi-file apps."""
|
|
1025
|
+
from nextmv.cli.mcp.server import create_server
|
|
1026
|
+
from nextmv.input import InputFormat
|
|
1027
|
+
|
|
1028
|
+
mock_app = MagicMock()
|
|
1029
|
+
mock_app.new_run.return_value = "run-mf-1"
|
|
1030
|
+
mock_get_app.return_value = mock_app
|
|
1031
|
+
|
|
1032
|
+
server = create_server()
|
|
1033
|
+
tool = server._tool_manager._tools["cloud_run_submit"]
|
|
1034
|
+
asyncio.run(tool.run({
|
|
1035
|
+
"app_id": "my-app",
|
|
1036
|
+
"input_dir_path": "/some/input-dir",
|
|
1037
|
+
"content_format": "multi-file",
|
|
1038
|
+
}))
|
|
1039
|
+
mock_app.new_run.assert_called_once()
|
|
1040
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
1041
|
+
self.assertEqual(call_kwargs["input_dir_path"], "/some/input-dir")
|
|
1042
|
+
config = call_kwargs.get("configuration")
|
|
1043
|
+
self.assertIsNotNone(config)
|
|
1044
|
+
self.assertEqual(config.format.format_input.input_type, InputFormat.MULTI_FILE)
|
|
1045
|
+
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "v1.2.3.dev3"
|
|
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
|
|
File without changes
|
|
File without changes
|
{nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/__init__.py
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
|
|
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
|