skypilot-nightly 1.0.0.dev20250526__tar.gz → 1.0.0.dev20250528__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 (473) hide show
  1. {skypilot_nightly-1.0.0.dev20250526/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250528}/PKG-INFO +2 -1
  2. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/kubernetes.py +13 -1
  4. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/cloud_vm_ray_backend.py +2 -2
  5. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/check.py +32 -6
  6. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/cli.py +5 -22
  7. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/client/cli.py +5 -22
  8. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/client/sdk.py +5 -2
  9. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/cloud.py +2 -2
  10. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/kubernetes.py +12 -7
  11. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/kubernetes_catalog.py +4 -0
  12. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/ssh.py +24 -8
  13. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/core.py +20 -2
  14. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/404.html +1 -1
  15. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/Mx1iAbDQn1jMHh3UHmK3R/_buildManifest.js +1 -0
  16. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/121-8f55ee3fa6301784.js +20 -0
  17. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/573-f17bd89d9f9118b3.js → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/173-7db8607cefc20f70.js +5 -5
  18. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/236-d6900c828331f664.js +6 -0
  19. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/293-351268365226d251.js +1 -0
  20. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/498-d7722313e5e5b4e6.js → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/320-afea3ddcc5bd1c6c.js +1 -16
  21. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/470-4d003c441839094d.js +1 -0
  22. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/578-9146658cead92981.js +6 -0
  23. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/843-256ec920f6d5f41f.js +11 -0
  24. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/856-62b87c68917b08ed.js +1 -0
  25. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/973-1a09cac61cfcc1e1.js +1 -0
  26. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-159bffb2fa34ed54.js +6 -0
  27. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-9506c00257d10dbd.js +1 -0
  28. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/clusters-9e6d1ec6e1ac5b29.js → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/clusters-943992b84fd6f4ee.js +1 -1
  29. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/config-41738d1896fc02fe.js +6 -0
  30. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/infra-881fcd902fbbd0e5.js +6 -0
  31. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-2c29e97a6aa50dd4.js +6 -0
  32. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/jobs-a4efc09e61988f8d.js +1 -0
  33. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/users-b2634885d67c49a6.js +6 -0
  34. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/workspace/new-bbf436f41381e169.js → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/workspace/new-579b3203c7c19d84.js +1 -1
  35. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7733c960685b4385.js → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-9388e38fac73ee8f.js +1 -1
  36. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/workspaces-610c49ae3619ee85.js +1 -0
  37. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/css/ffd1cd601648c303.css +3 -0
  38. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  39. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/clusters/[cluster].html +1 -0
  40. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/clusters.html +1 -0
  41. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/config.html +1 -0
  42. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/index.html +1 -1
  43. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/infra.html +1 -0
  44. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/jobs/[job].html +1 -1
  45. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/jobs.html +1 -0
  46. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/users.html +1 -0
  47. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/workspace/new.html +1 -0
  48. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/workspaces/[name].html +1 -0
  49. skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/workspaces.html +1 -0
  50. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/global_user_state.py +181 -134
  51. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/utils.py +4 -4
  52. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/constants.py +1 -1
  53. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/payloads.py +18 -5
  54. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/serializers/decoders.py +0 -11
  55. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/server.py +25 -14
  56. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/setup_files/dependencies.py +1 -0
  57. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/constants.py +4 -0
  58. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skypilot_config.py +4 -0
  59. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/db_utils.py +34 -46
  60. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/exec_kubeconfig_converter.py +19 -0
  61. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/schemas.py +57 -5
  62. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/subprocess_utils.py +2 -3
  63. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/workspaces/core.py +186 -50
  64. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/workspaces/server.py +25 -0
  65. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528/skypilot_nightly.egg-info}/PKG-INFO +2 -1
  66. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/skypilot_nightly.egg-info/SOURCES.txt +26 -22
  67. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/skypilot_nightly.egg-info/requires.txt +1 -0
  68. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/7GEgRyZKRaSnYZCV1Jwol/_buildManifest.js +0 -1
  69. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/25-062253ea41fb8eec.js +0 -6
  70. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/480-5a0de8b6570ea105.js +0 -1
  71. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/488-50d843fdb5396d32.js +0 -15
  72. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/578-d351125af46c293f.js +0 -6
  73. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/734-a6e01d7f98904741.js +0 -1
  74. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/938-59956af3950b02ed.js +0 -1
  75. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-3b5aad09a25f64b7.js +0 -1
  76. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-9529d9e882a0e75c.js +0 -16
  77. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/infra-abb7d744ecf15109.js +0 -1
  78. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-48dc8d67d4b60be1.js +0 -1
  79. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/jobs-73d5e0c369d00346.js +0 -16
  80. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/users-b8acf6e6735323a2.js +0 -1
  81. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/workspaces-5ed48b3201b998c8.js +0 -1
  82. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/css/28558d57108b05ae.css +0 -3
  83. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/clusters/[cluster].html +0 -1
  84. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/clusters.html +0 -1
  85. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/infra.html +0 -1
  86. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/jobs.html +0 -1
  87. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/users.html +0 -1
  88. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/workspace/new.html +0 -1
  89. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/workspaces/[name].html +0 -1
  90. skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/workspaces.html +0 -1
  91. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/LICENSE +0 -0
  92. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/MANIFEST.in +0 -0
  93. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/README.md +0 -0
  94. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/pyproject.toml +0 -0
  95. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/setup.cfg +0 -0
  96. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/setup.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/__init__.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/aws.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/azure.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/cloudflare.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/common.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/cudo.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/do.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/docker.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/gcp.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/ibm.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/nebius.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/oci.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/runpod.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/vast.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/adaptors/vsphere.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/admin_policy.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/authentication.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/__init__.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/backend.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/backend_utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/docker_utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/local_docker_backend.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/backends/wheel_utils.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/benchmark/__init__.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/benchmark/benchmark_state.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/benchmark/benchmark_utils.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/client/__init__.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/client/common.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/cloud_stores.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/__init__.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/aws.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/azure.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/cudo.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/do.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/fluidstack.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/gcp.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/ibm.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/lambda_cloud.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/nebius.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/oci.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/paperspace.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/runpod.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/scp.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/__init__.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/common.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/config.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/constants.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_ibm.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/do_catalog.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/ssh_catalog.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/__init__.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/aws_utils.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/azure_utils.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/gcp_utils.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/oci_utils.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/utils/scp_utils.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/vast.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/clouds/vsphere.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dag.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/7GEgRyZKRaSnYZCV1Jwol → skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/Mx1iAbDQn1jMHh3UHmK3R}/_ssgManifest.js +0 -0
  181. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/937.f97f83652028e944.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/9f96d65d-5a3e4af68c26849e.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -0
  184. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -0
  185. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -0
  186. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -0
  187. /skypilot_nightly-1.0.0.dev20250526/sky/dashboard/out/_next/static/chunks/pages/_app-96a715a6fb01e228.js → /skypilot_nightly-1.0.0.dev20250528/sky/dashboard/out/_next/static/chunks/pages/_app-a631df412d8172de.js +0 -0
  188. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -0
  189. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/pages/index-6b0d9e5031b70c58.js +0 -0
  190. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  191. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/_next/static/chunks/webpack-deda68c926e8d0bc.js +0 -0
  192. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/favicon.ico +0 -0
  193. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/skypilot.svg +0 -0
  194. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  195. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/__init__.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/data_transfer.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/data_utils.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/mounting_utils.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/storage.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/data/storage_utils.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/exceptions.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/execution.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/__init__.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/client/__init__.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/client/sdk.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/constants.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/controller.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/dashboard/dashboard.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/dashboard/static/favicon.ico +0 -0
  210. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/dashboard/templates/index.html +0 -0
  211. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/recovery_strategy.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/scheduler.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/server/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/server/core.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/server/dashboard_utils.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/server/server.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/state.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/jobs/utils.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/models.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/optimizer.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/__init__.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/aws/__init__.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/aws/config.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/aws/instance.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/aws/utils.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/azure/__init__.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/azure/azure-config-template.json +0 -0
  228. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/azure/config.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/azure/instance.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/common.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/constants.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/__init__.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/config.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/cudo_machine_type.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/cudo_utils.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/cudo_wrapper.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/cudo/instance.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/do/__init__.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/do/config.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/do/constants.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/do/instance.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/do/utils.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/docker_utils.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/fluidstack/__init__.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/fluidstack/config.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/fluidstack/instance.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/__init__.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/config.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/constants.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/instance.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/instance_utils.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/mig_utils.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/gcp/volume_utils.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/instance_setup.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/__init__.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/config.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/constants.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/instance.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  261. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/network.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/kubernetes/network_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/lambda_cloud/__init__.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/lambda_cloud/config.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/lambda_cloud/instance.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/logging.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/metadata_utils.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/nebius/__init__.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/nebius/config.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/nebius/instance.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/nebius/utils.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/oci/__init__.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/oci/config.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/oci/instance.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/oci/query_utils.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/paperspace/__init__.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/paperspace/config.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/paperspace/constants.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/paperspace/instance.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/paperspace/utils.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/provisioner.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/__init__.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/api/__init__.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/api/commands.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/api/pods.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/config.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/instance.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/runpod/utils.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/ssh/__init__.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vast/__init__.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vast/config.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vast/instance.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vast/utils.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/__init__.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/__init__.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/custom_script.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/id_generator.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/service_manager.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/common/vim_utils.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/config.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/instance.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/provision/vsphere/vsphere_utils.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/resources.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/__init__.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/autoscalers.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/client/__init__.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/client/sdk.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/constants.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/controller.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/load_balancer.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/load_balancing_policies.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/replica_managers.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/serve_state.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/serve_utils.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/server/__init__.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/server/core.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/server/server.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/service.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/service_spec.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/serve/spot_placer.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/__init__.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/common.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/config.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/html/log.html +0 -0
  332. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/html/token_page.html +0 -0
  333. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/__init__.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/event_loop.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/executor.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/preconditions.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/process.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/queues/__init__.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/queues/local_queue.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/queues/mp_queue.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/requests.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/serializers/__init__.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/requests/serializers/encoders.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/stream_utils.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/server/uvicorn.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/setup_files/MANIFEST.in +0 -0
  347. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/setup_files/setup.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/sky_logging.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/LICENSE +0 -0
  350. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/__init__.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/attempt_skylet.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/autostop_lib.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/configs.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/events.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/job_lib.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/log_lib.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/log_lib.pyi +0 -0
  358. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/__init__.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/command_runner.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/ibm/__init__.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/ibm/node_provider.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/ibm/utils.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/scp/__init__.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/scp/config.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/providers/scp/node_provider.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/__init__.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  369. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/cli.py.patch +0 -0
  370. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  371. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  372. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  373. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/updater.py.patch +0 -0
  374. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/ray_patches/worker.py.patch +0 -0
  375. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/skylet.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/skylet/subprocess_daemon.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/task.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/aws-ray.yml.j2 +0 -0
  379. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/azure-ray.yml.j2 +0 -0
  380. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/cudo-ray.yml.j2 +0 -0
  381. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/do-ray.yml.j2 +0 -0
  382. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  383. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/gcp-ray.yml.j2 +0 -0
  384. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/ibm-ray.yml.j2 +0 -0
  385. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/jobs-controller.yaml.j2 +0 -0
  386. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  387. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  388. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  389. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  390. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  391. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/lambda-ray.yml.j2 +0 -0
  392. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/local-ray.yml.j2 +0 -0
  393. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/nebius-ray.yml.j2 +0 -0
  394. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/oci-ray.yml.j2 +0 -0
  395. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/paperspace-ray.yml.j2 +0 -0
  396. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/runpod-ray.yml.j2 +0 -0
  397. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/scp-ray.yml.j2 +0 -0
  398. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  399. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  400. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/vast-ray.yml.j2 +0 -0
  401. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/vsphere-ray.yml.j2 +0 -0
  402. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/templates/websocket_proxy.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/usage/__init__.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/usage/constants.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/usage/usage_lib.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/__init__.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/accelerator_registry.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/admin_policy_utils.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/annotations.py +0 -0
  410. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/atomic.py +0 -0
  411. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/aws/__init__.py +0 -0
  412. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/aws/get_default_security_group.py +0 -0
  413. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/cli_utils/__init__.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/cli_utils/status_utils.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/cluster_utils.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/command_runner.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/command_runner.pyi +0 -0
  418. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/common.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/common_utils.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/config_utils.py +0 -0
  421. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/context.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/context_utils.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/control_master_utils.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/controller_utils.py +0 -0
  425. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/dag_utils.py +0 -0
  426. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/env_options.py +0 -0
  427. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/infra_utils.py +0 -0
  428. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/__init__.py +0 -0
  429. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  430. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/config_map_utils.py +0 -0
  431. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/create_cluster.sh +0 -0
  432. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  433. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
  434. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  435. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  436. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  437. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  438. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  439. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  440. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  441. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  442. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  443. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/kubernetes_enums.py +0 -0
  444. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/log_utils.py +0 -0
  445. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/message_utils.py +0 -0
  446. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/registry.py +0 -0
  447. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/resources_utils.py +0 -0
  448. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/rich_console_utils.py +0 -0
  449. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/rich_utils.py +0 -0
  450. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/status_lib.py +0 -0
  451. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/timeline.py +0 -0
  452. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/ux_utils.py +0 -0
  453. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/utils/validator.py +0 -0
  454. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/sky/workspaces/__init__.py +0 -0
  455. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  456. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  457. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/skypilot_nightly.egg-info/top_level.txt +0 -0
  458. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_api.py +0 -0
  459. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_cli.py +0 -0
  460. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_config.py +0 -0
  461. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_db_utils.py +0 -0
  462. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_failover.py +0 -0
  463. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_global_user_state.py +0 -0
  464. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_jobs.py +0 -0
  465. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_jobs_and_serve.py +0 -0
  466. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_list_accelerators.py +0 -0
  467. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_optimizer_dryruns.py +0 -0
  468. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_optimizer_random_dag.py +0 -0
  469. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_serve_autoscaler.py +0 -0
  470. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_smoke.py +0 -0
  471. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_storage.py +0 -0
  472. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_wheels.py +0 -0
  473. {skypilot_nightly-1.0.0.dev20250526 → skypilot_nightly-1.0.0.dev20250528}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250526
