terradev-cli 5.0.1__tar.gz → 5.0.2__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 (505) hide show
  1. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/.github/workflows/ci.yml +16 -19
  2. terradev_cli-5.0.2/.github/workflows/release.yml +22 -0
  3. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/PKG-INFO +3 -3
  4. {terradev_cli-5.0.1/terradev_cli → terradev_cli-5.0.2}/README.md +2 -2
  5. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/pyproject.toml +1 -1
  6. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/Cargo.toml +2 -1
  7. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/Cargo.toml +1 -1
  8. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/lib.rs +18 -5
  9. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/types.rs +4 -2
  10. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/verifier.rs +14 -12
  11. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-authentication/Cargo.toml +2 -1
  12. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-authentication/src/encoding.rs +5 -1
  13. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-authentication/src/hmac.rs +7 -9
  14. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-authentication/src/lib.rs +6 -4
  15. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/Cargo.toml +2 -1
  16. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/cache.rs +9 -9
  17. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/lib.rs +22 -16
  18. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/types.rs +2 -2
  19. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-command-executor/Cargo.toml +1 -1
  20. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-command-executor/src/lib.rs +8 -6
  21. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-config-validator/Cargo.toml +1 -1
  22. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/lib.rs +6 -2
  23. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/types.rs +12 -4
  24. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/validator.rs +9 -8
  25. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-connection-pool/Cargo.toml +1 -1
  26. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/lib.rs +8 -6
  27. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/pool.rs +25 -18
  28. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/types.rs +4 -2
  29. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/Cargo.toml +1 -1
  30. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/calculator.rs +23 -23
  31. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/lib.rs +32 -13
  32. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/types.rs +0 -1
  33. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-scaler/Cargo.toml +1 -1
  34. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-cost-scaler/src/lib.rs +119 -43
  35. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-credential-vault/Cargo.toml +2 -1
  36. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/lib.rs +9 -6
  37. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/vault.rs +8 -9
  38. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-dag-executor/Cargo.toml +1 -1
  39. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-dag-executor/src/lib.rs +131 -95
  40. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/Cargo.toml +1 -1
  41. terradev_cli-5.0.2/rust/terradev-distributed-lock/src/lib.rs +124 -0
  42. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/src/lock.rs +27 -20
  43. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/src/types.rs +4 -3
  44. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/Cargo.toml +1 -1
  45. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/graph.rs +34 -30
  46. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/lib.rs +16 -12
  47. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/types.rs +1 -1
  48. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-event-bus/Cargo.toml +3 -1
  49. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-event-bus/src/bus.rs +20 -17
  50. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-event-bus/src/lib.rs +32 -8
  51. terradev_cli-5.0.2/rust/terradev-event-bus/src/types.rs +37 -0
  52. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-governance/Cargo.toml +1 -1
  53. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-governance/src/lib.rs +48 -13
  54. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-discovery/Cargo.toml +4 -4
  55. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-discovery/src/lib.rs +31 -6
  56. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/Cargo.toml +1 -1
  57. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/lib.rs +21 -13
  58. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/topology.rs +15 -18
  59. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/types.rs +4 -4
  60. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-helm-generator/Cargo.toml +1 -1
  61. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-helm-generator/src/lib.rs +53 -34
  62. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-mcp-codec/Cargo.toml +1 -1
  63. terradev_cli-5.0.2/rust/terradev-mcp-codec/src/lib.rs +202 -0
  64. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-mcp-optimizer/Cargo.toml +1 -1
  65. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-mcp-optimizer/src/lib.rs +43 -9
  66. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-price-intelligence/Cargo.toml +1 -1
  67. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-price-intelligence/src/lib.rs +101 -38
  68. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-quota-manager/Cargo.toml +1 -1
  69. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/lib.rs +21 -11
  70. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/manager.rs +13 -13
  71. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/types.rs +6 -2
  72. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-resource-pool/Cargo.toml +1 -1
  73. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/lib.rs +24 -15
  74. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/pool.rs +25 -21
  75. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/types.rs +7 -4
  76. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-result-compressor/Cargo.toml +1 -1
  77. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-result-compressor/src/lib.rs +16 -7
  78. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-semantic-router/Cargo.toml +1 -1
  79. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-semantic-router/src/lib.rs +27 -14
  80. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/Cargo.toml +1 -1
  81. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/lib.rs +23 -13
  82. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/snapshot.rs +22 -21
  83. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/types.rs +2 -2
  84. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-state-machine/Cargo.toml +1 -1
  85. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/lib.rs +62 -26
  86. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/state.rs +112 -63
  87. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/types.rs +5 -4
  88. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-telemetry/Cargo.toml +2 -1
  89. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/lib.rs +14 -8
  90. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/pipeline.rs +31 -15
  91. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-tool-registry/Cargo.toml +1 -1
  92. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-tool-registry/src/lib.rs +31 -14
  93. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/Cargo.toml +1 -1
  94. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/estimator.rs +16 -15
  95. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/lib.rs +7 -3
  96. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-warm-pool/Cargo.toml +2 -2
  97. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-warm-pool/src/lib.rs +51 -32
  98. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/cli.py +140 -195
  99. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/helm_generator.py +1 -1
  100. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/quick_start.py +1 -1
  101. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/training_orchestrator.py +1 -1
  102. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/mcp/server.py +4 -2
  103. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/kubernetes_enhanced.py +3 -21
  104. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/kubernetes_service.py +13 -4
  105. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/ollama_service.py +22 -16
  106. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/sglang_service.py +22 -11
  107. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/vllm_service.py +25 -25
  108. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/cli.py +7 -12
  109. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/PKG-INFO +3 -3
  110. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/SOURCES.txt +0 -4
  111. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_vllm_features.py +2 -2
  112. terradev_cli-5.0.1/.github/workflows/release.yml +0 -50
  113. terradev_cli-5.0.1/rust/terradev-distributed-lock/src/lib.rs +0 -129
  114. terradev_cli-5.0.1/rust/terradev-event-bus/src/types.rs +0 -13
  115. terradev_cli-5.0.1/rust/terradev-mcp-codec/src/lib.rs +0 -123
  116. terradev_cli-5.0.1/terradev_cli/bandit-report.json +0 -388
  117. terradev_cli-5.0.1/terradev_cli/core/stripe_manager.py +0 -440
  118. terradev_cli-5.0.1/terradev_cli/core/tier_manager.py +0 -308
  119. terradev_cli-5.0.1/terradev_cli/safety-report.json +0 -18554
  120. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/.ebextensions/python.config +0 -0
  121. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/.env.example +0 -0
  122. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/.github/workflows/action.yml +0 -0
  123. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/.github/workflows/static.yml +0 -0
  124. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/BNF_GRAMMAR.md +0 -0
  125. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/CUCO_INTEGRATION_GUIDE.md +0 -0
  126. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/Dockerfile +0 -0
  127. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/LICENSE +0 -0
  128. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/MANIFEST.in +0 -0
  129. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/MCP_CI_SETUP.md +0 -0
  130. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/USER_GUIDE.md +0 -0
  131. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/activations/973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b.json +0 -0
  132. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/analysis/api-differences-comparison.tf +0 -0
  133. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/analysis/cost-structure-differences.tf +0 -0
  134. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/analysis/inference-arbitrage-pivot.tf +0 -0
  135. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/apis/free-apis-latency-arbitrage.tf +0 -0
  136. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/README.md +0 -0
  137. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/helm/values-glm5.yaml +0 -0
  138. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/hpa.yaml +0 -0
  139. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
  140. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/namespace.yaml +0 -0
  141. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/pdb.yaml +0 -0
  142. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/service.yaml +0 -0
  143. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
  144. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
  145. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/task.yaml +0 -0
  146. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/terraform/main.tf +0 -0
  147. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/terraform/outputs.tf +0 -0
  148. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/glm-5/terraform/variables.tf +0 -0
  149. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/README.md +0 -0
  150. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
  151. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/gateway.yaml +0 -0
  152. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
  153. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
  154. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/llmd-template/task.yaml +0 -0
  155. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/README.md +0 -0
  156. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/helm/values-moe.yaml +0 -0
  157. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/deployment.yaml +0 -0
  158. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/hpa.yaml +0 -0
  159. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
  160. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/namespace.yaml +0 -0
  161. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/pdb.yaml +0 -0
  162. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/k8s/service.yaml +0 -0
  163. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/task.yaml +0 -0
  164. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/terraform/main.tf +0 -0
  165. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/terraform/outputs.tf +0 -0
  166. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/moe-template/terraform/variables.tf +0 -0
  167. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/rag-template/README.md +0 -0
  168. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/rag-template/helm/values-rag.yaml +0 -0
  169. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/rag-template/k8s/deployment.yaml +0 -0
  170. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/clusters/rag-template/terraform/main.tf +0 -0
  171. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/demo/RECORDING_GUIDE.md +0 -0
  172. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/demo/generate_gif.py +0 -0
  173. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/demo/terradev-demo.gif +0 -0
  174. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
  175. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/API_DOCUMENTATION.md +0 -0
  176. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/BingSiteAuth.xml +0 -0
  177. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
  178. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/MIGRATE_EVAL_IMPLEMENTATION.md +0 -0
  179. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/PHASE1_SSO_IMPLEMENTATION_SUMMARY.md +0 -0
  180. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/SGLANG_OPTIMIZATION_IMPLEMENTATION_COMPLETE.md +0 -0
  181. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/USER_GUIDE.md +0 -0
  182. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
  183. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
  184. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/VLLM_OPTIMIZATION_SUMMARY.md +0 -0
  185. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/architecture.md +0 -0
  186. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/index.html +0 -0
  187. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/robots.txt +0 -0
  188. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/sitemap.xml +0 -0
  189. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/docs/test_spot_provision.md +0 -0
  190. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/aws_ssm_starter.py +0 -0
  191. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/config.example.json +0 -0
  192. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/demo_k8s_config.yaml +0 -0
  193. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/direct_aws_starter.py +0 -0
  194. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/ec2_user_data_starter.py +0 -0
  195. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/example-pipeline.yaml +0 -0
  196. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/kubernetes_training_deployment.yaml +0 -0
  197. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/simple_ssm_starter.py +0 -0
  198. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/ssh_server_starter.py +0 -0
  199. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/examples/start_aws_servers.py +0 -0
  200. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/helm/terradev/Chart.yaml +0 -0
  201. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/helm/terradev/templates/_helpers.tpl +0 -0
  202. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/helm/terradev/templates/deployment.yaml +0 -0
  203. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/helm/terradev/values.yaml +0 -0
  204. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/infrastructure/bucket-policy.json +0 -0
  205. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/infrastructure/grafana_training_dashboard.json +0 -0
  206. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/infrastructure/kubernetes/microservices.yaml +0 -0
  207. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/infrastructure/terraform/main.tf +0 -0
  208. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/infrastructure/terraform/parallelism.tf +0 -0
  209. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/cli-tool.tf +0 -0
  210. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/cloud-management-widgets.tf +0 -0
  211. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/cloud-provider-apis.py +0 -0
  212. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/critical-widgets.tf +0 -0
  213. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/devops-cicd-widgets.tf +0 -0
  214. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/devops-essential-tools.tf +0 -0
  215. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/docker-integration.tf +0 -0
  216. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/kubernetes-operator.tf +0 -0
  217. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/integrations/mlflow-integration.tf +0 -0
  218. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/README.md +0 -0
  219. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/dashboard.tf +0 -0
  220. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/monitors.tf +0 -0
  221. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/outputs.tf +0 -0
  222. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/provider.tf +0 -0
  223. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/variables.tf +0 -0
  224. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/datadog/versions.tf +0 -0
  225. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/modules/prometheus_training_config.yml +0 -0
  226. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/requirements.txt +0 -0
  227. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/INTEGRATION_GUIDE.md +0 -0
  228. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  229. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/README.md +0 -0
  230. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-authentication/src/types.rs +0 -0
  231. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/types.rs +0 -0
  232. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/types.rs +1 -1
  233. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/types.rs +0 -0
  234. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/action.py +0 -0
  235. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/check_logs_fix.py +0 -0
  236. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/debug_comparison.py +0 -0
  237. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/debug_mla.py +0 -0
  238. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/debug_streaming.py +0 -0
  239. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_correct_pricing.py +0 -0
  240. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_enhanced_server.py +0 -0
  241. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_exact_servers.py +0 -0
  242. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_simple_enhanced.py +0 -0
  243. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_telemetry_aws.py +0 -0
  244. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/deployment/deploy_to_aws.py +0 -0
  245. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/figure_calculation_breakdown.py +0 -0
  246. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/fix_server_ports.py +0 -0
  247. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/gpu-check.sh +0 -0
  248. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/scripts/server_manager.py +0 -0
  249. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
  250. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/account-setup-guide.tf +0 -0
  251. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/docker-compose.yml +0 -0
  252. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/nginx.conf +0 -0
  253. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/render.yaml +0 -0
  254. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup/setup.sh +0 -0
  255. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/setup.cfg +0 -0
  256. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/CHANGELOG.md +0 -0
  257. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
  258. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
  259. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/FULL_SOLUTION_STACK_MARCH_2025.md +0 -0
  260. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
  261. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
  262. {terradev_cli-5.0.1 → terradev_cli-5.0.2/terradev_cli}/README.md +0 -0
  263. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
  264. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
  265. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/__init__.py +0 -0
  266. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/__main__.py +0 -0
  267. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/cli_hf_spaces.py +0 -0
  268. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/cli_karpenter.py +0 -0
  269. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/__init__.py +0 -0
  270. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/async_config.py +0 -0
  271. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/auth.py +0 -0
  272. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/auto_lineage.py +0 -0
  273. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/cache_manager.py +0 -0
  274. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/checkpoint_manager.py +0 -0
  275. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/command_executor.py +0 -0
  276. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/config.py +0 -0
  277. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/config_validator.py +0 -0
  278. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/cost_scaler.py +0 -0
  279. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/cost_tracker.py +0 -0
  280. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/credential_vault.py +0 -0
  281. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/cuda_graph_integrator.py +0 -0
  282. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/dag_executor.py +0 -0
  283. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/data_governance.py +0 -0
  284. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/dataset_stager.py +0 -0
  285. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/deployment_router.py +0 -0
  286. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/distributed_lock.py +0 -0
  287. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/drift_detector.py +0 -0
  288. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/egress_cost_monitor.py +0 -0
  289. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/egress_optimizer.py +0 -0
  290. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/evaluation_orchestrator.py +0 -0
  291. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/event_system.py +0 -0
  292. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/gitops_manager.py +0 -0
  293. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/gpu_discovery.py +0 -0
  294. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/gpu_topology.py +0 -0
  295. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/hf_cli_integration.py +0 -0
  296. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/hf_smart_templates.py +0 -0
  297. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/hf_spaces.py +0 -0
  298. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/inference_router.py +0 -0
  299. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/inference_spot_manager.py +0 -0
  300. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/job_state_manager.py +0 -0
  301. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
  302. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
  303. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/manifest_cache.py +0 -0
  304. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/manifest_example.json +0 -0
  305. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/mig_manager.py +0 -0
  306. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/migration_orchestrator.py +0 -0
  307. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/mla_vram_estimator.py +0 -0
  308. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/mla_vram_tests.py +0 -0
  309. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/model_orchestrator.py +0 -0
  310. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/oidc_provider.py +0 -0
  311. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/optimization_config.py +0 -0
  312. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/parallel_provisioner.py +0 -0
  313. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/pipeline_schema.py +0 -0
  314. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/preflight_validator.py +0 -0
  315. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/price_discovery.py +0 -0
  316. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/price_intelligence.py +0 -0
  317. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
  318. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/quota_manager.py +0 -0
  319. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/rate_limiter.py +0 -0
  320. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/rust_telemetry.py +0 -0
  321. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_router.py +0 -0
  322. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/__init__.py +0 -0
  323. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
  324. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
  325. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
  326. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
  327. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
  328. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
  329. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
  330. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
  331. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
  332. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/session_manager.py +0 -0
  333. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/ssh_key_manager.py +0 -0
  334. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/telemetry.py +0 -0
  335. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/terradev_engine.py +0 -0
  336. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/trace_viewer.py +0 -0
  337. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/training_monitor.py +0 -0
  338. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/user_manager.py +0 -0
  339. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/warm_pool_manager.py +0 -0
  340. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
  341. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/core/weight_streaming_manager.py +0 -0
  342. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/cost_optimizer.py +0 -0
  343. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/credential_prompt.py +0 -0
  344. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/demo.py +0 -0
  345. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/entry_point.py +0 -0
  346. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
  347. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
  348. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/__init__.py +0 -0
  349. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/databricks_integration.py +0 -0
  350. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/datadog_integration.py +0 -0
  351. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/helicone_integration.py +0 -0
  352. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/prometheus_integration.py +0 -0
  353. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/integrations/wandb_integration.py +0 -0
  354. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/k8s/terraform_wrapper.py +0 -0
  355. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
  356. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
  357. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
  358. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
  359. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx_setup.py +0 -0
  360. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/mcp/__init__.py +0 -0
  361. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/mcp/server.py.bak3 +0 -0
  362. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/__init__.py +0 -0
  363. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/agentic_serving.py +0 -0
  364. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
  365. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/dvc_service.py +0 -0
  366. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/guardrails_service.py +0 -0
  367. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/huggingface_service.py +0 -0
  368. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/kserve_service.py +0 -0
  369. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/langchain_service.py +0 -0
  370. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/langfuse_service.py +0 -0
  371. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/langgraph_service.py +0 -0
  372. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/lmcache_service.py +0 -0
  373. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/mlflow_service.py +0 -0
  374. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/model_router.py +0 -0
  375. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/phoenix_service.py +0 -0
  376. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/qdrant_service.py +0 -0
  377. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/ray_enhanced.py +0 -0
  378. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/ray_service.py +0 -0
  379. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
  380. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/optimization/__init__.py +0 -0
  381. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/optimization/auto_optimizer.py +0 -0
  382. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/optimization/cuco_optimizer.py +0 -0
  383. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
  384. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/__init__.py +0 -0
  385. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/alibaba_provider.py +0 -0
  386. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/aws_provider.py +0 -0
  387. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/azure_provider.py +0 -0
  388. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/base_provider.py +0 -0
  389. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/baseten_provider.py +0 -0
  390. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/coreweave_provider.py +0 -0
  391. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/crusoe_provider.py +0 -0
  392. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/demo_mode.py +0 -0
  393. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/digitalocean_provider.py +0 -0
  394. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/fluidstack_provider.py +0 -0
  395. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/gcp_provider.py +0 -0
  396. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/hetzner_provider.py +0 -0
  397. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/huggingface_provider.py +0 -0
  398. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/hyperstack_provider.py +0 -0
  399. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/inferx_provider.py +0 -0
  400. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/lambda_labs_provider.py +0 -0
  401. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/latitude_provider.py +0 -0
  402. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/oracle_provider.py +0 -0
  403. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/ovhcloud_provider.py +0 -0
  404. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/provider_factory.py +0 -0
  405. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/real_pricing.py +0 -0
  406. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/runpod_provider.py +0 -0
  407. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/siliconflow_provider.py +0 -0
  408. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/tensordock_provider.py +0 -0
  409. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/providers/vastai_provider.py +0 -0
  410. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/requirements.txt +0 -0
  411. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/requirements_minimal.txt +0 -0
  412. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/__init__.py +0 -0
  413. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/credential_prompt.py +0 -0
  414. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/main.tf +0 -0
  415. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/__init__.py +0 -0
  416. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
  417. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
  418. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
  419. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
  420. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
  421. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
  422. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
  423. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
  424. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
  425. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
  426. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
  427. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
  428. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
  429. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
  430. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
  431. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
  432. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
  433. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
  434. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
  435. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
  436. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
  437. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
  438. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
  439. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
  440. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
  441. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
  442. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/main.tf +0 -0
  443. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
  444. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
  445. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
  446. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/outputs.tf +0 -0
  447. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
  448. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/providers.tf +0 -0
  449. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/terraform/variables.tf +0 -0
  450. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/test_summary.py +0 -0
  451. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/utils/__init__.py +0 -0
  452. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli/utils/formatters.py +0 -0
  453. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/dependency_links.txt +0 -0
  454. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/entry_points.txt +0 -0
  455. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/requires.txt +0 -0
  456. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terradev_cli.egg-info/top_level.txt +0 -0
  457. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform.tfvars.example +0 -0
  458. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/backend.tf +0 -0
  459. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/error_handling.py +0 -0
  460. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/parallel_provisioning.tf +0 -0
  461. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/storage_choice_matrix.py +0 -0
  462. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/test_error_handler.py +0 -0
  463. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_optimization/versions.tf +0 -0
  464. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
  465. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/audit_trail.py +0 -0
  466. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/audit_trails.json +0 -0
  467. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/decision_engine.py +0 -0
  468. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/decision_logs.json +0 -0
  469. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/operations.json +0 -0
  470. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/terraform_manager.py +0 -0
  471. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/terraform_plans.json +0 -0
  472. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/transparency_demo.py +0 -0
  473. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/terraform_transparency/transparency_report.json +0 -0
  474. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/INTEGRATION_STRATEGY.md +0 -0
  475. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/Makefile +0 -0
  476. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/ci_pipeline.py +0 -0
  477. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/conftest.py +0 -0
  478. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_battle.py +0 -0
  479. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
  480. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_final.py +0 -0
  481. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_final_integration.py +0 -0
  482. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_integrated_optimization.py +0 -0
  483. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_p10_production_failover.py +0 -0
  484. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_sso_phase1.py +0 -0
  485. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/root_tests/test_vllm_optimization.py +0 -0
  486. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/simple_test.py +0 -0
  487. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_ai_integrations.py +0 -0
  488. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_checkpoint_manager.py +0 -0
  489. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_cli_smoke.py +0 -0
  490. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_dag_executor.py +0 -0
  491. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_flashoptim.py +0 -0
  492. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_integration.py +0 -0
  493. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_job_state_manager.py +0 -0
  494. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_k8s_regression.py +0 -0
  495. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_latitude_provider.py +0 -0
  496. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_major_providers.py +0 -0
  497. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_mcp_handlers.py +0 -0
  498. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_new_providers.py +0 -0
  499. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_provider_conformance.py +0 -0
  500. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_providers.py +0 -0
  501. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_semantic_router.py +0 -0
  502. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_sglang_optimization.py +0 -0
  503. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_ssh_key_manager.py +0 -0
  504. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_training_monitor.py +0 -0
  505. {terradev_cli-5.0.1 → terradev_cli-5.0.2}/tests/test_training_orchestrator.py +0 -0
