skypilot-nightly 1.0.0.dev20250713__tar.gz → 1.0.0.dev20250716__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 (527) hide show
  1. {skypilot_nightly-1.0.0.dev20250713/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250716}/PKG-INFO +3 -3
  2. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/nebius.py +6 -0
  4. skypilot_nightly-1.0.0.dev20250716/sky/catalog/data_fetchers/fetch_nebius.py +308 -0
  5. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/cli/command.py +10 -6
  6. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/hyperbolic.py +2 -0
  7. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/nebius.py +6 -4
  8. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/404.html +1 -1
  9. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/1141-d8c6404a7c6fffe6.js +11 -0
  10. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/1746.27d40aedc22bd2d6.js +60 -0
  11. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/1871-76491ac174a95278.js +6 -0
  12. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/2641.35edc9ccaeaad9e3.js +1 -0
  13. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/3785.b3cc2bc1d49d2c3c.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/3785.95b94f18aaec7233.js +1 -1
  14. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/4869.c139c0124e677fc8.js +16 -0
  15. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/6990-dcb411b566e64cde.js +1 -0
  16. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/9025.a7c44babfe56ce09.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/9025.133e9ba5c780afeb.js +1 -1
  17. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/9847.46e613d000c55859.js +30 -0
  18. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/_app-49ff6c04332cc621.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/_app-771a40cde532309b.js +1 -1
  19. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-9096ea50b8e2cf9e.js +6 -0
  20. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-14d404b7dd28502a.js +16 -0
  21. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/users-cd43fb3c122eedde.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/users-19e98664bdd61643.js +1 -1
  22. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/volumes-61ea7ba7e56f8d06.js +1 -0
  23. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/workspaces-06bde99155fa6292.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/workspaces-a1e43d9ef51a9cea.js +1 -1
  24. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/webpack-4d50ce5087a63a95.js → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/webpack-3fad5d4a0541a02d.js +1 -1
  25. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/css/219887b94512388c.css +3 -0
  26. skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/gVXjeFhvtWXyOsx9xYNvM/_buildManifest.js +1 -0
  27. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  28. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/clusters/[cluster].html +1 -1
  29. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/clusters.html +1 -1
  30. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/config.html +1 -1
  31. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/index.html +1 -1
  32. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/infra/[context].html +1 -1
  33. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/infra.html +1 -1
  34. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/jobs/[job].html +1 -1
  35. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/jobs.html +1 -1
  36. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/users.html +1 -1
  37. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/volumes.html +1 -1
  38. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/workspace/new.html +1 -1
  39. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/workspaces/[name].html +1 -1
  40. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/workspaces.html +1 -1
  41. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/execution.py +4 -0
  42. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/hyperbolic/__init__.py +1 -0
  43. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/hyperbolic/instance.py +10 -0
  44. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/executor.py +20 -7
  45. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/process.py +46 -3
  46. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/server.py +3 -0
  47. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/setup_files/dependencies.py +1 -1
  48. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/command_runner.py +3 -2
  49. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/tempstore.py +20 -1
  50. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716/skypilot_nightly.egg-info}/PKG-INFO +3 -3
  51. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/skypilot_nightly.egg-info/SOURCES.txt +27 -26
  52. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/skypilot_nightly.egg-info/requires.txt +2 -2
  53. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/JnRZeU80MTbNRfWV2kd8w/_buildManifest.js +0 -1
  54. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/1141-726e5a3f00b67185.js +0 -11
  55. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/1691.44e378727a41f3b5.js +0 -21
  56. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/1871-cf1a47986d716dd2.js +0 -6
  57. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/3256.7257acd01b481bed.js +0 -11
  58. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/4697.f5421144224da9fc.js +0 -20
  59. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/6990-d0dc765474fa0eca.js +0 -1
  60. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/8982.a2e214068f30a857.js +0 -1
  61. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-4608dc89f95eba89.js +0 -6
  62. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-980d6f6b64ca7833.js +0 -16
  63. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/volumes-4ebf6484f7216387.js +0 -1
  64. skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/css/a713705ccc8fe059.css +0 -3
  65. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/LICENSE +0 -0
  66. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/MANIFEST.in +0 -0
  67. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/README.md +0 -0
  68. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/pyproject.toml +0 -0
  69. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/setup.cfg +0 -0
  70. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/setup.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/__init__.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/aws.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/azure.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/cloudflare.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/common.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/cudo.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/do.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/docker.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/gcp.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/hyperbolic.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/ibm.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/kubernetes.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/oci.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/runpod.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/vast.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/adaptors/vsphere.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/admin_policy.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/authentication.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/__init__.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/backend.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/backend_utils.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/cloud_vm_ray_backend.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/docker_utils.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/local_docker_backend.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/backends/wheel_utils.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/__init__.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/aws_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/azure_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/common.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/config.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/cudo_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/__init__.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/analyze.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_hyperbolic.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/do_catalog.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/fluidstack_catalog.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/gcp_catalog.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/hyperbolic_catalog.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/ibm_catalog.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/kubernetes_catalog.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/lambda_catalog.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/nebius_catalog.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/oci_catalog.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/paperspace_catalog.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/runpod_catalog.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/scp_catalog.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/ssh_catalog.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/vast_catalog.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/catalog/vsphere_catalog.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/check.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/cli.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/__init__.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/cli/__init__.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/cli/deprecation_utils.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/cli/flags.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/common.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/oauth.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/sdk.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/client/service_account_auth.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/cloud_stores.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/__init__.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/aws.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/azure.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/cloud.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/cudo.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/do.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/fluidstack.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/gcp.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/ibm.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/kubernetes.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/lambda_cloud.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/oci.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/paperspace.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/runpod.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/scp.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/ssh.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/__init__.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/aws_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/azure_utils.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/gcp_utils.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/oci_utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/utils/scp_utils.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/vast.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/clouds/vsphere.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/core.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dag.py +0 -0
  167. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/1043-5e5ef6198735ff7e.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/1043-90a88c46f27b3df5.js +0 -0
  168. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +0 -0
  169. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/1664-d65361e92b85e786.js +0 -0
  170. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/2544.27f70672535675ed.js +0 -0
  171. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/2875.c24c6d57dc82e436.js +0 -0
  172. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/3698-52ad1ca228faa776.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/3698-9fa11dafb5cad4a6.js +0 -0
  173. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/3937.d7f1c55d1916c7f2.js +0 -0
  174. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/3947-b059261d6fa88a1f.js +0 -0
  175. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/430.ed51037d1a4a438b.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/4725.4c849b1e05c8e9ad.js +0 -0
  177. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/5230-df791914b54d91d9.js +0 -0
  178. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/5491.918ffed0ba7a5294.js +0 -0
  179. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/5739-5ea3ffa10fc884f2.js +0 -0
  180. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/616-162f3033ffcd3d31.js +0 -0
  181. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/6601-d38d10f957dff832.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/6601-d4a381403a8bae91.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/6989-eab0e9c16b64fd9f.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/804-9f5e98ce84d46bdd.js +0 -0
  184. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/8969-13bb52ce3cffa4e3.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/8969-743abf4bc86baf48.js +0 -0
  185. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/938-8e25c8ea0baa271a.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/938-6a9ffdaa21eee969.js +0 -0
  186. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/9470-21d059a1dfa03f61.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/9470-b6f6a35283863a6f.js +0 -0
  187. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js +0 -0
  188. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js +0 -0
  189. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js +0 -0
  190. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js +0 -0
  191. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js +0 -0
  192. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js +0 -0
  193. /skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-0fbfb1dd0b08c90c.js → /skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-0c37ee1ac5f3474d.js +0 -0
  194. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/clusters-102d169e87913ba1.js +0 -0
  195. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/config-a2673b256b6d416f.js +0 -0
  196. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/index-927ddeebe57a8ac3.js +0 -0
  197. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-8b0809f59034d509.js +0 -0
  198. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/infra-ae9d2f705ce582c9.js +0 -0
  199. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js +0 -0
  200. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js +0 -0
  201. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7c0187f43757a548.js +0 -0
  202. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  203. {skypilot_nightly-1.0.0.dev20250713/sky/dashboard/out/_next/static/JnRZeU80MTbNRfWV2kd8w → skypilot_nightly-1.0.0.dev20250716/sky/dashboard/out/_next/static/gVXjeFhvtWXyOsx9xYNvM}/_ssgManifest.js +0 -0
  204. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/favicon.ico +0 -0
  205. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/skypilot.svg +0 -0
  206. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  207. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/__init__.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/data_transfer.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/data_utils.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/mounting_utils.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/storage.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/data/storage_utils.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/exceptions.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/global_user_state.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/__init__.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/client/__init__.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/client/sdk.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/constants.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/controller.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/recovery_strategy.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/scheduler.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/server/__init__.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/server/core.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/server/server.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/server/utils.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/state.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/jobs/utils.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/logs/__init__.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/logs/agent.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/logs/gcp.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/metrics/__init__.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/metrics/utils.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/models.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/optimizer.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/aws/__init__.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/aws/config.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/aws/instance.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/aws/utils.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/azure/__init__.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/azure/azure-config-template.json +0 -0
  242. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/azure/config.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/azure/instance.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/common.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/constants.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/__init__.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/config.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/cudo_machine_type.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/cudo_utils.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/cudo_wrapper.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/cudo/instance.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/do/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/do/config.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/do/constants.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/do/instance.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/do/utils.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/docker_utils.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/fluidstack/__init__.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/fluidstack/config.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/fluidstack/instance.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/__init__.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/config.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/constants.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/instance.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/instance_utils.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/mig_utils.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/gcp/volume_utils.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/hyperbolic/config.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/hyperbolic/utils.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/instance_setup.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/__init__.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/config.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/constants.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/instance.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  277. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/network.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/network_utils.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/utils.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/kubernetes/volume.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/lambda_cloud/__init__.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/lambda_cloud/config.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/lambda_cloud/instance.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/logging.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/metadata_utils.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/nebius/__init__.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/nebius/config.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/nebius/constants.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/nebius/instance.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/nebius/utils.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/oci/__init__.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/oci/config.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/oci/instance.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/oci/query_utils.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/paperspace/__init__.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/paperspace/config.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/paperspace/constants.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/paperspace/instance.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/paperspace/utils.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/provisioner.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/__init__.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/api/__init__.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/api/commands.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/api/pods.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/config.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/instance.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/runpod/utils.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/scp/__init__.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/scp/config.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/scp/instance.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/ssh/__init__.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vast/__init__.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vast/config.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vast/instance.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vast/utils.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/__init__.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/__init__.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/custom_script.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/id_generator.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/service_manager.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/common/vim_utils.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/config.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/instance.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/provision/vsphere/vsphere_utils.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/resources.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/__init__.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/autoscalers.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/client/__init__.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/client/sdk.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/constants.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/controller.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/load_balancer.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/load_balancing_policies.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/replica_managers.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/serve_state.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/serve_utils.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/server/__init__.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/server/core.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/server/server.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/service.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/service_spec.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/serve/spot_placer.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/__init__.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/common.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/config.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/constants.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/html/log.html +0 -0
  355. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/html/token_page.html +0 -0
  356. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/metrics.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/__init__.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/event_loop.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/payloads.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/preconditions.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/queues/__init__.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/queues/local_queue.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/queues/mp_queue.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/requests.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/serializers/__init__.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/serializers/decoders.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/requests/serializers/encoders.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/rest.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/state.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/stream_utils.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/uvicorn.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/server/versions.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/setup_files/MANIFEST.in +0 -0
  374. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/setup_files/setup.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/sky_logging.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/LICENSE +0 -0
  377. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/__init__.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/attempt_skylet.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/autostop_lib.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/configs.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/constants.py +0 -0
  382. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/events.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/job_lib.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/log_lib.py +0 -0
  385. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/log_lib.pyi +0 -0
  386. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/__init__.py +0 -0
  387. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/command_runner.py +0 -0
  388. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/ibm/__init__.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/ibm/node_provider.py +0 -0
  390. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/ibm/utils.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/__init__.py +0 -0
  393. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  394. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/cli.py.patch +0 -0
  395. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  396. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  397. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  398. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/updater.py.patch +0 -0
  399. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/ray_patches/worker.py.patch +0 -0
  400. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/skylet.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skylet/subprocess_daemon.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/skypilot_config.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/ssh_node_pools/__init__.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/ssh_node_pools/core.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/ssh_node_pools/server.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/task.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/aws-ray.yml.j2 +0 -0
  408. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/azure-ray.yml.j2 +0 -0
  409. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/cudo-ray.yml.j2 +0 -0
  410. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/do-ray.yml.j2 +0 -0
  411. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  412. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/gcp-ray.yml.j2 +0 -0
  413. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/hyperbolic-ray.yml.j2 +0 -0
  414. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/ibm-ray.yml.j2 +0 -0
  415. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/jobs-controller.yaml.j2 +0 -0
  416. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  417. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  418. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  419. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  420. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  421. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/lambda-ray.yml.j2 +0 -0
  422. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/local-ray.yml.j2 +0 -0
  423. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/nebius-ray.yml.j2 +0 -0
  424. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/oci-ray.yml.j2 +0 -0
  425. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/paperspace-ray.yml.j2 +0 -0
  426. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/runpod-ray.yml.j2 +0 -0
  427. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/scp-ray.yml.j2 +0 -0
  428. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  429. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  430. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/vast-ray.yml.j2 +0 -0
  431. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/vsphere-ray.yml.j2 +0 -0
  432. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/templates/websocket_proxy.py +0 -0
  433. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/usage/__init__.py +0 -0
  434. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/usage/constants.py +0 -0
  435. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/usage/usage_lib.py +0 -0
  436. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/__init__.py +0 -0
  437. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/model.conf +0 -0
  438. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/permission.py +0 -0
  439. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/rbac.py +0 -0
  440. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/server.py +0 -0
  441. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/users/token_service.py +0 -0
  442. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/__init__.py +0 -0
  443. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/accelerator_registry.py +0 -0
  444. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/admin_policy_utils.py +0 -0
  445. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/annotations.py +0 -0
  446. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/atomic.py +0 -0
  447. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/aws/__init__.py +0 -0
  448. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/aws/get_default_security_group.py +0 -0
  449. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/cli_utils/__init__.py +0 -0
  450. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/cli_utils/status_utils.py +0 -0
  451. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/cluster_utils.py +0 -0
  452. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/command_runner.pyi +0 -0
  453. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/common.py +0 -0
  454. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/common_utils.py +0 -0
  455. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/config_utils.py +0 -0
  456. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/context.py +0 -0
  457. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/context_utils.py +0 -0
  458. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/control_master_utils.py +0 -0
  459. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/controller_utils.py +0 -0
  460. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/dag_utils.py +0 -0
  461. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/db_utils.py +0 -0
  462. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/env_options.py +0 -0
  463. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/infra_utils.py +0 -0
  464. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/__init__.py +0 -0
  465. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  466. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/config_map_utils.py +0 -0
  467. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/create_cluster.sh +0 -0
  468. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  469. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
  470. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  471. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  472. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  473. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  474. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  475. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  476. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  477. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  478. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  479. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  480. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes/ssh_utils.py +0 -0
  481. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/kubernetes_enums.py +0 -0
  482. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/log_utils.py +0 -0
  483. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/message_utils.py +0 -0
  484. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/registry.py +0 -0
  485. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/resource_checker.py +0 -0
  486. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/resources_utils.py +0 -0
  487. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/rich_console_utils.py +0 -0
  488. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/rich_utils.py +0 -0
  489. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/schemas.py +0 -0
  490. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/status_lib.py +0 -0
  491. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/subprocess_utils.py +0 -0
  492. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/timeline.py +0 -0
  493. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/ux_utils.py +0 -0
  494. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/utils/validator.py +0 -0
  495. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/__init__.py +0 -0
  496. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/client/__init__.py +0 -0
  497. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/client/sdk.py +0 -0
  498. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/server/__init__.py +0 -0
  499. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/server/core.py +0 -0
  500. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/server/server.py +0 -0
  501. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/utils.py +0 -0
  502. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/volumes/volume.py +0 -0
  503. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/workspaces/__init__.py +0 -0
  504. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/workspaces/core.py +0 -0
  505. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/workspaces/server.py +0 -0
  506. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/sky/workspaces/utils.py +0 -0
  507. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  508. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  509. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/skypilot_nightly.egg-info/top_level.txt +0 -0
  510. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_api.py +0 -0
  511. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_api_compatibility.py +0 -0
  512. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_cli.py +0 -0
  513. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_config.py +0 -0
  514. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_db_utils.py +0 -0
  515. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_failover.py +0 -0
  516. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_global_user_state.py +0 -0
  517. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_jobs.py +0 -0
  518. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_jobs_and_serve.py +0 -0
  519. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_list_accelerators.py +0 -0
  520. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_no_parellel.py +0 -0
  521. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_optimizer_dryruns.py +0 -0
  522. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_optimizer_random_dag.py +0 -0
  523. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_serve_autoscaler.py +0 -0
  524. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_smoke.py +0 -0
  525. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_storage.py +0 -0
  526. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/tests/test_wheels.py +0 -0
  527. {skypilot_nightly-1.0.0.dev20250713 → skypilot_nightly-1.0.0.dev20250716}/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.dev20250713