3
+ Version: 1.0.0.dev20250528
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -48,6 +48,7 @@ Requires-Dist: aiofiles
48
48
  Requires-Dist: httpx
49
49
  Requires-Dist: setproctitle
50
50
  Requires-Dist: sqlalchemy
51
+ Requires-Dist: psycopg2-binary
51
52
  Provides-Extra: aws
52
53
  Requires-Dist: awscli>=1.27.10; extra == "aws"
53
54
  Requires-Dist: botocore>=1.29.10; extra == "aws"
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  import urllib.request
6
6
 
7
7
  # Replaced with the current commit when building the wheels.
8
- _SKYPILOT_COMMIT_SHA = 'bbcd11ba81d6312ae5e292e891da531024c321aa'
8
+ _SKYPILOT_COMMIT_SHA = '19ec9254037c83057b1e3f51f5dc17045ec42b53'
9
9
 
10
10
 
11
11
  def _get_git_commit():
@@ -35,7 +35,7 @@ def _get_git_commit():
35
35
 
36
36
 
37
37
  __commit__ = _get_git_commit()
38
- __version__ = '1.0.0.dev20250526'
38
+ __version__ = '1.0.0.dev20250528'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -66,12 +66,20 @@ def _api_logging_decorator(logger_src: str, level: int):
66
66
  return decorated_api