@@ -41,33 +41,24 @@ jobs:
41
41
 
42
42
  - name: Run cargo test
43
43
  run: |
44
- if [ -f "float-protocols/Cargo.toml" ]; then
45
- cd float-protocols
46
- cargo test --verbose
47
- elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
48
- cd dxfeed-rust-api
49
- cargo test --verbose
44
+ if [ -f "rust/Cargo.toml" ]; then
45
+ cd rust
46
+ cargo test --workspace --verbose
50
47
  else
51
- echo "No Rust Cargo.toml found, skipping Rust tests"
48
+ echo "No rust/ workspace found, skipping Rust tests"
52
49
  fi
53
50
 
54
51
  - name: Run cargo clippy
55
52
  run: |
56
- if [ -f "float-protocols/Cargo.toml" ]; then
57
- cd float-protocols
58
- cargo clippy -- -D warnings
59
- elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
60
- cd dxfeed-rust-api
61
- cargo clippy -- -D warnings
53
+ if [ -f "rust/Cargo.toml" ]; then
54
+ cd rust
55
+ cargo clippy --workspace -- -D warnings
62
56
  fi
63
57
 
64
58
  - name: Run cargo fmt
65
59
  run: |
66
- if [ -f "float-protocols/Cargo.toml" ]; then
67
- cd float-protocols
68
- cargo fmt --all -- --check
69
- elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
70
- cd dxfeed-rust-api
60
+ if [ -f "rust/Cargo.toml" ]; then
61
+ cd rust
71
62
  cargo fmt --all -- --check