3
+ Version: 1.0.0.dev20250716
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -118,7 +118,7 @@ Requires-Dist: vastai-sdk>=0.1.12; extra == "vast"
118
118
  Provides-Extra: vsphere
119
119
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "vsphere"
120
120
  Provides-Extra: nebius
121
- Requires-Dist: nebius>=0.2.0; extra == "nebius"
121
+ Requires-Dist: nebius>=0.2.37; extra == "nebius"
122
122
  Requires-Dist: awscli>=1.27.10; extra == "nebius"
123
123
  Requires-Dist: botocore>=1.29.10; extra == "nebius"
124
124
  Requires-Dist: boto3>=1.26.1; extra == "nebius"
@@ -174,7 +174,7 @@ Requires-Dist: azure-core>=1.24.0; extra == "all"
174
174
  Requires-Dist: azure-common; extra == "all"
175
175
  Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
176
176
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
177
- Requires-Dist: nebius>=0.2.0; extra == "all"
177
+ Requires-Dist: nebius>=0.2.37; extra == "all"
178
178
  Requires-Dist: awscli>=1.27.10; extra == "all"
179
179
  Requires-Dist: botocore>=1.29.10; extra == "all"
180
180
  Requires-Dist: boto3>=1.26.1; extra == "all"
@@ -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 = '6369e0e45c8eec6beeec9b6543353f21157cb3a5'
8
+ _SKYPILOT_COMMIT_SHA = '41c25f4073c1d5024d415c63f8e7d584fbb5517a'
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.dev20250713'
38
+ __version__ = '1.0.0.dev20250716'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -89,6 +89,12 @@ def iam():
89
89
  return iam_v1
90
90
 
91
91
 
92
+ def billing():
93
+ # pylint: disable=import-outside-toplevel
94
+ from nebius.api.nebius.billing import v1alpha1 as billing_v1alpha1
95
+ return billing_v1alpha1
96
+
97
+
92
98
  def nebius_common():
93
99
  # pylint: disable=import-outside-toplevel
94
100
  from nebius.api.nebius.common import v1 as common_v1
