terradev-cli 5.1.7__tar.gz → 5.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. terradev_cli-5.2.0/.github/workflows/ci.yml +395 -0
  2. terradev_cli-5.2.0/Deployment Package/LIFECYCLES.md +1620 -0
  3. terradev_cli-5.2.0/Deployment Package/architecture.md +373 -0
  4. terradev_cli-5.2.0/Deployment Package/overview.md +162 -0
  5. terradev_cli-5.2.0/Deployment Package/security.md +278 -0
  6. terradev_cli-5.2.0/Deployment Package/troubleshooting.md +599 -0
  7. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/Dockerfile +1 -5
  8. terradev_cli-5.2.0/Dockerfile.test +45 -0
  9. {terradev_cli-5.1.7/terradev_cli.egg-info → terradev_cli-5.2.0}/PKG-INFO +6 -4
  10. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/README.md +5 -3
  11. terradev_cli-5.2.0/docs/overview.md +161 -0
  12. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/pyproject.toml +6 -1
  13. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/requirements.txt +3 -3
  14. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/README.md +7 -5
  15. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/__init__.py +1 -3
  16. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/__main__.py +4 -1
  17. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/cli.py +6501 -4161
  18. terradev_cli-5.2.0/terradev_cli/cli_hf_spaces.py +201 -0
  19. terradev_cli-5.2.0/terradev_cli/cli_karpenter.py +270 -0
  20. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/__init__.py +6 -6
  21. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/async_config.py +69 -64
  22. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/auth.py +1 -3
  23. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/auto_lineage.py +189 -125
  24. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cache_manager.py +10 -8
  25. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/checkpoint_manager.py +148 -65
  26. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/command_executor.py +8 -6
  27. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/config_validator.py +12 -7
  28. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cost_scaler.py +227 -171
  29. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cost_tracker.py +57 -14
  30. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/credential_vault.py +7 -6
  31. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cuda_graph_integrator.py +141 -97
  32. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/dag_executor.py +28 -19
  33. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/data_governance.py +44 -19
  34. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/dataset_stager.py +86 -25
  35. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/deployment_router.py +202 -155
  36. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/distributed_lock.py +19 -8
  37. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/drift_detector.py +109 -80
  38. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/egress_cost_monitor.py +209 -101
  39. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/egress_optimizer.py +156 -56
  40. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/evaluation_orchestrator.py +114 -83
  41. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/event_system.py +153 -101
  42. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gitops_manager.py +273 -301
  43. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gpu_discovery.py +4 -3
  44. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gpu_topology.py +137 -80
  45. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/helm_generator.py +444 -238
  46. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_cli_integration.py +219 -150
  47. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_smart_templates.py +162 -130
  48. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_spaces.py +74 -66
  49. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/inference_router.py +270 -182
  50. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/inference_spot_manager.py +58 -18
  51. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/job_state_manager.py +106 -48
  52. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/kv_cache_checkpoint_manager.py +231 -173
  53. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/kv_cache_checkpoint_tests.py +319 -254
  54. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/manifest_cache.py +34 -27
  55. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mig_manager.py +137 -77
  56. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/migration_orchestrator.py +129 -79
  57. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mla_vram_estimator.py +157 -107
  58. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mla_vram_tests.py +267 -211
  59. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/model_orchestrator.py +251 -207
  60. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/oidc_provider.py +173 -145
  61. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/optimization_config.py +41 -33
  62. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/parallel_provisioner.py +50 -24
  63. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/pipeline_schema.py +117 -86
  64. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/preflight_validator.py +758 -308
  65. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/price_discovery.py +247 -160
  66. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/price_intelligence.py +174 -65
  67. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/public_ip_billing_tracker.py +190 -127
  68. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/quick_start.py +106 -109
  69. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/quota_manager.py +11 -8
  70. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/rate_limiter.py +11 -7
  71. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/rust_telemetry.py +4 -3
  72. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_router.py +146 -122
  73. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/__init__.py +11 -11
  74. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/base_signal.py +5 -3
  75. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/complexity_signal.py +26 -18
  76. terradev_cli-5.2.0/terradev_cli/core/semantic_signals/domain_signal.py +277 -0
  77. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/keyword_signal.py +119 -28
  78. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/language_signal.py +173 -31
  79. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/modality_signal.py +37 -17
  80. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/orchestrator.py +14 -7
  81. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/safety_signal.py +43 -24
  82. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/session_manager.py +32 -29
  83. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/ssh_key_manager.py +11 -4
  84. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/telemetry.py +13 -9
  85. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/terradev_engine.py +13 -11
  86. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/trace_viewer.py +8 -4
  87. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/training_monitor.py +156 -73
  88. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/training_orchestrator.py +201 -82
  89. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/user_manager.py +192 -163
  90. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/warm_pool_manager.py +273 -220
  91. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/weight_streaming_benchmarks.py +249 -194
  92. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/weight_streaming_manager.py +159 -125
  93. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/cost_optimizer.py +306 -210
  94. terradev_cli-5.2.0/terradev_cli/credential_prompt.py +172 -0
  95. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/demo.py +8 -10
  96. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/entry_point.py +4 -1
  97. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/databricks_integration.py +178 -81
  98. terradev_cli-5.2.0/terradev_cli/integrations/datadog_integration.py +1148 -0
  99. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/helicone_integration.py +85 -34
  100. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/prometheus_integration.py +83 -39
  101. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/wandb_integration.py +27 -5
  102. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/k8s/terraform_wrapper.py +147 -112
  103. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx_setup.py +215 -180
  104. terradev_cli-5.2.0/terradev_cli/mcp/server.py +13068 -0
  105. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/__init__.py +20 -20
  106. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/agentic_serving.py +68 -34
  107. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/drift_retrain_service.py +103 -55
  108. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/dvc_service.py +142 -104
  109. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/guardrails_service.py +96 -63
  110. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/huggingface_service.py +135 -106
  111. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kserve_service.py +177 -113
  112. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kubernetes_enhanced.py +384 -279
  113. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kubernetes_service.py +150 -122
  114. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langchain_service.py +162 -146
  115. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langfuse_service.py +106 -45
  116. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langgraph_service.py +163 -140
  117. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/lmcache_service.py +177 -190
  118. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/mlflow_service.py +192 -103
  119. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/model_router.py +136 -59
  120. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ollama_service.py +159 -137
  121. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/phoenix_service.py +100 -53
  122. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/qdrant_service.py +132 -44
  123. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ray_enhanced.py +214 -118
  124. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ray_service.py +125 -152
  125. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/sglang_service.py +382 -234
  126. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/vllm_service.py +470 -318
  127. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/wandb_enhanced.py +169 -167
  128. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/__init__.py +16 -5
  129. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/auto_optimizer.py +315 -224
  130. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/cuco_optimizer.py +212 -145
  131. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/alibaba_provider.py +224 -102
  132. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/aws_provider.py +100 -57
  133. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/azure_provider.py +81 -48
  134. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/base_provider.py +2 -3
  135. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/baseten_provider.py +63 -40
  136. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/coreweave_provider.py +80 -42
  137. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/crusoe_provider.py +0 -2
  138. terradev_cli-5.2.0/terradev_cli/providers/demo_mode.py +207 -0
  139. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/digitalocean_provider.py +114 -51
  140. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/fluidstack_provider.py +31 -16
  141. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/gcp_provider.py +234 -103
  142. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/hetzner_provider.py +115 -65
  143. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/huggingface_provider.py +60 -29
  144. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/hyperstack_provider.py +106 -45
  145. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/inferx_provider.py +76 -81
  146. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/lambda_labs_provider.py +180 -99
  147. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/latitude_provider.py +300 -208
  148. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/oracle_provider.py +60 -35
  149. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/ovhcloud_provider.py +84 -29
  150. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/provider_factory.py +23 -21
  151. terradev_cli-5.2.0/terradev_cli/providers/real_pricing.py +330 -0
  152. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/runpod_provider.py +149 -94
  153. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/siliconflow_provider.py +14 -7
  154. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/tensordock_provider.py +97 -51
  155. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/vastai_provider.py +69 -30
  156. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/__init__.py +6 -6
  157. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +83 -51
  158. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/test_summary.py +71 -61
  159. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/utils/formatters.py +1 -1
  160. {terradev_cli-5.1.7 → terradev_cli-5.2.0/terradev_cli.egg-info}/PKG-INFO +6 -4
  161. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/SOURCES.txt +9 -1
  162. terradev_cli-5.2.0/tests/CREDENTIAL_STRATEGY.md +261 -0
  163. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/Makefile +1 -1
  164. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/ci_pipeline.py +265 -194
  165. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/conftest.py +2 -0
  166. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_battle.py +341 -184
  167. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_battle_fixed.py +445 -221
  168. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_final.py +256 -156
  169. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_final_integration.py +107 -100
  170. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_integrated_optimization.py +206 -140
  171. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_p10_production_failover.py +313 -235
  172. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_sso_phase1.py +97 -75
  173. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_vllm_optimization.py +123 -63
  174. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/simple_test.py +56 -54
  175. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_ai_integrations.py +74 -74
  176. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_checkpoint_manager.py +0 -2
  177. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_cli_smoke.py +9 -2
  178. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_dag_executor.py +9 -5
  179. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_flashoptim.py +98 -106
  180. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_integration.py +177 -167
  181. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_job_state_manager.py +27 -10
  182. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_k8s_regression.py +44 -36
  183. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_latitude_provider.py +63 -64
  184. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_major_providers.py +109 -66
  185. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_mcp_handlers.py +63 -71
  186. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_new_providers.py +66 -47
  187. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_provider_conformance.py +51 -33
  188. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_providers.py +79 -47
  189. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_semantic_router.py +464 -162
  190. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_sglang_optimization.py +187 -196
  191. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_ssh_key_manager.py +4 -2
  192. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_training_monitor.py +11 -6
  193. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_training_orchestrator.py +24 -25
  194. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_vllm_features.py +112 -114
  195. terradev_cli-5.1.7/.github/workflows/ci.yml +0 -191
  196. terradev_cli-5.1.7/terradev_cli/cli_hf_spaces.py +0 -145
  197. terradev_cli-5.1.7/terradev_cli/cli_karpenter.py +0 -133
  198. terradev_cli-5.1.7/terradev_cli/core/semantic_signals/domain_signal.py +0 -144
  199. terradev_cli-5.1.7/terradev_cli/credential_prompt.py +0 -164
  200. terradev_cli-5.1.7/terradev_cli/integrations/datadog_integration.py +0 -688
  201. terradev_cli-5.1.7/terradev_cli/mcp/server.py +0 -8953
  202. terradev_cli-5.1.7/terradev_cli/providers/demo_mode.py +0 -123
  203. terradev_cli-5.1.7/terradev_cli/providers/real_pricing.py +0 -293
  204. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.ebextensions/python.config +0 -0
  205. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.env.example +0 -0
  206. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/action.yml +0 -0
  207. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/release.yml +0 -0
  208. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/static.yml +0 -0
  209. {terradev_cli-5.1.7 → terradev_cli-5.2.0/Deployment Package}/BNF_GRAMMAR.md +0 -0
  210. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/LICENSE +0 -0
  211. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/MANIFEST.in +0 -0
  212. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/activations/973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b.json +0 -0
  213. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/api-differences-comparison.tf +0 -0
  214. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/cost-structure-differences.tf +0 -0
  215. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/inference-arbitrage-pivot.tf +0 -0
  216. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/README.md +0 -0
  217. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/helm/values-glm5.yaml +0 -0
  218. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/hpa.yaml +0 -0
  219. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
  220. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/namespace.yaml +0 -0
  221. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/pdb.yaml +0 -0
  222. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/service.yaml +0 -0
  223. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
  224. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
  225. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/task.yaml +0 -0
  226. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/main.tf +0 -0
  227. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/outputs.tf +0 -0
  228. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/variables.tf +0 -0
  229. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/README.md +0 -0
  230. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
  231. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/gateway.yaml +0 -0
  232. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
  233. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
  234. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/task.yaml +0 -0
  235. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/README.md +0 -0
  236. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/helm/values-moe.yaml +0 -0
  237. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/deployment.yaml +0 -0
  238. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/hpa.yaml +0 -0
  239. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
  240. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/namespace.yaml +0 -0
  241. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/pdb.yaml +0 -0
  242. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/service.yaml +0 -0
  243. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/task.yaml +0 -0
  244. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/main.tf +0 -0
  245. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/outputs.tf +0 -0
  246. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/variables.tf +0 -0
  247. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/README.md +0 -0
  248. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/helm/values-rag.yaml +0 -0
  249. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/k8s/deployment.yaml +0 -0
  250. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/terraform/main.tf +0 -0
  251. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/RECORDING_GUIDE.md +0 -0
  252. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/generate_gif.py +0 -0
  253. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/terradev-demo.gif +0 -0
  254. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
  255. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/API_DOCUMENTATION.md +0 -0
  256. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/BingSiteAuth.xml +0 -0
  257. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
  258. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/USER_GUIDE.md +0 -0
  259. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
  260. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
  261. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/architecture.md +0 -0
  262. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/index.html +0 -0
  263. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/robots.txt +0 -0
  264. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/sitemap.xml +0 -0
  265. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/test_spot_provision.md +0 -0
  266. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/aws_ssm_starter.py +0 -0
  267. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/config.example.json +0 -0
  268. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/demo_k8s_config.yaml +0 -0
  269. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/direct_aws_starter.py +0 -0
  270. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/ec2_user_data_starter.py +0 -0
  271. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/example-pipeline.yaml +0 -0
  272. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/kubernetes_training_deployment.yaml +0 -0
  273. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/simple_ssm_starter.py +0 -0
  274. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/ssh_server_starter.py +0 -0
  275. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/start_aws_servers.py +0 -0
  276. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/Chart.yaml +0 -0
  277. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/templates/_helpers.tpl +0 -0
  278. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/templates/deployment.yaml +0 -0
  279. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/values.yaml +0 -0
  280. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/bucket-policy.json +0 -0
  281. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/grafana_training_dashboard.json +0 -0
  282. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/kubernetes/microservices.yaml +0 -0
  283. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/terraform/main.tf +0 -0
  284. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/terraform/parallelism.tf +0 -0
  285. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cli-tool.tf +0 -0
  286. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cloud-management-widgets.tf +0 -0
  287. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cloud-provider-apis.py +0 -0
  288. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/critical-widgets.tf +0 -0
  289. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/devops-cicd-widgets.tf +0 -0
  290. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/devops-essential-tools.tf +0 -0
  291. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/docker-integration.tf +0 -0
  292. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/kubernetes-operator.tf +0 -0
  293. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/mlflow-integration.tf +0 -0
  294. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/README.md +0 -0
  295. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/dashboard.tf +0 -0
  296. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/monitors.tf +0 -0
  297. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/outputs.tf +0 -0
  298. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/provider.tf +0 -0
  299. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/variables.tf +0 -0
  300. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/versions.tf +0 -0
  301. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/prometheus_training_config.yml +0 -0
  302. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/Cargo.toml +0 -0
  303. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/INTEGRATION_GUIDE.md +0 -0
  304. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  305. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/README.md +0 -0
  306. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/Cargo.toml +0 -0
  307. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/lib.rs +0 -0
  308. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/types.rs +0 -0
  309. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
  310. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/Cargo.toml +0 -0
  311. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/encoding.rs +0 -0
  312. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/hmac.rs +0 -0
  313. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/lib.rs +0 -0
  314. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/types.rs +0 -0
  315. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/Cargo.toml +0 -0
  316. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/cache.rs +0 -0
  317. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/lib.rs +0 -0
  318. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/types.rs +0 -0
  319. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-command-executor/Cargo.toml +0 -0
  320. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-command-executor/src/lib.rs +0 -0
  321. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/Cargo.toml +0 -0
  322. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/lib.rs +0 -0
  323. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/types.rs +0 -0
  324. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/validator.rs +0 -0
  325. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/Cargo.toml +0 -0
  326. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/lib.rs +0 -0
  327. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/pool.rs +0 -0
  328. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/types.rs +0 -0
  329. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/Cargo.toml +0 -0
  330. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
  331. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/lib.rs +0 -0
  332. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/types.rs +0 -0
  333. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-scaler/Cargo.toml +0 -0
  334. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-scaler/src/lib.rs +0 -0
  335. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/Cargo.toml +0 -0
  336. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/lib.rs +0 -0
  337. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/types.rs +0 -0
  338. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/vault.rs +0 -0
  339. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-dag-executor/Cargo.toml +0 -0
  340. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-dag-executor/src/lib.rs +0 -0
  341. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/Cargo.toml +0 -0
  342. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/lib.rs +0 -0
  343. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/lock.rs +0 -0
  344. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/types.rs +0 -0
  345. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
  346. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
  347. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
  348. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/types.rs +0 -0
  349. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/Cargo.toml +0 -0
  350. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/bus.rs +0 -0
  351. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/lib.rs +0 -0
  352. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/types.rs +0 -0
  353. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-governance/Cargo.toml +0 -0
  354. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-governance/src/lib.rs +0 -0
  355. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
  356. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
  357. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/Cargo.toml +0 -0
  358. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/lib.rs +0 -0
  359. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/topology.rs +0 -0
  360. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/types.rs +0 -0
  361. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-helm-generator/Cargo.toml +0 -0
  362. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-helm-generator/src/lib.rs +0 -0
  363. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-codec/Cargo.toml +0 -0
  364. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-codec/src/lib.rs +0 -0
  365. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
  366. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
  367. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-price-intelligence/Cargo.toml +0 -0
  368. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-price-intelligence/src/lib.rs +0 -0
  369. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/Cargo.toml +0 -0
  370. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/lib.rs +0 -0
  371. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/manager.rs +0 -0
  372. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/types.rs +0 -0
  373. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/Cargo.toml +0 -0
  374. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/lib.rs +0 -0
  375. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/pool.rs +0 -0
  376. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/types.rs +0 -0
  377. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-result-compressor/Cargo.toml +0 -0
  378. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-result-compressor/src/lib.rs +0 -0
  379. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-semantic-router/Cargo.toml +0 -0
  380. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-semantic-router/src/lib.rs +0 -0
  381. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
  382. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
  383. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
  384. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/types.rs +0 -0
  385. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/Cargo.toml +0 -0
  386. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/lib.rs +0 -0
  387. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/state.rs +0 -0
  388. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/types.rs +0 -0
  389. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/Cargo.toml +0 -0
  390. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/lib.rs +0 -0
  391. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/pipeline.rs +0 -0
  392. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/types.rs +0 -0
  393. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-tool-registry/Cargo.toml +0 -0
  394. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-tool-registry/src/lib.rs +0 -0
  395. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/Cargo.toml +0 -0
  396. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
  397. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/lib.rs +0 -0
  398. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/types.rs +0 -0
  399. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-warm-pool/Cargo.toml +0 -0
  400. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-warm-pool/src/lib.rs +0 -0
  401. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/action.py +0 -0
  402. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/check_logs_fix.py +0 -0
  403. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_comparison.py +0 -0
  404. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_mla.py +0 -0
  405. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_streaming.py +0 -0
  406. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_correct_pricing.py +0 -0
  407. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_enhanced_server.py +0 -0
  408. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_exact_servers.py +0 -0
  409. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_simple_enhanced.py +0 -0
  410. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_telemetry_aws.py +0 -0
  411. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_to_aws.py +0 -0
  412. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/figure_calculation_breakdown.py +0 -0
  413. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/fix_server_ports.py +0 -0
  414. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/gpu-check.sh +0 -0
  415. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/server_manager.py +0 -0
  416. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
  417. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/account-setup-guide.tf +0 -0
  418. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/docker-compose.yml +0 -0
  419. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/nginx.conf +0 -0
  420. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/render.yaml +0 -0
  421. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/setup.sh +0 -0
  422. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup.cfg +0 -0
  423. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/CHANGELOG.md +0 -0
  424. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
  425. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
  426. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
  427. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
  428. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
  429. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
  430. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/config.py +0 -0
  431. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/manifest_example.json +0 -0
  432. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
  433. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
  434. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
  435. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/__init__.py +0 -0
  436. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
  437. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
  438. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
  439. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
  440. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/mcp/__init__.py +0 -0
  441. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
  442. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/__init__.py +0 -0
  443. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/requirements.txt +0 -0
  444. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/requirements_minimal.txt +0 -0
  445. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/main.tf +0 -0
  446. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
  447. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
  448. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
  449. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
  450. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
  451. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
  452. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
  453. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
  454. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
  455. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
  456. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
  457. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
  458. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
  459. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
  460. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
  461. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
  462. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
  463. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
  464. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
  465. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
  466. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
  467. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
  468. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
  469. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
  470. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
  471. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
  472. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/main.tf +0 -0
  473. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
  474. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
  475. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
  476. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/outputs.tf +0 -0
  477. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/providers.tf +0 -0
  478. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/variables.tf +0 -0
  479. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/utils/__init__.py +0 -0
  480. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/dependency_links.txt +0 -0
  481. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/entry_points.txt +0 -0
  482. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/requires.txt +0 -0
  483. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/top_level.txt +0 -0
  484. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform.tfvars.example +0 -0
  485. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/backend.tf +0 -0
  486. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/error_handling.py +0 -0
  487. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/parallel_provisioning.tf +0 -0
  488. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/storage_choice_matrix.py +0 -0
  489. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/test_error_handler.py +0 -0
  490. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/versions.tf +0 -0
  491. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
  492. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_trail.py +0 -0
  493. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_trails.json +0 -0
  494. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/decision_engine.py +0 -0
  495. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/decision_logs.json +0 -0
  496. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/operations.json +0 -0
  497. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/terraform_manager.py +0 -0
  498. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/terraform_plans.json +0 -0
  499. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/transparency_demo.py +0 -0
  500. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/transparency_report.json +0 -0
  501. {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/INTEGRATION_STRATEGY.md +0 -0
@@ -0,0 +1,395 @@
1
+ name: Terradev CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop ]
6
+ pull_request:
7
+ branches: [ main, develop ]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ # === Rust Testing ===
12
+ rust-test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ rust: [stable, beta]
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Rust ${{ matrix.rust }}
21
+ uses: dtolnay/rust-toolchain@stable
22
+ with:
23
+ toolchain: ${{ matrix.rust }}
24
+ components: rustfmt, clippy
25
+
26
+ - name: Cache cargo registry
27
+ uses: actions/cache@v4
28
+ with:
29
+ path: ~/.cargo/registry
30
+ key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
31
+
32
+ - name: Cache cargo index
33
+ uses: actions/cache@v4
34
+ with:
35
+ path: ~/.cargo/git
36
+ key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
37
+
38
+ - name: Cache cargo build
39
+ uses: actions/cache@v4
40
+ with:
41
+ path: target
42
+ key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
43
+
44
+ - name: Run cargo test
45
+ run: |
46
+ if [ -f "rust/Cargo.toml" ]; then
47
+ cd rust
48
+ cargo test --workspace --verbose
49
+ else
50
+ echo "No rust/ workspace found, skipping Rust tests"
51
+ fi
52
+
53
+ - name: Run cargo clippy
54
+ run: |
55
+ if [ -f "rust/Cargo.toml" ]; then
56
+ cd rust
57
+ cargo clippy --workspace -- -D warnings
58
+ fi
59
+
60
+ - name: Run cargo fmt
61
+ run: |
62
+ if [ -f "rust/Cargo.toml" ]; then
63
+ cd rust
64
+ cargo fmt --all -- --check
65
+ fi
66
+
67
+ # === Code Quality (Linting) ===
68
+ lint:
69
+ runs-on: ubuntu-latest
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+
73
+ - uses: actions/setup-python@v5
74
+ with:
75
+ python-version: '3.11'
76
+
77
+ - name: Install linting tools
78
+ run: |
79
+ pip install mypy ruff
80
+
81
+ # Flake8 disabled - 1000+ errors need cleanup
82
+ # - name: Flake8 check
83
+ # run: flake8 terradev_cli/ tests/ --max-line-length=120 --ignore=E203,W503
84
+
85
+ - name: MyPy check
86
+ run: mypy terradev_cli/ --ignore-missing-imports --no-strict-optional || true
87
+
88
+ - name: Ruff check
89
+ run: ruff check terradev_cli/ tests/ --ignore F401,F821,F841,E402,E501,F541,E712
90
+
91
+ # === Unit Tests (Linux) ===
92
+ test-linux:
93
+ runs-on: ubuntu-latest
94
+ strategy:
95
+ matrix:
96
+ python-version: ['3.9', '3.10', '3.11', '3.12']
97
+ env:
98
+ TERRADEV_SKIP_ONBOARDING: "1"
99
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
100
+ TERRADEV_GITHUB_TOKEN: ${{ secrets.TERRADEV_GITHUB_TOKEN }}
101
+
102
+ steps:
103
+ - uses: actions/checkout@v4
104
+
105
+ - name: Set up Python ${{ matrix.python-version }}
106
+ uses: actions/setup-python@v5
107
+ with:
108
+ python-version: ${{ matrix.python-version }}
109
+
110
+ - name: Clear pip cache
111
+ run: pip cache purge
112
+
113
+ - name: Install package + test deps
114
+ run: |
115
+ pip install -e ".[dev]" 2>/dev/null || pip install -e .
116
+ pip install pytest pytest-asyncio pytest-cov pytest-xdist
117
+
118
+ - name: CLI smoke test
119
+ run: |
120
+ terradev --version
121
+ terradev --help
122
+
123
+ - name: Check for legacy duplicate files
124
+ run: |
125
+ if find terradev_cli -type f \( -name "*_old.py" -o -name "*_backup.py" -o -name "*_fixed.py" -o -name "*_simple.py" -o -name "*_final.py" -o -name "*_clean.py" -o -name "*_tiered.py" \) | grep -q .; then
126
+ echo "ERROR: Legacy duplicate files found. These should be deleted and not committed."
127
+ find terradev_cli -type f \( -name "*_old.py" -o -name "*_backup.py" -o -name "*_fixed.py" -o -name "*_simple.py" -o -name "*_final.py" -o -name "*_clean.py" -o -name "*_tiered.py" \)
128
+ exit 1
129
+ fi
130
+
131
+ - name: Run unit tests with coverage
132
+ run: |
133
+ pytest tests/ -v --tb=short --cov=terradev_cli --cov-report=xml --cov-report=html --cov-fail-under=19 --ignore=tests/test_mcp_handlers.py -n auto
134
+
135
+ - name: Upload coverage to Codecov
136
+ uses: codecov/codecov-action@v4
137
+ with:
138
+ file: ./coverage.xml
139
+ flags: unittests-linux-${{ matrix.python-version }}
140
+ name: codecov-linux-${{ matrix.python-version }}
141
+
142
+ # === Unit Tests (Windows) ===
143
+ test-windows:
144
+ runs-on: windows-latest
145
+ strategy:
146
+ matrix:
147
+ python-version: ['3.10', '3.11', '3.12']
148
+ env:
149
+ TERRADEV_SKIP_ONBOARDING: "1"
150
+
151
+ steps:
152
+ - uses: actions/checkout@v4
153
+
154
+ - name: Set up Python ${{ matrix.python-version }}
155
+ uses: actions/setup-python@v5
156
+ with:
157
+ python-version: ${{ matrix.python-version }}
158
+
159
+ - name: Install package + test deps
160
+ shell: pwsh
161
+ run: |
162
+ pip install -e ".[dev]" 2>$null; if ($LASTEXITCODE -ne 0) { pip install -e . }
163
+ pip install pytest pytest-asyncio pytest-cov
164
+
165
+ - name: CLI smoke test
166
+ shell: pwsh
167
+ run: |
168
+ terradev --version
169
+ terradev --help
170
+
171
+ - name: Run unit tests (Windows)
172
+ shell: pwsh
173
+ run: pytest tests/ -v --tb=short --ignore=tests/test_mcp_handlers.py --ignore=tests/test_integration.py
174
+
175
+ # === Unit Tests (macOS) ===
176
+ test-macos:
177
+ runs-on: macos-latest
178
+ strategy:
179
+ matrix:
180
+ python-version: ['3.10', '3.11', '3.12']
181
+ env:
182
+ TERRADEV_SKIP_ONBOARDING: "1"
183
+
184
+ steps:
185
+ - uses: actions/checkout@v4
186
+
187
+ - name: Set up Python ${{ matrix.python-version }}
188
+ uses: actions/setup-python@v5
189
+ with:
190
+ python-version: ${{ matrix.python-version }}
191
+
192
+ - name: Install package + test deps
193
+ run: |
194
+ pip install -e ".[dev]" 2>/dev/null || pip install -e .
195
+ pip install pytest pytest-asyncio pytest-cov
196
+
197
+ - name: CLI smoke test
198
+ run: |
199
+ terradev --version
200
+ terradev --help
201
+
202
+ - name: Run unit tests (macOS)
203
+ run: pytest tests/ -v --tb=short --ignore=tests/test_mcp_handlers.py --ignore=tests/test_integration.py
204
+
205
+ # === Integration Tests (Mock) ===
206
+ integration-mock:
207
+ runs-on: ubuntu-latest
208
+ needs: [lint]
209
+ env:
210
+ MOCK: "true"
211
+ TERRADEV_SKIP_ONBOARDING: "1"
212
+
213
+ steps:
214
+ - uses: actions/checkout@v4
215
+
216
+ - uses: actions/setup-python@v5
217
+ with:
218
+ python-version: '3.11'
219
+
220
+ - name: Install package + test deps
221
+ run: |
222
+ pip install -e ".[dev]" 2>/dev/null || pip install -e .
223
+ pip install pytest pytest-asyncio
224
+
225
+ - name: Run integration tests (mock)
226
+ run: python tests/test_integration.py --mock --suite providers
227
+
228
+ # === Integration Tests (Real Credentials - Optional) ===
229
+ integration-live:
230
+ runs-on: ubuntu-latest
231
+ needs: [lint]
232
+ if: github.event_name == 'workflow_dispatch'
233
+ env:
234
+ TERRADEV_SKIP_ONBOARDING: "1"
235
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_TEST_KEY }}
236
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_TEST_SECRET }}
237
+ RUNPOD_API_KEY: ${{ secrets.RUNPOD_TEST_KEY }}
238
+ VAST_API_KEY: ${{ secrets.VAST_TEST_KEY }}
239
+
240
+ steps:
241
+ - uses: actions/checkout@v4
242
+
243
+ - uses: actions/setup-python@v5
244
+ with:
245
+ python-version: '3.11'
246
+
247
+ - name: Install package + test deps
248
+ run: |
249
+ pip install -e ".[dev]" 2>/dev/null || pip install -e .
250
+ pip install pytest pytest-asyncio
251
+
252
+ - name: Run integration tests (live)
253
+ run: python tests/test_integration.py --suite providers
254
+ continue-on-error: true
255
+
256
+ # === Build Package ===
257
+ build:
258
+ runs-on: ubuntu-latest
259
+ needs: [rust-test, test-linux, lint]
260
+ steps:
261
+ - uses: actions/checkout@v4
262
+
263
+ - uses: actions/setup-python@v5
264
+ with:
265
+ python-version: '3.11'
266
+
267
+ - name: Build wheel + sdist
268
+ run: |
269
+ pip install build
270
+ python -m build
271
+
272
+ - name: Verify built package installs
273
+ run: |
274
+ pip install dist/*.whl
275
+ terradev --version
276
+
277
+ - name: Upload artifacts
278
+ uses: actions/upload-artifact@v4
279
+ with:
280
+ name: dist
281
+ path: dist/
282
+
283
+ # === Security Scanning ===
284
+ security:
285
+ runs-on: ubuntu-latest
286
+ steps:
287
+ - uses: actions/checkout@v4
288
+
289
+ - uses: actions/setup-python@v5
290
+ with:
291
+ python-version: '3.11'
292
+
293
+ - name: Install package for scan
294
+ run: pip install -e ".[dev]" 2>/dev/null || pip install -e .
295
+
296
+ - name: Install + scan
297
+ run: |
298
+ pip install bandit safety
299
+ bandit -r terradev_cli/ -f json -o bandit-report.json -lll || true
300
+ bandit -r terradev_cli/ -lll --exit-zero
301
+ safety check --json --output safety-report.json || true
302
+
303
+ - uses: actions/upload-artifact@v4
304
+ with:
305
+ name: security-reports
306
+ path: |
307
+ bandit-report.json
308
+ safety-report.json
309
+
310
+ # === Docker Build Test ===
311
+ docker-build:
312
+ runs-on: ubuntu-latest
313
+ needs: [build]
314
+ steps:
315
+ - uses: actions/checkout@v4
316
+
317
+ - name: Set up Docker Buildx
318
+ uses: docker/setup-buildx-action@v3
319
+
320
+ - name: Build Docker image
321
+ run: |
322
+ if [ -f "Dockerfile" ]; then
323
+ docker build -t terradev-test .
324
+ elif [ -f "Dockerfile.test" ]; then
325
+ docker build -f Dockerfile.test -t terradev-test .
326
+ else
327
+ echo "No Dockerfile found, skipping Docker build"
328
+ fi
329
+
330
+ # === Documentation Build ===
331
+ docs-build:
332
+ runs-on: ubuntu-latest
333
+ steps:
334
+ - uses: actions/checkout@v4
335
+
336
+ - uses: actions/setup-python@v5
337
+ with:
338
+ python-version: '3.11'
339
+
340
+ - name: Install documentation tools
341
+ run: |
342
+ pip install mkdocs mkdocs-material pymdown-extensions
343
+
344
+ - name: Build documentation
345
+ run: |
346
+ if [ -f "mkdocs.yml" ]; then
347
+ mkdocs build
348
+ else
349
+ echo "No mkdocs.yml found, skipping docs build"
350
+ fi
351
+
352
+ # === Performance Benchmarking ===
353
+ benchmark:
354
+ runs-on: ubuntu-latest
355
+ needs: [test-linux]
356
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
357
+ steps:
358
+ - uses: actions/checkout@v4
359
+
360
+ - uses: actions/setup-python@v5
361
+ with:
362
+ python-version: '3.11'
363
+
364
+ - name: Install package + test deps
365
+ run: |
366
+ pip install -e ".[dev]" 2>/dev/null || pip install -e .
367
+ pip install pytest pytest-asyncio
368
+
369
+ - name: Run performance benchmarks
370
+ run: python tests/test_integration.py --performance --suite performance
371
+ continue-on-error: true
372
+
373
+ # === Publish to PyPI ===
374
+ publish:
375
+ if: startsWith(github.ref, 'refs/tags/v')
376
+ needs: [test-linux, test-windows, test-macos, build, security]
377
+ runs-on: ubuntu-latest
378
+ permissions:
379
+ id-token: write
380
+ steps:
381
+ - uses: actions/checkout@v4
382
+
383
+ - uses: actions/setup-python@v5
384
+ with:
385
+ python-version: '3.11'
386
+
387
+ - name: Build
388
+ run: |
389
+ pip install build
390
+ python -m build
391
+
392
+ - name: Publish to PyPI
393
+ uses: pypa/gh-action-pypi-publish@release/v1
394
+ with:
395
+ password: ${{ secrets.PYPI_API_TOKEN }}