67
67
 
68
68
 
69
+ def _get_config_file() -> str:
70
+ # Kubernetes load the kubeconfig from the KUBECONFIG env var on
71
+ # package initialization. So we have to reload the KUBECOFNIG env var
72
+ # everytime in case the KUBECONFIG env var is changed.
73
+ return os.environ.get('KUBECONFIG', '~/.kube/config')
74
+
75
+
69
76
  def _load_config(context: Optional[str] = None):
70
77
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
71
78
 
72
79
  def _load_config_from_kubeconfig(context: Optional[str] = None):
73
80
  try:
74
- kubernetes.config.load_kube_config(context=context)
81
+ kubernetes.config.load_kube_config(config_file=_get_config_file(),
82
+ context=context)
75
83
  except kubernetes.config.config_exception.ConfigException as e:
76
84
  suffix = common_utils.format_exception(e, use_bracket=True)
77
85
  context_name = '(current-context)' if context is None else context
@@ -139,6 +147,10 @@ def _load_config(context: Optional[str] = None):
139
147
  _load_config_from_kubeconfig(context)
140
148
 
141
149
 
150
+ def list_kube_config_contexts():
151
+ return kubernetes.config.list_kube_config_contexts(_get_config_file())
152
+
153
+
142
154
  @_api_logging_decorator('urllib3', logging.ERROR)
143
155
  @annotations.lru_cache(scope='request')
144
156
  def core_api(context: Optional[str] = None):
@@ -1727,12 +1727,12 @@ class RetryingVmProvisioner(object):
1727
1727
  f'{requested_resources}. ')
1728
1728
  elif to_provision.region is not None:
1729
1729
  # For public clouds, provision.region is always set.
1730
- if to_provision.cloud.is_same_cloud(clouds.SSH()):
1730
+ if clouds.SSH().is_same_cloud(to_provision.cloud):
1731
1731
  message = ('Failed to acquire resources in SSH Node Pool '
1732
1732
  f'({to_provision.region.lstrip("ssh-")}) for '
1733
1733
  f'{requested_resources}. The SSH Node Pool may not '
1734
1734
  'have enough resources.')
1735
- elif to_provision.cloud.is_same_cloud(clouds.Kubernetes()):
1735
+ elif clouds.Kubernetes().is_same_cloud(to_provision.cloud):
1736
1736
  message = ('Failed to acquire resources in context '
1737
1737
  f'{to_provision.region} for {requested_resources}. ')
1738
1738
  else:
