skypilot-nightly 1.0.0.dev20250701__tar.gz → 1.0.0.dev20250702__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 (512) hide show
  1. {skypilot_nightly-1.0.0.dev20250701/sky/setup_files → skypilot_nightly-1.0.0.dev20250702}/MANIFEST.in +1 -0
  2. {skypilot_nightly-1.0.0.dev20250701/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250702}/PKG-INFO +1 -1
  3. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/__init__.py +2 -2
  4. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/__init__.py +1 -1
  5. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/cli/command.py +60 -21
  6. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/404.html +1 -1
  7. {skypilot_nightly-1.0.0.dev20250701/sky/dashboard/out/_next/static/Md3rlE87jmL5uv7gSo8mR → skypilot_nightly-1.0.0.dev20250702/sky/dashboard/out/_next/static/N5IdFnjR1RaPGBAVYeTIr}/_buildManifest.js +1 -1
  8. skypilot_nightly-1.0.0.dev20250702/sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js +1 -0
  9. skypilot_nightly-1.0.0.dev20250702/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js +6 -0
  10. skypilot_nightly-1.0.0.dev20250701/sky/dashboard/out/_next/static/chunks/webpack-d427db53e54de9ce.js → skypilot_nightly-1.0.0.dev20250702/sky/dashboard/out/_next/static/chunks/webpack-9a81ea998672c303.js +1 -1
  11. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  12. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/clusters/[cluster].html +1 -1
  13. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/clusters.html +1 -1
  14. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/config.html +1 -1
  15. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/index.html +1 -1
  16. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/infra/[context].html +1 -1
  17. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/infra.html +1 -1
  18. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/jobs/[job].html +1 -1
  19. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/jobs.html +1 -1
  20. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/users.html +1 -1
  21. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/volumes.html +1 -1
  22. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/workspace/new.html +1 -1
  23. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/workspaces/[name].html +1 -1
  24. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/workspaces.html +1 -1
  25. skypilot_nightly-1.0.0.dev20250702/sky/metrics/utils.py +210 -0
  26. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/optimizer.py +1 -1
  27. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/resources.py +145 -7
  28. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/server.py +80 -7
  29. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702/sky/setup_files}/MANIFEST.in +1 -0
  30. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/constants.py +3 -0
  31. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skypilot_config.py +62 -53
  32. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/accelerator_registry.py +28 -1
  33. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/schemas.py +3 -0
  34. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/ux_utils.py +9 -4
  35. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  36. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/skypilot_nightly.egg-info/SOURCES.txt +6 -5
  37. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_optimizer_dryruns.py +121 -20
  38. skypilot_nightly-1.0.0.dev20250701/sky/dashboard/out/_next/static/chunks/9984.739ae958a066298d.js +0 -1
  39. skypilot_nightly-1.0.0.dev20250701/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b8e1114e6d38218c.js +0 -6
  40. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/LICENSE +0 -0
  41. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/README.md +0 -0
  42. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/pyproject.toml +0 -0
  43. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/setup.cfg +0 -0
  44. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/setup.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/__init__.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/aws.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/azure.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/cloudflare.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/common.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/cudo.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/do.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/docker.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/gcp.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/hyperbolic.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/ibm.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/kubernetes.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/nebius.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/oci.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/runpod.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/vast.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/adaptors/vsphere.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/admin_policy.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/authentication.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/__init__.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/backend.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/backend_utils.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/cloud_vm_ray_backend.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/docker_utils.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/local_docker_backend.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/backends/wheel_utils.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/aws_catalog.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/azure_catalog.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/common.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/config.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/cudo_catalog.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/__init__.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/analyze.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_hyperbolic.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/do_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/fluidstack_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/gcp_catalog.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/hyperbolic_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/ibm_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/kubernetes_catalog.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/lambda_catalog.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/nebius_catalog.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/oci_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/paperspace_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/runpod_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/scp_catalog.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/ssh_catalog.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/vast_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/catalog/vsphere_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/check.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/cli.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/__init__.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/cli/__init__.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/cli/deprecation_utils.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/cli/flags.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/common.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/oauth.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/sdk.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/client/service_account_auth.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/cloud_stores.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/__init__.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/aws.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/azure.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/cloud.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/cudo.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/do.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/fluidstack.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/gcp.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/hyperbolic.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/ibm.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/kubernetes.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/lambda_cloud.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/nebius.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/oci.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/paperspace.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/runpod.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/scp.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/ssh.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/__init__.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/aws_utils.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/azure_utils.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/gcp_utils.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/oci_utils.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/utils/scp_utils.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/vast.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/clouds/vsphere.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/core.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dag.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250701/sky/dashboard/out/_next/static/Md3rlE87jmL5uv7gSo8mR → skypilot_nightly-1.0.0.dev20250702/sky/dashboard/out/_next/static/N5IdFnjR1RaPGBAVYeTIr}/_ssgManifest.js +0 -0
  144. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1043-1b39779691bb4030.js +0 -0
  145. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1141-726e5a3f00b67185.js +0 -0
  146. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1664-d65361e92b85e786.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1691.44e378727a41f3b5.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/1871-80dea41717729fa5.js +0 -0
  150. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/2544.27f70672535675ed.js +0 -0
  151. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/2875.c24c6d57dc82e436.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/3256.7257acd01b481bed.js +0 -0
  153. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/3698-52ad1ca228faa776.js +0 -0
  154. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/3785.b3cc2bc1d49d2c3c.js +0 -0
  155. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/3937.d7f1c55d1916c7f2.js +0 -0
  156. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/3947-b059261d6fa88a1f.js +0 -0
  157. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/430.ed51037d1a4a438b.js +0 -0
  158. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/4697.f5421144224da9fc.js +0 -0
  159. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/4725.4c849b1e05c8e9ad.js +0 -0
  160. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/5230-df791914b54d91d9.js +0 -0
  161. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/5491.918ffed0ba7a5294.js +0 -0
  162. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/5739-5ea3ffa10fc884f2.js +0 -0
  163. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/616-162f3033ffcd3d31.js +0 -0
  164. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/6601-fcfad0ddf92ec7ab.js +0 -0
  165. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/6989-6ff4e45dfb49d11d.js +0 -0
  166. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/6990-d0dc765474fa0eca.js +0 -0
  167. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/804-9f5e98ce84d46bdd.js +0 -0
  168. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/8969-909d53833da080cb.js +0 -0
  169. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/8982.a2e214068f30a857.js +0 -0
  170. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/9025.a7c44babfe56ce09.js +0 -0
  171. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/938-044ad21de8b4626b.js +0 -0
  172. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/9470-21d059a1dfa03f61.js +0 -0
  173. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js +0 -0
  174. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js +0 -0
  175. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js +0 -0
  177. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/_app-a37b06ddb64521fd.js +0 -0
  178. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js +0 -0
  179. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-8135aba0712bda37.js +0 -0
  180. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/clusters-9744c271a1642f76.js +0 -0
  181. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/config-a2673b256b6d416f.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/index-927ddeebe57a8ac3.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-8b0809f59034d509.js +0 -0
  184. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/infra-ae9d2f705ce582c9.js +0 -0
  185. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js +0 -0
  186. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js +0 -0
  187. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/users-cd43fb3c122eedde.js +0 -0
  188. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/volumes-4ebf6484f7216387.js +0 -0
  189. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js +0 -0
  190. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7c0187f43757a548.js +0 -0
  191. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/pages/workspaces-06bde99155fa6292.js +0 -0
  192. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  193. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/_next/static/css/0da6afe66176678a.css +0 -0
  194. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/favicon.ico +0 -0
  195. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/skypilot.svg +0 -0
  196. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  197. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/__init__.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/data_transfer.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/data_utils.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/mounting_utils.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/storage.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/data/storage_utils.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/exceptions.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/execution.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/global_user_state.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/client/__init__.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/client/sdk.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/constants.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/controller.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/recovery_strategy.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/scheduler.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/server/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/server/core.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/server/server.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/state.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/jobs/utils.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/logs/__init__.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/logs/agent.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/logs/gcp.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/models.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/__init__.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/aws/__init__.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/aws/config.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/aws/instance.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/aws/utils.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/azure/__init__.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/azure/azure-config-template.json +0 -0
  229. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/azure/config.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/azure/instance.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/common.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/constants.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/__init__.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/config.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/cudo_machine_type.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/cudo_utils.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/cudo_wrapper.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/cudo/instance.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/do/__init__.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/do/config.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/do/constants.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/do/instance.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/do/utils.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/docker_utils.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/fluidstack/__init__.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/fluidstack/config.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/fluidstack/instance.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/__init__.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/config.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/constants.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/instance.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/instance_utils.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/mig_utils.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/gcp/volume_utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/hyperbolic/__init__.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/hyperbolic/config.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/hyperbolic/instance.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/hyperbolic/utils.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/instance_setup.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/__init__.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/config.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/constants.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/instance.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  266. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/network.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/network_utils.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/utils.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/kubernetes/volume.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/lambda_cloud/__init__.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/lambda_cloud/config.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/lambda_cloud/instance.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/logging.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/metadata_utils.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/nebius/__init__.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/nebius/config.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/nebius/constants.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/nebius/instance.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/nebius/utils.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/oci/__init__.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/oci/config.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/oci/instance.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/oci/query_utils.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/paperspace/__init__.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/paperspace/config.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/paperspace/constants.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/paperspace/instance.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/paperspace/utils.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/provisioner.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/__init__.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/api/__init__.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/api/commands.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/api/pods.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/config.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/instance.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/runpod/utils.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/scp/__init__.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/scp/config.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/scp/instance.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/ssh/__init__.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vast/__init__.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vast/config.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vast/instance.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vast/utils.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/__init__.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/__init__.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/custom_script.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/id_generator.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/service_manager.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/common/vim_utils.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/config.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/instance.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/provision/vsphere/vsphere_utils.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/__init__.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/autoscalers.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/client/__init__.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/client/sdk.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/constants.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/controller.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/load_balancer.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/load_balancing_policies.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/replica_managers.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/serve_state.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/serve_utils.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/server/__init__.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/server/core.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/server/server.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/service.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/service_spec.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/serve/spot_placer.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/__init__.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/common.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/config.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/constants.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/html/log.html +0 -0
  343. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/html/token_page.html +0 -0
  344. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/metrics.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/__init__.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/event_loop.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/executor.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/payloads.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/preconditions.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/process.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/queues/__init__.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/queues/local_queue.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/queues/mp_queue.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/requests.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/serializers/__init__.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/serializers/decoders.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/requests/serializers/encoders.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/rest.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/state.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/stream_utils.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/server/uvicorn.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/setup_files/dependencies.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/setup_files/setup.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/sky_logging.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/LICENSE +0 -0
  366. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/__init__.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/attempt_skylet.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/autostop_lib.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/configs.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/events.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/job_lib.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/log_lib.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/log_lib.pyi +0 -0
  374. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/__init__.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/command_runner.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/ibm/__init__.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/ibm/node_provider.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/ibm/utils.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/__init__.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  382. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/cli.py.patch +0 -0
  383. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  384. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  385. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  386. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/updater.py.patch +0 -0
  387. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/ray_patches/worker.py.patch +0 -0
  388. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/skylet.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/skylet/subprocess_daemon.py +0 -0
  390. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/ssh_node_pools/__init__.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/ssh_node_pools/core.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/ssh_node_pools/server.py +0 -0
  393. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/task.py +0 -0
  394. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/aws-ray.yml.j2 +0 -0
  395. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/azure-ray.yml.j2 +0 -0
  396. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/cudo-ray.yml.j2 +0 -0
  397. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/do-ray.yml.j2 +0 -0
  398. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  399. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/gcp-ray.yml.j2 +0 -0
  400. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/hyperbolic-ray.yml.j2 +0 -0
  401. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/ibm-ray.yml.j2 +0 -0
  402. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/jobs-controller.yaml.j2 +0 -0
  403. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  404. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  405. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  406. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  407. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  408. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/lambda-ray.yml.j2 +0 -0
  409. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/local-ray.yml.j2 +0 -0
  410. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/nebius-ray.yml.j2 +0 -0
  411. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/oci-ray.yml.j2 +0 -0
  412. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/paperspace-ray.yml.j2 +0 -0
  413. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/runpod-ray.yml.j2 +0 -0
  414. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/scp-ray.yml.j2 +0 -0
  415. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  416. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  417. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/vast-ray.yml.j2 +0 -0
  418. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/vsphere-ray.yml.j2 +0 -0
  419. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/templates/websocket_proxy.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/usage/__init__.py +0 -0
  421. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/usage/constants.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/usage/usage_lib.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/__init__.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/model.conf +0 -0
  425. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/permission.py +0 -0
  426. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/rbac.py +0 -0
  427. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/server.py +0 -0
  428. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/users/token_service.py +0 -0
  429. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/__init__.py +0 -0
  430. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/admin_policy_utils.py +0 -0
  431. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/annotations.py +0 -0
  432. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/atomic.py +0 -0
  433. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/aws/__init__.py +0 -0
  434. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/aws/get_default_security_group.py +0 -0
  435. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/cli_utils/__init__.py +0 -0
  436. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/cli_utils/status_utils.py +0 -0
  437. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/cluster_utils.py +0 -0
  438. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/command_runner.py +0 -0
  439. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/command_runner.pyi +0 -0
  440. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/common.py +0 -0
  441. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/common_utils.py +0 -0
  442. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/config_utils.py +0 -0
  443. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/context.py +0 -0
  444. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/context_utils.py +0 -0
  445. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/control_master_utils.py +0 -0
  446. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/controller_utils.py +0 -0
  447. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/dag_utils.py +0 -0
  448. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/db_utils.py +0 -0
  449. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/env_options.py +0 -0
  450. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/infra_utils.py +0 -0
  451. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/__init__.py +0 -0
  452. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  453. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/config_map_utils.py +0 -0
  454. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/create_cluster.sh +0 -0
  455. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  456. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
  457. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  458. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  459. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  460. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  461. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  462. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  463. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  464. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  465. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  466. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  467. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes/ssh_utils.py +0 -0
  468. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/kubernetes_enums.py +0 -0
  469. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/log_utils.py +0 -0
  470. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/message_utils.py +0 -0
  471. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/registry.py +0 -0
  472. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/resource_checker.py +0 -0
  473. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/resources_utils.py +0 -0
  474. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/rich_console_utils.py +0 -0
  475. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/rich_utils.py +0 -0
  476. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/status_lib.py +0 -0
  477. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/subprocess_utils.py +0 -0
  478. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/timeline.py +0 -0
  479. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/utils/validator.py +0 -0
  480. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/__init__.py +0 -0
  481. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/client/__init__.py +0 -0
  482. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/client/sdk.py +0 -0
  483. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/server/__init__.py +0 -0
  484. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/server/core.py +0 -0
  485. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/server/server.py +0 -0
  486. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/utils.py +0 -0
  487. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/volumes/volume.py +0 -0
  488. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/workspaces/__init__.py +0 -0
  489. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/workspaces/core.py +0 -0
  490. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/workspaces/server.py +0 -0
  491. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/sky/workspaces/utils.py +0 -0
  492. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  493. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  494. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/skypilot_nightly.egg-info/requires.txt +0 -0
  495. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/skypilot_nightly.egg-info/top_level.txt +0 -0
  496. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_api.py +0 -0
  497. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_api_compatibility.py +0 -0
  498. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_cli.py +0 -0
  499. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_config.py +0 -0
  500. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_db_utils.py +0 -0
  501. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_failover.py +0 -0
  502. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_global_user_state.py +0 -0
  503. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_jobs.py +0 -0
  504. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_jobs_and_serve.py +0 -0
  505. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_list_accelerators.py +0 -0
  506. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_no_parellel.py +0 -0
  507. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_optimizer_random_dag.py +0 -0
  508. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_serve_autoscaler.py +0 -0
  509. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_smoke.py +0 -0
  510. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_storage.py +0 -0
  511. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_wheels.py +0 -0
  512. {skypilot_nightly-1.0.0.dev20250701 → skypilot_nightly-1.0.0.dev20250702}/tests/test_yaml_parser.py +0 -0
