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.
Files changed (350) hide show
  1. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/PKG-INFO +1 -1
  2. nextmv-1.2.3.dev4/nextmv/__about__.py +1 -0
  3. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/_helpers.py +18 -0
  4. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/local.py +41 -6
  5. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/run.py +41 -8
  6. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_mcp.py +112 -0
  7. nextmv-1.2.3.dev3/nextmv/__about__.py +0 -1
  8. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/.gitignore +0 -0
  9. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/.python-version +0 -0
  10. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/CONTRIBUTING.md +0 -0
  11. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/LICENSE +0 -0
  12. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/README.md +0 -0
  13. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/__entrypoint__.py +0 -0
  14. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/__init__.py +0 -0
  15. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/_serialization.py +0 -0
  16. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/base_model.py +0 -0
  17. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/__init__.py +0 -0
  18. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/__init__.py +0 -0
  19. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
  20. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/create.py +0 -0
  21. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/delete.py +0 -0
  22. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/get.py +0 -0
  23. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/list.py +0 -0
  24. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/update.py +0 -0
  25. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/__init__.py +0 -0
  26. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/create.py +0 -0
  27. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/delete.py +0 -0
  28. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/get.py +0 -0
  29. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/update.py +0 -0
  30. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/__init__.py +0 -0
  31. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/create.py +0 -0
  32. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/delete.py +0 -0
  33. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/exists.py +0 -0
  34. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/get.py +0 -0
  35. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/list.py +0 -0
  36. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/push.py +0 -0
  37. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/update.py +0 -0
  38. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/__init__.py +0 -0
  39. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/create.py +0 -0
  40. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/delete.py +0 -0
  41. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/get.py +0 -0
  42. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/list.py +0 -0
  43. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/metadata.py +0 -0
  44. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/update.py +0 -0
  45. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/__init__.py +0 -0
  46. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/upload.py +0 -0
  47. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
  48. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/create.py +0 -0
  49. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/delete.py +0 -0
  50. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/get.py +0 -0
  51. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/list.py +0 -0
  52. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/update.py +0 -0
  53. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/__init__.py +0 -0
  54. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/create.py +0 -0
  55. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/delete.py +0 -0
  56. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/get.py +0 -0
  57. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/list.py +0 -0
  58. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/update.py +0 -0
  59. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/__init__.py +0 -0
  60. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/create.py +0 -0
  61. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/delete.py +0 -0
  62. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/exists.py +0 -0
  63. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/get.py +0 -0
  64. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/list.py +0 -0
  65. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/update.py +0 -0
  66. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
  67. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/create.py +0 -0
  68. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/delete.py +0 -0
  69. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/get.py +0 -0
  70. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/list.py +0 -0
  71. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/update.py +0 -0
  72. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/__init__.py +0 -0
  73. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/__init__.py +0 -0
  74. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/create.py +0 -0
  75. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/get.py +0 -0
  76. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/list.py +0 -0
  77. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/update.py +0 -0
  78. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/__init__.py +0 -0
  79. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/create.py +0 -0
  80. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/delete.py +0 -0
  81. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/get.py +0 -0
  82. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/list.py +0 -0
  83. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/__init__.py +0 -0
  84. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/create.py +0 -0
  85. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/get.py +0 -0
  86. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/list.py +0 -0
  87. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/update.py +0 -0
  88. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/__init__.py +0 -0
  89. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/cancel.py +0 -0
  90. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/create.py +0 -0
  91. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/get.py +0 -0
  92. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/input.py +0 -0
  93. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/list.py +0 -0
  94. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/logs.py +0 -0
  95. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/metadata.py +0 -0
  96. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/track.py +0 -0
  97. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/__init__.py +0 -0
  98. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/create.py +0 -0
  99. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/delete.py +0 -0
  100. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/get.py +0 -0
  101. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/list.py +0 -0
  102. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/metadata.py +0 -0
  103. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/update.py +0 -0
  104. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/__init__.py +0 -0
  105. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/create.py +0 -0
  106. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/delete.py +0 -0
  107. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/get.py +0 -0
  108. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/list.py +0 -0
  109. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/update.py +0 -0
  110. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/__init__.py +0 -0
  111. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/create.py +0 -0
  112. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/delete.py +0 -0
  113. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/get.py +0 -0
  114. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/list.py +0 -0
  115. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/metadata.py +0 -0
  116. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/start.py +0 -0
  117. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/stop.py +0 -0
  118. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/update.py +0 -0
  119. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/__init__.py +0 -0
  120. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/create.py +0 -0
  121. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/delete.py +0 -0
  122. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/disable.py +0 -0
  123. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/__init__.py +0 -0
  124. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/delete.py +0 -0
  125. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/enable.py +0 -0
  126. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/get.py +0 -0
  127. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/update.py +0 -0
  128. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/__init__.py +0 -0
  129. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/create.py +0 -0
  130. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/delete.py +0 -0
  131. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/get.py +0 -0
  132. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/list.py +0 -0
  133. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/metadata.py +0 -0
  134. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/start.py +0 -0
  135. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/stop.py +0 -0
  136. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/update.py +0 -0
  137. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/__init__.py +0 -0
  138. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/create.py +0 -0
  139. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/__init__.py +0 -0
  140. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/create.py +0 -0
  141. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/delete.py +0 -0
  142. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/exists.py +0 -0
  143. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/get.py +0 -0
  144. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/list.py +0 -0
  145. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/update.py +0 -0
  146. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/__init__.py +0 -0
  147. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/clone.py +0 -0
  148. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/community/list.py +0 -0
  149. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/__init__.py +0 -0
  150. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/config.py +0 -0
  151. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/create.py +0 -0
  152. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/delete.py +0 -0
  153. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/list.py +0 -0
  154. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/init.py +0 -0
  155. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/__init__.py +0 -0
  156. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/__init__.py +0 -0
  157. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/delete.py +0 -0
  158. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/get.py +0 -0
  159. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/list.py +0 -0
  160. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/register.py +0 -0
  161. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/registered.py +0 -0
  162. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/sync.py +0 -0
  163. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/update.py +0 -0
  164. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/__init__.py +0 -0
  165. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/create.py +0 -0
  166. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/get.py +0 -0
  167. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/input.py +0 -0
  168. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/list.py +0 -0
  169. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/logs.py +0 -0
  170. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/metadata.py +0 -0
  171. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/visuals.py +0 -0
  172. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/main.py +0 -0
  173. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/__init__.py +0 -0
  174. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/init.py +0 -0
  175. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/validate.py +0 -0
  176. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/__init__.py +0 -0
  177. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/serve.py +0 -0
  178. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/server.py +0 -0
  179. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/__init__.py +0 -0
  180. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/acceptance.py +0 -0
  181. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/account.py +0 -0
  182. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/app.py +0 -0
  183. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/batch.py +0 -0
  184. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/community.py +0 -0
  185. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/ensemble.py +0 -0
  186. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/input_set.py +0 -0
  187. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/instance.py +0 -0
  188. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/managed_input.py +0 -0
  189. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/profile.py +0 -0
  190. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/scenario.py +0 -0
  191. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/secrets.py +0 -0
  192. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/shadow.py +0 -0
  193. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/sso.py +0 -0
  194. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/switchback.py +0 -0
  195. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/version.py +0 -0
  196. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/message.py +0 -0
  197. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/options.py +0 -0
  198. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cli/version.py +0 -0
  199. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/__init__.py +0 -0
  200. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/acceptance_test.py +0 -0
  201. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/account.py +0 -0
  202. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/__init__.py +0 -0
  203. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_acceptance.py +0 -0
  204. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_batch_scenario.py +0 -0
  205. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_ensemble.py +0 -0
  206. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_input_set.py +0 -0
  207. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_instance.py +0 -0
  208. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_managed_input.py +0 -0
  209. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_run.py +0 -0
  210. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_secrets.py +0 -0
  211. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_shadow.py +0 -0
  212. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_switchback.py +0 -0
  213. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_utils.py +0 -0
  214. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_version.py +0 -0
  215. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/assets.py +0 -0
  216. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/batch_experiment.py +0 -0
  217. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/client.py +0 -0
  218. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/community.py +0 -0
  219. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/ensemble.py +0 -0
  220. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/input_set.py +0 -0
  221. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/instance.py +0 -0
  222. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/integration.py +0 -0
  223. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/marketplace.py +0 -0
  224. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/package.py +0 -0
  225. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/scenario.py +0 -0
  226. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/secrets.py +0 -0
  227. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/shadow.py +0 -0
  228. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/sso.py +0 -0
  229. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/switchback.py +0 -0
  230. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/url.py +0 -0
  231. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/cloud/version.py +0 -0
  232. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/content_format.py +0 -0
  233. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/.gitignore +0 -0
  234. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/README.md +0 -0
  235. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/app.yaml +0 -0
  236. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/input.json +0 -0
  237. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/main.py +0 -0
  238. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/requirements.txt +0 -0
  239. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/src/__init__.py +0 -0
  240. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/default_app/src/visuals.py +0 -0
  241. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/deprecated.py +0 -0
  242. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/input.py +0 -0
  243. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/__init__.py +0 -0
  244. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/application.py +0 -0
  245. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/executor.py +0 -0
  246. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/geojson_handler.py +0 -0
  247. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/local.py +0 -0
  248. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/plotly_handler.py +0 -0
  249. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/registry.py +0 -0
  250. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/local/runner.py +0 -0
  251. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/logger.py +0 -0
  252. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/manifest.py +0 -0
  253. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/model.py +0 -0
  254. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/options.py +0 -0
  255. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/output.py +0 -0
  256. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/polling.py +0 -0
  257. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/run.py +0 -0
  258. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/safe.py +0 -0
  259. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/status.py +0 -0
  260. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/binary_json_app.yaml +0 -0
  261. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/binary_multi-file_app.yaml +0 -0
  262. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_app.yaml +0 -0
  263. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/.gitignore +0 -0
  264. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/README.md +0 -0
  265. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/app.yaml +0 -0
  266. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/go.mod +0 -0
  267. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/input.json +0 -0
  268. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/main.go +0 -0
  269. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_app.yaml +0 -0
  270. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/.gitignore +0 -0
  271. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/README.md +0 -0
  272. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/app.yaml +0 -0
  273. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/go.mod +0 -0
  274. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/inputs/input.json +0 -0
  275. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/main.go +0 -0
  276. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_app.yaml +0 -0
  277. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/.gitignore +0 -0
  278. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/Main.java +0 -0
  279. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/README.md +0 -0
  280. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/app.yaml +0 -0
  281. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/input.json +0 -0
  282. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/pom.xml +0 -0
  283. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_app.yaml +0 -0
  284. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/.gitignore +0 -0
  285. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/Main.java +0 -0
  286. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/README.md +0 -0
  287. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/app.yaml +0 -0
  288. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/inputs/input.json +0 -0
  289. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/pom.xml +0 -0
  290. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_app.yaml +0 -0
  291. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/.gitignore +0 -0
  292. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/README.md +0 -0
  293. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/app.yaml +0 -0
  294. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/input.json +0 -0
  295. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/main.py +0 -0
  296. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/requirements.txt +0 -0
  297. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_app.yaml +0 -0
  298. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/.gitignore +0 -0
  299. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/README.md +0 -0
  300. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/app.yaml +0 -0
  301. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/inputs/input.json +0 -0
  302. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/main.py +0 -0
  303. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/requirements.txt +0 -0
  304. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/pyproject.toml +0 -0
  305. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/__init__.py +0 -0
  306. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/__init__.py +0 -0
  307. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_configuration.py +0 -0
  308. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_main.py +0 -0
  309. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cli/test_version.py +0 -0
  310. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/__init__.py +0 -0
  311. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/app.yaml +0 -0
  312. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_client.py +0 -0
  313. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_instance.py +0 -0
  314. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_package.py +0 -0
  315. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/cloud/test_scenario.py +0 -0
  316. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/__init__.py +0 -0
  317. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/__init__.py +0 -0
  318. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_cloud.py +0 -0
  319. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_marketplace.py +0 -0
  320. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/__init__.py +0 -0
  321. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_application.py +0 -0
  322. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_executor.py +0 -0
  323. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_registry.py +0 -0
  324. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/local/test_runner.py +0 -0
  325. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/__init__.py +0 -0
  326. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options1.py +0 -0
  327. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options2.py +0 -0
  328. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options3.py +0 -0
  329. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options4.py +0 -0
  330. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options5.py +0 -0
  331. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options6.py +0 -0
  332. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/scripts/options7.py +0 -0
  333. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_base_model.py +0 -0
  334. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_entrypoint/__init__.py +0 -0
  335. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_entrypoint/test_entrypoint.py +0 -0
  336. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_input.py +0 -0
  337. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.csv +0 -0
  338. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.json +0 -0
  339. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.txt +0 -0
  340. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_logger.py +0 -0
  341. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_manifest.py +0 -0
  342. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_model.py +0 -0
  343. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_options.py +0 -0
  344. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_output.py +0 -0
  345. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_polling.py +0 -0
  346. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_run.py +0 -0
  347. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_safe.py +0 -0
  348. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_serialization.py +0 -0
  349. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/tests/test_version.py +0 -0
  350. {nextmv-1.2.3.dev3 → nextmv-1.2.3.dev4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextmv
3
- Version: 1.2.3.dev3
3
+ Version: 1.2.3.dev4
4
4
  Summary: The all-purpose Python SDK for Nextmv
5
5
  Project-URL: Homepage, https://www.nextmv.io
6
6
  Project-URL: Documentation, https://nextmv-py.docs.nextmv.io/en/latest/nextmv/
@@ -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 optimization run.
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
- run_id = app.new_run(input=input, options=run_options)
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
- return app.new_run(input=input, options=run_options)
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 optimization
63
- run. Ignored when ``managed_input_id`` is provided.
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. Ignored
98
- when ``managed_input_id`` is provided.
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
- run_id = app.new_run(
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