72
63
  fi
73
64
 
@@ -157,10 +148,16 @@ jobs:
157
148
  with:
158
149
  python-version: '3.11'
159
150
 
151
+ - name: Install package for scan
152
+ run: pip install -e ".[dev]" 2>/dev/null || pip install -e .
153
+
160
154
  - name: Install + scan
161
155
  run: |
162
156
  pip install bandit safety
163
- bandit -r terradev_cli/ -f json -o bandit-report.json -ll || true
157
+ # Scan the full package tree; -ll = medium+high only; fail on high severity
158
+ bandit -r terradev_cli/ -f json -o bandit-report.json -lll || true
159
+ # Print a summary to the job log for visibility
160
+ bandit -r terradev_cli/ -lll --exit-zero
164
161
  safety check --json --output safety-report.json || true
165
162
 
166
163
  - uses: actions/upload-artifact@v4
@@ -0,0 +1,22 @@
1
+ name: Release to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ contents: write
10
+ releases: write
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Create GitHub Release
21
+ run: |
22
+ gh release create ${{ github.ref_name }} --generate-notes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: terradev-cli
3
- Version: 5.0.1
3
+ Version: 5.0.2
4
4
  Summary: Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform
5
5
  Author-email: Terradev Team <team@terradev.com>
6
6
  Maintainer-email: Terradev Team <team@terradev.com>