@@ -17,3 +17,4 @@ include sky/utils/kubernetes/*
17
17
  include sky/server/html/*
18
18
  recursive-include sky/dashboard/out *
19
19
  include sky/users/*.conf
20
+ include sky/metrics/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250701
3
+ Version: 1.0.0.dev20250702
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  import urllib.request
6
6
 
7
7
  # Replaced with the current commit when building the wheels.
8
- _SKYPILOT_COMMIT_SHA = 'ec4a6d383dc1bb39afaf344d517abf855d01bb50'
8
+ _SKYPILOT_COMMIT_SHA = 'b14ada0656596f2e0362903bd851352e2282d57d'
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.dev20250701'
38
+ __version__ = '1.0.0.dev20250702'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -247,7 +247,7 @@ def get_accelerators_from_instance_type(
247
247
 
248
248
  def get_instance_type_for_accelerator(
249
249
  acc_name: str,
250
- acc_count: int,
250
+ acc_count: Union[int, float],
251
251
  cpus: Optional[str] = None,
252
252
  memory: Optional[str] = None,
253
253
  use_spot: bool = False,
@@ -2141,16 +2141,52 @@ def cancel(
2141
2141
  \b
2142
2142
  # Cancel the latest running job on a cluster.
2143
2143
  sky cancel cluster_name
2144
+ \b
2145
+ # Cancel the latest running job on all matching clusters.
2146
+ sky cancel cluster-glob*
2147
+ \b
2148
+ # Cancel all your jobs on all matching clusters.
2149
+ sky cancel cluster-glob* -a
2144
2150
 
2145
2151
  Job IDs can be looked up by ``sky queue cluster_name``.
2152
+ Cluster names support glob patterns (e.g., px* matches px1, px2).
2146
2153
  """
2154
+ # Handle glob patterns in cluster names
2155
+ matching_clusters = []
2156
+ if '*' in cluster or '?' in cluster or '[' in cluster:
2157
+ # This is a glob pattern, expand it
2158
+ try:
2159
+ # Get list of all available clusters
2160
+ all_records = sdk.get(sdk.status(cluster_names=None,
2161
+ all_users=True))
2162
+ all_clusters = [record['name'] for record in all_records]
2163
+ matching_clusters = [
2164
+ c for c in all_clusters if fnmatch.fnmatch(c, cluster)
2165
+ ]
2166
+ except Exception:
2167
+ raise click.UsageError(
2168
+ f'No clusters match pattern: {cluster!r}') from None
2169
+ else:
2170
+ # Literal cluster name
2171
+ matching_clusters = [cluster]
2172
+
2173
+ if not matching_clusters:
2174
+ raise click.UsageError(f'No clusters match pattern: {cluster!r}')
2175
+
2176
+ # Don't allow job IDs when using glob patterns that match multiple clusters
2177
+ if len(matching_clusters) > 1 and jobs:
2178
+ raise click.UsageError(
2179
+ 'Cannot specify job IDs when cluster pattern '
2180
+ 'matches multiple clusters. '
2181
+ f'Pattern {cluster!r} matches: {", ".join(matching_clusters)}')
2182
+
2147
2183
  job_identity_str = ''
2148
2184
  job_ids_to_cancel = None
2149
2185
  if not jobs and not all and not all_users:
2150
- click.echo(
2151
- f'{colorama.Fore.YELLOW}No job IDs or --all/--all-users provided; '
2152
- 'cancelling the latest running job.'
2153
- f'{colorama.Style.RESET_ALL}')
2186
+ click.echo(f'{colorama.Fore.YELLOW}No job IDs or'
2187
+ ' --all/--all-users provided; '
2188
+ 'cancelling the latest running job.'
2189
+ f'{colorama.Style.RESET_ALL}')
2154
2190
  job_identity_str = 'the latest running job'
2155
2191
  elif all_users:
2156
2192
  job_identity_str = 'all users\' jobs'
@@ -2163,7 +2199,8 @@ def cancel(
2163
2199
  connector = ' and ' if job_identity_str else ''
2164
2200
  job_identity_str += f'{connector}job{plural} {jobs_str}'
2165
2201
  job_ids_to_cancel = jobs
2166
- job_identity_str += f' on cluster {cluster!r}'
2202
+
2203
+ job_identity_str += f' on cluster(s): {", ".join(matching_clusters)}'
2167
2204
 
2168
2205
  if not yes:
2169
2206
  click.confirm(f'Cancelling {job_identity_str}. Proceed?',
@@ -2171,22 +2208,24 @@ def cancel(
2171
2208
  abort=True,
2172
2209
  show_default=True)
2173
2210
 
2174
- try:
2175
- request_id = sdk.cancel(cluster,
2176
- all=all,
2177
- all_users=all_users,
2178
- job_ids=job_ids_to_cancel)
2179
- _async_call_or_wait(request_id, async_call, 'sky.cancel')
2180
- except exceptions.NotSupportedError as e:
2181
- controller = controller_utils.Controllers.from_name(cluster)
2182
- assert controller is not None, cluster
2183
- with ux_utils.print_exception_no_traceback():
2184
- raise click.UsageError(controller.value.decline_cancel_hint) from e
2185
- except ValueError as e:
2186
- raise click.UsageError(str(e))
2187
- except exceptions.ClusterNotUpError:
2188
- with ux_utils.print_exception_no_traceback():
2189
- raise
2211
+ for cluster in matching_clusters:
2212
+ try:
2213
+ request_id = sdk.cancel(cluster,
2214
+ all=all,
2215
+ all_users=all_users,
2216
+ job_ids=job_ids_to_cancel)
2217
+ _async_call_or_wait(request_id, async_call, 'sky.cancel')
2218
+ except exceptions.NotSupportedError as e:
2219
+ controller = controller_utils.Controllers.from_name(cluster)
2220
+ assert controller is not None, cluster
2221
+ with ux_utils.print_exception_no_traceback():
2222
+ raise click.UsageError(
2223
+ controller.value.decline_cancel_hint) from e
2224
+ except ValueError as e:
2225
+ raise click.UsageError(str(e))
2226
+ except exceptions.ClusterNotUpError:
2227
+ with ux_utils.print_exception_no_traceback():
2228
+ raise
2190
2229
 
2191
2230
 
2192
2231
  @cli.command(cls=_DocumentedCodeCommand)
@@ -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/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_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":"Md3rlE87jmL5uv7gSo8mR","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/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_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":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- self.__BUILD_MANIFEST=function(s,c,a,e,t,f,u,n,r,i,b,d,j,k,o){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-927ddeebe57a8ac3.js"],"/_error":["static/chunks/pages/_error-c72a1f77a3c0be1b.js"],"/clusters":["static/chunks/pages/clusters-9744c271a1642f76.js"],"/clusters/[cluster]":[s,c,a,e,t,r,b,f,u,n,d,i,j,k,o,"static/chunks/1871-80dea41717729fa5.js","static/chunks/pages/clusters/[cluster]-b8e1114e6d38218c.js"],"/clusters/[cluster]/[job]":[s,c,a,e,t,f,u,n,"static/chunks/pages/clusters/[cluster]/[job]-8135aba0712bda37.js"],"/config":["static/chunks/pages/config-a2673b256b6d416f.js"],"/infra":["static/chunks/pages/infra-ae9d2f705ce582c9.js"],"/infra/[context]":["static/chunks/pages/infra/[context]-8b0809f59034d509.js"],"/jobs":["static/chunks/pages/jobs-5bbdc71878f0a068.js"],"/jobs/[job]":[s,c,a,e,t,r,f,u,n,i,"static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js"],"/users":["static/chunks/pages/users-cd43fb3c122eedde.js"],"/volumes":["static/chunks/pages/volumes-4ebf6484f7216387.js"],"/workspace/new":["static/chunks/pages/workspace/new-5629d4e551dba1ee.js"],"/workspaces":["static/chunks/pages/workspaces-06bde99155fa6292.js"],"/workspaces/[name]":[s,c,a,e,t,r,b,f,u,n,d,i,j,k,o,"static/chunks/1141-726e5a3f00b67185.js","static/chunks/pages/workspaces/[name]-7c0187f43757a548.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/config","/infra","/infra/[context]","/jobs","/jobs/[job]","/users","/volumes","/workspace/new","/workspaces","/workspaces/[name]"]}}("static/chunks/616-162f3033ffcd3d31.js","static/chunks/5230-df791914b54d91d9.js","static/chunks/5739-5ea3ffa10fc884f2.js","static/chunks/1664-d65361e92b85e786.js","static/chunks/804-9f5e98ce84d46bdd.js","static/chunks/6989-6ff4e45dfb49d11d.js","static/chunks/3698-52ad1ca228faa776.js","static/chunks/9470-21d059a1dfa03f61.js","static/chunks/1272-1ef0bf0237faccdb.js","static/chunks/8969-909d53833da080cb.js","static/chunks/3947-b059261d6fa88a1f.js","static/chunks/6990-d0dc765474fa0eca.js","static/chunks/1043-1b39779691bb4030.js","static/chunks/6601-fcfad0ddf92ec7ab.js","static/chunks/938-044ad21de8b4626b.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
1
+ self.__BUILD_MANIFEST=function(s,c,a,e,t,f,u,n,r,b,i,j,d,k,o){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-927ddeebe57a8ac3.js"],"/_error":["static/chunks/pages/_error-c72a1f77a3c0be1b.js"],"/clusters":["static/chunks/pages/clusters-9744c271a1642f76.js"],"/clusters/[cluster]":[s,c,a,e,t,r,i,f,u,n,j,b,d,k,o,"static/chunks/1871-80dea41717729fa5.js","static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js"],"/clusters/[cluster]/[job]":[s,c,a,e,t,f,u,n,"static/chunks/pages/clusters/[cluster]/[job]-8135aba0712bda37.js"],"/config":["static/chunks/pages/config-a2673b256b6d416f.js"],"/infra":["static/chunks/pages/infra-ae9d2f705ce582c9.js"],"/infra/[context]":["static/chunks/pages/infra/[context]-8b0809f59034d509.js"],"/jobs":["static/chunks/pages/jobs-5bbdc71878f0a068.js"],"/jobs/[job]":[s,c,a,e,t,r,f,u,n,b,"static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js"],"/users":["static/chunks/pages/users-cd43fb3c122eedde.js"],"/volumes":["static/chunks/pages/volumes-4ebf6484f7216387.js"],"/workspace/new":["static/chunks/pages/workspace/new-5629d4e551dba1ee.js"],"/workspaces":["static/chunks/pages/workspaces-06bde99155fa6292.js"],"/workspaces/[name]":[s,c,a,e,t,r,i,f,u,n,j,b,d,k,o,"static/chunks/1141-726e5a3f00b67185.js","static/chunks/pages/workspaces/[name]-7c0187f43757a548.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/config","/infra","/infra/[context]","/jobs","/jobs/[job]","/users","/volumes","/workspace/new","/workspaces","/workspaces/[name]"]}}("static/chunks/616-162f3033ffcd3d31.js","static/chunks/5230-df791914b54d91d9.js","static/chunks/5739-5ea3ffa10fc884f2.js","static/chunks/1664-d65361e92b85e786.js","static/chunks/804-9f5e98ce84d46bdd.js","static/chunks/6989-6ff4e45dfb49d11d.js","static/chunks/3698-52ad1ca228faa776.js","static/chunks/9470-21d059a1dfa03f61.js","static/chunks/1272-1ef0bf0237faccdb.js","static/chunks/8969-909d53833da080cb.js","static/chunks/3947-b059261d6fa88a1f.js","static/chunks/6990-d0dc765474fa0eca.js","static/chunks/1043-1b39779691bb4030.js","static/chunks/6601-fcfad0ddf92ec7ab.js","static/chunks/938-044ad21de8b4626b.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9984],{9984:function(e,t,s){s.r(t),s.d(t,{ContextDetails:function(){return L},GPUs:function(){return Z},InfrastructureSection:function(){return A}});var a=s(5893),r=s(7294),l=s(5739);s(9470);var o=s(6409),n=s(8418),c=s(3626),i=s(3001),d=s(7853),m=s(2045),u=s(3266),h=s(8969),x=s(3225),g=s(5821);async function p(){try{let e=await fetch("".concat(x.f4,"/ssh_node_pools"),{method:"GET",headers:{"Content-Type":"application/json"}});if(!e.ok)throw Error("HTTP error! status: ".concat(e.status));return await e.json()}catch(e){return console.error("Error fetching SSH Node Pools:",e),{}}}async function f(e){try{let t=await fetch("".concat(x.f4,"/ssh_node_pools"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error("HTTP error! status: ".concat(t.status));return await t.json()}catch(e){throw console.error("Error updating SSH Node Pools:",e),e}}async function y(e){try{let t=await fetch("".concat(x.f4,"/ssh_node_pools/").concat(e),{method:"DELETE",headers:{"Content-Type":"application/json"}});if(!t.ok)throw Error("HTTP error! status: ".concat(t.status));return await t.json()}catch(e){throw console.error("Error deleting SSH Node Pool:",e),e}}async function j(e,t){try{let s=new FormData;s.append("key_name",e),s.append("key_file",t);let a=await fetch("".concat(x.f4,"/ssh_node_pools/keys"),{method:"POST",body:s});if(!a.ok)throw Error("HTTP error! status: ".concat(a.status));return await a.json()}catch(e){throw console.error("Error uploading SSH key:",e),e}}async function N(e){try{let t=await fetch("".concat(x.f4,"/ssh_node_pools/").concat(e,"/deploy"),{method:"POST",headers:{"Content-Type":"application/json"}});if(!t.ok)throw Error("HTTP error! status: ".concat(t.status));return await t.json()}catch(e){throw console.error("Error deploying SSH Node Pool:",e),e}}async function b(e){try{let t=await fetch("".concat(x.f4,"/ssh_node_pools/").concat(e,"/down"),{method:"POST",headers:{"Content-Type":"application/json"}});if(!t.ok)throw Error("HTTP error! status: ".concat(t.status));return await t.json()}catch(e){throw console.error("Error tearing down SSH Node Pool:",e),e}}async function w(e){try{let t=await fetch("".concat(x.f4,"/ssh_node_pools/").concat(e,"/status"),{method:"GET",headers:{"Content-Type":"application/json"}});if(!t.ok)throw Error("HTTP error! status: ".concat(t.status));return await t.json()}catch(e){throw console.error("Error fetching SSH Node Pool status:",e),e}}async function v(e){let t,{requestId:s,signal:a,onNewLog:r}=e,l=Date.now(),o=new Promise(e=>{let s=()=>{let a=Date.now()-l;a>=3e5?e({timeout:!0}):t=setTimeout(s,3e5-a)};t=setTimeout(s,3e5)}),n=(async()=>{try{let e=await fetch("".concat(x.f4,"/api/stream?request_id=").concat(s,"&format=plain&tail=").concat(1e3,"&follow=true"),{method:"GET",headers:{"Content-Type":"application/json"},...a?{signal:a}:{}});if(!e.ok)throw Error("HTTP error! status: ".concat(e.status));let o=e.body.getReader();try{for(;;){let{done:e,value:t}=await o.read();if(e)break;l=Date.now();let s=new TextDecoder().decode(t);r(s)}}finally{o.cancel(),t&&clearTimeout(t)}return{timeout:!1}}catch(e){if(t&&clearTimeout(t),"AbortError"===e.name)return{timeout:!1};throw e}})(),c=await Promise.race([n,o]);if(t&&clearTimeout(t),c.timeout){(0,g.C)("SSH deployment log stream timed out after ".concat(300,"s of inactivity"),"warning");return}}async function S(e){let t,{requestId:s,signal:a,onNewLog:r,operationType:l="operation"}=e,o=Date.now(),n=new Promise(e=>{let s=()=>{let a=Date.now()-o;a>=3e5?e({timeout:!0}):t=setTimeout(s,3e5-a)};t=setTimeout(s,3e5)}),c=(async()=>{try{let e=await fetch("".concat(x.f4,"/api/stream?request_id=").concat(s,"&format=plain&tail=").concat(1e3,"&follow=true"),{method:"GET",headers:{"Content-Type":"application/json"},...a?{signal:a}:{}});if(!e.ok)throw Error("HTTP error! status: ".concat(e.status));let l=e.body.getReader();try{for(;;){let{done:e,value:t}=await l.read();if(e)break;o=Date.now();let s=new TextDecoder().decode(t);r(s)}}finally{l.cancel(),t&&clearTimeout(t)}return{timeout:!1}}catch(e){if(t&&clearTimeout(t),"AbortError"===e.name)return{timeout:!1};throw e}})(),i=await Promise.race([c,n]);if(t&&clearTimeout(t),i.timeout){(0,g.C)("SSH ".concat(l," log stream timed out after ").concat(300,"s of inactivity"),"warning");return}}var _=s(326),C=s(803),P=s(2557),k=s(6185),T=s(9123);function E(e){let{isOpen:t,onClose:s,onSave:o,poolData:n=null,isLoading:c=!1}=e,[i,d]=(0,r.useState)(""),[m,u]=(0,r.useState)(""),[h,x]=(0,r.useState)("ubuntu"),[g,p]=(0,r.useState)(null),[f,y]=(0,r.useState)(""),[N,b]=(0,r.useState)({}),w=null!==n;(0,r.useEffect)(()=>{if(w&&n){var e,t,s;d(n.name||""),u(((null===(e=n.config)||void 0===e?void 0:e.hosts)||[]).join("\n")),x((null===(t=n.config)||void 0===t?void 0:t.user)||"ubuntu"),y((null===(s=n.config)||void 0===s?void 0:s.password)||"")}else d(""),u(""),x("ubuntu"),p(null),y("");b({})},[w,n]);let v=()=>{let e={};return i.trim()||(e.poolName="Pool name is required"),m.trim()||(e.hosts="At least one host is required"),h.trim()||(e.sshUser="SSH user is required"),g||f||(e.auth="Either SSH key file or password is required"),b(e),0===Object.keys(e).length},S=async()=>{if(!v())return;let e={hosts:m.split("\n").map(e=>e.trim()).filter(e=>e.length>0),user:h};try{if(g){let t=g.name;await j(t,g),e.identity_file="~/.sky/ssh_keys/".concat(t)}f&&(e.password=f),o(i,e)}catch(e){console.error("Failed to upload SSH key:",e),b({...N,keyUpload:"Failed to upload SSH key"})}},E=()=>{c||s()};return(0,a.jsx)(_.Vq,{open:t,onOpenChange:E,children:(0,a.jsxs)(_.cZ,{className:"max-w-2xl max-h-[80vh] overflow-y-auto",children:[(0,a.jsx)(_.fK,{children:(0,a.jsx)(_.$N,{children:w?"Edit SSH Node Pool: ".concat(null==n?void 0:n.name):"Add SSH Node Pool"})}),(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(k._,{htmlFor:"poolName",children:"Pool Name"}),(0,a.jsx)(P.I,{id:"poolName",placeholder:"my-ssh-cluster",value:i,onChange:e=>d(e.target.value),disabled:w,className:"placeholder:text-gray-500 ".concat(N.poolName?"border-red-500":"")}),N.poolName&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N.poolName})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(k._,{htmlFor:"hosts",children:"Hosts (one per line)"}),(0,a.jsx)(T.g,{id:"hosts",placeholder:"192.168.1.10\n192.168.1.11\nhostname.example.com",value:m,onChange:e=>u(e.target.value),rows:6,className:"placeholder:text-gray-500 ".concat(N.hosts?"border-red-500":"")}),N.hosts&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N.hosts})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(k._,{htmlFor:"sshUser",children:"SSH User"}),(0,a.jsx)(P.I,{id:"sshUser",placeholder:"ubuntu",value:h,onChange:e=>x(e.target.value),className:"placeholder:text-gray-500 ".concat(N.sshUser?"border-red-500":"")}),N.sshUser&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N.sshUser})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(k._,{htmlFor:"keyFile",children:"SSH Private Key File"}),(0,a.jsx)(P.I,{id:"keyFile",type:"file",accept:".pem,.key,id_rsa,id_ed25519",onChange:e=>{var t;return p((null===(t=e.target.files)||void 0===t?void 0:t[0])||null)},className:"border-0 bg-transparent p-0 shadow-none focus:ring-0 file:mr-2 file:text-sm file:py-1 file:px-3 file:border file:border-gray-300 file:rounded file:bg-gray-50 hover:file:bg-gray-100 file:cursor-pointer"}),N.keyUpload&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N.keyUpload})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(k._,{htmlFor:"password",children:"Password (optional, if sudo requires a password)"}),(0,a.jsx)(P.I,{id:"password",type:"password",placeholder:"Leave empty if using passwordless sudo",value:f,onChange:e=>y(e.target.value),className:"placeholder:text-gray-500"})]}),N.auth&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N.auth})]}),(0,a.jsxs)(_.cN,{children:[(0,a.jsx)(C.z,{variant:"outline",onClick:E,disabled:c,children:"Cancel"}),(0,a.jsx)(C.z,{onClick:S,disabled:c,className:"bg-blue-600 hover:bg-blue-700 text-white disabled:bg-gray-300 disabled:text-gray-500",children:c?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.Z,{size:16,className:"mr-2"}),"Saving..."]}):w?"Update Pool":"Create Pool"})]})]})})}var H=s(6378),D=s(6856),U=s(1214),I=s(1163),F=s(1664),q=s.n(F),O=s(6989);s(7673);let R=U.nb.REFRESH_INTERVAL,G=U.MO.NAME_TRUNCATE_LENGTH;function A(e){let{title:t,isLoading:s,isDataLoaded:r,contexts:o,gpus:n,groupedPerContextGPUs:c,groupedPerNodeGPUs:i,handleContextClick:d,contextStats:m={},isSSH:u=!1,actionButton:h=null}=e,x=o||[];return s||!r?(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm mb-6",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-4",children:t}),(0,a.jsxs)("div",{className:"flex items-center justify-center py-6",children:[(0,a.jsx)(l.Z,{size:24,className:"mr-3"}),(0,a.jsxs)("span",{className:"text-gray-500",children:["Loading ",t,"..."]})]})]})}):r&&0===x.length?(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm mb-6",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:t}),h]}),(0,a.jsxs)("p",{className:"text-sm text-gray-500",children:["No ",t," found or ",t," is not configured."]})]})}):r&&x.length>0?(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm mb-6",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:t}),(0,a.jsxs)("span",{className:"ml-2 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium",children:[x.length," ",1===x.length?u?"pool":"context":u?"pools":"contexts"]})]}),h]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[(0,a.jsx)("div",{children:(0,a.jsx)("div",{className:"overflow-x-auto rounded-md border border-gray-200 shadow-sm bg-white",children:(0,a.jsxs)("table",{className:"min-w-full text-sm",children:[(0,a.jsx)("thead",{className:"bg-gray-50",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/4",children:u?"Node Pool":"Context"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/8",children:"Clusters"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/8",children:"Jobs"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/8",children:"Nodes"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/4",children:"GPU Types"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/8",children:"#GPUs"})]})}),(0,a.jsx)("tbody",{className:"bg-white divide-y divide-gray-200 ".concat(x.length>5?"max-h-[250px] overflow-y-auto block":""),children:x.map(e=>{let t=c[e]||[],s=i[e]||[],r=t.reduce((e,t)=>e+(t.gpu_total||0),0),l=m[u?"ssh/".concat(e.replace(/^ssh-/,"")):"kubernetes/".concat(e)]||{clusters:0,jobs:0},o=Object.keys(t.reduce((e,t)=>(e[t.gpu_name]=(e[t.gpu_name]||0)+(t.gpu_total||0),e),{})).join(", "),n=u?e.replace(/^ssh-/,""):e;return(0,a.jsxs)("tr",{className:"hover:bg-gray-50",children:[(0,a.jsx)("td",{className:"p-3",children:(0,a.jsx)(O.Md,{content:n,className:"text-sm text-muted-foreground",children:(0,a.jsx)("span",{className:"text-blue-600 hover:underline cursor-pointer",onClick:()=>d(e),children:n.length>G?"".concat(n.substring(0,Math.floor((G-3)/2)),"...").concat(n.substring(n.length-Math.ceil((G-3)/2))):n})})}),(0,a.jsx)("td",{className:"p-3",children:l.clusters>0?(0,a.jsx)("span",{className:"px-2 py-0.5 bg-blue-100 text-blue-800 rounded text-xs font-medium",children:l.clusters}):(0,a.jsx)("span",{className:"px-2 py-0.5 bg-gray-100 text-gray-500 rounded text-xs font-medium",children:"0"})}),(0,a.jsx)("td",{className:"p-3",children:l.jobs>0?(0,a.jsx)("span",{className:"px-2 py-0.5 bg-green-100 text-green-800 rounded text-xs font-medium",children:l.jobs}):(0,a.jsx)("span",{className:"px-2 py-0.5 bg-gray-100 text-gray-500 rounded text-xs font-medium",children:"0"})}),(0,a.jsx)("td",{className:"p-3",children:s.length}),(0,a.jsx)("td",{className:"p-3",children:o||"-"}),(0,a.jsx)("td",{className:"p-3",children:r})]},e)})})]})})}),n&&n.length>0&&(0,a.jsx)("div",{children:(0,a.jsx)("div",{className:"overflow-x-auto rounded-md border border-gray-200 shadow-sm bg-white",children:(0,a.jsxs)("table",{className:"min-w-full text-sm",children:[(0,a.jsx)("thead",{className:"bg-gray-50",children:(0,a.jsxs)("tr",{children:[(0,a.jsxs)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/4 whitespace-nowrap",children:["GPU",(0,a.jsxs)("span",{className:"ml-2 px-2 py-0.5 bg-green-100 text-green-800 rounded-full text-xs font-medium whitespace-nowrap",children:[n.reduce((e,t)=>e+t.gpu_free,0)," ","of"," ",n.reduce((e,t)=>e+t.gpu_total,0)," ","free"]})]}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/4",children:"Requestable"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-1/2",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsx)("span",{children:"Utilization"})})})]})}),(0,a.jsx)("tbody",{className:"bg-white divide-y divide-gray-200 ".concat(n.length>5?"max-h-[250px] overflow-y-auto block":""),children:n.map(e=>{let t=e.gpu_total-e.gpu_free,s=e.gpu_total>0?e.gpu_free/e.gpu_total*100:0,r=e.gpu_total>0?t/e.gpu_total*100:0,l=c?Object.values(c).flat().filter(t=>t.gpu_name===e.gpu_name&&(u?t.context.startsWith("ssh-"):!t.context.startsWith("ssh-"))).map(e=>e.gpu_requestable_qty_per_node).filter((e,t,s)=>s.indexOf(e)===t).join(", "):"-";return(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"p-3 font-medium w-24 whitespace-nowrap",children:e.gpu_name}),(0,a.jsxs)("td",{className:"p-3 text-xs text-gray-600",children:[l||"-"," / node"]}),(0,a.jsx)("td",{className:"p-3 w-2/3",children:(0,a.jsx)("div",{className:"flex items-center gap-3",children:(0,a.jsxs)("div",{className:"flex-1 bg-gray-100 rounded-md h-5 flex overflow-hidden shadow-sm min-w-[100px] w-full",children:[r>0&&(0,a.jsx)("div",{style:{width:"".concat(r,"%")},className:"bg-yellow-500 h-full flex items-center justify-center text-white text-xs font-medium",children:r>15&&"".concat(t," used")}),s>0&&(0,a.jsx)("div",{style:{width:"".concat(s,"%")},className:"bg-green-700 h-full flex items-center justify-center text-white text-xs font-medium",children:s>15&&"".concat(e.gpu_free," free")})]})})})]},e.gpu_name)})})]})})})]})]})}):null}function L(e){let{contextName:t,gpusInContext:s,nodesInContext:o}=e,n=t.startsWith("ssh-"),[c,i]=(0,r.useState)([]),[m,u]=(0,r.useState)("$__all"),[h,x]=(0,r.useState)({from:"now-1h",to:"now"}),[g,p]=(0,r.useState)(!1),[f,y]=(0,r.useState)(!1);(0,r.useEffect)(()=>{(async()=>{y(await (0,d.TO)())})()},[]);let j=(0,r.useCallback)(async()=>{if(f){p(!0);try{let e=(0,d.ki)(),s="in-cluster"===t?"^$":t,a="query="+encodeURIComponent('group by (node) (DCGM_FI_DEV_GPU_TEMP{cluster=~"'.concat(s,'"})')),r="/api/datasources/proxy/1/api/v1/query?".concat(a);try{let t=await fetch("".concat(e).concat(r),{method:"GET",credentials:"include",headers:{Accept:"application/json"}});if(t.ok){let e=await t.json();if(e.data&&e.data.result&&e.data.result.length>0){let t=e.data.result.map(e=>e.metric.node).filter(Boolean).sort();i(t),console.log("Successfully fetched hosts for cluster ".concat(s||"in-cluster",":"),t)}else console.log("No nodes found for this cluster"),i([])}else console.log("HTTP ".concat(t.status," from ").concat(r,": ").concat(t.statusText)),i([])}catch(e){console.log("Failed to fetch from ".concat(r,":"),e),i([])}}catch(e){console.error("Error fetching available hosts:",e),i([])}finally{p(!1)}}},[f,t]);(0,r.useEffect)(()=>{f&&o&&o.length>0&&j()},[o,f,j]);let N=e=>{let s=(0,d.ki)(),a="in-cluster"===t?"^$":t;return"".concat(s,"/d-solo/skypilot-dcgm-cluster-dashboard/skypilot-dcgm-kubernetes-cluster-dashboard?orgId=1&timezone=browser&var-datasource=prometheus&var-host=").concat(encodeURIComponent(m),"&var-gpu=$__all&var-cluster=").concat(encodeURIComponent(a),"&refresh=5s&theme=light&from=").concat(encodeURIComponent(h.from),"&to=").concat(encodeURIComponent(h.to),"&panelId=").concat(e,"&__feature.dashboardSceneSolo")},b=e=>{x({"15m":{from:"now-15m",to:"now"},"1h":{from:"now-1h",to:"now"},"6h":{from:"now-6h",to:"now"},"24h":{from:"now-24h",to:"now"},"7d":{from:"now-7d",to:"now"}}[e])};return(0,a.jsx)("div",{className:"mb-4",children:(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm h-full",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,a.jsx)("h4",{className:"text-lg font-semibold",children:"Available GPUs"})}),(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6",children:s.map(e=>{let t=e.gpu_total-e.gpu_free,s=e.gpu_total>0?e.gpu_free/e.gpu_total*100:0,r=e.gpu_total>0?t/e.gpu_total*100:0;return(0,a.jsxs)("div",{className:"p-3 bg-gray-50 rounded-md border border-gray-200 shadow-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-1.5 flex-wrap",children:[(0,a.jsxs)("div",{className:"font-medium text-gray-800 text-sm",children:[e.gpu_name,(0,a.jsxs)("span",{className:"text-xs text-gray-500 ml-2",children:["(Requestable: ",e.gpu_requestable_qty_per_node," / node)"]})]}),(0,a.jsxs)("span",{className:"text-xs font-medium",children:[e.gpu_free," free / ",e.gpu_total," total"]})]}),(0,a.jsxs)("div",{className:"w-full bg-gray-100 rounded-md h-4 flex overflow-hidden shadow-sm",children:[r>0&&(0,a.jsx)("div",{style:{width:"".concat(r,"%")},className:"bg-yellow-500 h-full flex items-center justify-center text-white text-xs",children:r>15&&"".concat(t," used")}),s>0&&(0,a.jsx)("div",{style:{width:"".concat(s,"%")},className:"bg-green-700 h-full flex items-center justify-center text-white text-xs",children:s>15&&"".concat(e.gpu_free," free")})]})]},e.gpu_name)})}),o&&o.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("h4",{className:"text-lg font-semibold mb-4",children:"Nodes"}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-md border border-gray-200 shadow-sm",children:(0,a.jsxs)("table",{className:"min-w-full text-sm",children:[(0,a.jsx)("thead",{className:"bg-gray-100",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600",children:"Node"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600",children:"IP Address"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600",children:"GPU"}),(0,a.jsx)("th",{className:"p-3 text-right font-medium text-gray-600",children:"Availability"})]})}),(0,a.jsx)("tbody",{className:"bg-white divide-y divide-gray-200",children:o.map((e,t)=>(0,a.jsxs)("tr",{className:"hover:bg-gray-50",children:[(0,a.jsx)("td",{className:"p-3 whitespace-nowrap text-gray-700",children:e.node_name}),(0,a.jsx)("td",{className:"p-3 whitespace-nowrap text-gray-700",children:e.ip_address||"-"}),(0,a.jsx)("td",{className:"p-3 whitespace-nowrap text-gray-700",children:e.gpu_name}),(0,a.jsx)("td",{className:"p-3 whitespace-nowrap text-right text-gray-700",children:"".concat(e.gpu_free," of ").concat(e.gpu_total," free")})]},"".concat(e.node_name,"-").concat(t)))})]})})]}),f&&s&&s.length>0&&!n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("h4",{className:"text-lg font-semibold mb-4 mt-6",children:"GPU Metrics"}),(0,a.jsxs)("div",{className:"mb-4 p-4 bg-gray-50 rounded-md border border-gray-200",children:[(0,a.jsxs)("div",{className:"flex flex-col sm:flex-row gap-4 items-start sm:items-center",children:[o&&o.length>0&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("label",{htmlFor:"host-select",className:"text-sm font-medium text-gray-700 whitespace-nowrap",children:"Node:"}),(0,a.jsxs)("select",{id:"host-select",value:m,onChange:e=>{u(e.target.value)},disabled:g,className:"px-3 py-1 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-sky-blue focus:border-transparent",children:[(0,a.jsx)("option",{value:"$__all",children:"All Nodes"}),c.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),g&&(0,a.jsx)("div",{className:"ml-2",children:(0,a.jsx)(l.Z,{size:16})})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium text-gray-700 whitespace-nowrap",children:"Time Range:"}),(0,a.jsx)("div",{className:"flex gap-1",children:[{label:"15m",value:"15m"},{label:"1h",value:"1h"},{label:"6h",value:"6h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"}].map(e=>(0,a.jsx)("button",{onClick:()=>b(e.value),className:"px-2 py-1 text-xs font-medium rounded border transition-colors ".concat(h.from==="now-".concat(e.value)&&"now"===h.to?"bg-sky-blue text-white border-sky-blue":"bg-white text-gray-600 border-gray-300 hover:bg-gray-50"),children:e.label},e.value))})]})]}),(0,a.jsx)("div",{className:"mt-2 text-xs text-gray-500",children:o&&o.length>0?(0,a.jsxs)(a.Fragment,{children:["Showing:"," ","$__all"===m?"All nodes":m," ","• Time: ",h.from," to ",h.to,c.length>0&&(0,a.jsxs)("span",{children:[" ","• ",c.length," nodes available"]})]}):(0,a.jsxs)(a.Fragment,{children:["Cluster:"," ",n?t.replace(/^ssh-/,""):t," ","• Time: ",h.from," to ",h.to," • Showing metrics for all nodes in cluster"]})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:N("6"),width:"100%",height:"400",frameBorder:"0",title:"GPU Utilization",className:"rounded"},"gpu-util-".concat(m,"-").concat(h.from,"-").concat(h.to))})}),(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:N("18"),width:"100%",height:"400",frameBorder:"0",title:"GPU Memory",className:"rounded"},"gpu-memory-".concat(m,"-").concat(h.from,"-").concat(h.to))})}),(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:N("10"),width:"100%",height:"400",frameBorder:"0",title:"GPU Power Consumption",className:"rounded"},"gpu-power-".concat(m,"-").concat(h.from,"-").concat(h.to))})})]})]})]})})})}function z(e){var t;let{poolName:s,gpusInContext:c,nodesInContext:i,handleDeploySSHPool:d,handleEditSSHPool:m,handleDeleteSSHPool:u,poolConfig:h}=e,[x,g]=(0,r.useState)(null),[p,f]=(0,r.useState)(!0),[y,j]=(0,r.useState)({isOpen:!1,action:null,loading:!1}),[N,P]=(0,r.useState)({isOpen:!1,logs:"",isStreaming:!1,deploymentComplete:!1,deploymentSuccess:!1,requestId:null});(0,r.useEffect)(()=>{(async()=>{try{f(!0);let e=await w(s);g(e)}catch(e){console.error("Failed to fetch SSH Node Pool status:",e),g({pool_name:s,status:"Error",reason:"Failed to fetch status"})}finally{f(!1)}})()},[s]);let{deployDisabled:k}=(()=>{if(!x)return{deployDisabled:!0};let e=x.status;return"Ready"===e?{deployDisabled:!0}:"Error"===e?{deployDisabled:!0}:{deployDisabled:!1}})(),T=async()=>{j({...y,loading:!0});try{if("deploy"===y.action){j({isOpen:!1,action:null,loading:!1}),P({isOpen:!0,logs:"",isStreaming:!0,deploymentComplete:!1,deploymentSuccess:!1,requestId:null});try{let e=(await d(s)).request_id;P(t=>({...t,requestId:e}));let t=new AbortController;await v({requestId:e,signal:t.signal,onNewLog:e=>{P(t=>({...t,logs:t.logs+e}))}}),P(e=>({...e,isStreaming:!1,deploymentComplete:!0,deploymentSuccess:!0})),setTimeout(async()=>{(async()=>{try{let e=await w(s);g(e)}catch(e){console.error("Failed to fetch SSH Node Pool status after deployment:",e)}})()},1e3)}catch(e){console.error("Deployment failed:",e),P(t=>({...t,isStreaming:!1,deploymentComplete:!0,deploymentSuccess:!1,logs:t.logs+"\nDeployment failed: ".concat(e.message)}))}}else if("delete"===y.action){j({isOpen:!1,action:null,loading:!1}),P({isOpen:!0,logs:"",isStreaming:!0,deploymentComplete:!1,deploymentSuccess:!1,requestId:null});try{let e=(await b(s)).request_id;P(t=>({...t,requestId:e})),e&&await S({requestId:e,signal:null,onNewLog:e=>{P(t=>({...t,logs:t.logs+e}))},operationType:"down"}),await u(s),P(e=>({...e,isStreaming:!1,deploymentComplete:!0,deploymentSuccess:!0,logs:e.logs+"\nSSH Node Pool teardown completed successfully."}))}catch(e){console.error("Down operation failed:",e),P(t=>({...t,isStreaming:!1,deploymentComplete:!0,deploymentSuccess:!1,logs:t.logs+"\nTeardown failed: ".concat(e.message)}))}}}catch(e){console.error("Action failed:",e),j({...y,loading:!1})}},E=()=>{j({isOpen:!1,action:null,loading:!1})},H=()=>{P({isOpen:!1,logs:"",isStreaming:!1,deploymentComplete:!1,deploymentSuccess:!1,requestId:null}),N.deploymentComplete&&setTimeout(()=>{(async()=>{try{let e=await w(s);g(e)}catch(e){console.error("Failed to refresh status:",e)}})()},1e3)},D="deploy"===y.action?{title:"Deploy SSH Node Pool",description:'Are you sure you want to deploy SSH Node Pool "'.concat(s,'"?'),details:["• Set up SkyPilot runtime on the configured SSH hosts","• Install required components and dependencies","• Make the node pool available for workloads","","This process may take a few minutes to complete."]}:{title:"Delete SSH Node Pool",description:'Are you sure you want to delete SSH Node Pool "'.concat(s,'"?'),details:["• Clean up any deployed resources","• Remove the SSH Node Pool configuration"]};return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-4 pt-4",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"SSH Node Pool Details"}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsxs)("button",{className:"px-3 py-1 text-sm border rounded flex items-center ".concat(k?"border-gray-300 bg-gray-100 text-gray-400 cursor-not-allowed":"border-green-300 bg-green-50 text-green-700 hover:bg-green-100"),onClick:k?void 0:()=>{j({isOpen:!0,action:"deploy",loading:!1})},disabled:k,children:[(0,a.jsx)(o.Z,{className:"w-4 h-4 mr-2"}),"Deploy"]}),(0,a.jsxs)("button",{className:"px-3 py-1 text-sm border border-gray-300 rounded hover:bg-gray-50 flex items-center text-red-600 hover:text-red-700",onClick:()=>{j({isOpen:!0,action:"delete",loading:!1})},children:[(0,a.jsx)(n.Z,{className:"w-4 h-4 mr-2"}),"Delete"]})]})]}),(0,a.jsx)("div",{className:"p-4",children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Pool Name"}),(0,a.jsx)("div",{className:"text-base mt-1",children:s})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Nodes"}),(0,a.jsx)("div",{className:"text-base mt-1",children:i?i.length:0})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Status"}),(0,a.jsx)("div",{className:"text-base mt-1",children:p?(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(l.Z,{size:16,className:"mr-2"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading..."})]}):x?(0,a.jsx)(e=>{let{status:t,reason:s}=e,r="Ready"===t,l="Not Ready"===t?"Click Deploy to set up this node pool":s;return(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)("span",{className:"px-2 py-0.5 rounded text-xs font-medium ".concat(r?"bg-green-100":"bg-red-100"," ").concat(r?"text-green-800":"text-red-800"),children:t}),!r&&l&&(0,a.jsxs)("span",{className:"text-sm text-gray-600",children:["(",l,")"]})]})},{status:x.status,reason:x.reason}):(0,a.jsx)("span",{className:"text-gray-500",children:"Unknown"})})]})]})})]})}),(0,a.jsx)(L,{contextName:"ssh-".concat(s),gpusInContext:c,nodesInContext:i}),(0,a.jsx)(_.Vq,{open:y.isOpen,onOpenChange:E,children:(0,a.jsxs)(_.cZ,{className:"sm:max-w-md",children:[(0,a.jsxs)(_.fK,{className:"",children:[(0,a.jsx)(_.$N,{className:"",children:D.title}),(0,a.jsx)(_.Be,{className:"",children:D.description})]}),(0,a.jsx)("div",{className:"py-4",children:(0,a.jsxs)("div",{className:"text-sm text-gray-600 space-y-1",children:[(0,a.jsx)("p",{className:"font-medium mb-2",children:"This will:"}),D.details.map((e,t)=>(0,a.jsx)("p",{className:""===e?"pt-2":"",children:e},t))]})}),(0,a.jsxs)(_.cN,{className:"",children:[(0,a.jsx)(C.z,{variant:"outline",onClick:E,disabled:y.loading,className:"",children:"Cancel"}),(0,a.jsx)(C.z,{onClick:T,disabled:y.loading,className:"deploy"===y.action?"bg-green-600 hover:bg-green-700 text-white":"bg-red-600 hover:bg-red-700 text-white",children:y.loading?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.Z,{size:16,className:"mr-2"}),"deploy"===y.action?"Deploying...":"Deleting..."]}):"deploy"===y.action?"Deploy":"Delete"})]})]})}),(0,a.jsx)(_.Vq,{open:N.isOpen,onOpenChange:N.isStreaming?void 0:H,children:(0,a.jsxs)(_.cZ,{className:"sm:max-w-4xl max-h-[80vh]",children:[(0,a.jsxs)(_.fK,{className:"",children:[(0,a.jsxs)(_.$N,{className:"",children:["Deploying SSH Node Pool: ",s]}),(0,a.jsx)(_.Be,{className:"",children:N.isStreaming?"Deployment in progress. Do not close this dialog.":N.deploymentSuccess?"Deployment completed successfully!":"Deployment completed with errors."})]}),(0,a.jsx)("div",{className:"py-4",children:(0,a.jsxs)("div",{className:"bg-black text-green-400 p-4 rounded-md font-mono text-sm max-h-96 overflow-y-auto",children:[(0,a.jsx)("pre",{className:"whitespace-pre-wrap",children:(t=N.logs)?t.split("\n").map(e=>(e=e.replace(/\x1b\[[0-9;]*m/g,"")).match(/^D \d{2}-\d{2} \d{2}:\d{2}:\d{2}/)?null:e=(e=e.replace(/├──/g,"├─")).replace(/└──/g,"└─")).filter(e=>null!==e&&""!==e.trim()).join("\n"):""}),N.isStreaming&&(0,a.jsxs)("div",{className:"flex items-center mt-2",children:[(0,a.jsx)(l.Z,{size:16,className:"mr-2 text-green-400"}),(0,a.jsx)("span",{className:"text-green-400",children:"Streaming logs..."})]})]})}),(0,a.jsx)(_.cN,{className:"",children:(0,a.jsx)(C.z,{onClick:H,disabled:N.isStreaming,className:N.deploymentSuccess?"bg-green-600 hover:bg-green-700 text-white":N.deploymentComplete&&!N.deploymentSuccess?"bg-red-600 hover:bg-red-700 text-white":"bg-gray-600 hover:bg-gray-700 text-white",children:N.isStreaming?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.Z,{size:16,className:"mr-2"}),"Deploying..."]}):"Close"})})]})})]})}function Z(){let[e,t]=(0,r.useState)(!0),[s,o]=(0,r.useState)(!0),[n,d]=(0,r.useState)(!0),x=r.useRef(null),g=(0,i.X)(),[j,b]=(0,r.useState)(!1),[w,v]=(0,r.useState)(!1),S=(0,I.useRouter)(),[_,C]=(0,r.useState)([]),[P,k]=(0,r.useState)([]),[T,U]=(0,r.useState)([]),[F,O]=(0,r.useState)([]),[G,Z]=(0,r.useState)([]),[M,W]=(0,r.useState)(0),[$,B]=(0,r.useState)(0),[K,V]=(0,r.useState)({}),[J,X]=(0,r.useState)({}),[Q,Y]=(0,r.useState)(!1),[ee,et]=(0,r.useState)(null),[es,ea]=(0,r.useState)(!1),[er,el]=(0,r.useState)(null),eo=r.useCallback(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{showLoadingIndicators:!0};e.showLoadingIndicators&&(t(!0),o(!0));try{let e=await H.default.get(m.l4),{gpuData:t,cloudData:s}=e||{};if(t){let{allContextNames:e,allGPUs:s,perContextGPUs:a,perNodeGPUs:r,contextStats:l}=t;C(e||[]),k(s||[]),U(a||[]),O(r||[]),V(l||{}),b(!0)}else e&&null===e.gpuData?(C([]),k([]),U([]),O([]),V({}),b(!0)):e||console.log("No infra data received from cache");s?(Z(s.clouds||[]),W(s.totalClouds||0),B(s.enabledClouds||0),v(!0)):e&&null===e.cloudData?(Z([]),W(0),B(0),v(!0)):e||console.log("No cloud data received from cache"),await en()}catch(e){console.error("Error in fetchData:",e),C([]),k([]),U([]),O([]),V({}),Z([]),W(0),B(0),b(!0),v(!0)}finally{e.showLoadingIndicators&&(t(!1),o(!1)),n&&e.showLoadingIndicators&&d(!1)}},[n]),en=async()=>{try{let e=await p();X(e)}catch(e){console.error("Failed to fetch SSH Node Pools:",e),X({})}},ec=(e,t)=>{et({name:e,config:t}),Y(!0)},ei=async e=>{try{await y(e),await en(),el(null),S.push("/infra")}catch(e){throw console.error("Failed to delete SSH Node Pool:",e),e}},ed=async e=>{try{await N(e)}catch(e){throw console.error("Failed to deploy SSH Node Pool:",e),e}},em=async(e,t)=>{ea(!0);try{let s={...J};s[e]=t,await f(s),await en(),Y(!1)}catch(e){console.error("Failed to save SSH Node Pool:",e),alert("Failed to save SSH Node Pool. Please try again.")}finally{ea(!1)}};(0,r.useEffect)(()=>{x.current=eo},[eo]),(0,r.useEffect)(()=>{(async()=>{await D.ZP.preloadForPage("infra"),eo({showLoadingIndicators:!0})})()},[eo]),(0,r.useEffect)(()=>{let e=!0,t=setInterval(()=>{e&&x.current&&x.current({showLoadingIndicators:!1})},R);return()=>{e=!1,clearInterval(t)}},[]),(0,r.useEffect)(()=>()=>{b(!1),v(!1),d(!0)},[]),(P||[]).length,(P||[]).reduce((e,t)=>e+t.gpu_total,0),(P||[]).reduce((e,t)=>e+t.gpu_free,0);let eu=r.useMemo(()=>T?T.reduce((e,t)=>{let{context:s}=t;return e[s]||(e[s]=[]),e[s].push(t),e},{}):{},[T]),eh=r.useMemo(()=>_&&Array.isArray(_)?_.filter(e=>e.startsWith("ssh-")):[],[_]),ex=r.useMemo(()=>_&&Array.isArray(_)?_.filter(e=>!e.startsWith("ssh-")):[],[_]),eg=r.useMemo(()=>{if(!T||!P)return[];let e=new Set;return T.forEach(t=>{t.context.startsWith("ssh-")&&e.add(t.gpu_name)}),P.filter(t=>e.has(t.gpu_name))},[P,T]),ep=r.useMemo(()=>{if(!T||!P)return[];let e=new Set;return T.forEach(t=>{t.context.startsWith("ssh-")||e.add(t.gpu_name)}),P.filter(t=>e.has(t.gpu_name))},[P,T]),ef=r.useMemo(()=>F?F.reduce((e,t)=>{let{context:s}=t;return e[s]||(e[s]=[]),e[s].push(t),e},{}):{},[F]);(0,r.useEffect)(()=>{S.isReady&&S.query.context&&el(decodeURIComponent(Array.isArray(S.query.context)?S.query.context[0]:S.query.context))},[S.isReady,S.query.context]);let ey=e=>{el(e),S.push("/infra/".concat(encodeURIComponent(e)))},ej=e||s,eN=j&&w&&!n;return(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)(q(),{href:"/infra",className:"text-sky-blue hover:underline ".concat(er?"":"cursor-default"),children:"Infrastructure"}),er&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),er.startsWith("ssh-")?(0,a.jsx)(q(),{href:"/infra",className:"text-sky-blue hover:underline cursor-pointer",children:"SSH Node Pool"}):(0,a.jsx)(q(),{href:"/infra",className:"text-sky-blue hover:underline cursor-pointer",children:"Kubernetes"}),(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,a.jsx)("span",{className:"text-sky-blue",children:er.startsWith("ssh-")?er.replace(/^ssh-/,""):er})]})]}),(0,a.jsxs)("div",{className:"flex items-center",children:[ej&&(0,a.jsxs)("div",{className:"flex items-center mr-2",children:[(0,a.jsx)(l.Z,{size:15,className:"mt-0"}),(0,a.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,a.jsxs)("button",{onClick:()=>{H.default.invalidate(u.getClusters),H.default.invalidate(h.getManagedJobs,[{allUsers:!0}]),H.default.invalidate(m.l4),x.current&&x.current({showLoadingIndicators:!0})},disabled:ej,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:[(0,a.jsx)(c.Z,{className:"h-4 w-4 mr-1.5"}),!g&&"Refresh"]})]})]}),eN?er?e&&!j?(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center h-64",children:[(0,a.jsx)(l.Z,{size:32,className:"mb-4"}),(0,a.jsx)("span",{className:"text-gray-500 text-lg",children:"Loading Context..."})]}):(t=>{let s=eu[t]||[],r=ef[t]||[];if(e&&!j)return(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center h-64",children:[(0,a.jsx)(l.Z,{size:32,className:"mb-4"}),(0,a.jsx)("span",{className:"text-gray-500 text-lg",children:"Loading Context..."})]});if(t.startsWith("ssh-")){let e=t.replace(/^ssh-/,"");return(0,a.jsx)(z,{poolName:e,gpusInContext:s,nodesInContext:r,handleDeploySSHPool:ed,handleEditSSHPool:ec,handleDeleteSSHPool:ei,poolConfig:J[e]})}return(0,a.jsx)(L,{contextName:t,gpusInContext:s,nodesInContext:r})})(er):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(A,{title:"SSH Node Pool",isLoading:e,isDataLoaded:j,contexts:eh,gpus:eg,groupedPerContextGPUs:eu,groupedPerNodeGPUs:ef,handleContextClick:ey,contextStats:K,isSSH:!0,actionButton:null}),(0,a.jsx)(A,{title:"Kubernetes",isLoading:e,isDataLoaded:j,contexts:ex,gpus:ep,groupedPerContextGPUs:eu,groupedPerNodeGPUs:ef,handleContextClick:ey,contextStats:K,isSSH:!1}),s||!w?(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm mb-6",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Cloud"}),(0,a.jsxs)("div",{className:"flex items-center justify-center py-6",children:[(0,a.jsx)(l.Z,{size:24,className:"mr-3"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading Cloud..."})]})]})}):(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm mb-6",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsxs)("div",{className:"flex items-center mb-4",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"Cloud"}),(0,a.jsxs)("span",{className:"ml-2 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium",children:[$," of ",M," enabled"]})]}),G&&0!==G.length?(0,a.jsx)("div",{className:"overflow-x-auto rounded-md border border-gray-200 shadow-sm bg-white",children:(0,a.jsxs)("table",{className:"min-w-full text-sm",children:[(0,a.jsx)("thead",{className:"bg-gray-50",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-32",children:"Cloud"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-24",children:"Clusters"}),(0,a.jsx)("th",{className:"p-3 text-left font-medium text-gray-600 w-24",children:"Jobs"})]})}),(0,a.jsx)("tbody",{className:"bg-white divide-y divide-gray-200",children:G.map(e=>(0,a.jsxs)("tr",{className:"hover:bg-gray-50",children:[(0,a.jsx)("td",{className:"p-3 font-medium text-gray-700",children:e.name}),(0,a.jsx)("td",{className:"p-3",children:e.clusters>0?(0,a.jsx)("span",{className:"px-2 py-0.5 bg-blue-100 text-blue-800 rounded text-xs font-medium",children:e.clusters}):(0,a.jsx)("span",{className:"px-2 py-0.5 bg-gray-100 text-gray-500 rounded text-xs font-medium",children:"0"})}),(0,a.jsx)("td",{className:"p-3",children:e.jobs>0?(0,a.jsx)("span",{className:"px-2 py-0.5 bg-green-100 text-green-800 rounded text-xs font-medium",children:e.jobs}):(0,a.jsx)("span",{className:"px-2 py-0.5 bg-gray-100 text-gray-500 rounded text-xs font-medium",children:"0"})})]},e.name))})]})}):(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"No enabled clouds available."})]})})]}):(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center py-32",children:[(0,a.jsx)(l.Z,{size:32,className:"mb-4"}),(0,a.jsx)("span",{className:"text-gray-500 text-lg",children:"Loading infrastructure data..."})]}),(0,a.jsx)(E,{isOpen:Q,onClose:()=>Y(!1),onSave:em,poolData:ee,isLoading:es})]})}},2557:function(e,t,s){s.d(t,{I:function(){return o}});var a=s(5893),r=s(7294),l=s(2350);let o=r.forwardRef((e,t)=>{let{className:s,type:r,...o}=e;return(0,a.jsx)("input",{type:r,className:(0,l.cn)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium 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",s),ref:t,...o})});o.displayName="Input"},6185:function(e,t,s){s.d(t,{_:function(){return i}});var a=s(5893),r=s(7294),l=s(9102),o=s(2003),n=s(2350);let c=(0,o.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),i=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)(l.f,{ref:t,className:(0,n.cn)(c(),s),...r})});i.displayName=l.f.displayName},9123:function(e,t,s){s.d(t,{g:function(){return o}});var a=s(5893),r=s(7294),l=s(2350);let o=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("textarea",{className:(0,l.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",s),ref:t,...r})});o.displayName="Textarea"},7853:function(e,t,s){s.d(t,{TO:function(){return l},ki:function(){return o}});let a=null,r=null,l=async()=>null!==a?a:r||(r=(async()=>{try{let e="".concat(window.location.origin,"/grafana"),t=await fetch("".concat(e,"/api/health"),{method:"GET",credentials:"include",headers:{Accept:"application/json"},signal:AbortSignal.timeout(5e3)});return 200==t.status}catch(e){return console.debug("Grafana availability check failed:",e),a=!1,!1}finally{r=null}})()),o=()=>"".concat(window.location.origin,"/grafana")}}]);
@@ -0,0 +1,6 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[722],{8706:function(e,t,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/clusters/[cluster]",function(){return s(6996)}])},6639:function(e,t,s){"use strict";s.d(t,{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,s(998).Z)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},4303:function(e,t,s){"use strict";s.d(t,{_q:function(){return l},pJ:function(){return i}});var a=s(1272);let l=e=>{if(!e)return"No YAML available";try{let t=a.ZP.load(e),s=a.ZP.dump(t,{lineWidth:-1,styles:{"!!str":"literal"},quotingType:"'",forceQuotes:!1,noRefs:!0,sortKeys:!1,condenseFlow:!1,indent:2}).split("\n"),l=[],r=-1;for(let e=0;e<s.length;e++){let t=s[e],a=t.search(/\S/);0===a&&r>=0&&e>0&&l.push(""),l.push(t),r=a}return l.join("\n").trim()}catch(t){return console.error("YAML formatting error:",t),e}},r=e=>"string"==typeof e?e.substring(0,50)+"...":e&&e.name?"name: ".concat(e.name):e&&e.resources?"Task configuration":"YAML document",n=(e,t)=>{try{let s=a.ZP.load(e),l=a.ZP.dump(s,{lineWidth:-1,styles:{"!!str":"literal"},quotingType:"'",forceQuotes:!1,noRefs:!0,sortKeys:!1,condenseFlow:!1,indent:2}).split("\n"),n=[],i=-1;for(let e=0;e<l.length;e++){let t=l[e],s=t.search(/\S/);0===s&&i>=0&&e>0&&n.push(""),n.push(t),i=s}return{index:t,content:n.join("\n").trim(),preview:r(s)}}catch(s){return console.error("YAML formatting error for document ".concat(t,":"),s),{index:t,content:e,preview:"Invalid YAML"}}},i=e=>{if(!e)return[];try{let t=[],s=e.split(/^---$/m);for(let e=0;e<s.length;e++){let a=s[e].trim();a&&""!==a&&t.push(a)}return(t.length>1?t.slice(1):t).map((e,t)=>n(e,t))}catch(t){return console.error("YAML formatting error:",t),[{index:0,content:e,preview:"Invalid YAML"}]}}},6996:function(e,t,s){"use strict";s.r(t);var a=s(5893),l=s(7294),r=s(5739),n=s(938),i=s(1163);s(9470);var c=s(1664),o=s.n(c),d=s(9037),m=s(9307);s(7673);var u=s(3266),x=s(6378),h=s(3626),f=s(282),v=s(8671),g=s(5895),j=s(6639);s(1272);var b=s(6989),y=s(7853),p=s(9284),N=s(3001),w=s(9008),_=s.n(w),C=s(4303),k=s(546);let S=(e,t)=>{let s="",a="";return e>=0&&(s=e+"m",a=" "),t&&(s+="".concat(a,"(down)")),""===s&&(s="-"),s};function M(e){var t,s;let{clusterData:r,clusterJobData:i,clusterJobsLoading:c,refreshClusterJobsOnly:d,isVSCodeModalOpen:u,setIsVSCodeModalOpen:x,timeRange:h,handleTimeRangePreset:y,buildGrafanaMetricsUrl:p,matchedClusterName:N,isLoadingClusterMatch:w,isGrafanaAvailable:_,isHistoricalCluster:M=!1}=e,[A,L]=(0,l.useState)(!1),[O,R]=(0,l.useState)(!1),[T,P]=(0,l.useState)(!1),E=async()=>{try{let e=r.task_yaml||r.last_creation_yaml,t=(0,C._q)(e);await navigator.clipboard.writeText(t),R(!0),setTimeout(()=>R(!1),2e3)}catch(e){console.error("Failed to copy YAML to clipboard:",e)}},Z=async()=>{try{let e=r.command||r.last_creation_command;await navigator.clipboard.writeText(e),P(!0),setTimeout(()=>P(!1),2e3)}catch(e){console.error("Failed to copy command to clipboard:",e)}},U=(null==r?void 0:r.last_creation_command)||(null==r?void 0:r.last_creation_yaml)||(null==r?void 0:r.command)||(null==r?void 0:r.task_yaml);return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,a.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,a.jsx)("h3",{className:"text-lg font-semibold",children:M?"Historical Cluster Details":"Details"})}),(0,a.jsx)("div",{className:"p-4",children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Status"}),(0,a.jsx)("div",{className:"text-base mt-1",children:(0,a.jsx)(m.OE,{status:r.status})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Cluster"}),(0,a.jsx)("div",{className:"text-base mt-1",children:r.cluster||r.name})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"User"}),(0,a.jsx)("div",{className:"text-base mt-1",children:(0,a.jsx)(k.H,{username:r.user,userHash:r.user_hash})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:M?"Cloud":"Infra"}),(0,a.jsx)("div",{className:"text-base mt-1",children:M?r.cloud||"N/A":r.infra?(0,a.jsx)(b.Md,{content:r.full_infra||r.infra,className:"text-sm text-muted-foreground",children:(0,a.jsxs)("span",{children:[(0,a.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:r.cloud||r.infra.split("(")[0].trim()}),r.infra.includes("(")&&(0,a.jsx)("span",{children:" "+r.infra.substring(r.infra.indexOf("("))})]})}):"N/A"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Resources"}),(0,a.jsx)("div",{className:"text-base mt-1",children:r.resources_str_full||r.resources_str||"N/A"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Started"}),(0,a.jsx)("div",{className:"text-base mt-1",children:r.time?(0,b.xn)(new Date(r.time)):"N/A"})]}),M?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Duration"}),(0,a.jsx)("div",{className:"text-base mt-1",children:(e=>{if(!e||0===e)return"-";let t=e=Math.floor(e),s="",a=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(t>=e.value&&a<2){let l=Math.floor(t/e.value);s+="".concat(l).concat(e.label," "),t%=e.value,a++}return s.trim()||"0s"})(r.duration)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Cost"}),(0,a.jsx)("div",{className:"text-base mt-1",children:(e=>{if(null==e||0===e)return"-";let t=Number(e);return isNaN(t)?"-":"$".concat(t.toFixed(2))})(r.total_cost)})]})]}):(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Autostop"}),(0,a.jsx)("div",{className:"text-base mt-1",children:S(r.autostop,r.to_down)})]}),U&&(0,a.jsxs)("div",{className:"col-span-2",children:[(r.command||r.last_creation_command)&&(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Entrypoint"}),r.command&&(0,a.jsx)(b.WH,{content:T?"Copied!":"Copy command",className:"text-muted-foreground",children:(0,a.jsx)("button",{onClick:Z,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:T?(0,a.jsx)(f.Z,{className:"w-4 h-4 text-green-600"}):(0,a.jsx)(v.Z,{className:"w-4 h-4"})})})]}),(0,a.jsxs)("div",{className:"space-y-4 mt-3",children:[(r.command||r.last_creation_command)&&(0,a.jsx)("div",{children:(0,a.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3",children:(0,a.jsx)("code",{className:"text-sm text-gray-800 font-mono break-all",children:r.command||r.last_creation_command})})}),(r.task_yaml||r.last_creation_yaml)&&"{}"!==r.task_yaml&&"{}"!==r.last_creation_yaml&&!(null===(t=r.cluster||r.name)||void 0===t?void 0:t.startsWith("sky-jobs-controller-"))&&!(null===(s=r.cluster||r.name)||void 0===s?void 0:s.startsWith("sky-serve-controller-"))&&(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center mb-2",children:[(0,a.jsxs)("button",{onClick:()=>{L(!A)},className:"flex items-center text-left focus:outline-none text-gray-700 hover:text-gray-900 transition-colors duration-200",children:[A?(0,a.jsx)(g.Z,{className:"w-4 h-4 mr-1"}):(0,a.jsx)(j.Z,{className:"w-4 h-4 mr-1"}),(0,a.jsx)("span",{className:"text-base",children:"Show SkyPilot YAML"})]}),(0,a.jsx)(b.WH,{content:O?"Copied!":"Copy YAML",className:"text-muted-foreground",children:(0,a.jsx)("button",{onClick:E,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:O?(0,a.jsx)(f.Z,{className:"w-4 h-4 text-green-600"}):(0,a.jsx)(v.Z,{className:"w-4 h-4"})})})]}),A&&(0,a.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3 max-h-96 overflow-y-auto",children:(0,a.jsx)("pre",{className:"text-sm text-gray-800 font-mono whitespace-pre-wrap",children:(0,C._q)(r.task_yaml||r.last_creation_yaml)})})]})]})]})]})})]})}),r&&r.full_infra&&r.full_infra.includes("Kubernetes")&&!r.full_infra.includes("SSH")&&!r.full_infra.includes("ssh")&&_&&(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsx)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:(0,a.jsxs)("div",{className:"p-5",children:[(0,a.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"GPU Metrics"})}),(0,a.jsxs)("div",{className:"mb-4 p-4 bg-gray-50 rounded-md border border-gray-200",children:[(0,a.jsx)("div",{className:"flex flex-col sm:flex-row gap-4 items-start sm:items-center",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium text-gray-700 whitespace-nowrap",children:"Time Range:"}),(0,a.jsx)("div",{className:"flex gap-1",children:[{label:"15m",value:"15m"},{label:"1h",value:"1h"},{label:"6h",value:"6h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"}].map(e=>(0,a.jsx)("button",{onClick:()=>y(e.value),className:"px-2 py-1 text-xs font-medium rounded border transition-colors ".concat(h.from==="now-".concat(e.value)&&"now"===h.to?"bg-sky-blue text-white border-sky-blue":"bg-white text-gray-600 border-gray-300 hover:bg-gray-50"),children:e.label},e.value))})]})}),(0,a.jsxs)("div",{className:"mt-2 text-xs text-gray-500",children:["Showing: ",null==r?void 0:r.cluster," • Time: ",h.from," to"," ",h.to,w&&(0,a.jsx)("span",{children:" • Finding cluster data..."})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:p("1"),width:"100%",height:"400",frameBorder:"0",title:"GPU Utilization",className:"rounded"},"gpu-util-".concat(null==r?void 0:r.cluster,"-").concat(h.from,"-").concat(h.to))})}),(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:p("2"),width:"100%",height:"400",frameBorder:"0",title:"GPU Memory Utilization",className:"rounded"},"gpu-memory-".concat(null==r?void 0:r.cluster,"-").concat(h.from,"-").concat(h.to))})}),(0,a.jsx)("div",{className:"bg-white rounded-md border border-gray-200 shadow-sm",children:(0,a.jsx)("div",{className:"p-2",children:(0,a.jsx)("iframe",{src:p("4"),width:"100%",height:"400",frameBorder:"0",title:"GPU Power Usage",className:"rounded"},"gpu-power-".concat(null==r?void 0:r.cluster,"-").concat(h.from,"-").concat(h.to))})})]})]})})}),!M&&(0,a.jsx)("div",{className:"mb-8",children:(0,a.jsx)(n.ClusterJobs,{clusterName:r.cluster,clusterJobData:i,loading:c,refreshClusterJobsOnly:d})})]})}t.default=function(){let e=(0,i.useRouter)(),{cluster:t}=e.query,[s,n]=(0,l.useState)(!1),[c,m]=(0,l.useState)(!0),[f,v]=(0,l.useState)(!1),[g,j]=(0,l.useState)(!1),[w,C]=(0,l.useState)(null),[k,S]=(0,l.useState)(!1),[A,L]=(0,l.useState)(!1),O=(0,N.X)(),[R,T]=(0,l.useState)({from:"now-1h",to:"now"}),{clusterData:P,clusterJobData:E,loading:Z,clusterDetailsLoading:U,clusterJobsLoading:D,refreshData:G,refreshClusterJobsOnly:H}=(0,u.QL)({cluster:t}),[I,J]=(0,l.useState)(null),[Y,F]=(0,l.useState)(!1),[W,q]=(0,l.useState)(!1);(0,l.useEffect)(()=>{(async()=>{q(await (0,y.TO)())})()},[]);let z=(0,l.useCallback)(async()=>{if(W&&(null==P?void 0:P.cluster)){F(!0);try{let e=(0,y.ki)(),t=await fetch("".concat(e).concat("/api/datasources/proxy/1/api/v1/label/label_skypilot_cluster/values"),{method:"GET",credentials:"include",headers:{Accept:"application/json"}});if(t.ok){let e=await t.json();if(e.data&&e.data.length>0){let t=e.data.find(e=>e.startsWith(P.cluster));t&&J(t)}}}catch(e){console.error("Error fetching matching cluster:",e)}finally{F(!1)}}},[null==P?void 0:P.cluster,W]);(0,l.useEffect)(()=>{W&&(null==P?void 0:P.cluster)&&z()},[null==P?void 0:P.cluster,z,W]);let V=e=>{let t=(0,y.ki)(),s=I||(null==P?void 0:P.cluster)||"$__all";return"".concat(t,"/d-solo/skypilot-dcgm-gpu/skypilot-dcgm-gpu-metrics?orgId=1&from=").concat(encodeURIComponent(R.from),"&to=").concat(encodeURIComponent(R.to),"&timezone=browser&var-cluster=").concat(encodeURIComponent(s),"&var-node=$__all&var-gpu=$__all&theme=light&panelId=").concat(e,"&__feature.dashboardSceneSolo")};l.useEffect(()=>{!U&&c&&m(!1)},[U,c]),l.useEffect(()=>{let e=async()=>{if(t&&!U&&!P){L(!0);try{let e=(await x.default.get(u.uR)).find(e=>e.cluster_hash===t||e.cluster===t);e&&(C(e),S(!0))}catch(e){console.error("Error fetching cluster history:",e)}finally{L(!1)}}};U||P||e()},[t,U,P]);let $=async()=>{n(!0),await G(),n(!1)},B=e=>{T({from:"now-".concat(e),to:"now"})};if(!e.isReady)return(0,a.jsx)("div",{children:"Loading..."});let K=t?"Cluster: ".concat(t," | SkyPilot Dashboard"):"Cluster Details | SkyPilot Dashboard";return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(_(),{children:(0,a.jsx)("title",{children:K})}),(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)(o(),{href:"/clusters",className:"text-sky-blue hover:underline",children:"Sky Clusters"}),(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,a.jsx)(o(),{href:"/clusters/".concat(t),className:"text-sky-blue hover:underline",children:t})]}),(0,a.jsx)("div",{className:"text-sm flex items-center",children:(0,a.jsxs)("div",{className:"text-sm flex items-center",children:[(U||s)&&(0,a.jsxs)("div",{className:"flex items-center mr-4",children:[(0,a.jsx)(r.Z,{size:15,className:"mt-0"}),(0,a.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),P&&(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,a.jsx)(b.WH,{content:"Refresh",className:"text-sm text-muted-foreground",children:(0,a.jsxs)("button",{onClick:$,disabled:U||s,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,a.jsx)(h.Z,{className:"w-4 h-4 mr-1.5"}),!O&&(0,a.jsx)("span",{children:"Refresh"})]})}),(0,a.jsx)(d.Status2Actions,{withLabel:!0,cluster:P.cluster,status:P.status,onOpenSSHModal:()=>{v(!0)},onOpenVSCodeModal:()=>{j(!0)}})]})]})})]}),U&&c||A?(0,a.jsxs)("div",{className:"flex justify-center items-center py-12",children:[(0,a.jsx)(r.Z,{size:24,className:"mr-2"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading cluster details..."})]}):P?(0,a.jsx)(M,{clusterData:P,clusterJobData:E,clusterJobsLoading:D,refreshClusterJobsOnly:H,isVSCodeModalOpen:g,setIsVSCodeModalOpen:j,timeRange:R,handleTimeRangePreset:B,buildGrafanaMetricsUrl:V,matchedClusterName:I,isLoadingClusterMatch:Y,isGrafanaAvailable:W,isHistoricalCluster:!1}):k&&w?(0,a.jsx)(M,{clusterData:w,clusterJobData:[],clusterJobsLoading:!1,refreshClusterJobsOnly:()=>{},isVSCodeModalOpen:!1,setIsVSCodeModalOpen:()=>{},timeRange:R,handleTimeRangePreset:B,buildGrafanaMetricsUrl:V,matchedClusterName:null,isLoadingClusterMatch:!1,isGrafanaAvailable:!1,isHistoricalCluster:!0}):(0,a.jsx)("div",{className:"flex justify-center items-center py-12",children:(0,a.jsx)("span",{className:"text-gray-500",children:"Cluster not found in active clusters or history."})}),(0,a.jsx)(p.Oh,{isOpen:f,onClose:()=>v(!1),cluster:t}),(0,a.jsx)(p._R,{isOpen:g,onClose:()=>j(!1),cluster:t})]})]})}},7853:function(e,t,s){"use strict";s.d(t,{TO:function(){return r},ki:function(){return n}});let a=null,l=null,r=async()=>null!==a?a:l||(l=(async()=>{try{let e="".concat(window.location.origin,"/grafana"),t=await fetch("".concat(e,"/api/health"),{method:"GET",credentials:"include",headers:{Accept:"application/json"},signal:AbortSignal.timeout(5e3)});return 200==t.status}catch(e){return console.debug("Grafana availability check failed:",e),a=!1,!1}finally{l=null}})()),n=()=>"".concat(window.location.origin,"/grafana")},9008:function(e,t,s){e.exports=s(7219)}},function(e){e.O(0,[616,5230,5739,1664,804,1272,3947,6989,3698,9470,6990,8969,1043,6601,938,1871,2888,9774,179],function(){return e(e.s=8706)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- !function(){"use strict";var e,t,n,r,c,a,o,u,f,i={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{i[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=i,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var a=e.length;a>0&&e[a-1][2]>c;a--)e[a]=e[a-1];e[a]=[n,r,c];return}for(var o=1/0,a=0;a<e.length;a++){for(var n=e[a][0],r=e[a][1],c=e[a][2],u=!0,f=0;f<n.length;f++)o>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(u=!1,c<o&&(o=c));if(u){e.splice(a--,1);var i=r();void 0!==i&&(t=i)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var a={};t=t||[null,n({}),n([]),n(n)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=n(o))Object.getOwnPropertyNames(o).forEach(function(t){a[t]=function(){return e[t]}});return a.default=function(){return e},d.d(c,a),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2544===e?"static/chunks/2544.27f70672535675ed.js":5491===e?"static/chunks/5491.918ffed0ba7a5294.js":3937===e?"static/chunks/3937.d7f1c55d1916c7f2.js":9025===e?"static/chunks/9025.a7c44babfe56ce09.js":2875===e?"static/chunks/2875.c24c6d57dc82e436.js":9984===e?"static/chunks/9984.739ae958a066298d.js":430===e?"static/chunks/430.ed51037d1a4a438b.js":4697===e?"static/chunks/4697.f5421144224da9fc.js":1691===e?"static/chunks/1691.44e378727a41f3b5.js":3256===e?"static/chunks/3256.7257acd01b481bed.js":4725===e?"static/chunks/4725.4c849b1e05c8e9ad.js":3785===e?"static/chunks/3785.b3cc2bc1d49d2c3c.js":8982===e?"static/chunks/8982.a2e214068f30a857.js":"static/chunks/"+e+"-"+({616:"162f3033ffcd3d31",804:"9f5e98ce84d46bdd",938:"044ad21de8b4626b",1043:"1b39779691bb4030",1141:"726e5a3f00b67185",1272:"1ef0bf0237faccdb",1664:"d65361e92b85e786",1871:"80dea41717729fa5",3698:"52ad1ca228faa776",3947:"b059261d6fa88a1f",5230:"df791914b54d91d9",5739:"5ea3ffa10fc884f2",6601:"fcfad0ddf92ec7ab",6989:"6ff4e45dfb49d11d",6990:"d0dc765474fa0eca",8969:"909d53833da080cb",9470:"21d059a1dfa03f61"})[e]+".js"},d.miniCssF=function(e){},d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,a){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var o,u,f=document.getElementsByTagName("script"),i=0;i<f.length;i++){var s=f[i];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){o=s;break}}o||(u=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-webpack",c+n),o.src=d.tu(e)),r[e]=[t];var b=function(t,n){o.onerror=o.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=b.bind(null,o.onerror),o.onload=b.bind(null,o.onload),u&&document.head.appendChild(o)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===a&&(a={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(a=trustedTypes.createPolicy("nextjs#bundler",a))),a},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",o={2272:0},d.f.j=function(e,t){var n=d.o(o,e)?o[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=o[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),a=Error();d.l(c,function(t){if(d.o(o,e)&&(0!==(n=o[e])&&(o[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",a.name="ChunkLoadError",a.type=r,a.request=c,n[1](a)}},"chunk-"+e,e)}else o[e]=0}},d.O.j=function(e){return 0===o[e]},u=function(e,t){var n,r,c=t[0],a=t[1],u=t[2],f=0;if(c.some(function(e){return 0!==o[e]})){for(n in a)d.o(a,n)&&(d.m[n]=a[n]);if(u)var i=u(d)}for(e&&e(t);f<c.length;f++)r=c[f],d.o(o,r)&&o[r]&&o[r][0](),o[r]=0;return d.O(i)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(u.bind(null,0)),f.push=u.bind(null,f.push.bind(f)),d.nc=void 0}();
1
+ !function(){"use strict";var e,t,n,r,c,a,o,u,f,i={},d={};function s(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{i[e](n,n.exports,s),r=!1}finally{r&&delete d[e]}return n.exports}s.m=i,e=[],s.O=function(t,n,r,c){if(n){c=c||0;for(var a=e.length;a>0&&e[a-1][2]>c;a--)e[a]=e[a-1];e[a]=[n,r,c];return}for(var o=1/0,a=0;a<e.length;a++){for(var n=e[a][0],r=e[a][1],c=e[a][2],u=!0,f=0;f<n.length;f++)o>=c&&Object.keys(s.O).every(function(e){return s.O[e](n[f])})?n.splice(f--,1):(u=!1,c<o&&(o=c));if(u){e.splice(a--,1);var i=r();void 0!==i&&(t=i)}}return t},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},s.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);s.r(c);var a={};t=t||[null,n({}),n([]),n(n)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=n(o))Object.getOwnPropertyNames(o).forEach(function(t){a[t]=function(){return e[t]}});return a.default=function(){return e},s.d(c,a),c},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return 2544===e?"static/chunks/2544.27f70672535675ed.js":5491===e?"static/chunks/5491.918ffed0ba7a5294.js":3937===e?"static/chunks/3937.d7f1c55d1916c7f2.js":9025===e?"static/chunks/9025.a7c44babfe56ce09.js":2875===e?"static/chunks/2875.c24c6d57dc82e436.js":9984===e?"static/chunks/9984.b56614f3c4c5961d.js":430===e?"static/chunks/430.ed51037d1a4a438b.js":4697===e?"static/chunks/4697.f5421144224da9fc.js":1691===e?"static/chunks/1691.44e378727a41f3b5.js":3256===e?"static/chunks/3256.7257acd01b481bed.js":4725===e?"static/chunks/4725.4c849b1e05c8e9ad.js":3785===e?"static/chunks/3785.b3cc2bc1d49d2c3c.js":8982===e?"static/chunks/8982.a2e214068f30a857.js":"static/chunks/"+e+"-"+({616:"162f3033ffcd3d31",804:"9f5e98ce84d46bdd",938:"044ad21de8b4626b",1043:"1b39779691bb4030",1141:"726e5a3f00b67185",1272:"1ef0bf0237faccdb",1664:"d65361e92b85e786",1871:"80dea41717729fa5",3698:"52ad1ca228faa776",3947:"b059261d6fa88a1f",5230:"df791914b54d91d9",5739:"5ea3ffa10fc884f2",6601:"fcfad0ddf92ec7ab",6989:"6ff4e45dfb49d11d",6990:"d0dc765474fa0eca",8969:"909d53833da080cb",9470:"21d059a1dfa03f61"})[e]+".js"},s.miniCssF=function(e){},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",s.l=function(e,t,n,a){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var o,u,f=document.getElementsByTagName("script"),i=0;i<f.length;i++){var d=f[i];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==c+n){o=d;break}}o||(u=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-webpack",c+n),o.src=s.tu(e)),r[e]=[t];var b=function(t,n){o.onerror=o.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=b.bind(null,o.onerror),o.onload=b.bind(null,o.onload),u&&document.head.appendChild(o)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.tt=function(){return void 0===a&&(a={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(a=trustedTypes.createPolicy("nextjs#bundler",a))),a},s.tu=function(e){return s.tt().createScriptURL(e)},s.p="/dashboard/_next/",o={2272:0},s.f.j=function(e,t){var n=s.o(o,e)?o[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=o[e]=[t,r]});t.push(n[2]=r);var c=s.p+s.u(e),a=Error();s.l(c,function(t){if(s.o(o,e)&&(0!==(n=o[e])&&(o[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",a.name="ChunkLoadError",a.type=r,a.request=c,n[1](a)}},"chunk-"+e,e)}else o[e]=0}},s.O.j=function(e){return 0===o[e]},u=function(e,t){var n,r,c=t[0],a=t[1],u=t[2],f=0;if(c.some(function(e){return 0!==o[e]})){for(n in a)s.o(a,n)&&(s.m[n]=a[n]);if(u)var i=u(s)}for(e&&e(t);f<c.length;f++)r=c[f],s.o(o,r)&&o[r]&&o[r][0](),o[r]=0;return s.O(i)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(u.bind(null,0)),f.push=u.bind(null,f.push.bind(f)),s.nc=void 0}();
@@ -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/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-8135aba0712bda37.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-8135aba0712bda37.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/3947-b059261d6fa88a1f.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-d0dc765474fa0eca.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-909d53833da080cb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-1b39779691bb4030.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-fcfad0ddf92ec7ab.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-044ad21de8b4626b.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-80dea41717729fa5.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-b8e1114e6d38218c.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/3947-b059261d6fa88a1f.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-d0dc765474fa0eca.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-909d53833da080cb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-1b39779691bb4030.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-fcfad0ddf92ec7ab.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-044ad21de8b4626b.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-80dea41717729fa5.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-1159f362b960e2b8.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-9744c271a1642f76.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-9744c271a1642f76.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-a2673b256b6d416f.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-a2673b256b6d416f.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-927ddeebe57a8ac3.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-927ddeebe57a8ac3.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-8b0809f59034d509.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-8b0809f59034d509.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-ae9d2f705ce582c9.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-ae9d2f705ce582c9.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-909d53833da080cb.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-c4d5cfac7fbc0668.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-9f5e98ce84d46bdd.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-6ff4e45dfb49d11d.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-52ad1ca228faa776.js" defer=""></script><script src="/dashboard/_next/static/chunks/9470-21d059a1dfa03f61.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-909d53833da080cb.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-c4d5cfac7fbc0668.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-cd43fb3c122eedde.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-cd43fb3c122eedde.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-d427db53e54de9ce.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-4ebf6484f7216387.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"Md3rlE87jmL5uv7gSo8mR","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/0da6afe66176678a.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/0da6afe66176678a.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-9a81ea998672c303.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-a37b06ddb64521fd.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-4ebf6484f7216387.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/N5IdFnjR1RaPGBAVYeTIr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"N5IdFnjR1RaPGBAVYeTIr","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>