@@ -0,0 +1,308 @@
1
+ """A script that queries Nebius API to get instance types and pricing info.
2
+
3
+ This script takes about 1 minute to finish.
4
+ """
5
+ import csv
6
+ from dataclasses import dataclass
7
+ import decimal
8
+ import json
9
+ import logging
10
+ import re
11
+ from typing import Any, Dict, List, Optional
12
+
13
+ from sky.adaptors import nebius
14
+ from sky.adaptors.nebius import billing
15
+ from sky.adaptors.nebius import compute
16
+ from sky.adaptors.nebius import iam
17
+ from sky.adaptors.nebius import nebius_common
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+ TIMEOUT = 10
22
+ PARENT_ID_TEMPLATE = 'project-{}public-images'
23
+ ACCELERATOR_MANUFACTURER = 'NVIDIA'
24
+
25
+
26
+ @dataclass
27
+ class PresetInfo:
28
+ """Represents information about a specific compute preset,
29
+ including its pricing.
30
+
31
+ Attributes:
32
+ region (str): The geographical region where the preset is available.
33
+ fullname (str): The full name of the preset, a combination of platform
34
+ and preset name.
35
+ name (str): The name of the preset.
36
+ platform_name (str): The name of the platform the preset belongs to.
37
+ gpu (int): The number of GPUs in the preset.
38
+ vcpu (int): The number of virtual CPUs in the preset.
39
+ memory_gib (int): The amount of memory in GiB in the preset.
40
+ accelerator_manufacturer (str | None): The manufacturer of the
41
+ accelerator (e.g., "NVIDIA"), or None if no accelerator.
42
+ accelerator_name (str | None): The name of the accelerator
43
+ (e.g., "H100"), or None if no accelerator.
44
+ price_hourly (decimal.Decimal): The hourly price of the preset.
45
+ """
46
+
47
+ region: str
48
+ fullname: str
49
+ name: str
50
+ platform_name: str
51
+ gpu: int
52
+ vcpu: int
53
+ memory_gib: int
54
+ accelerator_manufacturer: Optional[str]
55
+ accelerator_name: Optional[str]
56
+ price_hourly: decimal.Decimal
57
+
58
+
59
+ def _format_decimal(value: decimal.Decimal) -> str:
60
+ """Formats a decimal value to a string with at least two decimal places,
61
+ removing trailing zeros and ensuring a two-digit decimal part.
62
+
63
+ Args:
64
+ value (decimal.Decimal): The decimal value to format.
65
+
66
+ Returns:
67
+ str: The formatted string representation of the decimal.
68
+ """
69
+ formatted_value = f'{value:f}'.rstrip('0').rstrip('.')
70
+ integer_part, decimal_part = formatted_value.split(
71
+ '.') if '.' in formatted_value else (formatted_value, '')
72
+ if len(decimal_part) < 2:
73
+ decimal_part += '0' * (2 - len(decimal_part))
74
+
75
+ return f'{integer_part}.{decimal_part}'
76
+
77
+
78
+ def _estimate_platforms(platforms: List[Any], parent_id: str,
79
+ region: str) -> List[PresetInfo]:
80
+ """Collects specifications for all presets on the given platforms to form a
81
+ batch price request. It then sends the request and processes the responses
82
+ to create a list of PresetInfo objects.
83
+
84
+ Args:
85
+ platforms (List[Platform]): A List of compute platforms to estimate
86
+ prices for.
87
+ parent_id (str): The parent ID used for resource metadata
88
+ in the estimate request.
89
+ region (str): The region associated with the platforms.
90
+
91
+ Returns:
92
+ List[PresetInfo]: A list of PresetInfo objects containing details and
93
+ estimated prices for each preset.
94
+ """
95
+
96
+ calculator_service = billing().CalculatorServiceClient(nebius.sdk())
97
+ futures = []
98
+
99
+ for platform in platforms:
100
+ platform_name = platform.metadata.name
101
+
102
+ for preset in platform.spec.presets:
103
+ # Form the specification for the price request
104
+ estimate_spec = billing().ResourceSpec(
105
+ compute_instance_spec=compute().CreateInstanceRequest(
106
+ metadata=nebius_common().ResourceMetadata(
107
+ parent_id=parent_id,),
108
+ spec=compute().InstanceSpec(
109
+ resources=compute().ResourcesSpec(
110
+ platform=platform_name,
111
+ preset=preset.name,
112
+ )),
113
+ ))
114
+
115
+ price_request = billing().EstimateBatchRequest(
116
+ resource_specs=[estimate_spec])
117
+ # Start future for each preset
118
+ futures.append((
119
+ platform,
120
+ preset,
121
+ calculator_service.estimate_batch(price_request,
122
+ timeout=TIMEOUT),
123
+ ))
124
+
125
+ # wait all futures to complete and collect results
126
+ result = []
127
+ for platform, preset, future in futures:
128
+ platform_name = platform.metadata.name
129
+ result.append(
130
+ PresetInfo(
131
+ region=region,
132
+ fullname=f'{platform_name}_{preset.name}',
133
+ name=preset.name,
134
+ platform_name=platform_name,
135
+ gpu=preset.resources.gpu_count or 0,
136
+ vcpu=preset.resources.vcpu_count,
137
+ memory_gib=preset.resources.memory_gibibytes,
138
+ accelerator_manufacturer=ACCELERATOR_MANUFACTURER
139
+ if platform_name.startswith('gpu-') else '',
140
+ accelerator_name=platform_name.split('-')[1].upper()
141
+ if platform_name.startswith('gpu-') else '',
142
+ price_hourly=decimal.Decimal(
143
+ future.wait().hourly_cost.general.total.cost),
144
+ ))
145
+
146
+ return result
147
+
148
+
149
+ def _write_preset_prices(presets: List[PresetInfo], output_file: str) -> None:
150
+ """Writes the provided preset information to a CSV file.
151
+
152
+ Args:
153
+ presets (List[PresetInfo]): A list of PresetInfo objects to write.
154
+ output_file (str): The path to the output CSV file.
155
+ """
156
+ # Set up the CSV writer to output to stdout
157
+ with open(output_file, 'w', encoding='utf-8') as out:
158
+ header = [
159
+ 'InstanceType',
160
+ 'AcceleratorName',
161
+ 'AcceleratorCount',
162
+ 'vCPUs',
163
+ 'MemoryGiB',
164
+ 'Price',
165
+ 'Region',
166
+ 'GpuInfo',
167
+ 'SpotPrice',
168
+ ]
169
+ writer = csv.DictWriter(out, fieldnames=header)
170
+ writer.writeheader()
171
+
172
+ for preset in sorted(presets,
173
+ key=lambda x:
174
+ (bool(x.gpu), x.region, x.platform_name, x.vcpu)):
175
+ gpu_info = ''
176
+ if preset.gpu > 0:
177
+ gpu_info_dict = {
178
+ 'Gpus': [{
179
+ 'Name': preset.accelerator_name,
180
+ 'Manufacturer': preset.accelerator_manufacturer,
181
+ 'Count': preset.gpu,
182
+ 'MemoryInfo': {
183
+ 'SizeInMiB': preset.memory_gib * 1024 // preset.gpu
184
+ },
185
+ }],
186
+ 'TotalGpuMemoryInMiB': preset.memory_gib * 1024,
187
+ }
188
+ gpu_info = json.dumps(gpu_info_dict).replace('"', '\'')
189
+
190
+ writer.writerow({
191
+ 'InstanceType': preset.fullname,
192
+ 'AcceleratorName': preset.accelerator_name,
193
+ 'AcceleratorCount': preset.gpu,
194
+ 'vCPUs': preset.vcpu,
195
+ 'MemoryGiB': preset.memory_gib,
196
+ 'Price': _format_decimal(preset.price_hourly),
197
+ 'Region': preset.region,
198
+ 'GpuInfo': gpu_info,
199
+ 'SpotPrice': '',
200
+ })
201
+
202
+
203
+ def _fetch_platforms_for_project(project_id: str) -> List[Any]:
204
+ """Fetches all available compute platforms for a given project.
205
+
206
+ Args:
207
+ project_id (str): The ID of the project to fetch platforms from.
208
+
209
+ Returns:
210
+ List[ComputePlatform]: A list of ComputePlatform objects available
211
+ in the project.
212
+ """
213
+ platform_service = compute().PlatformServiceClient(nebius.sdk())
214
+
215
+ platform_request = compute().ListPlatformsRequest(page_size=999,
216
+ parent_id=project_id)
217
+ platform_response = platform_service.list(platform_request,
218
+ timeout=TIMEOUT).wait()
219
+
220
+ return platform_response.items
221
+
222
+
223
+ def _get_regions_map() -> Dict[str, str]:
224
+ """Maps region codes to their full names by iterating through tenants and
225
+ projects.
226
+
227
+ Returns:
228
+ dict[str, str]: A dictionary where keys are region codes (e.g., "e00")
229
+ and values are full region names (e.g., "eu-north1").
230
+ """
231
+ result = {}
232
+ response = iam().TenantServiceClient(nebius.sdk()).list(
233
+ iam().ListTenantsRequest(), timeout=TIMEOUT).wait()
234
+
235
+ for tenant in response.items:
236
+ projects = (iam().ProjectServiceClient(nebius.sdk()).list(
237
+ iam().ListProjectsRequest(parent_id=tenant.metadata.id),
238
+ timeout=TIMEOUT).wait())
239
+
240
+ for project in projects.items:
241
+ match = re.match(r'^project-([a-z0-9]{3})', project.metadata.id)
242
+ if match is None:
243
+ logger.error('Could not parse project id %s',
244
+ project.metadata.id)
245
+ continue
246
+ result[match.group(1)] = project.status.region
247
+
248
+ return result
249
+
250
+
251
+ def _get_all_platform_prices() -> List[PresetInfo]:
252
+ """Orchestrates fetching specifications and prices for all platforms across
253
+ all regions.
254
+
255
+ This function first retrieves a map of region codes to full names, then
256
+ iterates through each region, fetches available platforms for
257
+ the corresponding project ID, and finally estimates prices for all presets
258
+ on those platforms.
259
+
260
+ Returns:
261
+ List[PresetInfo]: A consolidated list of PresetInfo objects for all
262
+ platforms and presets across all regions.
263
+ """
264
+
265
+ # Get regions codes to names
266
+ regions_map = _get_regions_map()
267
+
268
+ presets = []
269
+
270
+ for region_code in sorted(regions_map.keys()):
271
+ project_id = PARENT_ID_TEMPLATE.format(region_code)
272
+ region = regions_map[region_code]
273
+ logger.info('Processing region: %s (project: %s)...', region,
274
+ project_id)
275
+
276
+ platforms = _fetch_platforms_for_project(project_id)
277
+ if not platforms:
278
+ logger.warning('No platforms found in region %s', region)
279
+ continue
280
+
281
+ presets.extend(
282
+ _estimate_platforms(platforms=platforms,
283
+ parent_id=project_id,
284
+ region=region))
285
+
286
+ return presets
287
+
288
+
289
+ def main() -> None:
290
+ """Main function to fetch and write Nebius platform prices to a CSV file.
291
+
292
+ It initializes the SDK, fetches all platform prices, and then writes them
293
+ to the specified CSV file.
294
+ """
295
+
296
+ output_file = 'nebius/vms.csv'
297
+
298
+ # Fetch presets and estimate
299
+ presets = _get_all_platform_prices()
300
+
301
+ # Write CSV
302
+ _write_preset_prices(presets, output_file)
303
+
304
+ logger.info('Done!')
305
+
306
+
307
+ if __name__ == '__main__':
308
+ main()
@@ -151,13 +151,17 @@ def _get_cluster_records_and_set_ssh_config(
151
151
  if isinstance(handle.launched_resources.cloud, clouds.Kubernetes):
152
152
  # Replace the proxy command to proxy through the SkyPilot API
153
153
  # server with websocket.
154
- key_path = (cluster_utils.SSHConfigHelper.generate_local_key_file(
155
- handle.cluster_name, credentials))
154
+ escaped_key_path = shlex.quote(
155
+ (cluster_utils.SSHConfigHelper.generate_local_key_file(
156
+ handle.cluster_name, credentials)))
157
+ escaped_executable_path = shlex.quote(sys.executable)
158
+ escaped_websocket_proxy_path = shlex.quote(
159
+ f'{sky.__root_dir__}/templates/websocket_proxy.py')
156
160
  # Instead of directly use websocket_proxy.py, we add an
157
161
  # additional proxy, so that ssh can use the head pod in the
158
162
  # cluster to jump to worker pods.
159
163
  proxy_command = (
160
- f'ssh -tt -i {key_path} '
164
+ f'ssh -tt -i {escaped_key_path} '
161
165
  '-o StrictHostKeyChecking=no '
162
166
  '-o UserKnownHostsFile=/dev/null '
163
167
  '-o IdentitiesOnly=yes '
@@ -167,10 +171,10 @@ def _get_cluster_records_and_set_ssh_config(
167
171
  # TODO(zhwu): write the template to a temp file, don't use
168
172
  # the one in skypilot repo, to avoid changing the file when
169
173
  # updating skypilot.
170
- f'\'{sys.executable} {sky.__root_dir__}/templates/'
171
- f'websocket_proxy.py '
174
+ f'\"{escaped_executable_path} '
175
+ f'{escaped_websocket_proxy_path} '
172
176
  f'{server_common.get_server_url()} '
173
- f'{handle.cluster_name}\'')
177
+ f'{handle.cluster_name}\"')
174
178
  credentials['ssh_proxy_command'] = proxy_command
175
179
 
176
180
  cluster_utils.SSHConfigHelper.add_cluster(
@@ -55,6 +55,8 @@ class Hyperbolic(clouds.Cloud):
55
55
  ('Auto-stop not supported.'),
56
56
  clouds.CloudImplementationFeatures.AUTODOWN:
57
57
  ('Auto-down not supported.'),
58
+ clouds.CloudImplementationFeatures.CUSTOM_MULTI_NETWORK:
59
+ ('Customized multiple network interfaces not supported.'),
58
60
  }
59
61
 
60
62
  PROVISIONER_VERSION = clouds.ProvisionerVersion.SKYPILOT
@@ -219,10 +219,12 @@ class Nebius(clouds.Cloud):
219
219
  acc_dict)