@@ -92,7 +92,7 @@ Requires-Dist: redis>=5.0.0; extra == "enterprise"
92
92
  Requires-Dist: PyJWT>=2.8.0; extra == "enterprise"
93
93
  Dynamic: license-file
94
94
 
95
- # Terradev CLI v5.0.1
95
+ # Terradev CLI v5.0.2
96
96
 
97
97
  **Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform**
98
98
 
@@ -130,7 +130,7 @@ terradev configure --provider gcp
130
130
  - **Up to 90% cost savings** with automatic provider switching
131
131
  - **<2 minute spot recovery** with KV cache checkpointing
132
132
  - **3.6x faster cold starts** with weight streaming
133
- - **57.3% cost savings** with MLA-aware VRAM estimation
133
+ - **57% cost savings** with MLA-aware VRAM estimation
134
134
 
135
135
  ## Complete Tutorial
136
136
 
@@ -1,4 +1,4 @@
1
- # Terradev CLI v5.0.1
1
+ # Terradev CLI v5.0.2
2
2
 
3
3
  **Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform**
4
4
 
@@ -36,7 +36,7 @@ terradev configure --provider gcp
36
36
  - **Up to 90% cost savings** with automatic provider switching
37
37
  - **<2 minute spot recovery** with KV cache checkpointing
