skypilot-nightly 1.0.0.dev20250521__tar.gz → 1.0.0.dev20250522__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 (424) hide show
  1. {skypilot_nightly-1.0.0.dev20250521/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250522}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/client/sdk.py +72 -1
  4. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/__init__.py +2 -0
  5. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/cloud.py +6 -0
  6. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/gcp.py +156 -21
  7. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/__init__.py +3 -0
  8. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/common.py +9 -2
  9. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/constants.py +1 -0
  10. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/core.py +6 -8
  11. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/404.html +1 -1
  12. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  13. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/clusters/[cluster].html +1 -1
  14. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/clusters.html +1 -1
  15. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/index.html +1 -1
  16. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/infra.html +1 -1
  17. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/jobs/[job].html +1 -1
  18. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/jobs.html +1 -1
  19. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/storage.py +1 -0
  20. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/execution.py +56 -7
  21. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/server/core.py +4 -2
  22. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/optimizer.py +6 -11
  23. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/constants.py +147 -4
  24. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/instance_utils.py +10 -0
  25. skypilot_nightly-1.0.0.dev20250522/sky/provision/gcp/volume_utils.py +247 -0
  26. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/resources.py +173 -3
  27. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/server/core.py +2 -4
  28. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/common.py +46 -9
  29. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/constants.py +2 -0
  30. skypilot_nightly-1.0.0.dev20250522/sky/server/html/token_page.html +154 -0
  31. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/executor.py +3 -6
  32. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/server.py +40 -8
  33. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skypilot_config.py +117 -31
  34. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/task.py +24 -1
  35. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/gcp-ray.yml.j2 +44 -1
  36. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/nebius-ray.yml.j2 +0 -2
  37. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/admin_policy_utils.py +26 -22
  38. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/context.py +36 -6
  39. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/context_utils.py +15 -0
  40. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/resources_utils.py +14 -0
  41. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/schemas.py +46 -0
  42. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  43. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/skypilot_nightly.egg-info/SOURCES.txt +4 -2
  44. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_config.py +7 -9
  45. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_failover.py +6 -1
  46. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_optimizer_dryruns.py +28 -0
  47. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_optimizer_random_dag.py +2 -1
  48. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/LICENSE +0 -0
  49. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/MANIFEST.in +0 -0
  50. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/README.md +0 -0
  51. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/pyproject.toml +0 -0
  52. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/setup.cfg +0 -0
  53. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/setup.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/__init__.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/aws.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/azure.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/cloudflare.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/common.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/cudo.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/do.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/docker.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/gcp.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/ibm.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/kubernetes.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/nebius.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/oci.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/runpod.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/vast.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/adaptors/vsphere.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/admin_policy.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/authentication.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/__init__.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/backend.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/backend_utils.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/cloud_vm_ray_backend.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/docker_utils.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/local_docker_backend.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/backends/wheel_utils.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/benchmark/__init__.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/benchmark/benchmark_state.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/benchmark/benchmark_utils.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/check.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/cli.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/client/__init__.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/client/cli.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/client/common.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/cloud_stores.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/aws.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/azure.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/cudo.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/do.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/fluidstack.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/ibm.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/kubernetes.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/lambda_cloud.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/nebius.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/oci.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/paperspace.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/runpod.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/scp.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/config.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_ibm.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/do_catalog.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/__init__.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/aws_utils.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/azure_utils.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/gcp_utils.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/oci_utils.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/utils/scp_utils.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/vast.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/clouds/vsphere.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dag.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250521/sky/dashboard/out/_next/static/hvWzC5E6Q4CcKzXcWbgig → skypilot_nightly-1.0.0.dev20250522/sky/dashboard/out/_next/static/CzOVV6JpRQBRt5GhZuhyK}/_buildManifest.js +0 -0
  139. {skypilot_nightly-1.0.0.dev20250521/sky/dashboard/out/_next/static/hvWzC5E6Q4CcKzXcWbgig → skypilot_nightly-1.0.0.dev20250522/sky/dashboard/out/_next/static/CzOVV6JpRQBRt5GhZuhyK}/_ssgManifest.js +0 -0
  140. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/236-1a3a9440417720eb.js +0 -0
  141. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js +0 -0
  142. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/37-d584022b0da4ac3b.js +0 -0
  143. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/393-e1eaa440481337ec.js +0 -0
  144. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/480-f28cd152a98997de.js +0 -0
  145. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/582-683f4f27b81996dc.js +0 -0
  146. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -0
  150. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/_app-8cfab319f9fb3ae8.js +0 -0
  151. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-33bc2bec322249b1.js +0 -0
  153. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-e2fc2dd1955e6c36.js +0 -0
  154. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/clusters-3a748bd76e5c2984.js +0 -0
  155. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/index-6b0d9e5031b70c58.js +0 -0
  156. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/infra-9180cd91cee64b96.js +0 -0
  157. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-70756c2dad850a7e.js +0 -0
  158. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/pages/jobs-ecd804b9272f4a7c.js +0 -0
  159. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  160. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js +0 -0
  161. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/_next/static/css/7e7ce4ff31d3977b.css +0 -0
  162. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/favicon.ico +0 -0
  163. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/skypilot.svg +0 -0
  164. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  165. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/__init__.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/data_transfer.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/data_utils.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/mounting_utils.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/data/storage_utils.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/exceptions.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/global_user_state.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/__init__.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/client/__init__.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/client/sdk.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/constants.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/controller.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/dashboard/dashboard.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/dashboard/static/favicon.ico +0 -0
  179. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/dashboard/templates/index.html +0 -0
  180. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/recovery_strategy.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/scheduler.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/server/__init__.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/server/dashboard_utils.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/server/server.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/state.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/jobs/utils.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/models.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/__init__.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/aws/__init__.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/aws/config.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/aws/instance.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/aws/utils.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/azure/__init__.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/azure/azure-config-template.json +0 -0
  195. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/azure/config.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/azure/instance.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/common.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/constants.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/__init__.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/config.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/cudo_machine_type.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/cudo_utils.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/cudo_wrapper.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/cudo/instance.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/do/__init__.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/do/config.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/do/constants.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/do/instance.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/do/utils.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/docker_utils.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/fluidstack/__init__.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/fluidstack/config.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/fluidstack/instance.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/__init__.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/config.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/instance.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/gcp/mig_utils.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/instance_setup.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/__init__.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/config.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/constants.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/instance.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  225. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/network.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/network_utils.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/kubernetes/utils.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/lambda_cloud/__init__.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/lambda_cloud/config.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/lambda_cloud/instance.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/logging.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/metadata_utils.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/nebius/__init__.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/nebius/config.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/nebius/instance.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/nebius/utils.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/oci/__init__.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/oci/config.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/oci/instance.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/oci/query_utils.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/paperspace/__init__.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/paperspace/config.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/paperspace/constants.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/paperspace/instance.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/paperspace/utils.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/provisioner.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/__init__.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/api/__init__.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/api/commands.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/api/pods.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/config.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/instance.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/runpod/utils.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vast/__init__.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vast/config.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vast/instance.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vast/utils.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/__init__.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/__init__.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/custom_script.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/id_generator.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/service_manager.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/common/vim_utils.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/config.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/instance.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/provision/vsphere/vsphere_utils.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/__init__.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/autoscalers.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/client/__init__.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/client/sdk.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/constants.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/controller.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/load_balancer.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/load_balancing_policies.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/replica_managers.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/serve_state.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/serve_utils.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/server/__init__.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/server/server.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/service.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/service_spec.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/serve/spot_placer.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/__init__.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/config.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/html/log.html +0 -0
  293. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/__init__.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/event_loop.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/payloads.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/preconditions.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/process.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/queues/__init__.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/queues/local_queue.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/queues/mp_queue.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/requests.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/serializers/__init__.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/serializers/decoders.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/requests/serializers/encoders.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/stream_utils.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/server/uvicorn.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/setup_files/MANIFEST.in +0 -0
  308. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/setup_files/dependencies.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/setup_files/setup.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/sky_logging.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/LICENSE +0 -0
  312. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/__init__.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/attempt_skylet.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/autostop_lib.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/configs.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/constants.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/events.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/job_lib.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/log_lib.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/log_lib.pyi +0 -0
  321. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/__init__.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/command_runner.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/ibm/__init__.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/ibm/node_provider.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/ibm/utils.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/scp/__init__.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/scp/config.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/providers/scp/node_provider.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/__init__.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  332. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/cli.py.patch +0 -0
  333. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  334. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  335. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  336. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/updater.py.patch +0 -0
  337. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/ray_patches/worker.py.patch +0 -0
  338. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/skylet.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/skylet/subprocess_daemon.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/aws-ray.yml.j2 +0 -0
  341. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/azure-ray.yml.j2 +0 -0
  342. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/cudo-ray.yml.j2 +0 -0
  343. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/do-ray.yml.j2 +0 -0
  344. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  345. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/ibm-ray.yml.j2 +0 -0
  346. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/jobs-controller.yaml.j2 +0 -0
  347. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  348. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  349. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  350. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  351. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  352. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/lambda-ray.yml.j2 +0 -0
  353. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/local-ray.yml.j2 +0 -0
  354. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/oci-ray.yml.j2 +0 -0
  355. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/paperspace-ray.yml.j2 +0 -0
  356. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/runpod-ray.yml.j2 +0 -0
  357. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/scp-ray.yml.j2 +0 -0
  358. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  359. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  360. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/vast-ray.yml.j2 +0 -0
  361. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/vsphere-ray.yml.j2 +0 -0
  362. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/templates/websocket_proxy.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/usage/__init__.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/usage/constants.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/usage/usage_lib.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/__init__.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/accelerator_registry.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/annotations.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/atomic.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/aws/__init__.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/aws/get_default_security_group.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/cli_utils/__init__.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/cli_utils/status_utils.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/cluster_utils.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/command_runner.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/command_runner.pyi +0 -0
  377. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/common.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/common_utils.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/config_utils.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/control_master_utils.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/controller_utils.py +0 -0
  382. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/dag_utils.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/db_utils.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/env_options.py +0 -0
  385. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/infra_utils.py +0 -0
  386. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/__init__.py +0 -0
  387. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/create_cluster.sh +0 -0
  388. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  389. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  390. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  393. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  394. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  395. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  396. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  397. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  398. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  399. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/kubernetes_enums.py +0 -0
  400. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/log_utils.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/message_utils.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/registry.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/rich_console_utils.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/rich_utils.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/status_lib.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/subprocess_utils.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/timeline.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/ux_utils.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/sky/utils/validator.py +0 -0
  410. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  411. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  412. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/skypilot_nightly.egg-info/requires.txt +0 -0
  413. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/skypilot_nightly.egg-info/top_level.txt +0 -0
  414. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_api.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_cli.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_global_user_state.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_jobs.py +0 -0
  418. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_jobs_and_serve.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_list_accelerators.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_serve_autoscaler.py +0 -0
  421. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_smoke.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_storage.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/tests/test_wheels.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250521 → skypilot_nightly-1.0.0.dev20250522}/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.dev20250521