220
220
  platform, _ = resources.instance_type.split('_')
221
221
 
222
- if platform in ('cpu-d3', 'cpu-e2'):
223
- image_family = 'ubuntu22.04-driverless'
224
- elif platform in ('gpu-h100-sxm', 'gpu-h200-sxm', 'gpu-l40s-a'):
225
- image_family = 'ubuntu22.04-cuda12'
222
+ # Selecting image_family by platform
223
+ # https://docs.nebius.com/compute/storage/boot-disk-images
224
+ if platform.startswith('cpu'):
225
+ image_family = 'ubuntu24.04-driverless'
226
+ elif platform.startswith('gpu'):
227
+ image_family = 'ubuntu24.04-cuda12'
226
228
  else:
227
229
  raise RuntimeError('Unsupported instance type for Nebius cloud:'
228
230
  f' {resources.instance_type}')
@@ -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/a713705ccc8fe059.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/a713705ccc8fe059.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-4d50ce5087a63a95.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-49ff6c04332cc621.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/JnRZeU80MTbNRfWV2kd8w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/JnRZeU80MTbNRfWV2kd8w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"JnRZeU80MTbNRfWV2kd8w","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"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/219887b94512388c.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/219887b94512388c.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-3fad5d4a0541a02d.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-771a40cde532309b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/gVXjeFhvtWXyOsx9xYNvM/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/gVXjeFhvtWXyOsx9xYNvM/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"gVXjeFhvtWXyOsx9xYNvM","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1,11 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1141],{9333:function(e,s,r){r.d(s,{Z:function(){return a}});/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let a=(0,r(998).Z)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]])},8418:function(e,s,r){r.d(s,{Z:function(){return a}});/**
7
+ * @license lucide-react v0.407.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */let a=(0,r(998).Z)("Trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]])},1812:function(e,s,r){r.d(s,{X:function(){return n}});var a=r(5893),l=r(7294);let t=e=>{if(!(null==e?void 0:e.message))return"An unexpected error occurred.";let s=e.message;return s.includes("failed:")&&(s=s.split("failed:")[1].trim()),s},n=e=>{let{error:s,title:r="Error",onDismiss:n}=e,[c,i]=(0,l.useState)(!1);if((0,l.useEffect)(()=>{s&&i(!1)},[s]),!s||c)return null;let o="string"==typeof s?s:t(s);return(0,a.jsx)("div",{className:"bg-red-50 border border-red-200 rounded-md p-3 mb-4",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("div",{className:"flex-shrink-0",children:(0,a.jsx)("svg",{className:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})})}),(0,a.jsx)("div",{className:"ml-3",children:(0,a.jsxs)("div",{className:"text-sm text-red-800",children:[(0,a.jsxs)("strong",{children:[r,":"]})," ",o]})})]}),(0,a.jsx)("button",{onClick:()=>{i(!0),n&&n()},className:"flex-shrink-0 ml-4 text-red-400 hover:text-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 focus:ring-offset-red-50 rounded","aria-label":"Dismiss error",children:(0,a.jsx)("svg",{className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]})})}},9123:function(e,s,r){r.d(s,{g:function(){return n}});var a=r(5893),l=r(7294),t=r(2350);let n=l.forwardRef((e,s)=>{let{className:r,...l}=e;return(0,a.jsx)("textarea",{className:(0,t.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",r),ref:s,...l})});n.displayName="Textarea"},1141:function(e,s,r){r.r(s),r.d(s,{WorkspaceEditor:function(){return R}});var a=r(5893),l=r(7294),t=r(1163),n=r(7324),c=r(3266),i=r(8969);r(9470);var o=r(1664),d=r.n(o),u=r(9008),x=r.n(u),m=r(7673),h=r(803),f=r(9123),g=r(5739),p=r(282),b=r(6021),j=r(3626),y=r(8418),N=r(9333),v=r(326);let w=e=>{let{className:s="",variant:r="default",children:l,...t}=e;return(0,a.jsx)("div",{role:"alert",className:"".concat("relative w-full rounded-lg border p-4 flex items-start space-x-2"," ").concat({default:"bg-blue-50 border-blue-200 text-blue-800",destructive:"bg-red-50 border-red-200 text-red-800"}[r]," ").concat(s),...t,children:l})},k=e=>{let{className:s="",children:r,...l}=e;return(0,a.jsx)("div",{className:"text-sm leading-relaxed ".concat(s),...l,children:r})};var C=r(3850),L=r(1812),S=r(938),E=r(1272),Z=r(3225),D=r(3081);let M=e=>{let{message:s}=e;return s?(0,a.jsxs)(w,{className:"border-green-200 bg-green-50",children:[(0,a.jsx)(p.Z,{className:"h-4 w-4 text-green-600"}),(0,a.jsx)(k,{className:"text-green-800",children:s})]}):null},A=e=>{let{workspaceName:s,config:r,enabledClouds:l=[]}=e;if(!r)return null;let t="default"===s,n=0===Object.keys(r).length;if(t&&n)return(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"Workspace 'default' can use all accessible infrastructure."});let c=[],i=[],o=[],d=new Set(l.map(e=>e.toLowerCase()));Object.entries(r).forEach(e=>{let[s,r]=e;if("private"===s||"allowed_users"===s)return;let l=Z.Z2[s.toLowerCase()]||s.toUpperCase(),t=d.has(null==l?void 0:l.toLowerCase());if((null==r?void 0:r.disabled)===!0)i.push(l);else if(r&&Object.keys(r).length>0){let e="";"gcp"===s.toLowerCase()&&r.project_id?e=" (Project ID: ".concat(r.project_id,")"):"aws"===s.toLowerCase()&&r.region&&(e=" (Region: ".concat(r.region,")")),t?c.push((0,a.jsxs)("span",{className:"block",children:[l,e," is enabled."]},"".concat(s,"-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l,e," is configured but not currently available."]},"".concat(s,"-configured-not-enabled")))}else t?c.push((0,a.jsxs)("span",{className:"block",children:[l," is enabled (using default settings)."]},"".concat(s,"-default-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l," is configured but not currently available."]},"".concat(s,"-default-not-enabled")))});let u=[];if(i.length>0){let e=i.join(" and ");u.push((0,a.jsxs)("span",{className:"block",children:[e," ",1===i.length?"is":"are"," explicitly disabled."]},"disabled-clouds"))}return(u.push(...c),u.push(...o),u.length>0)?(0,a.jsx)("div",{className:"text-sm text-gray-700 mb-3 p-3 bg-sky-50 rounded border border-sky-200",children:u}):!t&&n?(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"This workspace has no specific cloud resource configurations and can use all accessible infrastructure."}):null},W=e=>{let{isPrivate:s}=e;return s?(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-700 border border-gray-300",children:"Private"}):(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-700 border border-green-300",children:"Public"})},P=e=>{let{workspaceConfig:s,allUsers:r}=e;if(!s.private)return null;let l=s.allowed_users||[],t=(r||[]).filter(e=>"admin"===e.role).map(e=>e.username),n=[...new Set([...l,...t])];return 0===n.length?(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Allowed Users (0)"}),(0,a.jsx)("div",{className:"text-amber-600 text-xs italic p-2 bg-amber-50 rounded border border-amber-200",children:"No users configured (workspace may be inaccessible)"})]}):(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsxs)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:["Allowed Users (",n.length,")"]}),(0,a.jsx)("div",{className:"space-y-1 max-h-48 overflow-y-auto border border-gray-200 rounded",children:n.map(e=>{let s=t.includes(e);return(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs p-2 bg-gray-50 hover:bg-gray-100 border-b border-gray-100 last:border-b-0",children:[(0,a.jsx)("span",{className:"font-medium text-gray-700",children:e}),s?(0,a.jsxs)("span",{className:"inline-flex items-center text-blue-600",children:[(0,a.jsx)(C.r7,{className:"w-3 h-3 mr-1"}),"Admin"]}):(0,a.jsxs)("span",{className:"inline-flex items-center text-gray-600",children:[(0,a.jsx)(b.Z,{className:"w-3 h-3 mr-1"}),"User"]})]},e)})})]})};function R(e){let{workspaceName:s,isNewWorkspace:r=!1}=e,o=(0,t.useRouter)(),[u,p]=(0,l.useState)({}),[b,w]=(0,l.useState)({}),[k,Z]=(0,l.useState)(""),[R,_]=(0,l.useState)(!0),[z,O]=(0,l.useState)(!1),[T,U]=(0,l.useState)(!1),[Y,J]=(0,l.useState)(null),[I,V]=(0,l.useState)(null),[F,H]=(0,l.useState)(null),[X,B]=(0,l.useState)([]),[G,q]=(0,l.useState)({showDialog:!1,deleting:!1,error:null}),[K,Q]=(0,l.useState)({totalClusterCount:0,runningClusterCount:0,managedJobsCount:0,clouds:[]}),[$,ee]=(0,l.useState)(!1),es=(0,l.useCallback)(async()=>{_(!0),J(null);try{let e;let[r,a]=await Promise.all([(0,n.fX)(),(0,D.R)()]),l=r[s]||{};p(l),w(l),B(a||[]),e=0===Object.keys(l).length?"".concat(s,":\n # Empty workspace configuration - uses all accessible infrastructure\n"):E.ZP.dump({[s]:l},{indent:2,lineWidth:-1,noRefs:!0,skipInvalid:!0,flowLevel:-1}),Z(e)}catch(e){console.error("Error fetching workspace config:",e),J(e)}finally{_(!1)}},[s]),er=(0,l.useCallback)(async()=>{if(!r){ee(!0);try{let[e,r,a]=await Promise.all([(0,c.getClusters)(),(0,i.getManagedJobs)(),(0,n.yz)(s,!0)]),l=e.filter(e=>(e.workspace||"default")===s),t=l.filter(e=>"RUNNING"===e.status||"LAUNCHING"===e.status),o={};e.forEach(e=>{o[e.cluster]=e.workspace||"default"});let d=r.jobs||[],u=new Set(S.statusGroups.active),x=0;d.forEach(e=>{let r=e.cluster_name||e.resources&&e.resources.cluster_name;r&&o[r]===s&&u.has(e.status)&&x++}),Q({totalClusterCount:l.length,runningClusterCount:t.length,managedJobsCount:x,clouds:Array.isArray(a)?a:[]})}catch(e){console.error("Failed to fetch workspace stats:",e)}finally{ee(!1)}}},[s,r]);(0,l.useEffect)(()=>{r?(_(!1),Z("".concat(s,":\n # New workspace configuration\n # Leave empty to use all accessible infrastructure\n"))):(es(),er())},[s,r,es,er]),(0,l.useEffect)(()=>{U(JSON.stringify(u)!==JSON.stringify(b))},[u,b]);let ea=e=>{Z(e),H(null);try{let r=E.ZP.load(e)||{},a=Object.keys(r);if(0===a.length)p({});else if(1===a.length){let e=a[0];if(e!==s){H('Workspace name cannot be changed. Expected "'.concat(s,'" but found "').concat(e,'".'));return}let l=r[s]||{};p(l)}else H("Configuration must contain only one workspace. Found: ".concat(a.join(", ")))}catch(e){H("Invalid YAML: ".concat(e.message))}},el=async()=>{O(!0),J(null),V(null);try{if(F)throw Error("Please fix YAML errors before saving");let e=E.ZP.load(k)||{},a=Object.keys(e);if(a.length>0&&a[0]!==s)throw Error('Workspace name cannot be changed. Expected "'.concat(s,'".'));r?(await (0,n.MB)(s,u),V("Workspace created successfully!"),setTimeout(()=>{o.push("/workspaces/".concat(s))},1500)):(await (0,n.eA)(s,u),V("Workspace updated successfully!"),w(u),er())}catch(e){console.error("Error saving workspace:",e),J(e)}finally{O(!1)}},et=async()=>{q(e=>({...e,deleting:!0,error:null}));try{await (0,n.zl)(s),V("Workspace deleted successfully!"),setTimeout(()=>{o.push("/workspaces")},1500)}catch(e){console.error("Error deleting workspace:",e),q(s=>({...s,deleting:!1,error:e}))}},en=()=>{q({showDialog:!1,deleting:!1,error:null})},ec=async()=>{await Promise.all([es(),er()])};if(!o.isReady)return(0,a.jsx)("div",{children:"Loading..."});let ei=r?"Create New Workspace | SkyPilot Dashboard":"Workspace: ".concat(s," | SkyPilot Dashboard");return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x(),{children:(0,a.jsx)("title",{children:ei})}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,a.jsxs)("div",{className:"text-base flex items-center",children:[(0,a.jsx)(d(),{href:"/workspaces",className:"text-sky-blue hover:underline",children:"Workspaces"}),(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,a.jsx)(d(),{href:r?"/workspace/new":"/workspaces/".concat(s),className:"text-sky-blue hover:underline",children:r?"New Workspace":s}),T&&(0,a.jsx)("span",{className:"ml-3 px-2 py-1 bg-yellow-100 text-yellow-800 text-xs rounded",children:"Unsaved changes"})]}),(0,a.jsxs)("div",{className:"text-sm flex items-center",children:[(R||z||$)&&(0,a.jsxs)("div",{className:"flex items-center mr-4",children:[(0,a.jsx)(g.Z,{size:15,className:"mt-0"}),(0,a.jsx)("span",{className:"ml-2 text-gray-500",children:z?"Saving...":"Loading..."})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[!r&&(0,a.jsxs)("button",{onClick:ec,disabled:R||z||$,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,a.jsx)(j.Z,{className:"w-4 h-4 mr-1.5"}),"Refresh"]}),!r&&"default"!==s&&(0,a.jsxs)("button",{onClick:()=>q({...G,showDialog:!0}),disabled:G.deleting||z,className:"text-red-600 hover:text-red-700 font-medium inline-flex items-center",children:[(0,a.jsx)(y.Z,{className:"w-4 h-4 mr-1.5"}),"Delete"]})]})]})]}),R?(0,a.jsxs)("div",{className:"flex justify-center items-center py-12",children:[(0,a.jsx)(g.Z,{size:24,className:"mr-2"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading workspace configuration..."})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(L.X,{error:Y,title:"Error",onDismiss:()=>J(null)}),(0,a.jsx)(M,{message:I}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[!r&&(0,a.jsx)("div",{className:"lg:col-span-1",children:(0,a.jsxs)(m.Zb,{className:"h-full",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"font-semibold",children:"Workspace:"})," ",s]}),(0,a.jsx)(W,{isPrivate:!0===b.private})]})})}),(0,a.jsxs)(m.aY,{className:"text-sm pb-2 flex-1",children:[(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.QT,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Clusters (Running / Total)"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":"".concat(K.runningClusterCount," / ").concat(K.totalClusterCount)})]}),(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between border-t border-gray-100",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.Vp,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Managed Jobs"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":K.managedJobsCount})]})]}),(0,a.jsxs)("div",{className:"px-6 pb-6 text-sm pt-3",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Enabled Infra"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:$?(0,a.jsx)("span",{className:"text-gray-500",children:"Loading..."}):K.clouds.length>0?K.clouds.map(e=>(0,a.jsxs)("div",{className:"flex items-center text-gray-700",children:[(0,a.jsx)(C.Ye,{className:"w-3.5 h-3.5 mr-1.5 text-green-500"}),(0,a.jsx)("span",{children:e})]},e)):(0,a.jsx)("span",{className:"text-gray-500 italic",children:"No enabled infrastructure"})}),(0,a.jsx)("div",{className:"mt-4",children:(0,a.jsx)(A,{workspaceName:s,config:b,enabledClouds:K.clouds})}),(0,a.jsx)(P,{workspaceConfig:b,allUsers:X})]})]})}),(0,a.jsx)("div",{className:r?"lg:col-span-3":"lg:col-span-2",children:(0,a.jsxs)(m.Zb,{className:"h-full flex flex-col",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:r?"New Workspace YAML":"Edit Workspace YAML"})}),(0,a.jsx)(m.aY,{className:"flex-1 flex flex-col",children:(0,a.jsxs)("div",{className:"space-y-4 flex-1 flex flex-col",children:[F&&(0,a.jsx)(L.X,{error:F,onDismiss:()=>H(null)}),(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-600 mb-3",children:["Configure infra-specific settings for this workspace. Leave empty to use all accessible infrastructure. Refer to"," ",(0,a.jsx)("a",{href:"https://docs.skypilot.co/en/latest/admin/workspaces.html#configuration",target:"_blank",rel:"noopener noreferrer",className:"text-blue-600",children:"SkyPilot Docs"})," ","for more details."]}),(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-2",children:"Example configuration:"}),(0,a.jsx)("div",{className:"p-3 bg-gray-50 border rounded-lg",children:(0,a.jsx)("pre",{className:"text-xs font-mono text-gray-600 whitespace-pre-wrap",children:"".concat(s||"my-workspace",":\n private: true\n allowed_users:\n - user1@mydomain.com\n - user2@mydomain.com\n gcp:\n project_id: xxx\n disabled: false\n kubernetes:\n allowed_contexts:\n - context-1")})})]}),(0,a.jsx)(f.g,{value:k,onChange:e=>ea(e.target.value),className:"font-mono text-sm flex-1 resize-none",style:{minHeight:"350px"},spellCheck:!1,placeholder:"# Enter workspace configuration in YAML format"}),(0,a.jsx)("div",{className:"flex justify-end space-x-3 pt-3 border-gray-200",children:(0,a.jsxs)(h.z,{onClick:el,disabled:z||F||R,className:"inline-flex items-center bg-sky-600 hover:bg-sky-700 text-white",children:[(0,a.jsx)(N.Z,{className:"w-4 h-4 mr-1.5"}),z?"Applying...":"Apply"]})})]})]})})]})})]})]}),(0,a.jsx)(v.Vq,{open:G.showDialog,onOpenChange:en,children:(0,a.jsxs)(v.cZ,{className:"sm:max-w-md",children:[(0,a.jsxs)(v.fK,{className:"",children:[(0,a.jsx)(v.$N,{children:"Delete Workspace"}),(0,a.jsxs)(v.Be,{children:['Are you sure you want to delete workspace "',s,'"? This action cannot be undone.']})]}),G.error&&(0,a.jsx)(L.X,{error:G.error,title:"Deletion Failed",onDismiss:()=>q(e=>({...e,error:null}))}),(0,a.jsxs)(v.cN,{className:"",children:[(0,a.jsx)(h.z,{variant:"outline",onClick:en,disabled:G.deleting,children:"Cancel"}),(0,a.jsx)(h.z,{variant:"destructive",onClick:et,disabled:G.deleting,children:G.deleting?"Deleting...":"Delete"})]})]})})]})]})}}}]);
@@ -0,0 +1,60 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1746,430,5491],{8671:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let r=(0,n(998).Z)("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},6826:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
7
+ * @license lucide-react v0.407.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */let r=(0,n(998).Z)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},3685:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
12
+ * @license lucide-react v0.407.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */let r=(0,n(998).Z)("EyeOff",[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24",key:"1jxqfv"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68",key:"9wicm4"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61",key:"1jreej"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]])},6741:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
17
+ * @license lucide-react v0.407.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */let r=(0,n(998).Z)("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},3936:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
22
+ * @license lucide-react v0.407.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */let r=(0,n(998).Z)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]])},5274:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
27
+ * @license lucide-react v0.407.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */let r=(0,n(998).Z)("Pen",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]])},1260:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
32
+ * @license lucide-react v0.407.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */let r=(0,n(998).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},3626:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
37
+ * @license lucide-react v0.407.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */let r=(0,n(998).Z)("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]])},7603:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
42
+ * @license lucide-react v0.407.0 - ISC
43
+ *
44
+ * This source code is licensed under the ISC license.
45
+ * See the LICENSE file in the root directory of this source tree.
46
+ */let r=(0,n(998).Z)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},1109:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
47
+ * @license lucide-react v0.407.0 - ISC
48
+ *
49
+ * This source code is licensed under the ISC license.
50
+ * See the LICENSE file in the root directory of this source tree.
51
+ */let r=(0,n(998).Z)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]])},3767:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});/**
52
+ * @license lucide-react v0.407.0 - ISC
53
+ *
54
+ * This source code is licensed under the ISC license.
55
+ * See the LICENSE file in the root directory of this source tree.
56
+ */let r=(0,n(998).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},1163:function(e,t,n){e.exports=n(6036)},6327:function(e,t,n){"use strict";n.d(t,{x8:function(){return ea},VY:function(){return eo},dk:function(){return eu},aV:function(){return er},h_:function(){return en},fC:function(){return ee},Dx:function(){return ei},xz:function(){return et}});var r=n(7294),o=n(6206),i=n(8771),u=n(5360),a=n(1276),l=n(7342),s=n(6063),c=n(5420),d=n(2651),f=n(9981),p=e=>{let t,n;let{present:o,children:u}=e,a=function(e){var t,n;let[o,i]=r.useState(),u=r.useRef(null),a=r.useRef(e),l=r.useRef("none"),[s,c]=(t=e?"mounted":"unmounted",n={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}},r.useReducer((e,t)=>n[e][t]??e,t));return r.useEffect(()=>{let e=y(u.current);l.current="mounted"===s?e:"none"},[s]),(0,f.b)(()=>{let t=u.current,n=a.current;if(n!==e){let r=l.current,o=y(t);e?c("MOUNT"):"none"===o||t?.display==="none"?c("UNMOUNT"):n&&r!==o?c("ANIMATION_OUT"):c("UNMOUNT"),a.current=e}},[e,c]),(0,f.b)(()=>{if(o){let e;let t=o.ownerDocument.defaultView??window,n=n=>{let r=y(u.current).includes(n.animationName);if(n.target===o&&r&&(c("ANIMATION_END"),!a.current)){let n=o.style.animationFillMode;o.style.animationFillMode="forwards",e=t.setTimeout(()=>{"forwards"===o.style.animationFillMode&&(o.style.animationFillMode=n)})}},r=e=>{e.target===o&&(l.current=y(u.current))};return o.addEventListener("animationstart",r),o.addEventListener("animationcancel",n),o.addEventListener("animationend",n),()=>{t.clearTimeout(e),o.removeEventListener("animationstart",r),o.removeEventListener("animationcancel",n),o.removeEventListener("animationend",n)}}c("ANIMATION_END")},[o,c]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:r.useCallback(e=>{u.current=e?getComputedStyle(e):null,i(e)},[])}}(o),l="function"==typeof u?u({present:a.isPresent}):r.Children.only(u),s=(0,i.e)(a.ref,(t=Object.getOwnPropertyDescriptor(l.props,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning?l.ref:(t=Object.getOwnPropertyDescriptor(l,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning?l.props.ref:l.props.ref||l.ref);return"function"==typeof u||a.isPresent?r.cloneElement(l,{ref:s}):null};function y(e){return e?.animationName||"none"}p.displayName="Presence";var m=n(5320),v=n(7552),g=n(6223),h=n(3541),x=n(8426),k=n(5893),M="Dialog",[N,D]=(0,u.b)(M),[j,w]=N(M),O=e=>{let{__scopeDialog:t,children:n,open:o,defaultOpen:i,onOpenChange:u,modal:s=!0}=e,c=r.useRef(null),d=r.useRef(null),[f,p]=(0,l.T)({prop:o,defaultProp:i??!1,onChange:u,caller:M});return(0,k.jsx)(j,{scope:t,triggerRef:c,contentRef:d,contentId:(0,a.M)(),titleId:(0,a.M)(),descriptionId:(0,a.M)(),open:f,onOpenChange:p,onOpenToggle:r.useCallback(()=>p(e=>!e),[p]),modal:s,children:n})};O.displayName=M;var b="DialogTrigger",R=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,u=w(b,n),a=(0,i.e)(t,u.triggerRef);return(0,k.jsx)(m.WV.button,{type:"button","aria-haspopup":"dialog","aria-expanded":u.open,"aria-controls":u.contentId,"data-state":K(u.open),...r,ref:a,onClick:(0,o.M)(e.onClick,u.onOpenToggle)})});R.displayName=b;var I="DialogPortal",[C,E]=N(I,{forceMount:void 0}),Z=e=>{let{__scopeDialog:t,forceMount:n,children:o,container:i}=e,u=w(I,t);return(0,k.jsx)(C,{scope:t,forceMount:n,children:r.Children.map(o,e=>(0,k.jsx)(p,{present:n||u.open,children:(0,k.jsx)(d.h,{asChild:!0,container:i,children:e})}))})};Z.displayName=I;var A="DialogOverlay",T=r.forwardRef((e,t)=>{let n=E(A,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=w(A,e.__scopeDialog);return i.modal?(0,k.jsx)(p,{present:r||i.open,children:(0,k.jsx)(F,{...o,ref:t})}):null});T.displayName=A;var _=(0,x.Z8)("DialogOverlay.RemoveScroll"),F=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=w(A,n);return(0,k.jsx)(g.Z,{as:_,allowPinchZoom:!0,shards:[o.contentRef],children:(0,k.jsx)(m.WV.div,{"data-state":K(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),P="DialogContent",V=r.forwardRef((e,t)=>{let n=E(P,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=w(P,e.__scopeDialog);return(0,k.jsx)(p,{present:r||i.open,children:i.modal?(0,k.jsx)(W,{...o,ref:t}):(0,k.jsx)(U,{...o,ref:t})})});V.displayName=P;var W=r.forwardRef((e,t)=>{let n=w(P,e.__scopeDialog),u=r.useRef(null),a=(0,i.e)(t,n.contentRef,u);return r.useEffect(()=>{let e=u.current;if(e)return(0,h.Ry)(e)},[]),(0,k.jsx)(L,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,o.M)(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:(0,o.M)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=0===t.button&&!0===t.ctrlKey;(2===t.button||n)&&e.preventDefault()}),onFocusOutside:(0,o.M)(e.onFocusOutside,e=>e.preventDefault())})}),U=r.forwardRef((e,t)=>{let n=w(P,e.__scopeDialog),o=r.useRef(!1),i=r.useRef(!1);return(0,k.jsx)(L,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||n.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"!==t.detail.originalEvent.type||(i.current=!0));let r=t.target;n.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})}),L=r.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:o,onOpenAutoFocus:u,onCloseAutoFocus:a,...l}=e,d=w(P,n),f=r.useRef(null),p=(0,i.e)(t,f);return(0,v.EW)(),(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(c.M,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:u,onUnmountAutoFocus:a,children:(0,k.jsx)(s.XB,{role:"dialog",id:d.contentId,"aria-describedby":d.descriptionId,"aria-labelledby":d.titleId,"data-state":K(d.open),...l,ref:p,onDismiss:()=>d.onOpenChange(!1)})}),(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(J,{titleId:d.titleId}),(0,k.jsx)(Q,{contentRef:f,descriptionId:d.descriptionId})]})]})}),S="DialogTitle",z=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=w(S,n);return(0,k.jsx)(m.WV.h2,{id:o.titleId,...r,ref:t})});z.displayName=S;var $="DialogDescription",q=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,o=w($,n);return(0,k.jsx)(m.WV.p,{id:o.descriptionId,...r,ref:t})});q.displayName=$;var H="DialogClose",B=r.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=w(H,n);return(0,k.jsx)(m.WV.button,{type:"button",...r,ref:t,onClick:(0,o.M)(e.onClick,()=>i.onOpenChange(!1))})});function K(e){return e?"open":"closed"}B.displayName=H;var X="DialogTitleWarning",[Y,G]=(0,u.k)(X,{contentName:P,titleName:S,docsSlug:"dialog"}),J=({titleId:e})=>{let t=G(X),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
57
+
58
+ If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
59
+
60
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return r.useEffect(()=>{e&&!document.getElementById(e)&&console.error(n)},[n,e]),null},Q=({contentRef:e,descriptionId:t})=>{let n=G("DialogDescriptionWarning"),o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${n.contentName}}.`;return r.useEffect(()=>{let n=e.current?.getAttribute("aria-describedby");t&&n&&!document.getElementById(t)&&console.warn(o)},[o,e,t]),null},ee=O,et=R,en=Z,er=T,eo=V,ei=z,eu=q,ea=B},2003:function(e,t,n){"use strict";n.d(t,{j:function(){return u}});var r=n(512);let o=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,i=r.W,u=(e,t)=>n=>{var r;if((null==t?void 0:t.variants)==null)return i(e,null==n?void 0:n.class,null==n?void 0:n.className);let{variants:u,defaultVariants:a}=t,l=Object.keys(u).map(e=>{let t=null==n?void 0:n[e],r=null==a?void 0:a[e];if(null===t)return null;let i=o(t)||o(r);return u[e][i]}),s=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return void 0===r||(e[n]=r),e},{});return i(e,l,null==t?void 0:null===(r=t.compoundVariants)||void 0===r?void 0:r.reduce((e,t)=>{let{class:n,className:r,...o}=t;return Object.entries(o).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...a,...s}[t]):({...a,...s})[t]===n})?[...e,n,r]:e},[]),null==n?void 0:n.class,null==n?void 0:n.className)}}}]);
@@ -0,0 +1,6 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1871,430],{9037:function(e,s,t){"use strict";t.r(s),t.d(s,{ClusterTable:function(){return _},Clusters:function(){return O},Status2Actions:function(){return z},enabledActions:function(){return V},handleVSCodeConnection:function(){return H}});var r=t(5893),l=t(7294),a=t(1163),n=t(5739),c=t(6989),i=t(1664),o=t.n(i),u=t(803),d=t(7673),h=t(8764),x=t(3266),m=t(7324),p=t(3081),f=t(4545),j=t(3626),v=t(998);/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let g=(0,v.Z)("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]),b=(0,v.Z)("SquareCode",[["path",{d:"M10 9.5 8 12l2 2.5",key:"3mjy60"}],["path",{d:"m14 9.5 2 2.5-2 2.5",key:"1bir2l"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);t(9470);var w=t(9284),y=t(9307),k=t(3001),N=t(8950),C=t(6378),S=t(6856);t(1272);var L=t(546);let M=[{label:"Status",value:"status"},{label:"Cluster",value:"cluster"},{label:"User",value:"user"},{label:"Workspace",value:"workspace"},{label:"Infra",value:"infra"}],I=(e,s)=>{let t="",r="";return e>=0&&(t=e+"m",r=" "),s&&(t+="".concat(r,"(down)")),""===t&&(t="-"),t},R=(e,s)=>{if(e&&e.includes("@")){let t=e.split("@")[0];return s&&s!==t?"".concat(t," (").concat(s,")"):t}let t=e||s||"N/A";return s&&s!==t?"".concat(t," (").concat(s,")"):t},E=e=>{if(!e||0===e)return"-";let s=e=Math.floor(e),t="",r=0;for(let e of[{value:31536e3,label:"y"},{value:2592e3,label:"mo"},{value:86400,label:"d"},{value:3600,label:"h"},{value:60,label:"m"},{value:1,label:"s"}])if(s>=e.value&&r<2){let l=Math.floor(s/e.value);t+="".concat(l).concat(e.label," "),s%=e.value,r++}return t.trim()||"0s"};function O(){let e=(0,a.useRouter)(),[s,t]=(0,l.useState)(!1),i=l.useRef(null),[u,d]=(0,l.useState)(!1),[h,f]=(0,l.useState)(!1),[v,g]=(0,l.useState)(null),[b,y]=(0,l.useState)(!1),N=(0,k.X)(),[L,I]=(0,l.useState)([]),[E,O]=(0,l.useState)({status:[],cluster:[],user:[],workspace:[],infra:[]});(0,l.useEffect)(()=>{e.isReady&&F()},[e.isReady]),(0,l.useEffect)(()=>{(async()=>{try{await S.ZP.preloadForPage("clusters");let e=await C.default.get(m.fX),s=Object.keys(e),t=await C.default.get(x.getClusters),r=[...new Set(t.map(e=>e.workspace||"default").filter(e=>e))],l=new Set(s);r.includes("default")&&l.has("default"),r.forEach(e=>l.add(e));let a=await C.default.get(p.R),n=[...new Set(t.map(e=>({userId:e.user_hash||e.user,username:e.user})).filter(e=>e.userId)).values()],c=new Map;a.forEach(e=>{c.set(e.userId,{userId:e.userId,username:e.username,display:R(e.username,e.userId)})}),n.forEach(e=>{c.has(e.userId)||c.set(e.userId,{userId:e.userId,username:e.username,display:R(e.username,e.userId)})})}catch(e){console.error("Error fetching data for filters:",e)}})()},[]);let H=s=>{let t={...e.query},r=[],l=[],a=[];s.map((e,s)=>{var t;r.push(null!==(t=e.property.toLowerCase())&&void 0!==t?t:""),l.push(e.operator),a.push(e.value)}),t.property=r,t.operator=l,t.value=a,e.replace({pathname:e.pathname,query:t},void 0,{shallow:!0})},F=()=>{let s={...e.query},t=s.property,r=s.operator,l=s.value;if(void 0===t)return;let a=[],n=Array.isArray(t)?t.length:1,c=new Map;if(c.set("",""),c.set("status","Status"),c.set("cluster","Cluster"),c.set("user","User"),c.set("workspace","Workspace"),c.set("infra","Infra"),1===n)a.push({property:c.get(t),operator:r,value:l});else for(let e=0;e<n;e++)a.push({property:c.get(t[e]),operator:r[e],value:l[e]});I(a)};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-2 h-5",children:[(0,r.jsxs)("div",{className:"text-base flex items-center",children:[(0,r.jsx)(o(),{href:"/clusters",className:"text-sky-blue hover:underline leading-none",children:"Sky Clusters"}),(0,r.jsx)(A,{propertyList:M,valueList:E,setFilters:I,updateURLParams:H,placeholder:"Filter clusters"})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,r.jsx)("div",{className:"flex items-center",children:(0,r.jsxs)("label",{className:"flex items-center cursor-pointer",children:[(0,r.jsx)("input",{type:"checkbox",checked:b,onChange:e=>y(e.target.checked),className:"sr-only"}),(0,r.jsx)("div",{className:"relative inline-flex h-5 w-9 items-center rounded-full transition-colors ".concat(b?"bg-sky-600":"bg-gray-300"),children:(0,r.jsx)("span",{className:"inline-block h-3 w-3 transform rounded-full bg-white transition-transform ".concat(b?"translate-x-5":"translate-x-1")})}),(0,r.jsx)("span",{className:"ml-2 text-sm text-gray-700",children:"Show history (Last 30 days)"})]})}),(0,r.jsxs)("div",{className:"flex items-center",children:[s&&(0,r.jsxs)("div",{className:"flex items-center mr-2",children:[(0,r.jsx)(n.Z,{size:15,className:"mt-0"}),(0,r.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,r.jsxs)("button",{onClick:()=>{C.default.invalidate(x.getClusters),C.default.invalidate(x.uR),C.default.invalidate(m.fX),C.default.invalidate(p.R),i.current&&i.current()},disabled:s,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:[(0,r.jsx)(j.Z,{className:"h-4 w-4 mr-1.5"}),!N&&(0,r.jsx)("span",{children:"Refresh"})]})]})]})]}),(0,r.jsx)(Z,{filters:L,setFilters:I,updateURLParams:H}),(0,r.jsx)(_,{refreshInterval:c.yc,setLoading:t,refreshDataRef:i,filters:L,showHistory:b,onOpenSSHModal:e=>{g(e),d(!0)},onOpenVSCodeModal:e=>{g(e),f(!0)},setOptionValues:O}),(0,r.jsx)(w.Oh,{isOpen:u,onClose:()=>d(!1),cluster:v}),(0,r.jsx)(w._R,{isOpen:h,onClose:()=>f(!1),cluster:v})]})}function _(e){let{refreshInterval:s,setLoading:t,refreshDataRef:a,filters:i,showHistory:m,onOpenSSHModal:p,onOpenVSCodeModal:j,setOptionValues:v}=e,[g,b]=(0,l.useState)([]),[w,k]=(0,l.useState)({key:null,direction:"ascending"}),[N,S]=(0,l.useState)(!1),[M,R]=(0,l.useState)(!0),[O,_]=(0,l.useState)(1),[H,F]=(0,l.useState)(10),V=e=>{let s={status:[],cluster:[],user:[],workspace:[],infra:[]},t=(e,s)=>{e.includes(s)||e.push(s)};return e.map(e=>{t(s.status,e.status),t(s.cluster,e.cluster),t(s.user,e.user),t(s.workspace,e.workspace),t(s.infra,e.infra)}),s},W=l.useCallback(async()=>{t(!0),S(!0);try{let e=await C.default.get(x.getClusters);if(m){let s=await C.default.get(x.uR),t=e.map(e=>({...e,isHistorical:!1})),r=s.map(e=>({...e,isHistorical:!0})),l=[...t];r.forEach(s=>{e.some(e=>(e.cluster||e.name)===(s.cluster||s.name))||l.push(s)}),v(V(l)),b(l)}else{let s=e.map(e=>({...e,isHistorical:!1}));v(V(s)),b(s)}}catch(e){console.error("Error fetching cluster data:",e),v(V([])),b([])}t(!1),S(!1),R(!1)},[t,m]),A=(e,s)=>{var t;let{property:r,operator:l,value:a}=s;if(!a)return!0;if(!r){let s=a.toLowerCase();return Object.values(e).some(e=>null==e?void 0:e.toString().toLowerCase().includes(s))}let n=null===(t=e[r.toLowerCase()])||void 0===t?void 0:t.toString().toLowerCase(),c=a.toString().toLowerCase();switch(l){case"=":return n===c;case":":return null==n?void 0:n.includes(c);default:return!0}},Z=l.useMemo(()=>{let e=0===i.length?g:g.filter(e=>{let s=null;for(let t=0;t<i.length;t++){let r=A(e,i[t]);s=null===s?r:s&&r}return s});return(0,f.R0)(e,w.key,w.direction)},[g,w,i]);l.useEffect(()=>{a&&(a.current=W)},[a,W]),(0,l.useEffect)(()=>{b([]);let e=!0;W();let t=setInterval(()=>{e&&W()},s);return()=>{e=!1,clearInterval(t)}},[s,W]),(0,l.useEffect)(()=>{_(1)},[g.length]);let P=e=>{let s="ascending";w.key===e&&"ascending"===w.direction&&(s="descending"),k({key:e,direction:s})},q=e=>w.key===e?"ascending"===w.direction?" ↑":" ↓":"",B=Math.ceil(Z.length/H),U=(O-1)*H,D=U+H,X=Z.slice(U,D);return(0,r.jsxs)("div",{children:[(0,r.jsx)(d.Zb,{children:(0,r.jsx)("div",{className:"overflow-x-auto rounded-lg",children:(0,r.jsxs)(h.iA,{className:"min-w-full",children:[(0,r.jsx)(h.xD,{children:(0,r.jsxs)(h.SC,{children:[(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>P("status"),children:["Status",q("status")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>P("cluster"),children:["Cluster",q("cluster")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden sm:table-cell",onClick:()=>P("user"),children:["User",q("user")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden md:table-cell",onClick:()=>P("workspace"),children:["Workspace",q("workspace")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden lg:table-cell",onClick:()=>P("infra"),children:["Infra",q("infra")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden xl:table-cell",onClick:()=>P("resources_str"),children:["Resources",q("resources_str")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>P("time"),children:["Started",q("time")]}),m&&(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden lg:table-cell",onClick:()=>P("duration"),children:["Duration",q("duration")]}),(0,r.jsxs)(h.ss,{className:"sortable whitespace-nowrap hidden md:table-cell",onClick:()=>P("autostop"),children:["Autostop",q("autostop")]}),(0,r.jsx)(h.ss,{className:"sticky right-0 bg-white",children:"Actions"})]})}),(0,r.jsx)(h.RM,{children:N&&M?(0,r.jsx)(h.SC,{children:(0,r.jsx)(h.pj,{colSpan:9,className:"text-center py-6 text-gray-500",children:(0,r.jsxs)("div",{className:"flex justify-center items-center",children:[(0,r.jsx)(n.Z,{size:20,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]})})}):X.length>0?X.map((e,s)=>(0,r.jsxs)(h.SC,{children:[(0,r.jsx)(h.pj,{children:(0,r.jsx)(y.OE,{status:e.status})}),(0,r.jsx)(h.pj,{children:(0,r.jsx)(o(),{href:"/clusters/".concat(e.isHistorical?e.cluster_hash:e.cluster||e.name),className:"text-blue-600",children:e.cluster||e.name})}),(0,r.jsx)(h.pj,{className:"hidden sm:table-cell",children:(0,r.jsx)(L.H,{username:e.user,userHash:e.user_hash})}),(0,r.jsx)(h.pj,{className:"hidden md:table-cell",children:(0,r.jsx)(o(),{href:"/workspaces",className:"text-gray-700 hover:text-blue-600 hover:underline",children:e.workspace||"default"})}),(0,r.jsx)(h.pj,{className:"hidden lg:table-cell",children:(0,r.jsx)(c.Md,{content:e.full_infra||e.infra,className:"text-sm text-muted-foreground",children:(0,r.jsxs)("span",{children:[(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:e.cloud}),e.infra.includes("(")&&(0,r.jsx)("span",{children:" "+e.infra.substring(e.infra.indexOf("("))})]})})}),(0,r.jsx)(h.pj,{className:"hidden xl:table-cell",children:(0,r.jsx)(c.Md,{content:e.resources_str_full||e.resources_str,className:"text-sm text-muted-foreground",children:(0,r.jsx)("span",{children:e.resources_str})})}),(0,r.jsx)(h.pj,{children:(0,r.jsx)(c.Zg,{date:e.time})}),m&&(0,r.jsx)(h.pj,{className:"hidden lg:table-cell",children:E(e.duration)}),(0,r.jsx)(h.pj,{className:"hidden md:table-cell",children:e.isHistorical?"-":I(e.autostop,e.to_down)}),(0,r.jsx)(h.pj,{className:"text-left sticky right-0 bg-white",children:!e.isHistorical&&(0,r.jsx)(z,{cluster:e.cluster,status:e.status,onOpenSSHModal:p,onOpenVSCodeModal:j})})]},s)):(0,r.jsx)(h.SC,{children:(0,r.jsx)(h.pj,{colSpan:9,className:"text-center py-6 text-gray-500",children:m?"No clusters found":"No active clusters"})})})]})})}),g.length>0&&(0,r.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,r.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,r.jsxs)("div",{className:"relative inline-block",children:[(0,r.jsxs)("select",{value:H,onChange:e=>{F(parseInt(e.target.value,10)),_(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,r.jsx)("option",{value:10,children:"10"}),(0,r.jsx)("option",{value:30,children:"30"}),(0,r.jsx)("option",{value:50,children:"50"}),(0,r.jsx)("option",{value:100,children:"100"}),(0,r.jsx)("option",{value:200,children:"200"})]}),(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,r.jsx)("div",{children:"".concat(U+1," - ").concat(Math.min(D,Z.length)," of ").concat(Z.length)}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)(u.z,{variant:"ghost",size:"icon",onClick:()=>{_(e=>Math.max(e-1,1))},disabled:1===O,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,r.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,r.jsx)(u.z,{variant:"ghost",size:"icon",onClick:()=>{_(e=>Math.min(e+1,B))},disabled:O===B||0===B,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,r.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})]})})]})}let H=(e,s)=>{s&&s(e)},F=(e,s)=>{s?s(e):window.open("ssh://".concat(e))},V=e=>"RUNNING"===e?["connect","VSCode"]:[],W={connect:(0,r.jsx)(g,{className:"w-4 h-4 text-gray-500 inline-block"}),VSCode:(0,r.jsx)(b,{className:"w-4 h-4 text-gray-500 inline-block"})};function z(e){let{withLabel:s=!1,cluster:t,status:l,onOpenSSHModal:a,onOpenVSCodeModal:n}=e,i=V(l),o=(0,k.X)(),u=e=>{switch(e){case"connect":F(t,a);break;case"VSCode":H(t,n);break;default:return}};return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"flex items-center space-x-4",children:Object.entries(W).map(e=>{let t,l,[a,n]=e;switch(a){case"connect":t="Connect",l="Connect with SSH";break;case"VSCode":t="VSCode",l="Open in VS Code"}return(s||(t=""),i.includes(a))?(0,r.jsx)(c.WH,{content:l,className:"capitalize text-sm text-muted-foreground",children:(0,r.jsxs)("button",{onClick:()=>u(a),className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[n,!o&&(0,r.jsx)("span",{className:"ml-1.5",children:t})]})},a):(0,r.jsx)(c.WH,{content:l,className:"capitalize text-sm text-muted-foreground",children:(0,r.jsxs)("span",{className:"opacity-30 flex items-center cursor-not-allowed text-sm",title:a,children:[n,!o&&(0,r.jsx)("span",{className:"ml-1.5",children:t})]})},a)})})})}let A=e=>{let{propertyList:s=[],valueList:t,setFilters:a,updateURLParams:n,placeholder:c="Filter clusters"}=e,i=(0,l.useRef)(null),o=(0,l.useRef)(null),[u,d]=(0,l.useState)(!1),[h,x]=(0,l.useState)(""),[m,p]=(0,l.useState)("status"),[f,j]=(0,l.useState)([]);(0,l.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&i.current&&!i.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[]),(0,l.useEffect)(()=>{let e=[];if(t&&"object"==typeof t)switch(m){case"status":e=t.status||[];break;case"user":e=t.user||[];break;case"cluster":e=t.cluster||[];break;case"workspace":e=t.workspace||[];break;case"infra":e=t.infra||[]}""!==h.trim()&&(e=e.filter(e=>e&&e.toString().toLowerCase().includes(h.toLowerCase()))),j(e)},[m,t,h]);let v=e=>{let t=s.find(s=>s.value===e);return t?t.label:e},g=e=>{a(s=>{let t=[...s,{property:v(m),operator:":",value:e}];return n(t),t}),d(!1),x(""),i.current.focus()};return(0,r.jsxs)("div",{className:"flex flex-row ml-4 mr-2 border border-gray-300 rounded-md overflow-visible",children:[(0,r.jsx)("div",{className:"border-r border-gray-300",children:(0,r.jsxs)(N.Ph,{onValueChange:p,value:m,children:[(0,r.jsx)(N.i4,{"aria-label":"Filter Property",className:"focus:ring-0 focus:ring-offset-0 border-none rounded-l-md rounded-r-none w-32 h-8",children:(0,r.jsx)(N.ki,{placeholder:"Select Property"})}),(0,r.jsx)(N.Bw,{children:s.map((e,s)=>(0,r.jsx)(N.Ql,{value:e.value,children:e.label},"property-item-".concat(s)))})]})}),(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.jsx)("input",{type:"text",ref:i,placeholder:c,value:h,onChange:e=>{x(e.target.value),u||d(!0)},onFocus:()=>{d(!0)},onKeyDown:e=>{"Enter"===e.key&&""!==h.trim()?(a(e=>{let s=[...e,{property:v(m),operator:":",value:h}];return n(s),s}),x(""),d(!1)):"Escape"===e.key&&(d(!1),i.current.blur())},className:"h-8 w-32 sm:w-96 px-3 pr-8 text-sm border-none rounded-l-none rounded-r-md focus:ring-0 focus:outline-none",autoComplete:"off"}),h&&(0,r.jsx)("button",{onClick:()=>{x(""),d(!1)},className:"absolute right-2 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600",title:"Clear filter",tabIndex:-1,children:(0,r.jsx)("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),u&&f.length>0&&(0,r.jsx)("div",{ref:o,className:"absolute z-50 mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-60 overflow-y-auto",style:{zIndex:9999},children:f.map((e,s)=>(0,r.jsx)("div",{className:"px-3 py-2 cursor-pointer hover:bg-gray-50 text-sm ".concat(s!==f.length-1?"border-b border-gray-100":""),onClick:()=>g(e),children:(0,r.jsx)("span",{className:"text-sm text-gray-700",children:e})},"".concat(e,"-").concat(s)))})]})]})},Z=e=>{let{filters:s=[],setFilters:t,updateURLParams:l}=e,a=e=>{t(s=>{let t=s.filter((s,t)=>t!==e);return l(t),t})};return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"flex items-center gap-4 py-2 px-2",children:(0,r.jsxs)("div",{className:"flex flex-wrap items-content gap-2",children:[s.map((e,s)=>(0,r.jsx)(P,{filter:e,onRemove:()=>a(s)},"filteritem-".concat(s))),s.length>0&&(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("button",{onClick:()=>{l([]),t([])},className:"rounded-full px-4 py-1 text-sm text-gray-700 bg-gray-200 hover:bg-gray-300",children:"Clear filters"})})]})})})},P=e=>{let{filter:s,onRemove:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsxs)("div",{className:"flex items-center text-blue-600 bg-blue-100 px-1 py-1 rounded-full text-sm",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1 px-2",children:[(0,r.jsx)("span",{children:"".concat(s.property," ")}),(0,r.jsx)("span",{children:"".concat(s.operator," ")}),(0,r.jsx)("span",{children:" ".concat(s.value)})]}),(0,r.jsx)("button",{onClick:()=>t(),className:"p-0.5 ml-1 transform text-gray-400 hover:text-gray-600 bg-blue-500 hover:bg-blue-600 rounded-full flex flex-col items-center",title:"Clear filter",children:(0,r.jsx)("svg",{className:"h-3 w-3",fill:"none",stroke:"white",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:5,d:"M6 18L18 6M6 6l12 12"})})})]})})}},1163:function(e,s,t){e.exports=t(6036)},2003:function(e,s,t){"use strict";t.d(s,{j:function(){return n}});var r=t(512);let l=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,a=r.W,n=(e,s)=>t=>{var r;if((null==s?void 0:s.variants)==null)return a(e,null==t?void 0:t.class,null==t?void 0:t.className);let{variants:n,defaultVariants:c}=s,i=Object.keys(n).map(e=>{let s=null==t?void 0:t[e],r=null==c?void 0:c[e];if(null===s)return null;let a=l(s)||l(r);return n[e][a]}),o=t&&Object.entries(t).reduce((e,s)=>{let[t,r]=s;return void 0===r||(e[t]=r),e},{});return a(e,i,null==s?void 0:null===(r=s.compoundVariants)||void 0===r?void 0:r.reduce((e,s)=>{let{class:t,className:r,...l}=s;return Object.entries(l).every(e=>{let[s,t]=e;return Array.isArray(t)?t.includes({...c,...o}[s]):({...c,...o})[s]===t})?[...e,t,r]:e},[]),null==t?void 0:t.class,null==t?void 0:t.className)}}}]);