38
38
  - **3.6x faster cold starts** with weight streaming
39
- - **57.3% cost savings** with MLA-aware VRAM estimation
39
+ - **57% cost savings** with MLA-aware VRAM estimation
40
40
 
41
41
  ## Complete Tutorial
42
42
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "terradev-cli"
7
- version = "5.0.1"
7
+ version = "5.0.2"
8
8
  description = "Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform"
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}
@@ -1,4 +1,5 @@
1
1
  [workspace]
2
+ resolver = "2"
2
3
  members = [
3
4
  "terradev-state-machine",
4
5
  "terradev-resource-pool",
@@ -33,7 +34,7 @@ members = [
33
34
  ]
34
35
 
35
36
  [workspace.dependencies]
36
- pyo3 = { version = "0.20", features = ["extension-module"] }
37
+ pyo3 = { version = "0.20", features = ["abi3-py38"] }
37
38
  serde = { version = "1.0", features = ["derive"] }
38
39
  serde_json = "1.0"
39
40
  thiserror = "1.0"
@@ -5,7 +5,7 @@ edition = "2021"
5
5
 
6
6
  [lib]
7
7
  name = "terradev_artifact_verification"
8
- crate-type = ["cdylib", "rlib"]
8
+ crate-type = ["rlib"]
9
9
 
10
10
  [dependencies]
11
11
  pyo3 = { workspace = true }
@@ -1,3 +1,5 @@
1
+ #![allow(non_local_definitions)]
2
+
1
3
  mod types;
2
4
  mod verifier;
3
5
 
@@ -15,24 +17,35 @@ fn terradev_artifact_verification(_py: Python, m: &PyModule) -> PyResult<()> {
15
17
  #[pyclass]
16
18
  pub struct PyArtifactVerifier;
17
19
 
20
+ #[allow(non_local_definitions)]
18
21
  #[pymethods]
19
22
  impl PyArtifactVerifier {
20
23
  #[new]
21
24
  fn new() -> Self {
22
25
  Self
23
26
  }
24
-
27
+
25
28
  fn compute_sha256(&self, data: Vec<u8>) -> String {
26
29
  ArtifactVerifier::compute_sha256(&data)
27
30
  }
28
-
29
- fn verify_artifact(&self, data: Vec<u8>, expected_checksum: String, algorithm: String) -> PyResult<PyVerificationResult> {
31
+
32
+ fn verify_artifact(
33
+ &self,
34
+ data: Vec<u8>,
35
+ expected_checksum: String,
36
+ algorithm: String,
37
+ ) -> PyResult<PyVerificationResult> {
30
38
  ArtifactVerifier::verify_artifact(&data, &expected_checksum, &algorithm)
31
39
  .map(|r| r.into())
32
40
  .map_err(|e| PyErr::new::<pyo3::exceptions::PyValueError, _>(e.to_string()))
33
41
  }
34
-
35
- fn verify_file(&self, path: String, expected_checksum: String, algorithm: String) -> PyResult<PyVerificationResult> {
42
+
43
+ fn verify_file(
44
+ &self,
45
+ path: String,
46
+ expected_checksum: String,
47
+ algorithm: String,
48
+ ) -> PyResult<PyVerificationResult> {
36
49
  ArtifactVerifier::verify_file(&path, &expected_checksum, &algorithm)
37
50
  .map(|r| r.into())
38
51
  .map_err(|e| PyErr::new::<pyo3::exceptions::PyValueError, _>(e.to_string()))
@@ -5,14 +5,16 @@ use thiserror::Error;
5
5
  pub enum VerificationError {
6
6
  #[error("Hash mismatch: expected {expected}, got {actual}")]
7
7
  HashMismatch { expected: String, actual: String },
8
-
8
+
9
+ #[allow(dead_code)]
9
10
  #[error("Invalid signature")]
10
11
  InvalidSignature,
11
-
12
+
12
13
  #[error("Artifact not found: {0}")]
13
14
  NotFound(String),
14
15
  }
15
16
 
17
+ #[allow(dead_code)]
16
18
  #[derive(Debug, Clone, Serialize, Deserialize)]
17
19
  pub struct Artifact {
18
20
  pub name: String,
@@ -1,4 +1,4 @@
1
- use crate::types::{Artifact, VerificationError, VerificationResult};
1
+ use crate::types::{VerificationError, VerificationResult};
2
2
  use sha2::{Digest, Sha256};
3
3
  use std::io::Read;
4
4
 
@@ -10,7 +10,7 @@ impl ArtifactVerifier {
10
10
  hasher.update(data);
11
11
  hex::encode(hasher.finalize())
12
12
  }
13
-
13
+
14
14
  pub fn verify_artifact(
15
15
  data: &[u8],
16
16
  expected_checksum: &str,
@@ -18,12 +18,14 @@ impl ArtifactVerifier {
18
18
  ) -> Result<VerificationResult, VerificationError> {
19
19
  let computed = match algorithm {
20
20
  "sha256" => Self::compute_sha256(data),
21
- _ => return Err(VerificationError::HashMismatch {
22
- expected: expected_checksum.to_string(),
23
- actual: "unsupported algorithm".to_string(),
24
- }),
21
+ _ => {
22
+ return Err(VerificationError::HashMismatch {
23
+ expected: expected_checksum.to_string(),
24
+ actual: "unsupported algorithm".to_string(),
25
+ })
26
+ }
25
27
  };
26
-
28
+
27
29
  if computed == expected_checksum {
28
30
  Ok(VerificationResult {
29
31
  is_valid: true,
@@ -40,19 +42,19 @@ impl ArtifactVerifier {
40
42
  })
41
43
  }
42
44
  }
43
-
45
+
44
46
  pub fn verify_file(
45
47
  path: &str,
46
48
  expected_checksum: &str,
47
49
  algorithm: &str,
48
50
  ) -> Result<VerificationResult, VerificationError> {
49
- let mut file = std::fs::File::open(path)
50
- .map_err(|_| VerificationError::NotFound(path.to_string()))?;
51
-
51
+ let mut file =
52
+ std::fs::File::open(path).map_err(|_| VerificationError::NotFound(path.to_string()))?;
53
+
52
54
  let mut data = Vec::new();
53
55
  file.read_to_end(&mut data)
54
56
  .map_err(|_| VerificationError::NotFound(path.to_string()))?;
55
-
57
+
56
58
  Self::verify_artifact(&data, expected_checksum, algorithm)
57
59
  }
58
60
  }
@@ -5,7 +5,7 @@ edition = "2021"
5
5
 
6
6
  [lib]
7
7
  name = "terradev_authentication"
8
- crate-type = ["cdylib", "rlib"]
8
+ crate-type = ["rlib"]
9
9
 
10
10
  [dependencies]
11
11
  pyo3 = { workspace = true }
@@ -16,3 +16,4 @@ hmac = "0.12"
16
16
  sha1 = "0.10"
17
17
  sha2 = "0.10"
18
18
  percent-encoding = "2.3"
19
+ hex = "0.4"
@@ -8,7 +8,11 @@ pub fn encode_parameters(params: &[(String, String)]) -> String {
8
8
  params
9
9
  .iter()
10
10
  .map(|(key, value)| {
11
- format!("{}={}", percent_encode_rfc3986(key), percent_encode_rfc3986(value))
11
+ format!(
12
+ "{}={}",
13
+ percent_encode_rfc3986(key),
14
+ percent_encode_rfc3986(value)
15
+ )
12
16
  })
13
17
  .collect::<Vec<_>>()
14
18
  .join("&")
@@ -2,11 +2,9 @@ use crate::encoding::{encode_parameters, percent_encode_rfc3986};
2
2
  use crate::types::{AlibabaCredentials, OVHCredentials, SignatureResult};
3
3
  use hmac::{Hmac, Mac};
4
4
  use sha1::Sha1;
5
- use sha2::Sha256;
6
5
  use std::time::{SystemTime, UNIX_EPOCH};
7
6
 
8
7
  type HmacSha1 = Hmac<Sha1>;
9
- type HmacSha256 = Hmac<Sha256>;
10
8
 
11
9
  pub struct AlibabaSigner;
12
10
 
@@ -18,10 +16,10 @@ impl AlibabaSigner {
18
16
  params: &[(String, String)],
19
17
  ) -> SignatureResult {
20
18
  let timestamp = Self::get_timestamp();
21
-
19
+
22
20
  // Build canonical query string
23
21
  let canonical_query = encode_parameters(params);
24
-
22
+
25
23
  // Build string to sign
26
24
  let string_to_sign = format!(
27
25
  "{}&{}&{}",
@@ -29,18 +27,18 @@ impl AlibabaSigner {
29
27
  percent_encode_rfc3986(url),
30
28
  percent_encode_rfc3986(&canonical_query)
31
29
  );
32
-
30
+
33
31
  // Create HMAC-SHA1 signature
34
32
  let mut mac = HmacSha1::new_from_slice(credentials.access_key_secret.as_bytes()).unwrap();
35
33
  mac.update(string_to_sign.as_bytes());
36
34
  let signature = hex::encode(mac.finalize().into_bytes());
37
-
35
+
38
36
  SignatureResult {
39
37
  signature,
40
38
  timestamp,
41
39
  }
42
40
  }
43
-
41
+
44
42
  fn get_timestamp() -> String {
45
43
  let now = SystemTime::now()
46
44
  .duration_since(UNIX_EPOCH)
@@ -70,12 +68,12 @@ impl OVHSigner {
70
68
  timestamp,
71
69
  credentials.consumer_key
72
70
  );
73
-
71
+
74
72
  // Create SHA1 signature
75
73
  let mut mac = HmacSha1::new_from_slice(credentials.application_secret.as_bytes()).unwrap();
76
74
  mac.update(signature_string.as_bytes());
77
75
  let signature = hex::encode(mac.finalize().into_bytes());
78
-
76
+
79
77
  SignatureResult {
80
78
  signature,
81
79
  timestamp: timestamp.to_string(),
@@ -1,3 +1,5 @@
1
+ #![allow(non_local_definitions)]
2
+
1
3
  mod encoding;
2
4
  mod hmac;
3
5
  mod types;
@@ -25,7 +27,7 @@ impl PyAlibabaSigner {
25
27
  fn new() -> Self {
26
28
  Self
27
29
  }
28
-
30
+
29
31
  fn sign_request(
30
32
  &self,
31
33
  credentials: PyAlibabaCredentials,
@@ -37,7 +39,7 @@ impl PyAlibabaSigner {
37
39
  access_key_id: credentials.access_key_id,
38
40
  access_key_secret: credentials.access_key_secret,
39
41
  };
40
-
42
+
41
43
  AlibabaSigner::sign_request(&creds, &http_method, &url, &params).into()
42
44
  }
43
45
  }
@@ -51,7 +53,7 @@ impl PyOVHSigner {
51
53
  fn new() -> Self {
52
54
  Self
53
55
  }
54
-
56
+
55
57
  fn sign_request(
56
58
  &self,
57
59
  credentials: PyOvhCredentials,
@@ -65,7 +67,7 @@ impl PyOVHSigner {
65
67
  application_secret: credentials.application_secret,
66
68
  consumer_key: credentials.consumer_key,
67
69
  };
68
-
70
+
69
71
  OVHSigner::sign_request(&creds, &http_method, &url, &body, &timestamp).into()
70
72
  }
71
73
  }
@@ -5,7 +5,7 @@ edition = "2021"
5
5
 
6
6
  [lib]
7
7
  name = "terradev_cache_eviction"
8
- crate-type = ["cdylib", "rlib"]
8
+ crate-type = ["rlib"]
9
9
 
10
10
  [dependencies]
11
11
  pyo3 = { workspace = true }
@@ -14,3 +14,4 @@ serde_json = { workspace = true }
14
14
  thiserror = { workspace = true }
15
15
  moka = { workspace = true }
16
16
  chrono = { workspace = true }
17
+ parking_lot = { workspace = true }
@@ -17,20 +17,20 @@ impl CacheEngine {
17
17
  .max_capacity(max_capacity)
18
18
  .time_to_live(Duration::from_secs(3600))
19
19
  .build();
20
-
20
+
21
21
  Self {
22
22
  cache,
23
23
  policy,
24
24
  access_counts: Arc::new(RwLock::new(HashMap::new())),
25
25
  }
26
26
  }
27
-
27
+
28
28
  pub fn put(&self, entry: CacheEntry) {
29
29
  let key = entry.key.clone();
30
30
  let entry_arc = Arc::new(entry);
31
31
  self.cache.insert(key.clone(), entry_arc);
32
32
  }
33
-
33
+
34
34
  pub fn get(&self, key: &str) -> Option<Arc<CacheEntry>> {
35
35
  if let Some(entry) = self.cache.get(key) {
36
36
  let mut counts = self.access_counts.write();
@@ -40,32 +40,32 @@ impl CacheEngine {
40
40
  None
41
41
  }
42
42
  }
43
-
43
+
44
44
  pub fn remove(&self, key: &str) {
45
45
  self.cache.invalidate(key);
46
46
  let mut counts = self.access_counts.write();
47
47
  counts.remove(key);
48
48
  }
49
-
49
+
50
50
  pub fn contains(&self, key: &str) -> bool {
51
51
  self.cache.contains_key(key)
52
52
  }
53
-
53
+
54
54
  pub fn size(&self) -> u64 {
55
55
  self.cache.entry_count()
56
56
  }
57
-
57
+
58
58
  pub fn clear(&self) {
59
59
  self.cache.invalidate_all();
60
60
  let mut counts = self.access_counts.write();
61
61
  counts.clear();
62
62
  }
63
-
63
+
64
64
  pub fn access_count(&self, key: &str) -> u64 {
65
65
  let counts = self.access_counts.read();
66
66
  *counts.get(key).unwrap_or(&0)
67
67
  }
68
-
68
+
69
69
  pub fn policy(&self) -> &EvictionPolicy {
70
70
  &self.policy
71
71
  }
@@ -1,9 +1,10 @@
1
+ #![allow(non_local_definitions)]
2
+
1
3
  mod cache;
2
4
  mod types;
3
5
 
4
6
  use cache::CacheEngine;
5
7
  use pyo3::prelude::*;
6
- use pyo3::types::PyDict;
7
8
  use types::{CacheEntry, EvictionPolicy};
8
9
 
9
10
  #[pymodule]
@@ -19,6 +20,7 @@ pub struct PyCacheEngine {
19
20
  inner: CacheEngine,
20
21
  }
21
22
 
23
+ #[allow(non_local_definitions)]
22
24
  #[pymethods]
23
25
  impl PyCacheEngine {
24
26
  #[new]
@@ -27,11 +29,11 @@ impl PyCacheEngine {
27
29
  inner: CacheEngine::new(max_capacity, policy.into()),
28
30
  }
29
31
  }
30
-
32
+
31
33
  fn put(&self, entry: PyCacheEntry) {
32
34
  self.inner.put(entry.into());
33
35
  }
34
-
36
+
35
37
  fn get(&self, key: String) -> Option<PyCacheEntry> {
36
38
  self.inner.get(&key).map(|e| {
37
39
  let entry = (*e).clone();
@@ -45,31 +47,31 @@ impl PyCacheEngine {
45
47
  }
46
48
  })
47
49
  }
48
-
50
+
49
51
  fn remove(&self, key: String) {
50
52
  self.inner.remove(&key);
51
53
  }
52
-
54
+
53
55
  fn contains(&self, key: String) -> bool {
54
56
  self.inner.contains(&key)
55
57
  }
56
-
58
+
57
59
  fn size(&self) -> u64 {
58
60
  self.inner.size()
59
61
  }
60
-
62
+
61
63
  fn clear(&mut self) {
62
64
  self.inner.clear();
63
65
  }
64
-
66
+
65
67
  fn access_count(&self, key: String) -> u64 {
66
68
  self.inner.access_count(&key)
67
69
  }
68
-
70
+
69
71
  fn policy(&self) -> String {
70
72
  match self.inner.policy() {
71
- EvictionPolicy::LRU => "lru".to_string(),
72
- EvictionPolicy::ARC => "arc".to_string(),
73
+ EvictionPolicy::Lru => "lru".to_string(),
74
+ EvictionPolicy::Arc => "arc".to_string(),
73
75
  EvictionPolicy::TinyLFU => "tinylfu".to_string(),
74
76
  }
75
77
  }
@@ -98,8 +100,12 @@ impl From<PyCacheEntry> for CacheEntry {
98
100
  key: p.key,
99
101
  value: serde_json::from_str(&p.value).unwrap_or(serde_json::Value::Null),
100
102
  size_bytes: p.size_bytes,
101
- created_at: chrono::DateTime::parse_from_rfc3339(&p.created_at).unwrap().with_timezone(&chrono::Utc).into(),
102
- last_accessed: chrono::DateTime::parse_from_rfc3339(&p.last_accessed).unwrap().with_timezone(&chrono::Utc).into(),
103
+ created_at: chrono::DateTime::parse_from_rfc3339(&p.created_at)
104
+ .unwrap()
105
+ .with_timezone(&chrono::Utc),
106
+ last_accessed: chrono::DateTime::parse_from_rfc3339(&p.last_accessed)
107
+ .unwrap()
108
+ .with_timezone(&chrono::Utc),
103
109
  access_count: p.access_count,
104
110
  }
105
111
  }
@@ -114,10 +120,10 @@ pub struct PyEvictionPolicy {
114
120
  impl From<PyEvictionPolicy> for EvictionPolicy {
115
121
  fn from(p: PyEvictionPolicy) -> Self {
116
122
  match p.policy_type.as_str() {
117
- "lru" => EvictionPolicy::LRU,
118
- "arc" => EvictionPolicy::ARC,
123
+ "lru" => EvictionPolicy::Lru,
124
+ "arc" => EvictionPolicy::Arc,
119
125
  "tinylfu" => EvictionPolicy::TinyLFU,
120
- _ => EvictionPolicy::LRU,
126
+ _ => EvictionPolicy::Lru,
121
127
  }
122
128
  }
123
129
  }
@@ -3,8 +3,8 @@ use serde::{Deserialize, Serialize};
3
3
 
4
4
  #[derive(Debug, Clone, Serialize, Deserialize)]
5
5
  pub enum EvictionPolicy {
6
- LRU,
7
- ARC,
6
+ Lru,
7
+ Arc,
8
8
  TinyLFU,
9
9
  }
10
10
 
@@ -5,7 +5,7 @@ edition = "2021"
5
5
 
6
6
  [lib]
7
7
  name = "terradev_command_executor"
8
- crate-type = ["cdylib", "rlib"]
8
+ crate-type = ["rlib"]
9
9
 
10
10
  [dependencies]
11
11
  pyo3 = { workspace = true }
@@ -1,3 +1,5 @@
1
+ #![allow(non_local_definitions)]
2
+
1
3
  use pyo3::prelude::*;
2
4
  use pyo3_asyncio::tokio::future_into_py;
3
5
  use serde::{Deserialize, Serialize};
@@ -47,7 +49,7 @@ impl CommandExecutor {
47
49
  }
48
50
  }
49
51
 
50
- match cmd.output() {
52
+ match cmd.output().await {
51
53
  Ok(output) => {
52
54
  let stdout = String::from_utf8_lossy(&output.stdout).to_string();
53
55
  let stderr = String::from_utf8_lossy(&output.stderr).to_string();
@@ -68,6 +70,7 @@ impl CommandExecutor {
68
70
  }
69
71
  }
70
72
 
73
+ #[allow(clippy::type_complexity)]
71
74
  pub async fn execute_parallel(
72
75
  &self,
73
76
  commands: Vec<(String, Vec<String>, Option<HashMap<String, String>>)>,
@@ -76,9 +79,7 @@ impl CommandExecutor {
76
79
  .into_iter()
77
80
  .map(|(program, args, env)| {
78
81
  let executor = self.clone();
79
- tokio::spawn(async move {
80
- executor.execute_command(program, args, env).await
81
- })
82
+ tokio::spawn(async move { executor.execute_command(program, args, env).await })
82
83
  })
83
84
  .collect::<Vec<_>>();
84
85
 
@@ -123,7 +124,7 @@ impl PyCommandExecutor {
123
124
  env: Option<HashMap<String, String>>,
124
125
  ) -> PyResult<&'p PyAny> {
125
126
  let executor = self.inner.clone();
126
- future_into_py(py, async move {
127
+ future_into_py::<_, PyObject>(py, async move {
127
128
  let result = executor.execute_command(program, args, env).await;
128
129
  Python::with_gil(|py| {
129
130
  let dict = pyo3::types::PyDict::new(py);
@@ -136,13 +137,14 @@ impl PyCommandExecutor {
136
137
  })
137
138
  }
138
139
 
140
+ #[allow(clippy::type_complexity)]
139
141
  fn execute_parallel<'p>(
140
142
  &self,
141
143
  py: Python<'p>,
142
144
  commands: Vec<(String, Vec<String>, Option<HashMap<String, String>>)>,
143
145
  ) -> PyResult<&'p PyAny> {
144
146
  let executor = self.inner.clone();
145
- future_into_py(py, async move {
147
+ future_into_py::<_, PyObject>(py, async move {
146
148
  let results = executor.execute_parallel(commands).await;
147
149
  Python::with_gil(|py| {
148
150
  let list = pyo3::types::PyList::empty(py);