3
+ Version: 1.0.0.dev20250522
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -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 = 'e1716e31bee6a918b246f8134f2e086e7011bdc8'
8
+ _SKYPILOT_COMMIT_SHA = '417e7f813d86c03c334e9e12f38718766fc4daa5'
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.dev20250521'
38
+ __version__ = '1.0.0.dev20250522'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -10,14 +10,19 @@ Usage example:
10
10
  statuses = sky.get(request_id)
11
11
 
12
12
  """
13
+ import base64
14
+ import binascii
13
15
  import getpass
16
+ from http import cookiejar
14
17
  import json
15
18
  import logging
16
19
  import os
17
20
  import pathlib
18
21
  import subprocess
22
+ import time
19
23
  import typing
20
24
  from typing import Any, Dict, List, Optional, Tuple, Union
25
+ from urllib import parse as urlparse
21
26
  import webbrowser
22
27
 
23
28
  import click
@@ -1841,7 +1846,73 @@ def api_login(endpoint: Optional[str] = None) -> None:
1841
1846
  not endpoint.startswith('https://')):
1842
1847
  raise click.BadParameter('Endpoint must be a valid URL.')
1843
1848
 
1844
- server_common.check_server_healthy(endpoint)
1849
+ server_status = server_common.check_server_healthy(endpoint)
1850
+ if server_status == server_common.ApiServerStatus.NEEDS_AUTH:
1851
+ # We detected an auth proxy, so go through the auth proxy cookie flow.
1852
+ parsed_url = urlparse.urlparse(endpoint)
1853
+ token_url = f'{endpoint}/token'
1854
+ click.echo('Authentication is needed. Please visit this URL setup up '
1855
+ f'the token:{colorama.Style.BRIGHT}\n\n{token_url}'
1856
+ f'\n{colorama.Style.RESET_ALL}')
1857
+ if webbrowser.open(token_url):
1858
+ click.echo('Opening browser...')
1859
+ token: str = click.prompt('Paste the token')
1860
+
1861
+ # Parse the token.
1862
+ # b64decode will ignore invalid characters, but does some length and
1863
+ # padding checks.
1864
+ try:
1865
+ data = base64.b64decode(token)
1866
+ except binascii.Error as e:
1867
+ raise ValueError(f'Malformed token: {token}') from e
1868
+ logger.debug(f'Token data: {data!r}')
1869
+ try:
1870
+ cookie_dict = json.loads(data)
1871
+ except (json.JSONDecodeError, UnicodeDecodeError) as e:
1872
+ raise ValueError(f'Malformed token data: {data!r}') from e
1873
+ if not isinstance(cookie_dict, dict):
1874
+ raise ValueError(f'Malformed token JSON: {cookie_dict}')
1875
+
1876
+ cookie_jar = cookiejar.MozillaCookieJar()
1877
+ for (name, value) in cookie_dict.items():
1878
+ # dict keys in JSON must be strings
1879
+ assert isinstance(name, str)
1880
+ if not isinstance(value, str):
1881
+ raise ValueError('Malformed token - bad key/value: '
1882
+ f'{name}: {value}')
1883
+
1884
+ # See CookieJar._cookie_from_cookie_tuple
1885
+ # oauth2proxy default is Max-Age 604800
1886
+ expires = int(time.time()) + 604800
1887
+ domain = str(parsed_url.hostname)
1888
+ domain_initial_dot = domain.startswith('.')
1889
+ if not domain_initial_dot:
1890
+ domain = '.' + domain
1891
+
1892
+ cookie_jar.set_cookie(
1893
+ cookiejar.Cookie(
1894
+ version=0,
1895
+ name=name,
1896
+ value=value,
1897
+ port=None,
1898
+ port_specified=False,
1899
+ domain=domain,
1900
+ domain_specified=True,
1901
+ domain_initial_dot=domain_initial_dot,
1902
+ path='',
1903
+ path_specified=False,
1904
+ secure=False,
1905
+ expires=expires,
1906
+ discard=False,
1907
+ comment=None,
1908
+ comment_url=None,
1909
+ rest=dict(),
1910
+ ))
1911
+
1912
+ # Now that the cookies are parsed, save them to the cookie jar.
1913
+ cookie_jar_path = os.path.expanduser(
1914
+ server_common.get_api_cookie_jar_path())
1915
+ cookie_jar.save(cookie_jar_path)
1845
1916
 
1846
1917
  # Set the endpoint in the config file
1847
1918
  config_path = pathlib.Path(
@@ -3,6 +3,7 @@
3
3
  from sky.clouds.cloud import Cloud
4
4
  from sky.clouds.cloud import cloud_in_iterable
5
5
  from sky.clouds.cloud import CloudImplementationFeatures
6
+ from sky.clouds.cloud import DummyCloud
6
7
  from sky.clouds.cloud import OpenPortsVersion
7
8
  from sky.clouds.cloud import ProvisionerVersion
8
9
  from sky.clouds.cloud import Region
@@ -34,6 +35,7 @@ __all__ = [
34
35
  'Azure',
35
36
  'Cloud',
36
37
  'Cudo',
38
+ 'DummyCloud',
37
39
  'GCP',
38
40
  'Lambda',
39
41
  'DO',
@@ -888,6 +888,12 @@ class Cloud:
888
888
  return state
889
889
 
890
890
 
891
+ class DummyCloud(Cloud):
892
+ """A dummy Cloud that has zero egress cost from/to for optimization
893
+ purpose."""
894
+ pass
895
+
896
+
891
897
  # === Helper functions ===
892
898
  def cloud_in_iterable(cloud: Cloud, cloud_list: Iterable[Cloud]) -> bool:
893
899
  """Returns whether the cloud is in the given cloud list."""
@@ -18,6 +18,7 @@ from sky.adaptors import gcp
18
18
  from sky.clouds import service_catalog
19
19
  from sky.clouds.utils import gcp_utils
20
20
  from sky.provision.gcp import constants
21
+ from sky.provision.gcp import volume_utils
21
22
  from sky.utils import annotations
22
23
  from sky.utils import common_utils
23
24
  from sky.utils import registry
@@ -443,6 +444,25 @@ class GCP(clouds.Cloud):
443
444
  disk_tier=disk_tier,
444
445
  clouds='gcp')
445
446
 
447
+ @classmethod
448
+ def failover_disk_tier(
449
+ cls, instance_type: Optional[str],
450
+ disk_tier: Optional[resources_utils.DiskTier]
451
+ ) -> Optional[resources_utils.DiskTier]:
452
+ if (disk_tier is not None and
453
+ disk_tier != resources_utils.DiskTier.BEST):
454
+ return disk_tier
455
+ # Failover disk tier from ultra to low.
456
+ all_tiers = list(reversed(resources_utils.DiskTier))
457
+ start_index = all_tiers.index(GCP._translate_disk_tier(disk_tier))
458
+ while start_index < len(all_tiers):
459
+ disk_tier = all_tiers[start_index]
460
+ ok, _ = GCP.check_disk_tier(instance_type, disk_tier)
461
+ if ok:
462
+ return disk_tier
463
+ start_index += 1
464
+ assert False, 'Low disk tier should always be supported on GCP.'
465
+
446
466
  def make_deploy_resources_variables(
447
467
  self,
448
468
  resources: 'resources.Resources',
@@ -463,21 +483,6 @@ class GCP(clouds.Cloud):
463
483
  # issue when first booted.
464
484
  image_id = _DEFAULT_CPU_IMAGE_ID
465
485
 
466
- def _failover_disk_tier() -> Optional[resources_utils.DiskTier]:
467
- if (r.disk_tier is not None and
468
- r.disk_tier != resources_utils.DiskTier.BEST):
469
- return r.disk_tier
470
- # Failover disk tier from ultra to low.
471
- all_tiers = list(reversed(resources_utils.DiskTier))
472
- start_index = all_tiers.index(GCP._translate_disk_tier(r.disk_tier))
473
- while start_index < len(all_tiers):
474
- disk_tier = all_tiers[start_index]
475
- ok, _ = GCP.check_disk_tier(r.instance_type, disk_tier)
476
- if ok:
477
- return disk_tier
478
- start_index += 1
479
- assert False, 'Low disk tier should always be supported on GCP.'
480
-
481
486
  r = resources
482
487
  # Find GPU spec, if any.
483
488
  resources_vars = {
@@ -491,7 +496,9 @@ class GCP(clouds.Cloud):
491
496
  'custom_resources': None,
492
497
  'use_spot': r.use_spot,
493
498
  'gcp_project_id': self.get_project_id(dryrun),
494
- **GCP._get_disk_specs(r.instance_type, _failover_disk_tier()),
499
+ **GCP._get_disk_specs(
500
+ r.instance_type,
501
+ GCP.failover_disk_tier(r.instance_type, r.disk_tier)),
495
502
  }
496
503
  enable_gpu_direct = skypilot_config.get_nested(
497
504
  ('gcp', 'enable_gpu_direct'),
@@ -593,6 +600,27 @@ class GCP(clouds.Cloud):
593
600
  'force_enable_external_ips'] = skypilot_config.get_nested(
594
601
  ('gcp', 'force_enable_external_ips'), False)
595
602
 
603
+ volumes, device_mount_points = GCP._get_volumes_specs(
604
+ region, zones, r.instance_type, r.volumes, use_mig,
605
+ resources_vars['tpu_vm'])
606
+ resources_vars['volumes'] = volumes
607
+
608
+ resources_vars['user_data'] = None
609
+ user_data = ''
610
+ docker_run_options = []
611
+ if device_mount_points:
612
+ # Build the device_mounts array
613
+ device_mounts_array = []
614
+ for device_name, mount_point in device_mount_points.items():
615
+ device_mounts_array.append(f'["{device_name}"]="{mount_point}"')
616
+ docker_run_options.append(
617
+ f'--volume={mount_point}:{mount_point}')
618
+ device_mounts_str = '\n '.join(device_mounts_array)
619
+
620
+ # Format the template with the device_mounts array
621
+ user_data += constants.DISK_MOUNT_USER_DATA_TEMPLATE.format(
622
+ device_mounts=device_mounts_str)
623
+
596
624
  # Add gVNIC from config
597
625
  resources_vars['enable_gvnic'] = skypilot_config.get_nested(
598
626
  ('gcp', 'enable_gvnic'),
@@ -602,13 +630,16 @@ class GCP(clouds.Cloud):
602
630
  ('gcp', 'placement_policy'),
603
631
  None,
604
632
  override_configs=resources.cluster_config_overrides)
605
- resources_vars['user_data'] = None
606
633
  if enable_gpu_direct:
607
- resources_vars['user_data'] = constants.GPU_DIRECT_TCPX_USER_DATA
608
- resources_vars[
609
- 'docker_run_options'] = constants.GPU_DIRECT_TCPX_SPECIFIC_OPTIONS
634
+ user_data += constants.GPU_DIRECT_TCPX_USER_DATA
635
+ docker_run_options += constants.GPU_DIRECT_TCPX_SPECIFIC_OPTIONS
610
636
  if placement_policy is None:
611
637
  placement_policy = constants.COMPACT_GROUP_PLACEMENT_POLICY
638
+ if user_data:
639
+ resources_vars[
640
+ 'user_data'] = constants.BASH_SCRIPT_START + user_data
641
+ if docker_run_options:
642
+ resources_vars['docker_run_options'] = docker_run_options
612
643
  resources_vars['placement_policy'] = placement_policy
613
644
 
614
645
  return resources_vars
@@ -1122,6 +1153,17 @@ class GCP(clouds.Cloud):
1122
1153
 
1123
1154
  return tier2name[tier]
1124
1155
 
1156
+ @classmethod
1157
+ def _get_data_disk_type(
1158
+ cls,
1159
+ instance_type: Optional[str],
1160
+ disk_tier: Optional[resources_utils.DiskTier],
1161
+ ) -> str:
1162
+
1163
+ tier = cls._translate_disk_tier(disk_tier)
1164
+ tier2name = volume_utils.get_data_disk_tier_mapping(instance_type)
1165
+ return tier2name[tier]
1166
+
1125
1167
  @classmethod
1126
1168
  def _get_disk_specs(
1127
1169
  cls, instance_type: Optional[str],
@@ -1133,9 +1175,102 @@ class GCP(clouds.Cloud):
1133
1175
  specs['disk_tier'] == 'pd-extreme'):
1134
1176
  # Only pd-extreme supports custom iops.
1135
1177
  # see https://cloud.google.com/compute/docs/disks#disk-types
1136
- specs['disk_iops'] = 20000
1178
+ specs['disk_iops'] = constants.PD_EXTREME_IOPS
1137
1179
  return specs
1138
1180
 
1181
+ @classmethod
1182
+ def _get_volumes_specs(
1183
+ cls,
1184
+ region: 'clouds.Region',
1185
+ zones: Optional[List['clouds.Zone']],
1186
+ instance_type: Optional[str],
1187
+ volumes: Optional[List[Dict[str, Any]]],
1188
+ use_mig: bool,
1189
+ tpu_vm: bool,
1190
+ ) -> Tuple[List[Dict[str, Any]], Dict[str, str]]:
1191
+ if volumes is None:
1192
+ return [], {}
1193
+
1194
+ project_id = cls.get_project_id()
1195
+
1196
+ volume_utils.validate_instance_volumes(instance_type, volumes)
1197
+
1198
+ volumes_specs: List[Dict[str, Any]] = []
1199
+ device_mount_points: Dict[str, str] = {}
1200
+ ssd_index = 0
1201
+ # TPU data disk index starts from 1, 0 is the boot disk
1202
+ tpu_disk_index = 1
1203
+ for i, volume in enumerate(volumes):
1204
+ volume_spec = {
1205
+ 'device_name': f'sky-disk-{i}',
1206
+ 'auto_delete': volume['auto_delete'],
1207
+ }
1208
+ if ('name' in volume and volume['storage_type']
1209
+ == resources_utils.StorageType.NETWORK):
1210
+ volume_info = volume_utils.check_volume_name_exist_in_region(
1211
+ project_id, region, use_mig, volume['name'])
1212
+ if volume_info is not None:
1213
+ volume_utils.check_volume_zone_match(
1214
+ volume['name'], zones, volume_info['available_zones'])
1215
+ volume_spec['source'] = volume_info['selfLink']
1216
+ volume_spec[
1217
+ 'attach_mode'] = volume_utils.translate_attach_mode(
1218
+ volume['attach_mode'])
1219
+ volume_spec['storage_type'] = constants.NETWORK_STORAGE_TYPE
1220
+ volumes_specs.append(volume_spec)
1221
+ device_name = f'{constants.DEVICE_NAME_PREFIX}sky-disk-{i}'
1222
+ if tpu_vm:
1223
+ # TPU VM does not support specifying the device name,
1224
+ # so we use the default device name.
1225
+ device_name = f'{constants.DEVICE_NAME_PREFIX}persistent-disk-{tpu_disk_index}'
1226
+ tpu_disk_index += 1
1227
+ device_mount_points[device_name] = volume['path']
1228
+ continue
1229
+ if tpu_vm:
1230
+ # TODO(hailong): support creating block storage for TPU VM
1231
+ continue
1232
+ if volume['storage_type'] == resources_utils.StorageType.INSTANCE:
1233
+ device_name = f'{constants.INSTANCE_STORAGE_DEVICE_NAME_PREFIX}{ssd_index}'
1234
+ ssd_index += 1
1235
+ device_mount_points[device_name] = volume['path']
1236
+
1237
+ if instance_type is not None and instance_type in constants.SSD_AUTO_ATTACH_MACHINE_TYPES:
1238
+ # The instance storage will be attached automatically,
1239
+ # so we skip the following steps.
1240
+ continue
1241
+
1242
+ volume_spec['disk_tier'] = constants.INSTANCE_STORAGE_DISK_TYPE
1243
+ volume_spec[
1244
+ 'interface_type'] = constants.INSTANCE_STORAGE_INTERFACE_TYPE
1245
+ volume_spec['storage_type'] = constants.INSTANCE_STORAGE_TYPE
1246
+ # Disk size of instance storage is fixed to 375GB
1247
+ volume_spec['disk_size'] = None
1248
+ volume_spec['auto_delete'] = True
1249
+ else:
1250
+ # TODO(hailong): this should be fixed when move the
1251
+ # disk creation out of the instance creation phase
1252
+ if not use_mig:
1253
+ volume_spec['disk_name'] = volume['name']
1254
+ device_name = f'{constants.DEVICE_NAME_PREFIX}sky-disk-{i}'
1255
+ device_mount_points[device_name] = volume['path']
1256
+
1257
+ volume_spec['storage_type'] = constants.NETWORK_STORAGE_TYPE
1258
+ if 'disk_size' in volume:
1259
+ volume_spec['disk_size'] = volume['disk_size']
1260
+ else:
1261
+ volume_spec['disk_size'] = constants.DEFAULT_DISK_SIZE
1262
+ disk_tier = cls.failover_disk_tier(instance_type,
1263
+ volume['disk_tier'])
1264
+ volume_spec['disk_tier'] = cls._get_data_disk_type(
1265
+ instance_type, disk_tier)
1266
+ if volume_spec['disk_tier'] == 'pd-extreme':
1267
+ # Only pd-extreme supports custom iops.
1268
+ # see https://cloud.google.com/compute/docs/disks#disk-types
1269
+ volume_spec['disk_iops'] = constants.PD_EXTREME_IOPS
1270
+ volumes_specs.append(volume_spec)
1271
+
1272
+ return volumes_specs, device_mount_points
1273
+
1139
1274
  @classmethod
1140
1275
  def _label_filter_str(cls, tag_filters: Dict[str, str]) -> str:
1141
1276
  return ' '.join(f'labels.{k}={v}' for k, v in tag_filters.items())
@@ -9,6 +9,8 @@ from sky.clouds.service_catalog.constants import ALL_CLOUDS
9
9
  from sky.clouds.service_catalog.constants import CATALOG_DIR
10
10
  from sky.clouds.service_catalog.constants import CATALOG_SCHEMA_VERSION
11
11
  from sky.clouds.service_catalog.constants import HOSTED_CATALOG_DIR_URL
12
+ from sky.clouds.service_catalog.constants import (
13
+ HOSTED_CATALOG_DIR_URL_S3_MIRROR)
12
14
  from sky.utils import resources_utils
13
15
  from sky.utils import subprocess_utils
14
16
 
@@ -383,6 +385,7 @@ __all__ = [
383
385
  # Constants
384
386
  'ALL_CLOUDS',
385
387
  'HOSTED_CATALOG_DIR_URL',
388
+ 'HOSTED_CATALOG_DIR_URL_S3_MIRROR',
386
389
  'CATALOG_SCHEMA_VERSION',
387
390
  'CATALOG_DIR',
388
391
  ]
@@ -197,6 +197,8 @@ def read_catalog(filename: str,
197
197
  with filelock.FileLock(meta_path + '.lock'):
198
198
  if _need_update():
199
199
  url = f'{constants.HOSTED_CATALOG_DIR_URL}/{constants.CATALOG_SCHEMA_VERSION}/{filename}' # pylint: disable=line-too-long
200
+ url_fallback = f'{constants.HOSTED_CATALOG_DIR_URL_S3_MIRROR}/{constants.CATALOG_SCHEMA_VERSION}/{filename}' # pylint: disable=line-too-long
201
+ headers = {'User-Agent': 'SkyPilot/0.7'}
200
202
  update_frequency_str = ''
201
203
  if pull_frequency_hours is not None:
202
204
  update_frequency_str = (
@@ -206,8 +208,13 @@ def read_catalog(filename: str,
206
208
  f'Updating {cloud} catalog: {filename}') +
207
209
  f'{update_frequency_str}'):
208
210
  try:
209
- r = requests.get(url=url,
210
- headers={'User-Agent': 'SkyPilot/0.7'})
211
+ r = requests.get(url=url, headers=headers)
212
+ if r.status_code == 429:
213
+ # fallback to s3 mirror, github introduced rate
214
+ # limit after 2025-05, see
215
+ # https://github.com/skypilot-org/skypilot/issues/5438
216
+ # for more details
217
+ r = requests.get(url=url_fallback, headers=headers)
211
218
  r.raise_for_status()
212
219
  except requests.exceptions.RequestException as e:
213
220
  error_str = (f'Failed to fetch {cloud} catalog '
@@ -1,5 +1,6 @@
1
1
  """Constants used for service catalog."""
2
2
  HOSTED_CATALOG_DIR_URL = 'https://raw.githubusercontent.com/skypilot-org/skypilot-catalog/master/catalogs' # pylint: disable=line-too-long
3
+ HOSTED_CATALOG_DIR_URL_S3_MIRROR = 'https://skypilot-catalog.s3.us-east-1.amazonaws.com/catalogs' # pylint: disable=line-too-long
3
4
  CATALOG_SCHEMA_VERSION = 'v7'
4
5
  CATALOG_DIR = '~/.sky/catalogs'
5
6
  ALL_CLOUDS = ('aws', 'azure', 'gcp', 'ibm', 'lambda', 'scp', 'oci',
@@ -78,14 +78,12 @@ def optimize(
78
78
  # is shown on `sky launch`. The optimizer is also invoked during failover,
79
79
  # but we do not apply the admin policy there. We should apply the admin
80
80
  # policy in the optimizer, but that will require some refactoring.
81
- dag, _ = admin_policy_utils.apply(
82
- dag,
83
- use_mutated_config_in_current_request=True,
84
- request_options=request_options)
85
- return optimizer.Optimizer.optimize(dag=dag,
86
- minimize=minimize,
87
- blocked_resources=blocked_resources,
88
- quiet=quiet)
81
+ with admin_policy_utils.apply_and_use_config_in_current_request(
82
+ dag, request_options=request_options) as dag:
83
+ return optimizer.Optimizer.optimize(dag=dag,
84
+ minimize=minimize,
85
+ blocked_resources=blocked_resources,
86
+ quiet=quiet)
89
87
 
90
88
 
91
89
  @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/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_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":"hvWzC5E6Q4CcKzXcWbgig","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/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_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":"CzOVV6JpRQBRt5GhZuhyK","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-33bc2bec322249b1.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"hvWzC5E6Q4CcKzXcWbgig","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-33bc2bec322249b1.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"CzOVV6JpRQBRt5GhZuhyK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/393-e1eaa440481337ec.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-1a3a9440417720eb.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d584022b0da4ac3b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-e2fc2dd1955e6c36.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"hvWzC5E6Q4CcKzXcWbgig","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/393-e1eaa440481337ec.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-1a3a9440417720eb.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d584022b0da4ac3b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-e2fc2dd1955e6c36.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"CzOVV6JpRQBRt5GhZuhyK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Clusters | SkyPilot Dashboard</title><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="4"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/393-e1eaa440481337ec.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d584022b0da4ac3b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-3a748bd76e5c2984.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div><div class="border-l border-gray-200 h-6 mx-1"></div><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/infra"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg><span>Infra</span></a></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/clusters">Sky Clusters</a></div><div class="flex items-center"><button class="justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-10 px-4 py-2 text-sky-blue hover:text-sky-blue-bright flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Infra</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Started</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Actions</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6 text-gray-500" colSpan="7">No active clusters</td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"hvWzC5E6Q4CcKzXcWbgig","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Clusters | SkyPilot Dashboard</title><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="4"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/582-683f4f27b81996dc.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/480-f28cd152a98997de.js" defer=""></script><script src="/dashboard/_next/static/chunks/393-e1eaa440481337ec.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d584022b0da4ac3b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-3a748bd76e5c2984.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div><div class="border-l border-gray-200 h-6 mx-1"></div><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/infra"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg><span>Infra</span></a></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/clusters">Sky Clusters</a></div><div class="flex items-center"><button class="justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-10 px-4 py-2 text-sky-blue hover:text-sky-blue-bright flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Infra</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Started</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Actions</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6 text-gray-500" colSpan="7">No active clusters</td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"CzOVV6JpRQBRt5GhZuhyK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-6b0d9e5031b70c58.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hvWzC5E6Q4CcKzXcWbgig/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"hvWzC5E6Q4CcKzXcWbgig","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/7e7ce4ff31d3977b.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-830f59b8404e96b8.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-8cfab319f9fb3ae8.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-6b0d9e5031b70c58.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CzOVV6JpRQBRt5GhZuhyK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"CzOVV6JpRQBRt5GhZuhyK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>