@@ -143,12 +143,15 @@ def check_capabilities(
143
143
  combinations = list(itertools.product(clouds_to_check, capabilities))
144
144
 
145
145
  cloud2ctx2text: Dict[str, Dict[str, str]] = {}
146
+ if not config_allowed_cloud_names:
147
+ for capability in capabilities:
148
+ global_user_state.set_enabled_clouds([], capability,
149
+ current_workspace_name)
146
150
  if not combinations:
147
151
  echo(
148
152
  _summary_message(enabled_clouds, cloud2ctx2text,
149
153
  current_workspace_name, hide_workspace_str,
150
154
  disallowed_cloud_names))
151
-
152
155
  return {}
153
156
 
154
157
  workspace_str = f' for workspace: {current_workspace_name!r}'
@@ -504,6 +507,18 @@ def _format_context_details(cloud: Union[str, sky_clouds.Cloud],
504
507
  f'{str_to_format}'
505
508
  f'{colorama.Style.RESET_ALL}')
506
509
 
510
+ # For SSH, determine which contexts are disabled due to allowed_node_pools
511
+ disabled_due_to_allowed_node_pools = set()
512
+ if isinstance(cloud_type, sky_clouds.SSH):
513
+ # Get all node pool contexts from file
514
+ all_node_pool_contexts = sky_clouds.SSH.get_ssh_node_pool_contexts()
515
+ # Get allowed contexts (after filtering)
516
+ allowed_contexts = sky_clouds.SSH.existing_allowed_contexts()
517
+ # Contexts that exist in file but not in allowed list are disabled
518
+ # due to allowed_node_pools configuration
519
+ disabled_due_to_allowed_node_pools = (set(all_node_pool_contexts) -
520
+ set(allowed_contexts))
521
+
507
522
  # Format the context info with consistent styling
508
523
  contexts_formatted = []
509
524
  for i, context in enumerate(filtered_contexts):
@@ -519,11 +534,22 @@ def _format_context_details(cloud: Union[str, sky_clouds.Cloud],
519
534
  text_suffix = ''
520
535
  if show_details:
521
536
  if ctx2text is not None:
522
- text_suffix = (
523
- f': {ctx2text[context]}' if context in ctx2text else
524
- (': ' + _red_color('disabled. ') +
525
- _dim_color('Reason: Not set up. Use `sky ssh up --infra '
526
- f'{context.lstrip("ssh-")}` to set up.')))
537
+ if context in ctx2text:
538
+ text_suffix = f': {ctx2text[context]}'
539
+ elif (isinstance(cloud_type, sky_clouds.SSH) and
540
+ context in disabled_due_to_allowed_node_pools):
541
+ # Context is disabled due to allowed_node_pools config
542
+ text_suffix = (': ' + _red_color('disabled. ') +
543
+ _dim_color('Reason: Not included in '
544
+ 'allowed_node_pools '
545
+ 'configuration.'))
546
+ else:
547
+ # Default case - not set up
548
+ text_suffix = (': ' + _red_color('disabled. ') +
549
+ _dim_color('Reason: Not set up. Use '
550
+ '`sky ssh up --infra '
551
+ f'{context.lstrip("ssh-")}` '
552
+ 'to set up.'))
527
553
  contexts_formatted.append(
528
554
  f'\n {symbol}{cleaned_context}{text_suffix}')
529
555
  identity_str = ('SSH Node Pools' if isinstance(cloud_type, sky_clouds.SSH)
@@ -1789,20 +1789,8 @@ def _show_enabled_infra(active_workspace: str, show_workspace: bool):
1789
1789
  title = (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}Enabled Infra'
1790
1790
  f'{workspace_str}:'
1791
1791
  f'{colorama.Style.RESET_ALL} ')
1792
- enabled_clouds = sdk.get(sdk.enabled_clouds())
1793
- enabled_ssh_infras = []
1794
- enabled_k8s_infras = []
1795
- enabled_cloud_infras = []
1796
- for cloud in enabled_clouds:
1797
- cloud_infra = cloud.get_infras()
1798
- if isinstance(cloud, clouds.SSH):
1799
- enabled_ssh_infras.extend(cloud_infra)
1800
- elif isinstance(cloud, clouds.Kubernetes):
1801
- enabled_k8s_infras.extend(cloud_infra)
1802
- else:
1803
- enabled_cloud_infras.extend(cloud_infra)
1804
- all_infras = sorted(enabled_ssh_infras) + sorted(
1805
- enabled_k8s_infras) + sorted(enabled_cloud_infras)
1792
+ all_infras = sdk.get(
1793
+ sdk.enabled_clouds(workspace=active_workspace, expand=True))
1806
1794
  click.echo(f'{title}{", ".join(all_infras)}\n')
1807
1795
 
1808
1796
 
@@ -1997,7 +1985,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1997
1985
  workspace_request_id = sdk.workspaces()
1998
1986
  except RuntimeError:
1999
1987
  # Backward compatibility for API server before #5660.
2000
- # TODO(zhwu): remove this after 0.12.0.
1988
+ # TODO(zhwu): remove this after 0.10.0.
2001
1989
  logger.warning(f'{colorama.Style.DIM}SkyPilot API server is '
2002
1990
  'in an old version, and may miss feature: '
2003
1991
  'workspaces. Update with: sky api stop; '
@@ -3524,13 +3512,8 @@ def show_gpus(
3524
3512
  cloud_is_ssh = isinstance(cloud_obj, clouds.SSH)
3525
3513
  # TODO(romilb): We should move this to the backend.
3526
3514
  kubernetes_autoscaling = kubernetes_utils.get_autoscaler_type() is not None
3527
- kubernetes_is_enabled = False
3528
- ssh_is_enabled = False
3529
- for cloud in enabled_clouds:
3530
- if isinstance(cloud, clouds.SSH):
3531
- ssh_is_enabled = True
3532
- elif isinstance(cloud, clouds.Kubernetes):
3533
- kubernetes_is_enabled = True
3515
+ kubernetes_is_enabled = clouds.Kubernetes.canonical_name() in enabled_clouds
3516
+ ssh_is_enabled = clouds.SSH.canonical_name() in enabled_clouds
3534
3517
  query_k8s_realtime_gpu = (kubernetes_is_enabled and
3535
3518
  (cloud_name is None or cloud_is_kubernetes))
3536
3519
  query_ssh_realtime_gpu = (ssh_is_enabled and
@@ -1789,20 +1789,8 @@ def _show_enabled_infra(active_workspace: str, show_workspace: bool):
1789
1789
  title = (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}Enabled Infra'
1790
1790
  f'{workspace_str}:'
1791
1791
  f'{colorama.Style.RESET_ALL} ')
1792
- enabled_clouds = sdk.get(sdk.enabled_clouds())
1793
- enabled_ssh_infras = []
1794
- enabled_k8s_infras = []
1795
- enabled_cloud_infras = []
1796
- for cloud in enabled_clouds:
1797
- cloud_infra = cloud.get_infras()
1798
- if isinstance(cloud, clouds.SSH):
1799
- enabled_ssh_infras.extend(cloud_infra)
1800
- elif isinstance(cloud, clouds.Kubernetes):
1801
- enabled_k8s_infras.extend(cloud_infra)
1802
- else:
1803
- enabled_cloud_infras.extend(cloud_infra)
1804
- all_infras = sorted(enabled_ssh_infras) + sorted(
1805
- enabled_k8s_infras) + sorted(enabled_cloud_infras)
1792
+ all_infras = sdk.get(
1793
+ sdk.enabled_clouds(workspace=active_workspace, expand=True))
1806
1794
  click.echo(f'{title}{", ".join(all_infras)}\n')
1807
1795
 
1808
1796
 
@@ -1997,7 +1985,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1997
1985
  workspace_request_id = sdk.workspaces()
1998
1986
  except RuntimeError:
1999
1987
  # Backward compatibility for API server before #5660.
2000
- # TODO(zhwu): remove this after 0.12.0.
1988
+ # TODO(zhwu): remove this after 0.10.0.
2001
1989
  logger.warning(f'{colorama.Style.DIM}SkyPilot API server is '
2002
1990
  'in an old version, and may miss feature: '
2003
1991
  'workspaces. Update with: sky api stop; '
@@ -3524,13 +3512,8 @@ def show_gpus(
3524
3512
  cloud_is_ssh = isinstance(cloud_obj, clouds.SSH)
3525
3513
  # TODO(romilb): We should move this to the backend.
3526
3514
  kubernetes_autoscaling = kubernetes_utils.get_autoscaler_type() is not None
3527
- kubernetes_is_enabled = False
3528
- ssh_is_enabled = False
3529
- for cloud in enabled_clouds:
3530
- if isinstance(cloud, clouds.SSH):
3531
- ssh_is_enabled = True
3532
- elif isinstance(cloud, clouds.Kubernetes):
3533
- kubernetes_is_enabled = True
3515
+ kubernetes_is_enabled = clouds.Kubernetes.canonical_name() in enabled_clouds
3516
+ ssh_is_enabled = clouds.SSH.canonical_name() in enabled_clouds
3534
3517
  query_k8s_realtime_gpu = (kubernetes_is_enabled and
3535
3518
  (cloud_name is None or cloud_is_kubernetes))
3536
3519
  query_ssh_realtime_gpu = (ssh_is_enabled and
@@ -138,12 +138,14 @@ def check(infra_list: Optional[Tuple[str, ...]],
138
138
  @usage_lib.entrypoint
139
139
  @server_common.check_server_healthy_or_start
140
140
  @annotations.client_api
141
- def enabled_clouds(workspace: Optional[str] = None) -> server_common.RequestId:
141
+ def enabled_clouds(workspace: Optional[str] = None,
142
+ expand: bool = False) -> server_common.RequestId:
142
143
  """Gets the enabled clouds.
143
144
 
144
145
  Args:
145
146
  workspace: The workspace to get the enabled clouds for. If None, the
146
147
  active workspace will be used.
148
+ expand: Whether to expand Kubernetes and SSH to list of resource pools.
147
149
 
148
150
  Returns:
149
151
  The request ID of the enabled clouds request.
@@ -154,7 +156,7 @@ def enabled_clouds(workspace: Optional[str] = None) -> server_common.RequestId:
154
156
  if workspace is None:
155
157
  workspace = skypilot_config.get_active_workspace()
156
158
  response = requests.get((f'{server_common.get_server_url()}/enabled_clouds?'
157
- f'workspace={workspace}'),
159
+ f'workspace={workspace}&expand={expand}'),
158
160
  cookies=server_common.get_api_cookie_jar())
159
161
  return server_common.get_request_id(response)
160
162
 
@@ -1919,6 +1921,7 @@ def api_login(endpoint: Optional[str] = None, get_token: bool = False) -> None:
1919
1921
  if (endpoint is not None and not endpoint.startswith('http://') and
1920
1922
  not endpoint.startswith('https://')):
1921
1923
  raise click.BadParameter('Endpoint must be a valid URL.')
1924
+ endpoint = endpoint.rstrip('/')
1922
1925
 
1923
1926
  server_status = server_common.check_server_healthy(endpoint)
1924
1927
  if server_status == server_common.ApiServerStatus.NEEDS_AUTH or get_token:
@@ -492,13 +492,13 @@ class Cloud:
492
492
  f'{cls._REPR} does not support {CloudCapability.STORAGE.value}.')
493
493
 
494
494
  @classmethod
495
- def get_infras(cls) -> List[str]:
495
+ def expand_infras(cls) -> List[str]:
496
496
  """Returns a list of enabled infrastructures for this cloud.
497
497
 
498
498
  For Kubernetes and SSH, return a list of resource pools.
499
499
  For all other clouds, return self.
500
500
  """
501
- return [cls._REPR.lower()]
501
+ return [cls.canonical_name()]
502
502
 
503
503
  # TODO(zhwu): Make the return type immutable.
504
504
  @classmethod
@@ -164,15 +164,20 @@ class Kubernetes(clouds.Cloud):
164
164
 
165
165
  all_contexts = set(all_contexts)
166
166
 
167
+ # Allowed_contexts specified for workspace should take precedence over
168
+ # the global allowed_contexts.
169
+ allowed_contexts = skypilot_config.get_workspace_cloud(
170
+ 'kubernetes').get('allowed_contexts', None)
171
+ if allowed_contexts is None:
172
+ allowed_contexts = skypilot_config.get_nested(
173
+ ('kubernetes', 'allowed_contexts'), None)
174
+
167
175
  # Exclude contexts starting with `ssh-`
168
176
  # TODO(romilb): Remove when SSH Node Pools use a separate kubeconfig.
169
177
  all_contexts = [
170
178
  ctx for ctx in all_contexts if not ctx.startswith('ssh-')
171
179
  ]
172
180
 
173
- allowed_contexts = skypilot_config.get_nested(
174
- ('kubernetes', 'allowed_contexts'), None)
175
-
176
181
  if allowed_contexts is None:
177
182
  # Try kubeconfig if present
178
183
  current_context = (
@@ -848,11 +853,11 @@ class Kubernetes(clouds.Cloud):
848
853
 
849
854
  @classmethod
850
855
  def get_user_identities(cls) -> Optional[List[List[str]]]:
851
- k8s = kubernetes.kubernetes
852
856
  identities = []
857
+ k8s = kubernetes.kubernetes
853
858
  try:
854
859
  all_contexts, current_context = (
855
- k8s.config.list_kube_config_contexts())
860
+ kubernetes.list_kube_config_contexts())
856
861
  except k8s.config.config_exception.ConfigException:
857
862
  return None
858
863
  # Add current context at the head of the list
@@ -894,8 +899,8 @@ class Kubernetes(clouds.Cloud):
894
899
  return True, None
895
900
 
896
901
  @classmethod
897
- def get_infras(cls) -> List[str]:
902
+ def expand_infras(cls) -> List[str]:
898
903
  return [
899
- f'{cls._REPR.lower()}/{c}'
904
+ f'{cls.canonical_name()}/{c}'
900
905
  for c in cls.existing_allowed_contexts(silent=True)
901
906
  ]
@@ -260,6 +260,10 @@ def _list_accelerators(
260
260
  container.resources.requests))
261
261
 
262
262
  accelerators_available = accelerator_count - allocated_qty
263
+ # Initialize the total_accelerators_available to make sure the
264
+ # key exists in the dictionary.
265
+ total_accelerators_available[accelerator_name] = (
266
+ total_accelerators_available.get(accelerator_name, 0))
263
267
 
264
268
  if accelerators_available >= min_quantity_filter:
265
269
  quantized_availability = min_quantity_filter * (
@@ -7,6 +7,7 @@ from typing import Dict, List, Optional, Set, Tuple, Union
7
7
  import yaml
8
8
 
9
9
  from sky import sky_logging
10
+ from sky import skypilot_config
10
11
  from sky.adaptors import kubernetes as kubernetes_adaptor
11
12
  from sky.clouds import kubernetes
12
13
  from sky.provision.kubernetes import utils as kubernetes_utils
@@ -134,29 +135,44 @@ class SSH(kubernetes.Kubernetes):
134
135
 
135
136
  all_contexts = set(all_contexts)
136
137
 
138
+ # Workspace-level allowed_node_pools should take precedence over
139
+ # the global allowed_node_pools.
140
+ allowed_node_pools = skypilot_config.get_workspace_cloud('ssh').get(
141
+ 'allowed_node_pools', None)
142
+ if allowed_node_pools is None:
143
+ allowed_node_pools = skypilot_config.get_nested(
144
+ ('ssh', 'allowed_node_pools'), None)
145
+
137
146
  # Filter for SSH contexts (those starting with 'ssh-')
138
147
  ssh_contexts = [
139
148
  context for context in all_contexts if context.startswith('ssh-')
140
149
  ]
141
150
 
142
151
  # Get contexts from SSH node pools file
143
- allowed_contexts = cls.get_ssh_node_pool_contexts()
152
+ all_node_pool_contexts = cls.get_ssh_node_pool_contexts()
153
+
154
+ def filter_by_allowed_node_pools(ctxs):
155
+ if allowed_node_pools is None:
156
+ return ctxs
157
+ return [
158
+ ctx for ctx in ctxs if ctx.lstrip('ssh-') in allowed_node_pools
159
+ ]
144
160
 
145
- if allowed_contexts:
161
+ if all_node_pool_contexts:
146
162
  # Only include allowed contexts that exist
147
163
  existing_contexts = []
148
164
  skipped_contexts = []
149
- for context in allowed_contexts:
165
+ for context in all_node_pool_contexts:
150
166
  if context in ssh_contexts:
151
167
  existing_contexts.append(context)
152
168
  else:
153
169
  skipped_contexts.append(context)
154
170
  if not silent:
155
171
  cls._ssh_log_skipped_contexts_once(tuple(skipped_contexts))
156
- return existing_contexts
172
+ return filter_by_allowed_node_pools(existing_contexts)
157
173
 
158
- # If no allowed_contexts found, return all SSH contexts
159
- return ssh_contexts
174
+ # If no all_node_pool_contexts found, return all SSH contexts
175
+ return filter_by_allowed_node_pools(ssh_contexts)
160
176
 
161
177
  @classmethod
162
178
  def _check_compute_credentials(
@@ -192,9 +208,9 @@ class SSH(kubernetes.Kubernetes):
192
208
  return success, ctx2text
193
209
 
194
210
  @classmethod
195
- def get_infras(cls) -> List[str]:
211
+ def expand_infras(cls) -> List[str]:
196
212
  return [
197
- f'{cls._REPR.lower()}/{c.lstrip("ssh-")}'
213
+ f'{cls.canonical_name()}/{c.lstrip("ssh-")}'
198
214
  for c in cls.existing_allowed_contexts(silent=True)
199
215
  ]
200
216
 
@@ -1010,11 +1010,29 @@ def storage_delete(name: str) -> None:
1010
1010
  # = Catalog Observe =
1011
1011
  # ===================
1012
1012
  @usage_lib.entrypoint
1013
- def enabled_clouds(workspace: Optional[str] = None) -> List[clouds.Cloud]:
1013
+ def enabled_clouds(workspace: Optional[str] = None,
1014
+ expand: bool = False) -> List[str]:
1014
1015
  if workspace is None:
1015
1016
  workspace = skypilot_config.get_active_workspace()
1016
- return global_user_state.get_cached_enabled_clouds(
1017
+ cached_clouds = global_user_state.get_cached_enabled_clouds(
1017
1018
  sky_cloud.CloudCapability.COMPUTE, workspace=workspace)
1019
+ with skypilot_config.local_active_workspace_ctx(workspace):
1020
+ if not expand:
1021
+ return [cloud.canonical_name() for cloud in cached_clouds]
1022
+ enabled_ssh_infras = []
1023
+ enabled_k8s_infras = []
1024
+ enabled_cloud_infras = []
1025
+ for cloud in cached_clouds:
1026
+ cloud_infra = cloud.expand_infras()
1027
+ if isinstance(cloud, clouds.SSH):
1028
+ enabled_ssh_infras.extend(cloud_infra)
1029
+ elif isinstance(cloud, clouds.Kubernetes):
1030
+ enabled_k8s_infras.extend(cloud_infra)
1031
+ else:
1032
+ enabled_cloud_infras.extend(cloud_infra)
1033
+ all_infras = sorted(enabled_ssh_infras) + sorted(
1034
+ enabled_k8s_infras) + sorted(enabled_cloud_infras)
1035
+ return all_infras
1018
1036
 
1019
1037
 
1020
1038
  @usage_lib.entrypoint
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/28558d57108b05ae.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/28558d57108b05ae.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-deda68c926e8d0bc.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-96a715a6fb01e228.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/7GEgRyZKRaSnYZCV1Jwol/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/7GEgRyZKRaSnYZCV1Jwol/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"7GEgRyZKRaSnYZCV1Jwol","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/ffd1cd601648c303.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/ffd1cd601648c303.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-deda68c926e8d0bc.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-a631df412d8172de.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/Mx1iAbDQn1jMHh3UHmK3R/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Mx1iAbDQn1jMHh3UHmK3R/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"Mx1iAbDQn1jMHh3UHmK3R","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,c,e,a,t,r,u,n,f,j,i){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-6b0d9e5031b70c58.js"],"/_error":["static/chunks/pages/_error-1be831200e60c5c0.js"],"/clusters":[s,t,c,e,a,r,j,"static/chunks/pages/clusters-943992b84fd6f4ee.js"],"/clusters/[cluster]":[s,t,c,e,a,r,u,j,"static/chunks/pages/clusters/[cluster]-9506c00257d10dbd.js"],"/clusters/[cluster]/[job]":[s,c,"static/chunks/pages/clusters/[cluster]/[job]-159bffb2fa34ed54.js"],"/config":[n,s,f,c,e,"static/chunks/pages/config-41738d1896fc02fe.js"],"/infra":[s,c,e,a,"static/chunks/pages/infra-881fcd902fbbd0e5.js"],"/jobs":[s,t,c,e,a,r,u,"static/chunks/pages/jobs-a4efc09e61988f8d.js"],"/jobs/[job]":[s,c,"static/chunks/pages/jobs/[job]-2c29e97a6aa50dd4.js"],"/users":[s,c,e,a,"static/chunks/pages/users-b2634885d67c49a6.js"],"/workspace/new":[n,s,t,f,c,e,a,r,u,i,"static/chunks/pages/workspace/new-579b3203c7c19d84.js"],"/workspaces":[n,s,t,f,c,e,a,r,u,"static/chunks/pages/workspaces-610c49ae3619ee85.js"],"/workspaces/[name]":[n,s,t,f,c,e,a,r,u,i,"static/chunks/pages/workspaces/[name]-9388e38fac73ee8f.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/config","/infra","/jobs","/jobs/[job]","/users","/workspace/new","/workspaces","/workspaces/[name]"]}}("static/chunks/173-7db8607cefc20f70.js","static/chunks/470-4d003c441839094d.js","static/chunks/293-351268365226d251.js","static/chunks/856-62b87c68917b08ed.js","static/chunks/121-8f55ee3fa6301784.js","static/chunks/973-1a09cac61cfcc1e1.js","static/chunks/236-d6900c828331f664.js","static/chunks/9f96d65d-5a3e4af68c26849e.js","static/chunks/320-afea3ddcc5bd1c6c.js","static/chunks/578-9146658cead92981.js","static/chunks/843-256ec920f6d5f41f.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1,20 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[121],{8671:function(e,t,n){n.d(t,{Z:function(){return r}});/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let r=(0,n(998).Z)("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},3626:function(e,t,n){n.d(t,{Z:function(){return r}});/**
7
+ * @license lucide-react v0.407.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */let r=(0,n(998).Z)("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]])},3767:function(e,t,n){n.d(t,{Z:function(){return r}});/**
12
+ * @license lucide-react v0.407.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */let r=(0,n(998).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},6327:function(e,t,n){n.d(t,{x8:function(){return el},VY:function(){return eo},dk:function(){return ea},aV:function(){return er},h_:function(){return en},fC:function(){return ee},Dx:function(){return ei},xz:function(){return et}});var r=n(7294),o=n(6206),i=n(8771),a=n(5360),l=n(1276),u=n(7342),s=n(6063),d=n(5420),c=n(2651),f=n(9981),p=e=>{let t,n;let{present:o,children:a}=e,l=function(e){var t,n;let[o,i]=r.useState(),a=r.useRef(null),l=r.useRef(e),u=r.useRef("none"),[s,d]=(t=e?"mounted":"unmounted",n={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}},r.useReducer((e,t)=>n[e][t]??e,t));return r.useEffect(()=>{let e=m(a.current);u.current="mounted"===s?e:"none"},[s]),(0,f.b)(()=>{let t=a.current,n=l.current;if(n!==e){let r=u.current,o=m(t);e?d("MOUNT"):"none"===o||t?.display==="none"?d("UNMOUNT"):n&&r!==o?d("ANIMATION_OUT"):d("UNMOUNT"),l.current=e}},[e,d]),(0,f.b)(()=>{if(o){let e;let t=o.ownerDocument.defaultView??window,n=n=>{let r=m(a.current).includes(n.animationName);if(n.target===o&&r&&(d("ANIMATION_END"),!l.current)){let n=o.style.animationFillMode;o.style.animationFillMode="forwards",e=t.setTimeout(()=>{"forwards"===o.style.animationFillMode&&(o.style.animationFillMode=n)})}},r=e=>{e.target===o&&(u.current=m(a.current))};return o.addEventListener("animationstart",r),o.addEventListener("animationcancel",n),o.addEventListener("animationend",n),()=>{t.clearTimeout(e),o.removeEventListener("animationstart",r),o.removeEventListener("animationcancel",n),o.removeEventListener("animationend",n)}}d("ANIMATION_END")},[o,d]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:r.useCallback(e=>{a.current=e?getComputedStyle(e):null,i(e)},[])}}(o),u="function"==typeof a?a({present:l.isPresent}):r.Children.only(a),s=(0,i.e)(l.ref,(t=Object.getOwnPropertyDescriptor(u.props,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning?u.ref:(t=Object.getOwnPropertyDescriptor(u,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning?u.props.ref:u.props.ref||u.ref);return"function"==typeof a||l.isPresent?r.cloneElement(u,{ref:s}):null};function m(e){return e?.animationName||"none"}p.displayName="Presence";var g=n(5320),v=n(7552),y=n(6223),N=n(3541),h=n(8426),D=n(5893),O="Dialog",[b,M]=(0,a.b)(O),[R,x]=b(O),j=e=>{let{__scopeDialog:t,children:n,open:o,defaultOpen:i,onOpenChange:a,modal:s=!0}=e,d=r.useRef(null),c=r.useRef(null),[f,p]=(0,u.T)({prop:o,defaultProp:i??!1,onChange:a,caller:O});return(0,D.jsx)(R,{scope:t,triggerRef:d,contentRef:c,contentId:(0,l.M)(),titleId:(0,l.M)(),descriptionId:(0,l.M)(),open:f,onOpenChange:p,onOpenToggle:r.useCallback(()=>p(e=>!e),[p]),modal:s,children:n})};j.displayName=O;var w="DialogTrigger",I=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,a=x(w,n),l=(0,i.e)(t,a.triggerRef);return(0,D.jsx)(g.WV.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":H(a.open),...r,ref:l,onClick:(0,o.M)(e.onClick,a.onOpenToggle)})});I.displayName=w;var C="DialogPortal",[E,_]=b(C,{forceMount:void 0}),T=e=>{let{__scopeDialog:t,forceMount:n,children:o,container:i}=e,a=x(C,t);return(0,D.jsx)(E,{scope:t,forceMount:n,children:r.Children.map(o,e=>(0,D.jsx)(p,{present:n||a.open,children:(0,D.jsx)(c.h,{asChild:!0,container:i,children:e})}))})};T.displayName=C;var k="DialogOverlay",A=r.forwardRef((e,t)=>{let n=_(k,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=x(k,e.__scopeDialog);return i.modal?(0,D.jsx)(p,{present:r||i.open,children:(0,D.jsx)(P,{...o,ref:t})}):null});A.displayName=k;var F=(0,h.Z8)("DialogOverlay.RemoveScroll"),P=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=x(k,n);return(0,D.jsx)(y.Z,{as:F,allowPinchZoom:!0,shards:[o.contentRef],children:(0,D.jsx)(g.WV.div,{"data-state":H(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),W="DialogContent",U=r.forwardRef((e,t)=>{let n=_(W,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=x(W,e.__scopeDialog);return(0,D.jsx)(p,{present:r||i.open,children:i.modal?(0,D.jsx)(V,{...o,ref:t}):(0,D.jsx)(Z,{...o,ref:t})})});U.displayName=W;var V=r.forwardRef((e,t)=>{let n=x(W,e.__scopeDialog),a=r.useRef(null),l=(0,i.e)(t,n.contentRef,a);return r.useEffect(()=>{let e=a.current;if(e)return(0,N.Ry)(e)},[]),(0,D.jsx)(S,{...e,ref:l,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,o.M)(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:(0,o.M)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=0===t.button&&!0===t.ctrlKey;(2===t.button||n)&&e.preventDefault()}),onFocusOutside:(0,o.M)(e.onFocusOutside,e=>e.preventDefault())})}),Z=r.forwardRef((e,t)=>{let n=x(W,e.__scopeDialog),o=r.useRef(!1),i=r.useRef(!1);return(0,D.jsx)(S,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||n.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"!==t.detail.originalEvent.type||(i.current=!0));let r=t.target;n.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})}),S=r.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:o,onOpenAutoFocus:a,onCloseAutoFocus:l,...u}=e,c=x(W,n),f=r.useRef(null),p=(0,i.e)(t,f);return(0,v.EW)(),(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(d.M,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:a,onUnmountAutoFocus:l,children:(0,D.jsx)(s.XB,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":H(c.open),...u,ref:p,onDismiss:()=>c.onOpenChange(!1)})}),(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(J,{titleId:c.titleId}),(0,D.jsx)(Q,{contentRef:f,descriptionId:c.descriptionId})]})]})}),L="DialogTitle",$=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=x(L,n);return(0,D.jsx)(g.WV.h2,{id:o.titleId,...r,ref:t})});$.displayName=L;var B="DialogDescription",q=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=x(B,n);return(0,D.jsx)(g.WV.p,{id:o.descriptionId,...r,ref:t})});q.displayName=B;var z="DialogClose",X=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=x(z,n);return(0,D.jsx)(g.WV.button,{type:"button",...r,ref:t,onClick:(0,o.M)(e.onClick,()=>i.onOpenChange(!1))})});function H(e){return e?"open":"closed"}X.displayName=z;var K="DialogTitleWarning",[Y,G]=(0,a.k)(K,{contentName:W,titleName:L,docsSlug:"dialog"}),J=({titleId:e})=>{let t=G(K),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
17
+
18
+ If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
19
+
20
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return r.useEffect(()=>{e&&!document.getElementById(e)&&console.error(n)},[n,e]),null},Q=({contentRef:e,descriptionId:t})=>{let n=G("DialogDescriptionWarning"),o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${n.contentName}}.`;return r.useEffect(()=>{let n=e.current?.getAttribute("aria-describedby");t&&n&&!document.getElementById(t)&&console.warn(o)},[o,e,t]),null},ee=j,et=I,en=T,er=A,eo=U,ei=$,ea=q,el=X},2003:function(e,t,n){n.d(t,{j:function(){return a}});var r=n(512);let o=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,i=r.W,a=(e,t)=>n=>{var r;if((null==t?void 0:t.variants)==null)return i(e,null==n?void 0:n.class,null==n?void 0:n.className);let{variants:a,defaultVariants:l}=t,u=Object.keys(a).map(e=>{let t=null==n?void 0:n[e],r=null==l?void 0:l[e];if(null===t)return null;let i=o(t)||o(r);return a[e][i]}),s=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return void 0===r||(e[n]=r),e},{});return i(e,u,null==t?void 0:null===(r=t.compoundVariants)||void 0===r?void 0:r.reduce((e,t)=>{let{class:n,className:r,...o}=t;return Object.entries(o).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...l,...s}[t]):({...l,...s})[t]===n})?[...e,n,r]:e},[]),null==n?void 0:n.class,null==n?void 0:n.className)}}}]);